0% found this document useful (0 votes)
92 views55 pages

201403-GDC UnityPhysicallyBasedShading Notes

Physically based shading is coming to Unity 5 to improve realism. The new standard shader will use physically based models for lighting behavior. It will take diffuse color, specular color, smoothness, and normal maps as inputs. The shader does microfacet BRDF calculations to determine shading based on materials' physical properties, like Fresnel and Cook-Torrance models. Image based lighting and reflection probes will provide realistic reflections and environment lighting.

Uploaded by

Wagner de Souza
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
92 views55 pages

201403-GDC UnityPhysicallyBasedShading Notes

Physically based shading is coming to Unity 5 to improve realism. The new standard shader will use physically based models for lighting behavior. It will take diffuse color, specular color, smoothness, and normal maps as inputs. The shader does microfacet BRDF calculations to determine shading based on materials' physical properties, like Fresnel and Cook-Torrance models. Image based lighting and reflection probes will provide realistic reflections and environment lighting.

Uploaded by

Wagner de Souza
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 55

Physically Based

Shading in Unity
Aras Pranckeviius
Rendering Dude

This is about physically based shading in upcoming Unity 5, and all things that fall out of that.
I am Aras and have been working on Unity graphics since 2006. @aras_p on the twitterverse.
Outline

New built-in shaders in Unity 5


What, how and why
And all related things

Note: everything in this talk describes what is planned for Unity 5, which is in very early alpha stage right now. We really want to ship all this, but if things go wrong, some features might get pulled from 5.0 release.
Shaders in Unity 4.x
A lot of good things are available
Marmoset Skyshop
Shader Forge
Alloy physical shaders
A lot of good things are possible
If you know how to write shaders, that is

Marmoset Skyshop: image based lighting system and shaders. https://www.assetstore.unity3d.com/#/content/8880


Shader Forge: awesome graphical shader editor with options for physically based shading. https://www.assetstore.unity3d.com/#/content/14147
Alloy: physical shader framework. https://www.assetstore.unity3d.com/#/content/11978
!
Want this
Done with one built-in shader

