Sign in to follow this  

BRDF: Schlick, Ashikhmin-Shirley, Cook-Torrance, Oren-Nayar, etc

Recommended Posts

Assassin    246
I've been investigating BRDF models for game lighting and have taken a look at a number of models, most of which are discussed in the following GDNet Book link, but I'm not entirely satisfied with what's available. My goals are entirely focused on real-time rendering on modern GPUs using a deferred lighting system. The game I'm currently working on isn't exactly visually realistic, but I'd like to get an edge up on the competition if possible...
GDNet book BRDF stuff: [url=""]http://wiki.gamedev....ting%29_Summary[/url]
My current game (various assorted light models depicted): [url=""][/url] [url=""][/url] [url=""][/url] [url=""][/url]

One thing which I find interesting is that the Schlick paper is almost totally ignored, although it appears to offer a very general model with intuitive control factors and supports anisotropy and multi-layered surfaces with appropriate Fresnel-blended contribution; it seems the only value people have found in the paper is the fast approximation for the Fresnel term. The controls exposed are available independently to each layer: normal-incidence reflectance (ie albedo), roughness, and isotropy. Roughness is in a reasonable range of 0-1 where 0 is pure mirror specular and 1 is pure Lambertian diffuse (or whatever sub-BRDF you happen to choose), and the same is true for the isotropy factor (which can be just set to 1 or ignored if you want only isotropic reflectance). Metallic surfaces would be modeled with a single layer, while dielectric materials like plastic or paint would use 2 layers: specular and diffuse, which allows you to specifiy colored or colorless and shiny or rough reflections for each layer (but you must consider that the Fresnel term requires the "top" layer to eventually dominate). The paper also presents approximations to the geometric self-occlusion term and Beckmann specular distribution which is closer than the typical Blinn-Phong standard for low powers. I haven't implemented this model yet, but I'd like to try it out.

I have implemented Oren-Nayar, but as a diffuse-only equation it's a bit useless for generalized deferred shading so I blended it with Blinn-Phong. It produces some interesting results on variable-roughness surfaces, but I'm not convinced that my hacky BRDF-blending job is accurate. The O-N paper is well-defended with empirical evidence for its accuracy in reproducing rough surfaces like clay and sand, and it generalizes to Lambertian when no roughness is present. I'd like to try incorporating this as the diffuse term in a Schlick super-BRDF instead of my hacky blending, and see if it's tangibly different from the standard Schlick or other models. The control variables in such a model would be: diffuse roughness, diffuse albedo, specular albedo, specular roughness, and possibly specular isotropy.

I find the value of the Ashikhmin-Shirley paper rather low, because it offers very little supporting evidence for its rendering model (either mathematical through hemisphere integrals and such, or through empirical evidence to match the reflectance of measured physical BRDFs), and also because it claims that no previous paper has offered the flexibility & accuracy it claims, while citing the very Schlick paper which does exactly that and more. The diffuse term is a little weird, it appears they've attempted a non-Lambertian diffuse term without exposing any controls over it, so it's just a view-dependent diffuse term which they claim is to account for the Fresnel blend in the specular term. Perhaps I simply don't understand it enough, but the paper doesn't make much effort to explain itself clearly.

I'm also interested in other reflectance models and lighting effects... spherical harmonics seem interesting for an ambient diffuse contribution based on light probes, I actually tried doing a halfway hack of this by simply sampling a skybox cubemap at the lowest-detail mip. I also experimented with SSAO but found the screen-space noise pattern a bit distracting (maybe I wasn't doing it right), and settled for some static geometry-based AO approximation.
As a slight aside, the HLSL for A-S in the above link appears to be incorrect, factoring in the Rs factor twice when computing the Fresnel blending for the Ps term:
[font="sans-serif"][size="2"]float3 Ps = [u][b]Rs *[/b][/u] (Ps_num / Ps_den);Ps *= ( Rs + (1.0f - Rs) * [color="#000000"]pow[/color]( 1.0f - HdotL, 5.0f ) );[/size][/font]
[font="sans-serif"] [/font]
[font="sans-serif"][size="2"]Schlick paper: [/size][/font][url=""][/url]
Ashikhmin-Shirley paper: [url=""][/url]
Oren-Nayar paper: [url=""][/url]

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this