10

This is a potentially confusing re-use of terminology. Ambient Occlusion is not in itself a post processing effect. Screen Space Ambient Occlusion is a post processing effect using the depth buffer to approximate the effects produced by Ambient Occlusion. Ambient Occlusion is a relatively expensive global method, while Screen Space Ambient Occlusion is the ...


7

Ambient occlusion cannot be physically based no matter what algorithm you use to calculate it. It's a simplification of global illumination that assumes all occluders only block light and are themselves completely black, which isn't true and generally makes corners darker than they should be. Ideally, you would be using some kind of global illumination ...


6

It's a bit hard to tell from your image, but it does look a bit faint. When debugging these kinds of things, it's always useful to strip down your scene as much as possible to remove any unnecessary complexity from the picture. In your case, try only creating a single diffuse sphere that touches the ground in one point. Give the ground and the sphere an ...


6

PBR isn't just a feature you "add to a rendering engine" but an entire philosophy how to approach solving rendering problems. This seems to be a common prevailing misconception when people talk about PBR. Quite often people assume that when they have implemented physically based BRDF (e.g. GGX) into their engines, they are "done implementing PBR". They are ...


6

Your point is correct when applied to ambient lighting as an approximation technique. This crude approach does indeed give the same lighting level to all surfaces regardless of their surroundings. However, ambient occlusion is a different (less crude) approach, that models how the light levels in a real scene vary depending on how much reflected light can ...


5

In simplified terms, shading controls how object's surface's brightness changes when the angle between its normal and light vector changes. Shadows are areas where the light cannot reach because it's occluded by other objects. So no, they both are not responsible for creating shadows.


5

Ambient light does not really exist, if we do not talk about cosmology. What we call ambient is just light form many secondary reflections. Image 1: No ambient light (left) and ambient light (right). Both look artificial. We can approximate ambient light by a constant factor. But this looks slightly washed out as ambient light is not constant over the ...


4

Ambient occlusion isn't a technique, but rather a concept. It can be implemented (and approximated) as a post-processing effect such as SSAO, SSDO, HBAO+, etc. @trichoplax gave a good answer, I just wanted to elaborate on the comments. Is there a reason why it's considered post-processing and deferred lighting/shading isn't? I personally would consider ...


4

When you compute ambient occlusion (AO) for a point on an object's surface, you sample multiple directions and measure what fraction of them escape. That is, you're trying to approximate what fraction of the unit hemisphere is visible to that point on the surface. (Note that it's a unit hemisphere because half of the unit sphere is on the wrong side of the ...


3

Ambient occlusion is basically shooting out a large number of rays diffusely from a surface point. In a pipe some of the rays will intersect with the pipe itself, which means that this surface point will not receive as much ambience as points that don't have intersecting rays. The inside of the pipe vs the outside of the pipe will be different.


3

I'll add some guidelines to help readers understand Benedikt Bitterli's statement "Make sure to gamma correct your images". Gamma correcting images does not mean applying a power filter at the end. It means working in linear space during all calculations, and finally encoding the output into gamma space. Gamma space is the color space into which all ...


3

Radiosity is a way to calculate diffuse GI, i.e. every surface is assumed to be Lambertian surface without specular component. In the radiosity algorithm you split surfaces into small patches and calculate "form factor" between two patches, which defines how much energy is transferred from one patch to the other. The form factor between patches is ...


2

The distinction is not clear mainly because the term "shading" is an extremely broad term. One of the first uses for programmable "shaders" in real-time graphics pipeline was computing illumination on vertices or pixels - close analogs to what an artist does when shading an object in a drawing for example. Today it has come to encompass all calculations ...


2

You need to be careful about spaces - position and normal need to be in view space. To transform depth into view space position I used this method. So: vec3 viewPositionFromDepth(vec2 vTexCoord) { float z = texture2D(depthTexture, vTexCoord).r; // Get x/w and y/w from the viewport position float x = vTexCoord.x * 2.0 - 1.0; float y = ...


1

You need to perform integration of $P$ over the hemisphere to calculate the solution. There doesn't seem to be closed-form solution as the solution requires incomplete gamma function: $$2\pi(e^{-\alpha d}-\alpha d\Gamma(0,\alpha d))$$


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