SlideShare a Scribd company logo
Learn how to do stylized shading with Shader Graph – Unite Copenhagen 2019
Learn how to create
stylised shading with
Shader Graph
Ciro Continisio - Lead Evangelist, EMEA
Who am I
3
Ciro Continisio
Lead Evangelist, EMEA
Focus: Games, more advanced uses of Unity
Past:
— Developer of my own games
— Certification tester at EA
@CiroContns
In this presentation
4
— How to get light and shading information through custom
HLSL code in Shader Graph
— Use that to create a custom toon shader
— Tips to improve your production workflow
Shader Graph
5
Shader Graph
6
Available as part of the SRPs
— Visual shader editor
— Node-based
— Instant feedback
— Now out of Preview
www.unity3d.com/shader-graph
7
What if we don’t want a
realistic rendering style?
8
9
Sayonara Wild Hearts Overland Circuit Superstars
“Stylised” look
10
— Something that doesn’t necessarily look real
– Altering the surface response to shadows and lighting
– Added abstract details (e.g. an outline)
— Exaggerating or removing details
– To direct the viewer’s attention
– To make the game easier to read
– To still look cool on less powerful hardware
Recreating a toon shader in
Shader Graph
11
12
The Legend of Zelda: Breath of the Wild
Step 1:
Getting light and shadow
information from the pipeline
13
Custom Function Node
14
— Supports custom HLSL
– Inside the node
– From an external .hlsl file
Getting main light information
1
2
3
4
5
6
7
8
#if SHADERGRAPH_PREVIEW
Direction = half3(0.5, 0.5, 0);
Color = 1;
#else
Light light = GetMainLight();
Direction = light.direction;
Color = light.color;
#endif
15
(this code will be shared at the end of the presentation)
Lambert lighting model
1
2
3
4
5
half3 LightingLambert(half3 lightColor, half3 lightDir, half3 normal)
{
half NdotL = saturate(dot(normal, lightDir));
return lightColor * NdotL;
}
16
Code from:
com.unity.render-pipelines.universal@version/ShaderLibrary/Lighting.hlsl
Dot product (of two vectors)
17
A
0.80.50-1
B
1
2
3
4
5
half3 LightingLambert(half3 lightColor, half3 lightDir, half3 normal)
{
half NdotL = saturate(dot(normal, lightDir));
return lightColor * NdotL;
}
18
Lambert lighting model
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void MainLight_half(float3 WorldPos, out half3 Direction, out half3 Color, out half DistanceAtten, out half ShadowAtten)
{
#if SHADERGRAPH_PREVIEW
Direction = half3(0.5, 0.5, 0);
Color = 1;
DistanceAtten = 1;
ShadowAtten = 1;
#else
#if SHADOWS_SCREEN
half4 clipPos = TransformWorldToHClip(WorldPos);
half4 shadowCoord = ComputeScreenPos(clipPos);
#else
half4 shadowCoord = TransformWorldToShadowCoord(WorldPos);
#endif
Light mainLight = GetMainLight(shadowCoord);
Direction = mainLight.direction;
Color = mainLight.color;
DistanceAtten = mainLight.distanceAttenuation;
#if !defined(_MAIN_LIGHT_SHADOWS) || defined(_RECEIVE_SHADOWS_OFF)
ShadowAtten = 1.0h;
#endif
#if SHADOWS_SCREEN
ShadowAtten = SampleScreenSpaceShadowmap(shadowCoord);
#else
ShadowSamplingData shadowSamplingData = GetMainLightShadowSamplingData();
half shadowStrength = GetMainLightShadowStrength();
ShadowAtten = SampleShadowmap(shadowCoord, TEXTURE2D_ARGS(_MainLightShadowmapTexture,
sampler_MainLightShadowmapTexture),
shadowSamplingData, shadowStrength, false);
#endif
#endif
}
20
(will share later)
File mode
21
Link to an HLSL file external to the
graph
— Catch syntax errors
— Syntax highlighting
Lambert lighting with shadows
22
Lambert lighting with shadows
23
Put the Custom Function node in a Sub-Graph
24
#unitytips
Lambert lighting with shadows
25
0
0
0 to 1
-1 to 0
Visualise your values!
26
#unitytips
Visualise your values!
27
#unitytips
Calculating a simple specular
1
2
3
4
5
6
7
8
9
10
11
12
void DirectSpecular_half(half3 Specular, half Smoothness, half3 Direction, half3 Color, half3 WorldNormal,
half3 WorldView, out half3 Out)
{
#if SHADERGRAPH_PREVIEW
Out = 0;
#else
Smoothness = exp2(10 * Smoothness + 1);
WorldNormal = normalize(WorldNormal);
WorldView = SafeNormalize(WorldView);
Out = LightingSpecular(Color, Direction, WorldNormal, WorldView, half4(Specular, 0), Smoothness);
#endif
}
28
(will share the code later)
Calculating a simple specular
1
2
3
4
5
6
7
8
9
half3 LightingSpecular(half3 lightColor, half3 lightDir, half3 normal, half3 viewDir, half4 specular, half
smoothness)
{
float3 halfVec = SafeNormalize(float3(lightDir) + float3(viewDir));
half NdotH = saturate(dot(normal, halfVec));
half modifier = pow(NdotH, smoothness);
half3 specularReflection = specular.rgb * modifier;
return lightColor * specularReflection;
}
29
Code from:
com.unity.render-pipelines.universal@version/ShaderLibrary/Lighting.hlsl
The position of a specular effect
30
31
32
33
Lambert model with Specular
34
35
There’s more…
— Get information from Ambient lighting or GI
— Get information on additional lights in the scene (point lights)
There’s a blog post out about this: bit.ly/CustomLightingSG
Step 2:
Achieving the cartoon look
36
The final graph
38
1: Lighting and shadows
— Hard transition from light to shadows
– Only 2 colours (1 transition)
— Never really reaching full white or full black
39
Step operation
.25 .5 .750 1
Original
40
Gradient (or “ramp”) shading
0 1
0 1
Original
Ramp shaded
The hard transition on light and shadows
41
Occlusion
texture
Not the
final value
Light info from Custom Function node
Using gradients
42
Fixed mode Blend used as Fixed
#unitytips
Pre-processing textures
43
#unitytips
Pre-processing textures
44
#unitytips
2: The painted specular
45
— Specular appears as if painted with a brush
— Other materials (e.g. hair) have a more classic
“blob” specular
Creating the paint dabs
46
Using them as specular
47
3: The backlight halo
48
Gives an appreciation of the colour of the model
even when it should be actually dark
— When point of view is completely opposite the
light source, contours are lit
Learn how to do stylized shading with Shader Graph – Unite Copenhagen 2019
The backlight halo
50
4: The side shine
51
Helps to read the silhouette
— Bright thin light on the side of the model,
where light is coming from
— Often the brightest spot, reaching almost
white
Light Direction
The side shine
53
The graph
54
Base lighting
Ramp lighting
Final result
Dabs specular
Backlight rim
Side shine
The final graph
Base lighting
Ramp lighting
Dabs specular
Backlight rim
Side shine
Final result
56
Want to learn more?
Tutorial:
Introduction to Shader Graph
Tutorial:
Shader Graph: Color Node
Project:
Make a Flag Move with
Shader Graph
Subscribe now for a 3-month free trial at
unity.com/learn-premium with code: UNITECPH19
*Learn Premium is included in Unity Plus and Pro licenses. Just sign in with your Unity ID.
Questions?
bit.ly/BotWToonShader
Ciro Continisio - Lead Evangelist, EMEA
@CiroContns
#UniteCopenhagen #Unity3d

