Hot answers tagged

6

The use of spherical coordinates like $(\theta, \phi)$ is kind of an implementation detail that isn't an essential part of the definition of a BRDF, or other functions defined over a spherical domain generally. It's a lot like how in vector math, we will often express a point or vector by a single symbol like $v$, understanding that "under the hood"...


3

The actual color of a pixel, outputted on a monitor, does not linearly depend on the applied voltage signal for that pixel. For CRT monitors, the actual color is approximately proportional to the applied voltage raised to the power of a so-called gamma value, which depends on the monitor. This gamma value typically lies between 2.2 and 2.5 for CRT monitors. (...


3

The $\omega$ is a direction. Whether you parametrise this direction in spherical coordinates $(\phi, \theta)$, in Cartesian coordinates $(x,y,z)$, or some other coordinate system is irrelevant. Thus one uses $\omega$ to represent directions. $dx$ typically refers to a differential. In the current case it is w.r.t. the solid angle measure $\sigma$, so it ...


3

The pdf with respect to solid angle (area on the sphere) is $D(h) \cos \theta \, \mathrm{d}\omega$, but then when you go to sample it in terms of spherical coordinates, you must include the $\sin \theta$ factor. $$ \mathrm{d}\omega = \sin \theta \, \mathrm{d}\theta \, \mathrm{d}\phi $$ If you imagine choosing sample points uniformly in $(\theta, \phi)$ space,...


1

In truth, there is no mathematical maximum value for $\alpha$. As you noted, microfacet slope is unbounded, so in principle you could have arbitrarily large slope values and hence arbitrarily large $\alpha$. There's nothing wrong with that—the mathematics of the microfacet model keeps working fine. As a practical matter, beyond a certain point you don't ...


1

I don't know if there's a specific standardized term for that point, but the general bright area is called the "highlight" or "specular highlight", and so the brightest point on it could be called the highlight peak or highlight center.


1

If we have a vector in the upper hemisphere in tangent space, $(x, y, z)$ with $z > 0$, then the slopes of the vector are $(\tilde x, \tilde y) = (-x/z, -y/z)$. These values are the slopes (derivatives), along $x$ and $y$, of a surface that is normal to the given vector. See also equation (4) in the paper, which is the conversion back and forth between ...


1

A common way of combining diffuse and specular brdfs is by using a fresnel equation. Essentially, for some specular materials, the amount reflected and transmitted (passed through the object) depends on the angle you view it. For example water will reflect more if you look at it from one angle, but you can see through it if you look at it from another. A ...


1

PBRT3 is a really good resource and has a lot of brdfs in it. The book and source code are available for free online. Regarding oren-nayar, from what I can gather they are just using cosine weighted hemisphere sampling. https://pbr-book.org/3ed-2018/Light_Transport_I_Surface_Reflection/Sampling_Reflection_Functions


1

Welcome to the world of 8-bit graphics! Other answers here are excellent, and most of what you need to know is described well on Wikipedia but let me take you on a human-friendly journey of understanding that I wish someone would have taken me on when I was younger. The first realization that you need to make is that a pixel with RGB values 128, 128, 128 ...


1

Gamma correction originated as a way of correcting the output of a CRT to be a better fit for the human visual system. Modern monitors don't need to do it, but, they followed the CRT and there were millions of CRT's that all had gamma correction and most signals already had gamma correction in them. Today we have a chicken and egg problem...but reversed. ...


1

If it’s on the wrong side of the normal, you don’t have to throw it away—negating it will give you a vector that’s in the visible hemisphere. Answering your comment, to get a vector that’s within some angle θ of the normal, this should work (GLSL): vec3 direction(vec3 normal, vec2 randomValues, float maxTheta) { // pick an orthogonal tangent vector using ...


Only top voted, non community-wiki answers of a minimum length are eligible