Unity 4.x has a bunch of built-in shaders (Diffuse, Bumped Specular, ). Many of them are just variations of essentially the same blinn-phong shader.
We want to both improve the shading model (oldskool Blinn-Phong made sense in 2005 not so much in 2014), and improve workflow.
We want the scene like this to be made with built-in shaders & features.
This scene has all textures from Quixels Megascans HDR scanning (http://dev.quixel.se/megascans) by the way.
Shaders in Unity 5
New built-in shaders
Physically based shading
Improved UI & workflow
Related things
Deferred shading, Reflection probes, HDR,
Built-in could cover 80% of use cases
Still possible to write your own, like always
Physically Based Shading
Physically Based Shading
(PBS)
Try to model how light actually behaves
Instead of ad-hoc models that may or might not
work
Movies have moved to it
Games are moving to it
Does not have to meanphoto-realism!
See Pixar

Tons of background information on PBS in recent siggraph courses, for example http://blog.selfshadow.com/publications/s2013-shading-course/ and http://blog.selfshadow.com/publications/s2012-shading-course/
At Unity, our first big experience with PBS was in Butterfly Effect R&D demo (http://unity3d.com/pages/butterfly) in 2012.
PBS motivation
Consistent, plausible look under different
lighting conditions
Less material parameters
All parameter values behave sensibly
More interchangeable data
From 3D / material scanning etc.
Lighting Conditions
Want same content to look good
Energy conservation
Dont reflect more light than you receive
Sharper reflections = stronger; more
blurry reflections = dimmer
Specular takes away from diffuse
Specular everywhere

Everything has specular


Really! Even if a tiny amount

Everything is Shiny http://filmicgames.com/archives/547 (John Hable 2010)


Fresnel all the things

Everything has Fresnel


Fresnel: surface becomes more reflective at
grazing angles
All surfaces approach 100% reflective!
Kind of; Fresnel is more complicated on rough surfaces

Everything has Fresnel http://filmicgames.com/archives/557 (John Hable 2010)


Image Based Lighting (IBL)
Think Marmoset Skyshop
Capture environment into a cubemap
Blur mip levels in a special way for
varying roughness
Voil! Good looking reflections
Place a bunch of them in the level,
objects pick up best matching ones

Blur mip levels: every mip step increases the angle of specular. We use a non-linear angle curve to have more detail in low-angle region.
New Standard Shader
New Standard Shader

Good for most everyday materials


Metals, Plastics, Wood, Concrete, Cloth,
Primary Inputs

Diffuse color
Specular color
Surface smoothness
Normal map
Input: Diffuse

a.k.a. Albedo
Should not have
lighting!
Metals have no (black)
diffuse
Rust etc. can make it not
pure black
Input: Normals

The usual tangent


space normal map
Input: Specular

Only metals have


colored specular
Non-metals: gray and
quite dark
Very few details in a
single material
Input: Smoothness

a.k.a. glossiness
or opposite of
roughness
0=rough, 1=smooth
Interesting detail in this
map
Optional inputs

Emission
Ambient Occlusion
Detail albedo/normal maps
Heightmap (for parallax)
Automatic inputs

Specular reflection cubemap


From reflection probes or global in scene
Light probes, lightmaps,
Shading maths
Microfaced based BRDF
Inspired by Disneys 2012 research
Single smoothness for diffuse & specular
Specular takes away from diffuse
Cook-Torrance, Schlick Fresnel, Blinn-
Phong NDF

If you dont know any of these words, do not worry. They describe math done by the shader to make pretty pixels.
Disneys stuff: see Physically-Based Shading at Disney (Brent Burley 2012) here http://blog.selfshadow.com/publications/s2012-shading-course/
Light attenuation
Here were going over shading step by step
Ambient Occlusion
AO from baked texture

In theory could also plug screen-space AO or other global AO here.


Environment
Just raw cubemap

Environment coming from reflection probe.


Environment
With proper blur based on smoothness

Cubemap in the reflection probe has mip levels blurred in special way (specular convolution) so that surfaces of different smoothness can pick up appropriately blurred reflection.
Environment
And with ambient occlusion
Diffuse factor
Specular factor
Diffuse part
Specular from light
Reflection for metals
Coming from the environment
Fresnel reflection for non-metals
Coming from the environment
Diffuse+Specular
Everything
Diffuse + Specular + that Fresnel I could not explain in
simple words
Workflow
One shader

Less guessing at which shader to use


So what is alpha bumped unlit reflective again?
No holes in variants
I need emission, parallax & alpha, but there is
no such shader
Configurable

Enable features by assigning


textures
Compact UI
Additional controls next to
relevant textures

Were trying a different UI than it used to be in Unity 4.x. Primary motivation:


- More compact
- Controls relevant to textures (e.g. normal map strength etc.) are next to them
- Shift|Ctrl-clicking on the texture slot brings up texture preview popup
Configurable
Internally, lots of shader variants
No emission -> uses faster variant
No detail texture -> uses faster variant
Unused variants not included into game
data
Otherwise shader would take 200MB
Related Things
Deferred Shading
Old deferred lighting (a.k.a. light pre-
pass) had minimal g-buffer, and two
geometry passes
Not enough space in g-buffer for new shader
Two geometry passes not nice either
So were making full deferred shading
Old one stays as legacy

Unity 3/4 deferred lighting (a.k.a. light pre-pass) has really tiny g-buffer (just normals & glossiness). The advantage of it is that it does not require multiple render targets. Disadvantage is two geometry passes, and hard to express
any more sophisticated shading model.
So were making full deferred shading option, with one geometry pass and multiple render targets to store the g-buffer information.
Deferred Shading
G-buffer layout
RT0: diffuse color (rgb)
RT1: specular color (rgb), smoothness (a)
RT2: world normal (rgb; 10.2)
RT3: emission/light buffer; FP16 when HDR
Z-buffer: depth
160bpp (ldr), 192bpp (hdr)
Quite fat
Likely not final yet

This is the current WIP g-buffer layout. Uses 4 MRTs (all 32 bit, except emission/light buffer which can be 64 bit when using HDR).
Since it needs MRTs, that makes it require OpenGL ES 3.0 on mobile, and not-too-old GPU (i.e. not a 10 year old one) on PC.
Deferred Shading
Diffuse Normals Specular

Smoothness Depth Final result


Deferred Shading

Thinking about extensibility


Custom g-buffer layouts
Custom stuff rendered around (g-buffer, lighting)
passes
Very much WIP area right now
Reflection Probes
Similar to LightProbes, just for reflection
A box with size placed in the level
Baked cubemap with specular mip levels
Can also be realtime rendered (expensive)
Objects pick up best probe for them
And data is fed into shaders
Reflection Probe
Providing environment for nearby objects
Reflection Probe
Final shaded result
Cubemaps
Improved cubemap
generation from textures
Cubemap texture
compression
Specular & diffuse
convolution for IBL
Large cubemaps? 64 bit
editor ;)
RenderSettings get a default
reflection cube
Also directional ambient, better
inspector,
HDR
Scene view can be HDR now
When main camera is HDR
Uses same tonemapper as main camera
HDR texture import
Encode to RGBM, including cubemaps
.hdr/.exr formats
Performance of new shader?
Right now ok for decent PC & consoles
Working on mobile/low-end fallbacks
Minimalist Cook-Torrance
Math baked into lookup texture; smoothness in mip
chain
Fresnel approximation with 4.0 power
tex*Lod -> tex*Bias for DX9 SM2 / GLES2.0
No detail texture

Minimalist Cook-Torrance: http://www.thetenthplanet.de/archives/255 (Christian Schler 2011)


PBS math from lookup textures: http://framebunker.com/blog/static-sky-unite-presentation/ (Nicholas Francis 2013)
Preemptive answers
Integration with new GI stuff?
Yes.
Area lights?
Probably not in 5.0, but yes, will need them.
What if I dont need all this?
You can write your own shaders like you always could.
More shaders?
Not in 5.0, but having clear coat (car paint etc.) & skin
built-in would make sense.
Questions?
Random Bonus Feature

While were on topic of graphics & rendering, heres a random other Unity 5.0 feature: Frame Debugger.
Frame Debugger

Step through draw calls and see exactly


how the frame is rendered
Current render target, mesh being
rendered etc.

You can already do something like this in external tools like GPA, VS2012, NSight, PIX, RenderDoc etc., but having a slimmed down version integrated into Unity for much less hassle would be useful, we thought.
This is particularly useful to see what is rendered into render textures (reflections, depth textures, shadow maps etc.) or which things get batched together.

You might also like