Surface Material Physics for Shader Writers

Chas. Boyd
DirectX® Graphics Architect Windows® Gaming & Graphics Technology

Microsoft® Corporation

Lighting and surface effects are clearly discernable to end-users
Enables novelty for them, and differentiation for you

Enable a title to have a distinct ―look‖ See other talks on lighting models, this one focuses on surfaces

Surfaces vs. Lighting Surface Types
Metal Rough Specular Subsurface Layered Materials Maya, SOFTIMAGE, Renderman

For all surfaces: Other effects such as shadows will be applied in the lighting model These are independent of the surface effects described here

Surfaces and Lighting
Key participant in visual ―Look‖ Interacts with lighting environment in various ways Need to take both into account in any given situation Design content to have surfaces that look best in the lighting environment they will be used in and vice versa

Surface-Light Interaction
Light comes in Surface modifies it Light leaves towards camera/eye Surface interactions include
Absorption, reflection, self-shadowing, self-occlusion, scattering

Subsurface effects
Absorption, scattering, re-emission

Fundamentals of Surfaces
Surfaces often contain multiple constituents
Absorptive dies, reflective layers, scattering particles of various sizes

This talk proceeds from simplest to more complex surface structures

Polished Metal Surface
Light comes in Some colors are absorbed Remaining light reflects

Atomically smooth—mirror finish Structured highlights
image of environment are visible in them

STM Micrograph

Polished Metal

Map-Based Technique
Apply environment map for reflection Scale it by metal color
Accounts for some colors absorbed

That is the final color for the screen C = envmap*base

Gamma Note: no effect

Modulate Environment Map

Procedural Technique
Use very high specular exponent
~100 or higher

Accurate model for single constant color round light source C = light*dot(N,H)^100 * base
Gamma Note: picking exponent

Use in Games
Works for gold, copper, bronze
some anodized effects

Ideal for weapons
―Gun metal blue‖

Not appropriate for enameled metal
More metallic than any ―metallic‖ autobody enamel

Nor for oxidized e.g. verdigris
These are too rough for this model

Rougher Surfaces
Smudges, scuffs, dust, oxides

At high magnification we see:

Rough Surface

Diffuse Scattering

Reduced Specular

Map-based Technique
Roughness varies per-pixel in ―gloss‖ map e.g. alpha of base tex Scale down environment map c = gloss*envmap*base Blur environment map in areas of low gloss
MIP LOD or post-process effect MIP LOD is per-pixel in ps.2.0

Blur is partial integral of map

Procedural Technique
Use procedural specular spec = light*dot(N,H)**25 but with same gloss term c = gloss*spec*base Decrease exponent to achieve blur

Both Techniques
Add diffuse scattering term

Increased Roughness

Increased Roughness Surface

Fully Rough Surface

Fully Rough Surface

Diffuse Scattering No Specular

Rough Surfaces
Concrete Sand Cloth Plaster Marble, non-polished Pavement Stone

Moon Photograph

Moon Rendering

Rough Surfaces
Diffuse reflector Lambertian or Oren-Nayar effects

Map-based Technique
Blur map across very large scale Integrate entire hemisphere

Cube Map And Its Integral

Diffuse only

Procedural Technique
Model only Diffuse term For directional light: c = light * dot(N,L) * base Or use hemisphere light Gamma Note:
Correct using sqrt or 1-(1-x)**2 for non-CAD applications

Layered Surface


Dye Layer

Layered Surface Larger

Varnish Dye Particles

Layered Surface
Thin layer of smooth clear material Over rough dye particles Underlayer is rough because particles may be suspended
Plastics Linoleum Enameled metal –car finish Varnished surface –wood

Map-Based Technique
Envt. map scaled by gloss term spec = gloss*envmap Added to diffuse term: c = dot(N,L)*base + spec Base color does not tint highlight Gamma Note: add should be linear
Correct to linear, add, convert back if have enough precision and time

Add Environment + Diffuse

Specular Only

Procedural Technique
Base color does not modulate specular, only light color does spec = light*dot(N,H)**100 c = dot(N,L)*base + spec*gloss

Top layer + bottom layer

Polished specular*gloss*base


spec*gloss + diffuse*base

Fresnel Effect
At top layer interface
Some light is reflected, Remainder is transmitted through

Depends on surface material And on incident angle! Fresnel term f is proportion reflection
grazing angles: 100% reflected normal angles: 5% reflected