More Related Content

PDF
「原神」におけるコンソールプラットフォーム開発
PDF
VRM 標準シェーダ MToon の使い方
PPTX
Lighting the City of Glass
PDF
Taking Killzone Shadow Fall Image Quality Into The Next Generation
PDF
Physically Based Lighting in Unreal Engine 4
PPT
Light prepass
PDF
Best Practices for Shader Graph
「原神」におけるコンソールプラットフォーム開発
VRM 標準シェーダ MToon の使い方
Lighting the City of Glass
Taking Killzone Shadow Fall Image Quality Into The Next Generation
Physically Based Lighting in Unreal Engine 4
Light prepass
Best Practices for Shader Graph

What's hot (20)

PDF
HDR Theory and practicce (JP)
PPTX
FrameGraph: Extensible Rendering Architecture in Frostbite
PDF
Rendering AAA-Quality Characters of Project A1
PDF
Dissecting the Rendering of The Surge
PDF
Graphics Gems from CryENGINE 3 (Siggraph 2013)
PPTX
DirectX 11 Rendering in Battlefield 3
PDF
Screen Space Decals in Warhammer 40,000: Space Marine
PPT
NVIDIA's OpenGL Functionality
PPTX
Rendering Technologies from Crysis 3 (GDC 2013)
PDF
Cascade Shadow Mapping
PDF
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
PPSX
Dx11 performancereloaded
PDF
輪読発表資料: Efficient Virtual Shadow Maps for Many Lights
PDF
Killzone Shadow Fall Demo Postmortem
PDF
中級グラフィックス入門~シャドウマッピング総まとめ~
PDF
Ndc11 이창희_hdr
PDF
마칭 큐브 알고리즘 - ZP 2019 데캠
PDF
Bindless Deferred Decals in The Surge 2
PPTX
Physically Based and Unified Volumetric Rendering in Frostbite
HDR Theory and practicce (JP)
FrameGraph: Extensible Rendering Architecture in Frostbite
Rendering AAA-Quality Characters of Project A1
Dissecting the Rendering of The Surge
Graphics Gems from CryENGINE 3 (Siggraph 2013)
DirectX 11 Rendering in Battlefield 3
Screen Space Decals in Warhammer 40,000: Space Marine
NVIDIA's OpenGL Functionality
Rendering Technologies from Crysis 3 (GDC 2013)
Cascade Shadow Mapping
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
Dx11 performancereloaded
輪読発表資料: Efficient Virtual Shadow Maps for Many Lights
Killzone Shadow Fall Demo Postmortem
中級グラフィックス入門~シャドウマッピング総まとめ~
Ndc11 이창희_hdr
마칭 큐브 알고리즘 - ZP 2019 데캠
Bindless Deferred Decals in The Surge 2
Physically Based and Unified Volumetric Rendering in Frostbite
Ad

