Hot answers tagged

18

Physically-Based Rendering You're on the right track when you say "it tries to mimic how light reflects in real life, which is it usually gets split to two components, specular and diffuse depending on the type of material." But we've been modelling materials with specular and diffuse in games & computer graphics for a long time. The trick is that we ...


17

This is a much bigger topic than can be covered in an answer, but briefly: Physically-based shading means leaving behind phenomenological models, like the Phong shading model, which are simply built to "look good" subjectively without being based on physics in any real way, and moving to lighting and shading models that are derived from the laws of physics ...


7

The BRDF is a reflectance density, not a reflectance. Values beyond 1.0 are perfectly sensible as long as they occur only in a small region of the parameter space. The whole thing has to integrate to a value in [0, 1] to avoid adding energy, but that doesn't imply it has to be in [0, 1] everywhere. It's similar to a probability density. If you look at a ...


5

Physically based rendering basically means that you strive to have realistic materials and lighting calculations. The way you do this can vary a bit (or a lot) depending on application, but the main idea is that no material can reflect more light back than hits it, and preferably you want to measure the Bidirectional reflectance distribution function (or ...


4

Physically-Based Rendering (PBR) is really a modern tag people use to refer to the trend of making the rendering system "correct" with regard to the real-world physics of light interacting with surfaces, rather than an exact definition of a full rendering system. In other words, I would say PBR is more a definition of the aspiration of the system than what ...


4

Assuming that you are referring to Bidirectional Reflectance Distribution Functions, a BRDF is nothing more than a fancy name for a broad class of lighting equations. These are Functions that compute the Distribution of Reflectance from a surface based on two directions (Bidirectional): the direction of the incident light and the direction of the viewer of ...


4

Disclaimer: the following answer was published in its entirity by Nathan Reed an a similar question the asker posted on the Computer Graphics Stack Exchange. Real-time graphics deploys a variety of approximations to deal with the computational expense of simulating indirect lighting, trading off between runtime performance and lighting fidelity. This is an ...


3

If I'm reading this right, the answer seems to be right there in the continuation of that line: metallic - the metallic-ness (0 = dielectric, 1 = metallic). This is a linear blend between two different models. The metallic model has no diffuse component and also has a tinted incident specular, equal to the base color. (With the implication that the ...


3

(Based on the comments, the question is really about using BRDFs with area lights.) This is a subtle issue. First of all, there's a difference between what the "color of a light source" means for point lights versus area lights: the color of a point light is an irradiance, while the color of an area light is a radiance. So when using the representative-...


2

Very late reply, but I had a similar issue at Issue with specular light at highly oblique angles with Blinn-Phong and the answer turned out to be Nathan Reed's last suggestion: Needing to incorporate the N.L factor from the radiometric integral. From my experience debugging this, and eyeballing your graphs vs. the graphs you're trying to match, I'm pretty ...


2

The gradient values are normally (when you do a standard texture lookup) the screen-space derivatives of the texture coordinates, dFdx(l_g), dFdy(l_g). In order to do anisotropic filtering while also specifying the base mip level as specularLevel, you could try rescaling the derivatives so the length of the smaller derivative is pow(2.0, specularLevel). ...


2

There is no canonical "correct way" to approximate general functions. Sorry. With that said, the very source you linked to has suggested the Lafortune representation. This representation has been described as "...compact and works well for hardware rendering..." in chapter 18 of GPU Gems. Implementation details appear to be out of scope for this question.


2

The idea of physically based rendering is to reach a closer approximation of how light behaves in the real world and use this model to generate a 2D impression of a 3D scene. This is basically what we are doing since the invention of 3D graphics, just with more simplified models of optics. So yes, PBR is mostly a buzzword. A perfect approximation of real-...


2

I'm not very good with English, let's hope that the variable names are clear. float3 half_vector = normalize( eye_dir + light_dir ); float n_dot_l = saturate( dot( normal, light_dir ) ); float n_dot_h = saturate(dot( normal, half_vector ); float h_dot_l = saturate(dot( half_vector, light_dir )); // Amount of reflected energy based on angle // usually is [f0 ...


2

The problem was that my Vertex Positions GBuffer Texture was being clamped to values between [0,1]. Converting the texture to Float32 format solved the issue. Thanks guys.


2

First, I wouldn't consider PBR to be separate from forward or deferred rendering. You can use PBR in either forward or deferred rendering, as I understand it. Physically-based rendering just means trying to simulate the actual physics of light. This gives more realistic results than other techniques, but like all techniques, it involves trade-offs between ...


2

There are two different aspects of a renderer in play here: How do we determine which bits of surface are visible on each screen pixel (including direct visibility or reflection), and what lighting those surfaces receive? Here we have two families of techniques: Raytracing & Path Tracing renderers do this by modelling the way rays travel through the ...


2

When you see abrupt patches of black like these often the cause of this are NaNs (Not A Number) from divisions by zero. And then anything multiplied by an NaN will give an NaN or (almost) any other operations and functions for that matter. Things like float NVangle = max(dot(texel_normal, view_direction), 0.0); specular_light = (geometric_term * ...


1

Disclaimer: I don't have experience with PBR; this answer is just filtering my physics knowledge through computer graphics concepts. Fluorescence can be understood in general as: a material absorbs light of some wavelength (/frequency/energy), and then emits light of another (longer, lower energy) wavelength. This is not exclusive to UV (e.g. a material may ...


1

This is a dirty little secret for metallic lighting: it's all about the reflections. Every good looking metallic render is actually reflecting from a complex environment. This goes for other reflective materials too, like glass and water. From http://www.pauldebevec.com/Probes/ Take for example the above scene. The reflective spheres all use the same ...


1

Specular color for non metallic objects is typically .04 not zero. (That should be your F0) at glancing angles that goes up to 1.


1

The singular value decomposition produces the Eigenvalues with largest magnitude, and their corresponding Eigenvectors. If one were to decompose every Eigenvector of a matrix, they have performed a Principle Component Analysis. The principal components represent the 'n'-dimensional axes on which the most variance is encoded. Therefore they can be used as ...


1

They are not really related. This document from Marmoset explains PBR well without invoking lots of math. Screen space reflections on the other hand is a post-process screen-space technique used to render real-time reflections. It is generally much cheaper than rendering cube maps each frame, but can look less accurate and doesn't allow off-screen objects ...


1

I think I got my answer - Beckmann distribution term from the Cook-Torrance equation becomes really high when the roughness is low: For roughness = 0.01 the Beckmann term becomes 3183; for 0.001, it becomes 318310. The roughness has to be much lower on non-metals to make the specular highlight noticeable.


1

It's not quite as simple as simply tinting the specular color with albedo for metals. For metals the albedo is used to define specular reflectance at normal incidence, but this color goes to white at grazing angles due to Fresnel effect. You can use Schlick's approximation for this computation.


1

Short version: a) 0.5/0.5/0.5 In the metals workflow, the specular colour will be exactly as sampled in the Albedo map. It's possible with PBR to have some metals shinier than others (while of course still obeying conservation of energy), which can only be achieved by allowing dimmer colours in the Albedo Map to result in dimmer specular values.


1

It might be your display honestly. Some displays use less color depth than 32 bpp which can cause banding or flickering. You might consider dithering if you end up with no better option than addressing the banding.


1

Those terms are very imprecisely defined, and their definitions will vary from person to person, or from engine to engine. There is a quick and easy introduction at this page, you may want to take a look at it. I've only done games, so I can't tell you much about films. This being a game development Q/A, it is unlikely that you will find many people with ...


1

The thing is you encounter a 0/0 problem. When the denominator goes to 0, the G goes to 0 too. 0/0 condition is what we have to avoid in program, so check G formula of GGX and you'll find the denominator (i.n)(o.n) can be factor out.


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