Fresnel Mid

60% reflected

Air Material

40% transmitted

Fresnel Normal

10% reflected

Air 90% transmitted Material

Fresnel Grazing

90% reflected

Air Material

10% transmitted

Fresnel Profile





Fresnel Term Approximation
Use f = 1 - cosq = (1 - E dot N) Raise to power for better approximation f = (1 – cosq)4
[Schlick] used 5th power

Hack curve fit to Glassner

Fresnel Vertex Shader
m4x4 oPos,v0,c8; m4x4 r0,v0,cW m3x3 r1,v3,cW add dp3 rsq mul dp3 add mul mul mul add // xform pos. to output space // xform pos. to world space, // xform normal to world space

r0,-r0,c14 // compute eye ray r3.x,,,r3.x,, normalize it r0,r0,r1; r0,c1111,-r0 r1,r0,r0 r0,r1,r1 r0,r0,c1 oD0,r0,c0 // // // // // // dot eye ray with normal complement color **2 **4 scale for fresnel bias and emit as diffuse

Fresnel Pixel Shader

; def v0 def c0 def c1 tex t0 dp3 mul mul mad r0,v0_bx2,t0_bx2; r1,1-r0,1-r0 r0,r1,r1 r0,r0,c1,c0 // // // // // // // // eye ray 5% bias 95% scale normal map dot eye ray with normal complement and square **4 scale & bias

Fresnel Comparison

1- cosq

(1- cosq)4





Fresnel Term

Fresnel Affects Diffuse Layer
Only light that was not reflected illuminates diffuse ―dye‖ layer In single light case, incident angle can be used to compute f Then f is used to blend (lerp) between specular and diffuse Not as useful for multi-light case
diffuse layer is illuminated by light from all directions in that case

Metallic Flake
Can used BEML with random Gaussian distribution of perturbation pixels Can use similar trick for glass buildings
point sampled displacement map gives each window a separate normal Or use filtering to get curved windows then must mask seams with alphatest

Use procedural specular term with low exponent ~8
Feasible with DirectX 8.* pixel shader

Still need enviroment map for car finish enamel gloss coat

Metallic Flake Finish


Dye Layer

Sub-Surface Effects
Light has to get inside

Light has to get out again

Subsurface Absorption
Can be impacted by Fresnel effects
Only non-reflected light penetrates

Simple term to model Can be impacted by structure of surface

―A layer of ketchup covered by tissue paper‖ Probably more translucent than real ketchup

Anisotropic Effects
Most visible in specular case Brushed metal Cloth fabrics Wire spools

Anisotropic Hair
Hair Tufts
snip a lock, put it in scanner

use alpha channel mask per-vertex anisotropic
no per-pixel direction variation

Anti-aliased lines are too thick

Key References
Nelson Max Christophe Schlick Peter Shirley

Shading is not fully understood Most efforts not based on pure physics Equations are fit to measured data Equations are chosen to ‗look good‘

Empirical Process
Discern an effect Measure how it varies Curve fit some equation to it Tweak it until it looks good

Empirical Process
Plot Fit Eqn

Tweak Evaluate

Nelson Max
―Horizon mapping: shadows for bump-mapped surfaces‖
Basis of last years GDC talk on realtime self-shadowing bump maps Available as sample in DX8.1 SDK

Most work is applicable and accessible

Christophe Schlick
―A Customizable Reflectance Model for Everyday Rendering‖
Uses his procedurally generated BRDF Generic Lighting Model
Single shader for specular vs diffuse, and isotropic vs anisotropic surfaces

Reduces state changes? Requires 2.0 shaders

Peter Shirley
Real-time Ray-tracing
Hemisphere lighting model

A Practitioner‘s Assessment of Light Reflection Models
Demonstrates process of identifying an effect and defining a technique to represent it Includes good background material

Foley & Van Dam, Feiner, Hughes
Still lots of good background material Fundamentals

Principles of Digital Image Synthesis by Andrew Glassner
Broad sampling of topics Excellent detail in key areas Concordance for much of literature

Graphics Gems Game Programming Gems Real-time Photorealistic Rendering
Eric Haines

Call to Action
Pick a unique ―Look‖ and do it Toon several methods Cheesy unlit or flat shaded Retro std FF pipelines Radiosity soft lighting only Shadows horror movie Gritty ultra realistic
Uses photos for concept art