Similar to Learn how to do stylized shading with Shader Graph – Unite Copenhagen 2019 (20)

PDF
Rendering basics
PDF
GDC 2018 Level Design Workshop - How To Light A Level - slides.pdf
PDF
Custom SRP and graphics workflows - Unite Copenhagen 2019
PDF
Clean architecture for shaders unite2019
PPTX
ch6 lighting and shading ch6 presenttion(1).pptx
PDF
GameProgramming for college students DMAD
PPTX
Develop2012 deferred sanchez_stachowiak
PPT
Lighting & Shading in OpenGL Non-Photorealistic Rendering.ppt
PDF
Applying your Convolutional Neural Networks
PPT
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)
PPTX
A Bizarre Way to do Real-Time Lighting
PDF
esapro_2_manual_en.pdf
PDF
What's new in Shader Graph: ready for production – Unite Copenhagen 2019
PDF
Programmers guide
PPT
Advanced Game Development with the Mobile 3D Graphics API
PDF
student 3d max
PDF
Introduction to Coding
PPTX
OpenGL basics
PDF
The Next Generation of PhyreEngine
PDF
Presentation authoring step_by_step_booklet
Rendering basics
GDC 2018 Level Design Workshop - How To Light A Level - slides.pdf
Custom SRP and graphics workflows - Unite Copenhagen 2019
Clean architecture for shaders unite2019
ch6 lighting and shading ch6 presenttion(1).pptx
GameProgramming for college students DMAD
Develop2012 deferred sanchez_stachowiak
Lighting & Shading in OpenGL Non-Photorealistic Rendering.ppt
Applying your Convolutional Neural Networks
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)
A Bizarre Way to do Real-Time Lighting
esapro_2_manual_en.pdf
What's new in Shader Graph: ready for production – Unite Copenhagen 2019
Programmers guide
Advanced Game Development with the Mobile 3D Graphics API
student 3d max
Introduction to Coding
OpenGL basics
The Next Generation of PhyreEngine
Presentation authoring step_by_step_booklet
Ad

More from Unity Technologies (20)

PDF
Build Immersive Worlds in Virtual Reality
PDF
Augmenting reality: Bring digital objects into the real world
PDF
Let’s get real: An introduction to AR, VR, MR, XR and more
PDF
Using synthetic data for computer vision model training
PDF
The Tipping Point: How Virtual Experiences Are Transforming Global Industries
PDF
Unity Roadmap 2020: Live games
PDF
Unity Roadmap 2020: Core Engine & Creator Tools
PDF
How ABB shapes the future of industry with Microsoft HoloLens and Unity - Uni...
PPTX
Unity XR platform has a new architecture – Unite Copenhagen 2019
PDF
Turn Revit Models into real-time 3D experiences
PDF
How Daimler uses mobile mixed realities for training and sales - Unite Copenh...
PDF
How Volvo embraced real-time 3D and shook up the auto industry- Unite Copenha...
PDF
QA your code: The new Unity Test Framework – Unite Copenhagen 2019
PDF
Engineering.com webinar: Real-time 3D and digital twins: The power of a virtu...
PDF
Supplying scalable VR training applications with Innoactive - Unite Copenhage...
PDF
XR and real-time 3D in automotive digital marketing strategies | Visionaries ...
PDF
Real-time CG animation in Unity: unpacking the Sherman project - Unite Copenh...
PDF
Creating next-gen VR and MR experiences using Varjo VR-1 and XR-1 - Unite Cop...
PDF
What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019
PDF
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
Build Immersive Worlds in Virtual Reality
Augmenting reality: Bring digital objects into the real world
Let’s get real: An introduction to AR, VR, MR, XR and more
Using synthetic data for computer vision model training
The Tipping Point: How Virtual Experiences Are Transforming Global Industries
Unity Roadmap 2020: Live games
Unity Roadmap 2020: Core Engine & Creator Tools
How ABB shapes the future of industry with Microsoft HoloLens and Unity - Uni...
Unity XR platform has a new architecture – Unite Copenhagen 2019
Turn Revit Models into real-time 3D experiences
How Daimler uses mobile mixed realities for training and sales - Unite Copenh...
How Volvo embraced real-time 3D and shook up the auto industry- Unite Copenha...
QA your code: The new Unity Test Framework – Unite Copenhagen 2019
Engineering.com webinar: Real-time 3D and digital twins: The power of a virtu...
Supplying scalable VR training applications with Innoactive - Unite Copenhage...
XR and real-time 3D in automotive digital marketing strategies | Visionaries ...
Real-time CG animation in Unity: unpacking the Sherman project - Unite Copenh...
Creating next-gen VR and MR experiences using Varjo VR-1 and XR-1 - Unite Cop...
What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019

Recently uploaded (20)

DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
A Presentation on Artificial Intelligence
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Encapsulation theory and applications.pdf
PPT
Teaching material agriculture food technology
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
The AUB Centre for AI in Media Proposal.docx
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
A Presentation on Artificial Intelligence
Building Integrated photovoltaic BIPV_UPV.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
“AI and Expert System Decision Support & Business Intelligence Systems”
Encapsulation theory and applications.pdf
Teaching material agriculture food technology
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
A comparative analysis of optical character recognition models for extracting...
Diabetes mellitus diagnosis method based random forest with bat algorithm
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Assigned Numbers - 2025 - Bluetooth® Document
MIND Revenue Release Quarter 2 2025 Press Release
Mobile App Security Testing_ A Comprehensive Guide.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Programs and apps: productivity, graphics, security and other tools
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Digital-Transformation-Roadmap-for-Companies.pptx

Learn how to do stylized shading with Shader Graph – Unite Copenhagen 2019

  • 2. Learn how to create stylised shading with Shader Graph Ciro Continisio - Lead Evangelist, EMEA
  • 3. Who am I 3 Ciro Continisio Lead Evangelist, EMEA Focus: Games, more advanced uses of Unity Past: — Developer of my own games — Certification tester at EA @CiroContns
  • 4. In this presentation 4 — How to get light and shading information through custom HLSL code in Shader Graph — Use that to create a custom toon shader — Tips to improve your production workflow
  • 6. Shader Graph 6 Available as part of the SRPs — Visual shader editor — Node-based — Instant feedback — Now out of Preview www.unity3d.com/shader-graph
  • 7. 7
  • 8. What if we don’t want a realistic rendering style? 8
  • 9. 9 Sayonara Wild Hearts Overland Circuit Superstars
  • 10. “Stylised” look 10 — Something that doesn’t necessarily look real – Altering the surface response to shadows and lighting – Added abstract details (e.g. an outline) — Exaggerating or removing details – To direct the viewer’s attention – To make the game easier to read – To still look cool on less powerful hardware
  • 11. Recreating a toon shader in Shader Graph 11
  • 12. 12 The Legend of Zelda: Breath of the Wild
  • 13. Step 1: Getting light and shadow information from the pipeline 13
  • 14. Custom Function Node 14 — Supports custom HLSL – Inside the node – From an external .hlsl file
  • 15. Getting main light information 1 2 3 4 5 6 7 8 #if SHADERGRAPH_PREVIEW Direction = half3(0.5, 0.5, 0); Color = 1; #else Light light = GetMainLight(); Direction = light.direction; Color = light.color; #endif 15 (this code will be shared at the end of the presentation)
  • 16. Lambert lighting model 1 2 3 4 5 half3 LightingLambert(half3 lightColor, half3 lightDir, half3 normal) { half NdotL = saturate(dot(normal, lightDir)); return lightColor * NdotL; } 16 Code from: com.unity.render-pipelines.universal@version/ShaderLibrary/Lighting.hlsl
  • 17. Dot product (of two vectors) 17 A 0.80.50-1 B
  • 18. 1 2 3 4 5 half3 LightingLambert(half3 lightColor, half3 lightDir, half3 normal) { half NdotL = saturate(dot(normal, lightDir)); return lightColor * NdotL; } 18
  • 20. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 void MainLight_half(float3 WorldPos, out half3 Direction, out half3 Color, out half DistanceAtten, out half ShadowAtten) { #if SHADERGRAPH_PREVIEW Direction = half3(0.5, 0.5, 0); Color = 1; DistanceAtten = 1; ShadowAtten = 1; #else #if SHADOWS_SCREEN half4 clipPos = TransformWorldToHClip(WorldPos); half4 shadowCoord = ComputeScreenPos(clipPos); #else half4 shadowCoord = TransformWorldToShadowCoord(WorldPos); #endif Light mainLight = GetMainLight(shadowCoord); Direction = mainLight.direction; Color = mainLight.color; DistanceAtten = mainLight.distanceAttenuation; #if !defined(_MAIN_LIGHT_SHADOWS) || defined(_RECEIVE_SHADOWS_OFF) ShadowAtten = 1.0h; #endif #if SHADOWS_SCREEN ShadowAtten = SampleScreenSpaceShadowmap(shadowCoord); #else ShadowSamplingData shadowSamplingData = GetMainLightShadowSamplingData(); half shadowStrength = GetMainLightShadowStrength(); ShadowAtten = SampleShadowmap(shadowCoord, TEXTURE2D_ARGS(_MainLightShadowmapTexture, sampler_MainLightShadowmapTexture), shadowSamplingData, shadowStrength, false); #endif #endif } 20 (will share later)
  • 21. File mode 21 Link to an HLSL file external to the graph — Catch syntax errors — Syntax highlighting
  • 22. Lambert lighting with shadows 22
  • 23. Lambert lighting with shadows 23
  • 24. Put the Custom Function node in a Sub-Graph 24 #unitytips
  • 25. Lambert lighting with shadows 25 0 0 0 to 1 -1 to 0
  • 28. Calculating a simple specular 1 2 3 4 5 6 7 8 9 10 11 12 void DirectSpecular_half(half3 Specular, half Smoothness, half3 Direction, half3 Color, half3 WorldNormal, half3 WorldView, out half3 Out) { #if SHADERGRAPH_PREVIEW Out = 0; #else Smoothness = exp2(10 * Smoothness + 1); WorldNormal = normalize(WorldNormal); WorldView = SafeNormalize(WorldView); Out = LightingSpecular(Color, Direction, WorldNormal, WorldView, half4(Specular, 0), Smoothness); #endif } 28 (will share the code later)
  • 29. Calculating a simple specular 1 2 3 4 5 6 7 8 9 half3 LightingSpecular(half3 lightColor, half3 lightDir, half3 normal, half3 viewDir, half4 specular, half smoothness) { float3 halfVec = SafeNormalize(float3(lightDir) + float3(viewDir)); half NdotH = saturate(dot(normal, halfVec)); half modifier = pow(NdotH, smoothness); half3 specularReflection = specular.rgb * modifier; return lightColor * specularReflection; } 29 Code from: com.unity.render-pipelines.universal@version/ShaderLibrary/Lighting.hlsl
  • 30. The position of a specular effect 30
  • 31. 31
  • 32. 32
  • 33. 33
  • 34. Lambert model with Specular 34
  • 35. 35 There’s more… — Get information from Ambient lighting or GI — Get information on additional lights in the scene (point lights) There’s a blog post out about this: bit.ly/CustomLightingSG
  • 36. Step 2: Achieving the cartoon look 36
  • 38. 38 1: Lighting and shadows — Hard transition from light to shadows – Only 2 colours (1 transition) — Never really reaching full white or full black
  • 39. 39 Step operation .25 .5 .750 1 Original
  • 40. 40 Gradient (or “ramp”) shading 0 1 0 1 Original Ramp shaded
  • 41. The hard transition on light and shadows 41 Occlusion texture Not the final value Light info from Custom Function node
  • 42. Using gradients 42 Fixed mode Blend used as Fixed #unitytips
  • 45. 2: The painted specular 45 — Specular appears as if painted with a brush — Other materials (e.g. hair) have a more classic “blob” specular
  • 47. Using them as specular 47
  • 48. 3: The backlight halo 48 Gives an appreciation of the colour of the model even when it should be actually dark — When point of view is completely opposite the light source, contours are lit
  • 51. 4: The side shine 51 Helps to read the silhouette — Bright thin light on the side of the model, where light is coming from — Often the brightest spot, reaching almost white
  • 54. The graph 54 Base lighting Ramp lighting Final result Dabs specular Backlight rim Side shine
  • 55. The final graph Base lighting Ramp lighting Dabs specular Backlight rim Side shine Final result
  • 56. 56
  • 57. Want to learn more? Tutorial: Introduction to Shader Graph Tutorial: Shader Graph: Color Node Project: Make a Flag Move with Shader Graph Subscribe now for a 3-month free trial at unity.com/learn-premium with code: UNITECPH19 *Learn Premium is included in Unity Plus and Pro licenses. Just sign in with your Unity ID.
  • 58. Questions? bit.ly/BotWToonShader Ciro Continisio - Lead Evangelist, EMEA @CiroContns #UniteCopenhagen #Unity3d