SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
Custom SRP and
graphics workflows
...in "Battle Planet - Judgement Day"
Hi!
3
— Henning Steinbock
— Graphics Programmer at Threaks
— Indie Studio based in Hamburg
— 10 people working on games
Outline
4
— what is a Scriptable Render Pipeline
— what is Battle Planet - Judgement Day
– rendering challenges in the game
— SRP in Battle Planet - Judgement Day
– lighting
– shadow rendering
— more graphics workflows
What is a scriptable render
pipeline?
5
Scriptable Render Pipeline
6
— API in Unity
— allows to define how Unity renders the game
— works in scene view, preview windows etc
— Unity provides out of the box implementations
– Universal Render Pipeline
– High Definition Render Pipeline
– but you can also make your own
Minimal SRP implementation
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
public class MinimalSRP : RenderPipeline{
protected override void Render(ScriptableRenderContext context, Camera[] cameras)
{
foreach (var camera in cameras)
{
//Setup the basics, rendertarget, view rect etc.
context.SetupCameraProperties(camera);
//create a command buffer that clears the screen
var commandBuffer = new CommandBuffer();
commandBuffer.ClearRenderTarget(true, true, Color.blue);
//execute the command buffer in the render context
context.ExecuteCommandBuffer(commandBuffer);
}
//submit everything to the rendering context
context.Submit();
}
}
7
Minimal SRP implementation
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
public class MinimalSRP : RenderPipeline{
protected override void Render(ScriptableRenderContext context, Camera[] cameras)
{
foreach (var camera in cameras)
{
//Setup the basics, rendertarget, view rect etc.
context.SetupCameraProperties(camera);
//create a command buffer that clears the screen
var commandBuffer = new CommandBuffer();
commandBuffer.ClearRenderTarget(true, true, Color.blue);
//execute the command buffer in the render context
context.ExecuteCommandBuffer(commandBuffer);
}
//submit everything to the rendering context
context.Submit();
}
}
8
Minimal SRP implementation
9
Minimal SRP implementation
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
//Cull the scene
if (!camera.TryGetCullingParameters(out ScriptableCullingParameters cullParameters))
continue;
var cullingResults = context.Cull(ref cullParameters);
//Setup settings
var unlitShaderTag = new ShaderTagId("SRPDefaultUnlit");
var renderSettings = new DrawingSettings(unlitShaderTag, new SortingSettings(camera));
var filter = new FilteringSettings(RenderQueueRange.opaque){layerMask = camera.cullingMask};
//Execute rendering
context.DrawRenderers(cullingResults, ref renderSettings, ref filter);
10
Minimal SRP implementation
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
//Cull the scene
if (!camera.TryGetCullingParameters(out ScriptableCullingParameters cullParameters))
continue;
var cullingResults = context.Cull(ref cullParameters);
//Setup settings
var unlitShaderTag = new ShaderTagId("SRPDefaultUnlit");
var renderSettings = new DrawingSettings(unlitShaderTag, new SortingSettings(camera));
var filter = new FilteringSettings(RenderQueueRange.opaque){layerMask = camera.cullingMask};
//Execute rendering
context.DrawRenderers(cullingResults, ref renderSettings, ref filter);
11
unlit shaders are rendered
Minimal SRP implementation
12
frame debugger only shows four rendering
events
ShaderTagIDs
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
//In C#
var waterShaderTag = new ShaderTagId("Water");
var renderSettings = new DrawingSettings(unlitShaderTag, new SortingSettings(camera));
//In shader
Tags {
"LightMode" = "Water"
}
13
SRP concept
14
— SRP API is mainly scheduling tasks for the render thread
– it depends heavily on using Command Buffers
— there’s no way to write “per-renderer” code
– handling the actual renderers is done internally
— possibility to cull most unnecessary workload
— ShaderTagIds
Battle Planet -
Judgement Day
— top down shooter
— rogue lite
— procedural, destroyable levels
— micro planet playfield
— published by Wild River
— PC, Switch and PS4
15
- early concept art
- Lighting is very indirect
Visual challenges
17
- shadows on a sphere look odd
- half of the planet is dark
- no lightmaps/Enlighten
Lighting
… that looks good on the sphere
Matcap effect
19
— originally used for fake reflections
— turned out to be useful for
everything
— very performant
— very simple
Howto Matcap
- calculate world space normal
- transfer it into view space
- map it from 0-1
- use it to sample a texture
- profit!
20
- the matcap is a texture that looks like
your light situation on a sphere
Howto Matcap
21
- applied to a more complex mesh
- looks pretty good for very cheap
- not just for reflections
Howto Matcap
22
- makes the planet look
exactly like we want it
to look
- hand drawn planet
matcaps
- base ground texture
is grayscale
- same with all
environment
Coloring the planet
23
Replace with image
- using the view space normal of
environment objects
Lighting the environment
24
- we get this very odd look
Lighting the
environment
I would a point in the environment to
be tinted exactly like the planet
surface underneath
25
Lighting the
environment
- the normals on the sphere are
very smooth
- normals on environment go all
over the place
26
Lighting the
environment
- normal and vertex position on a
sphere are identical
- so let’s use the world position
instead of the normal
27
if we use world position instead of screen
space normal
Lighting the environment
28
...it looks neat all of a sudden
- alpha channel defines how much
non-environment objects should be
tinted
Lighting characters
29
- local lights should also affect objects in
the middle of the screen
Cool, what next?
30
Passes
- render pipelines normally uses
multiple render passes
- the scene is rendered multiple
times
- result of an early pass can be
used in the next one
The light pre-pass
- Copy base matcap into a render
texture
- (potentially tint it)
- render additional lights
- lights use a custom ShaderTagID
- setup global shader variables for
the main pass
32
The light pre-pass
- Copy base matcap into a render
texture
- (potentially tint it)
- render additional lights
- lights use a custom ShaderTagID
- setup global shader variables for
the main pass
33
34
Light shader
Using ShaderTagIDs, any mesh,
particle system or even skinned mesh
can be used to display light, the shader
just needs to have the right ID
Again, very cheap
35
Bonus: Lit particles
All particles in the game can be
affected by lighting if it makes sense
for that particle
Shadow Pass
- only Enemies and Players are
rendered in the shadow pass
- filtered by a layer mask of the
FilterSettings object
- rendered with a replacement
shader
- shader transfers vertices into
“matcap space”
- shader outputs height over surface
- shader library takes care of
applying shadows
36
Shadow Pass
- there’s also (very slight) blob
shadows under enemies
37
Shader Libraries
- create universal include files for
things like lighting
- use them in all your shaders
- modifications in the include files
will be applied to all shaders
- also consider shader templates
for node based editors
38
Shader Libraries
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
39
sampler2D _Fogmap;
float4x4 _MatCapProjection;
//called in vertex shader
float3 GetMatcapUV(float4 vertexPosition){
float3 wPos = mul(UNITY_MATRIX_M, vertexPosition).xyz;
float3 normalizedWpos = normalize(wPos);
float3 matcapUV = mul(_MatCapProjection, float4(normalizedWpos, 0)).xyz;
matcapUV += 0.5;
matcapUV = length(wPos);
return matcapUV;
}
//called in fragmengt shader
float3 GetLightColor(float3 mapcapUV, float environmentLightAmount) {
fixed4 textureColor = tex2D(_Fogmap, mapcapUV);
float centerAmount = textureColor.a;
fixed3 fogmapColor = lerp(textureColor.rgb * 2, 1, centerAmount * (1 - environmentLightAmount));
//todo apply shadow
return fogmapColor;
}
Post processing stack
- Unity package for post effects
- compatible with all platforms
- used by URP and HDRP
- easy to implement into custom
SRPs
40
Post processing stack
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
41
//after rendering the scene
PostProcessLayer layer = camera.GetComponent<PostProcessLayer>();
PostProcessRenderContext postProcess = new PostProcessRenderContext();
postProcess.Reset();
postProcess.camera = camera;
postProcess.source = RenderPipeline.BackBufferID;
postProcess.sourceFormat = RenderTextureFormat.ARGB32;
postProcess.destination = Target;
postProcess.command = cmd;
postProcess.flip = true;
layer.Render(postProcess );
context.ExecuteCommandBuffer(cmd);
Post processing stack
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
42
//after rendering the scene
PostProcessLayer layer = camera.GetComponent<PostProcessLayer>();
PostProcessRenderContext postProcess = new PostProcessRenderContext();
postProcess.Reset();
postProcess.camera = camera;
postProcess.source = RenderPipeline.BackBufferID;
postProcess.sourceFormat = RenderTextureFormat.ARGB32;
postProcess.destination = Target;
postProcess.command = cmd;
postProcess.flip = true;
layer.Render(postProcess );
context.ExecuteCommandBuffer(cmd);
To sum up:
43
— A custom SRP allowed us to do a lot give BP - JD it’s unique
look
— SRP allowed us to do a lot of things proper that we might
have been able to hack in anyways
– we customized stuff before SRP
– always came with annoying side effects
— SRP is abstracted enough that you will get performance
benefits from Unity updates
To sum up:
44
— SRP allows you to gain performance by stripping the
unnecessary
— very subjektiv: starting with something different than the
default pipeline makes it easier to look unique
Custom SRP vs modifying URP
45
— URP can be customized
– you can add custom render passes to it as well
– might be an option
— URP is a very nice reference for designing your own SRP
Other graphics workflows and
shader stuff
… specifically SRP related
The game is completely CPU
bound
… thanks to the SRP
Stateless decal
systems
- there’s a lot of blood in this game
- blood should stay as long as
possible
- from a fill rate-perspective, we
can have a lot of decals on the
planet
- but particle systems come with
an overhead
48
Stateless decal
systems
- a stateless decal system is static
on the CPU and moves in the
shader
- fixed amount of decals
- only one draw call
- only one UnityEngine.Graphics
call per frame
49
Stateless decal systems
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
struct DecalComputeStruct
{
float4x4 Transformation;
float4 UV;
float SpawnTime;
float LifeTime;
float FadeInDuration;
float FadeOutDuration;
float ScaleInDuration;
float ForwardClipInDuration;
float HeightmapEffect;
float SelfIllumination;
};
StructuredBuffer<DecalComputeStruct> _DecalData;
//inside vertex shader
DecalComputeStruct decal = _DecalData[instanceID];
float time = _Time.y - currentDecal.SpawnTime
v.vertex.xyz *= saturate(time / decal.ScaleInDuration);
50
public struct DecalComputeStruct
{
public Matrix4x4 DecalTransformation;
public Vector4 UV;
public float SpawnTime;
public float Lifetime;
public float FadeInDuration;
public float FadeOutDuration;
public float ScaleInDuration;
public float ForwardClipInDuration;
public float HeightmapEffect;
public float SelfIllumination;
}
var buffer = new ComputeBuffer(1024, 176);
decalMaterial.SetBuffer(“_DecalData”, buffer);
Graphics.DrawMeshInstancedIndirect(…)
*actual implementation was different
51
1draw call
Stateless projectiles
- each projectile is a stateless
decal
- projectiles also get rendered in
the light pass
52
All segment meshes get
baked into one mesh during
level generation
Destroyed parts get scaled
to zero via vertex shader
The segments get baked
into one mesh.
A Destroyable Part ID is
baked into a uv channel
Level segments are
prefabs, consisting of
colliders and renderers.
Individual parts of the
segment can be marked as
destroyable
Level Geometry Batching
53
Replace with image
…and bend it around the
path
Can be done in a compute
shader, hugely optimizes
performance
Trace a path of the
environment around the
crater
Take a mesh of a straight
crater edge mesh…
Craters are marked in
vertex color of the surface
mesh
Crater System
54
Replace with image
Thank you for listening
55
Questions?
56
— steinbock@threaks.com
— @henningboat
— check out the game at the Made with Unity booth

Mais conteúdo relacionado

Mais procurados

전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011devCAT Studio, NEXON
 
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみようUnity Technologies Japan K.K.
 
Unreal Open Day 2017 Optimize in Mobile UI
Unreal Open Day 2017 Optimize in Mobile UIUnreal Open Day 2017 Optimize in Mobile UI
Unreal Open Day 2017 Optimize in Mobile UIEpic Games China
 
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術Unity Technologies Japan K.K.
 
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!UnityTechnologiesJapan002
 
Screen Space Reflections in The Surge
Screen Space Reflections in The SurgeScreen Space Reflections in The Surge
Screen Space Reflections in The SurgeMichele Giacalone
 
LOD and Culling Systems That Scale - Unite LA
LOD and Culling Systems That Scale  - Unite LALOD and Culling Systems That Scale  - Unite LA
LOD and Culling Systems That Scale - Unite LAUnity Technologies
 
Implementing imgui
Implementing imguiImplementing imgui
Implementing imguiHenryRose9
 
Killzone Shadow Fall Demo Postmortem
Killzone Shadow Fall Demo PostmortemKillzone Shadow Fall Demo Postmortem
Killzone Shadow Fall Demo PostmortemGuerrilla
 
UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1Hong-Gi Joe
 
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~Unite2017Tokyo
 
「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方Kouji Ohno
 
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Five Rendering Ideas from Battlefield 3 & Need For Speed: The RunFive Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Five Rendering Ideas from Battlefield 3 & Need For Speed: The RunElectronic Arts / DICE
 
Technical Deep Dive into the New Prefab System
Technical Deep Dive into the New Prefab SystemTechnical Deep Dive into the New Prefab System
Technical Deep Dive into the New Prefab SystemUnity Technologies
 
Stable SSAO in Battlefield 3 with Selective Temporal Filtering
Stable SSAO in Battlefield 3 with Selective Temporal FilteringStable SSAO in Battlefield 3 with Selective Temporal Filtering
Stable SSAO in Battlefield 3 with Selective Temporal FilteringElectronic Arts / DICE
 
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계Imseong Kang
 
Parallel Futures of a Game Engine
Parallel Futures of a Game EngineParallel Futures of a Game Engine
Parallel Futures of a Game EngineJohan Andersson
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解したtorisoup
 
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...
Penner   pre-integrated skin rendering (siggraph 2011 advances in real-time r...Penner   pre-integrated skin rendering (siggraph 2011 advances in real-time r...
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...JP Lee
 

Mais procurados (20)

전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011
 
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
 
Unreal Open Day 2017 Optimize in Mobile UI
Unreal Open Day 2017 Optimize in Mobile UIUnreal Open Day 2017 Optimize in Mobile UI
Unreal Open Day 2017 Optimize in Mobile UI
 
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
 
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
 
Screen Space Reflections in The Surge
Screen Space Reflections in The SurgeScreen Space Reflections in The Surge
Screen Space Reflections in The Surge
 
LOD and Culling Systems That Scale - Unite LA
LOD and Culling Systems That Scale  - Unite LALOD and Culling Systems That Scale  - Unite LA
LOD and Culling Systems That Scale - Unite LA
 
The Unique Lighting of Mirror's Edge
The Unique Lighting of Mirror's EdgeThe Unique Lighting of Mirror's Edge
The Unique Lighting of Mirror's Edge
 
Implementing imgui
Implementing imguiImplementing imgui
Implementing imgui
 
Killzone Shadow Fall Demo Postmortem
Killzone Shadow Fall Demo PostmortemKillzone Shadow Fall Demo Postmortem
Killzone Shadow Fall Demo Postmortem
 
UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1
 
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~
【Unite 2017 Tokyo】Unityを使ったNintendo Switch™ローンチタイトル制作~スーパーボンバーマンRの事例~
 
「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方
 
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Five Rendering Ideas from Battlefield 3 & Need For Speed: The RunFive Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
 
Technical Deep Dive into the New Prefab System
Technical Deep Dive into the New Prefab SystemTechnical Deep Dive into the New Prefab System
Technical Deep Dive into the New Prefab System
 
Stable SSAO in Battlefield 3 with Selective Temporal Filtering
Stable SSAO in Battlefield 3 with Selective Temporal FilteringStable SSAO in Battlefield 3 with Selective Temporal Filtering
Stable SSAO in Battlefield 3 with Selective Temporal Filtering
 
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
 
Parallel Futures of a Game Engine
Parallel Futures of a Game EngineParallel Futures of a Game Engine
Parallel Futures of a Game Engine
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解した
 
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...
Penner   pre-integrated skin rendering (siggraph 2011 advances in real-time r...Penner   pre-integrated skin rendering (siggraph 2011 advances in real-time r...
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...
 

Semelhante a Custom SRP and graphics workflows - Unite Copenhagen 2019

Implementing a modern, RenderMan compliant, REYES renderer
Implementing a modern, RenderMan compliant, REYES rendererImplementing a modern, RenderMan compliant, REYES renderer
Implementing a modern, RenderMan compliant, REYES rendererDavide Pasca
 
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeks
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeksBeginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeks
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeksJinTaek Seo
 
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019Unity Technologies
 
Enhance your world with ARKit. UA Mobile 2017.
Enhance your world with ARKit. UA Mobile 2017.Enhance your world with ARKit. UA Mobile 2017.
Enhance your world with ARKit. UA Mobile 2017.UA Mobile
 
Foveated Ray Tracing for VR on Multiple GPUs
Foveated Ray Tracing for VR on Multiple GPUsFoveated Ray Tracing for VR on Multiple GPUs
Foveated Ray Tracing for VR on Multiple GPUsTakahiro Harada
 
Java Keeps Throttling Up!
Java Keeps Throttling Up!Java Keeps Throttling Up!
Java Keeps Throttling Up!José Paumard
 
Vc4c development of opencl compiler for videocore4
Vc4c  development of opencl compiler for videocore4Vc4c  development of opencl compiler for videocore4
Vc4c development of opencl compiler for videocore4nomaddo
 
Point cloud mesh-investigation_report-lihang
Point cloud mesh-investigation_report-lihangPoint cloud mesh-investigation_report-lihang
Point cloud mesh-investigation_report-lihangLihang Li
 
Advanced Game Development with the Mobile 3D Graphics API
Advanced Game Development with the Mobile 3D Graphics APIAdvanced Game Development with the Mobile 3D Graphics API
Advanced Game Development with the Mobile 3D Graphics APITomi Aarnio
 
Creating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector GraphicsCreating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector GraphicsDavid Keener
 
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio [Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio Owen Wu
 
Advanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering PipelineAdvanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering PipelineNarann29
 
Android RenderScript
Android RenderScriptAndroid RenderScript
Android RenderScriptJungsoo Nam
 
Minko stage3d workshop_20130525
Minko stage3d workshop_20130525Minko stage3d workshop_20130525
Minko stage3d workshop_20130525Minko3D
 

Semelhante a Custom SRP and graphics workflows - Unite Copenhagen 2019 (20)

Implementing a modern, RenderMan compliant, REYES renderer
Implementing a modern, RenderMan compliant, REYES rendererImplementing a modern, RenderMan compliant, REYES renderer
Implementing a modern, RenderMan compliant, REYES renderer
 
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeks
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeksBeginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeks
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeks
 
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019
 
Games 3 dl4-example
Games 3 dl4-exampleGames 3 dl4-example
Games 3 dl4-example
 
Enhance your world with ARKit. UA Mobile 2017.
Enhance your world with ARKit. UA Mobile 2017.Enhance your world with ARKit. UA Mobile 2017.
Enhance your world with ARKit. UA Mobile 2017.
 
Foveated Ray Tracing for VR on Multiple GPUs
Foveated Ray Tracing for VR on Multiple GPUsFoveated Ray Tracing for VR on Multiple GPUs
Foveated Ray Tracing for VR on Multiple GPUs
 
Java Keeps Throttling Up!
Java Keeps Throttling Up!Java Keeps Throttling Up!
Java Keeps Throttling Up!
 
Chapter-3.pdf
Chapter-3.pdfChapter-3.pdf
Chapter-3.pdf
 
OpenGL for 2015
OpenGL for 2015OpenGL for 2015
OpenGL for 2015
 
Vc4c development of opencl compiler for videocore4
Vc4c  development of opencl compiler for videocore4Vc4c  development of opencl compiler for videocore4
Vc4c development of opencl compiler for videocore4
 
Point cloud mesh-investigation_report-lihang
Point cloud mesh-investigation_report-lihangPoint cloud mesh-investigation_report-lihang
Point cloud mesh-investigation_report-lihang
 
Gcn performance ftw by stephan hodes
Gcn performance ftw by stephan hodesGcn performance ftw by stephan hodes
Gcn performance ftw by stephan hodes
 
Webrender 1.0
Webrender 1.0Webrender 1.0
Webrender 1.0
 
NvFX GTC 2013
NvFX GTC 2013NvFX GTC 2013
NvFX GTC 2013
 
Advanced Game Development with the Mobile 3D Graphics API
Advanced Game Development with the Mobile 3D Graphics APIAdvanced Game Development with the Mobile 3D Graphics API
Advanced Game Development with the Mobile 3D Graphics API
 
Creating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector GraphicsCreating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector Graphics
 
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio [Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
 
Advanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering PipelineAdvanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering Pipeline
 
Android RenderScript
Android RenderScriptAndroid RenderScript
Android RenderScript
 
Minko stage3d workshop_20130525
Minko stage3d workshop_20130525Minko stage3d workshop_20130525
Minko stage3d workshop_20130525
 

Mais de Unity Technologies

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

Mais de Unity Technologies (20)

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

Último

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

Último (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

Custom SRP and graphics workflows - Unite Copenhagen 2019

  • 1.
  • 2. Custom SRP and graphics workflows ...in "Battle Planet - Judgement Day"
  • 3. Hi! 3 — Henning Steinbock — Graphics Programmer at Threaks — Indie Studio based in Hamburg — 10 people working on games
  • 4. Outline 4 — what is a Scriptable Render Pipeline — what is Battle Planet - Judgement Day – rendering challenges in the game — SRP in Battle Planet - Judgement Day – lighting – shadow rendering — more graphics workflows
  • 5. What is a scriptable render pipeline? 5
  • 6. Scriptable Render Pipeline 6 — API in Unity — allows to define how Unity renders the game — works in scene view, preview windows etc — Unity provides out of the box implementations – Universal Render Pipeline – High Definition Render Pipeline – but you can also make your own
  • 7. Minimal SRP implementation 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 public class MinimalSRP : RenderPipeline{ protected override void Render(ScriptableRenderContext context, Camera[] cameras) { foreach (var camera in cameras) { //Setup the basics, rendertarget, view rect etc. context.SetupCameraProperties(camera); //create a command buffer that clears the screen var commandBuffer = new CommandBuffer(); commandBuffer.ClearRenderTarget(true, true, Color.blue); //execute the command buffer in the render context context.ExecuteCommandBuffer(commandBuffer); } //submit everything to the rendering context context.Submit(); } } 7
  • 8. Minimal SRP implementation 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 public class MinimalSRP : RenderPipeline{ protected override void Render(ScriptableRenderContext context, Camera[] cameras) { foreach (var camera in cameras) { //Setup the basics, rendertarget, view rect etc. context.SetupCameraProperties(camera); //create a command buffer that clears the screen var commandBuffer = new CommandBuffer(); commandBuffer.ClearRenderTarget(true, true, Color.blue); //execute the command buffer in the render context context.ExecuteCommandBuffer(commandBuffer); } //submit everything to the rendering context context.Submit(); } } 8
  • 10. Minimal SRP implementation 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 //Cull the scene if (!camera.TryGetCullingParameters(out ScriptableCullingParameters cullParameters)) continue; var cullingResults = context.Cull(ref cullParameters); //Setup settings var unlitShaderTag = new ShaderTagId("SRPDefaultUnlit"); var renderSettings = new DrawingSettings(unlitShaderTag, new SortingSettings(camera)); var filter = new FilteringSettings(RenderQueueRange.opaque){layerMask = camera.cullingMask}; //Execute rendering context.DrawRenderers(cullingResults, ref renderSettings, ref filter); 10
  • 11. Minimal SRP implementation 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 //Cull the scene if (!camera.TryGetCullingParameters(out ScriptableCullingParameters cullParameters)) continue; var cullingResults = context.Cull(ref cullParameters); //Setup settings var unlitShaderTag = new ShaderTagId("SRPDefaultUnlit"); var renderSettings = new DrawingSettings(unlitShaderTag, new SortingSettings(camera)); var filter = new FilteringSettings(RenderQueueRange.opaque){layerMask = camera.cullingMask}; //Execute rendering context.DrawRenderers(cullingResults, ref renderSettings, ref filter); 11
  • 12. unlit shaders are rendered Minimal SRP implementation 12 frame debugger only shows four rendering events
  • 13. ShaderTagIDs 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 //In C# var waterShaderTag = new ShaderTagId("Water"); var renderSettings = new DrawingSettings(unlitShaderTag, new SortingSettings(camera)); //In shader Tags { "LightMode" = "Water" } 13
  • 14. SRP concept 14 — SRP API is mainly scheduling tasks for the render thread – it depends heavily on using Command Buffers — there’s no way to write “per-renderer” code – handling the actual renderers is done internally — possibility to cull most unnecessary workload — ShaderTagIds
  • 15. Battle Planet - Judgement Day — top down shooter — rogue lite — procedural, destroyable levels — micro planet playfield — published by Wild River — PC, Switch and PS4 15
  • 16.
  • 17. - early concept art - Lighting is very indirect Visual challenges 17 - shadows on a sphere look odd - half of the planet is dark - no lightmaps/Enlighten
  • 18. Lighting … that looks good on the sphere
  • 19. Matcap effect 19 — originally used for fake reflections — turned out to be useful for everything — very performant — very simple
  • 20. Howto Matcap - calculate world space normal - transfer it into view space - map it from 0-1 - use it to sample a texture - profit! 20
  • 21. - the matcap is a texture that looks like your light situation on a sphere Howto Matcap 21 - applied to a more complex mesh - looks pretty good for very cheap
  • 22. - not just for reflections Howto Matcap 22
  • 23. - makes the planet look exactly like we want it to look - hand drawn planet matcaps - base ground texture is grayscale - same with all environment Coloring the planet 23 Replace with image
  • 24. - using the view space normal of environment objects Lighting the environment 24 - we get this very odd look
  • 25. Lighting the environment I would a point in the environment to be tinted exactly like the planet surface underneath 25
  • 26. Lighting the environment - the normals on the sphere are very smooth - normals on environment go all over the place 26
  • 27. Lighting the environment - normal and vertex position on a sphere are identical - so let’s use the world position instead of the normal 27
  • 28. if we use world position instead of screen space normal Lighting the environment 28 ...it looks neat all of a sudden
  • 29. - alpha channel defines how much non-environment objects should be tinted Lighting characters 29 - local lights should also affect objects in the middle of the screen
  • 31. Passes - render pipelines normally uses multiple render passes - the scene is rendered multiple times - result of an early pass can be used in the next one
  • 32. The light pre-pass - Copy base matcap into a render texture - (potentially tint it) - render additional lights - lights use a custom ShaderTagID - setup global shader variables for the main pass 32
  • 33. The light pre-pass - Copy base matcap into a render texture - (potentially tint it) - render additional lights - lights use a custom ShaderTagID - setup global shader variables for the main pass 33
  • 34. 34 Light shader Using ShaderTagIDs, any mesh, particle system or even skinned mesh can be used to display light, the shader just needs to have the right ID Again, very cheap
  • 35. 35 Bonus: Lit particles All particles in the game can be affected by lighting if it makes sense for that particle
  • 36. Shadow Pass - only Enemies and Players are rendered in the shadow pass - filtered by a layer mask of the FilterSettings object - rendered with a replacement shader - shader transfers vertices into “matcap space” - shader outputs height over surface - shader library takes care of applying shadows 36
  • 37. Shadow Pass - there’s also (very slight) blob shadows under enemies 37
  • 38. Shader Libraries - create universal include files for things like lighting - use them in all your shaders - modifications in the include files will be applied to all shaders - also consider shader templates for node based editors 38
  • 39. Shader Libraries 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 39 sampler2D _Fogmap; float4x4 _MatCapProjection; //called in vertex shader float3 GetMatcapUV(float4 vertexPosition){ float3 wPos = mul(UNITY_MATRIX_M, vertexPosition).xyz; float3 normalizedWpos = normalize(wPos); float3 matcapUV = mul(_MatCapProjection, float4(normalizedWpos, 0)).xyz; matcapUV += 0.5; matcapUV = length(wPos); return matcapUV; } //called in fragmengt shader float3 GetLightColor(float3 mapcapUV, float environmentLightAmount) { fixed4 textureColor = tex2D(_Fogmap, mapcapUV); float centerAmount = textureColor.a; fixed3 fogmapColor = lerp(textureColor.rgb * 2, 1, centerAmount * (1 - environmentLightAmount)); //todo apply shadow return fogmapColor; }
  • 40. Post processing stack - Unity package for post effects - compatible with all platforms - used by URP and HDRP - easy to implement into custom SRPs 40
  • 41. Post processing stack 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 41 //after rendering the scene PostProcessLayer layer = camera.GetComponent<PostProcessLayer>(); PostProcessRenderContext postProcess = new PostProcessRenderContext(); postProcess.Reset(); postProcess.camera = camera; postProcess.source = RenderPipeline.BackBufferID; postProcess.sourceFormat = RenderTextureFormat.ARGB32; postProcess.destination = Target; postProcess.command = cmd; postProcess.flip = true; layer.Render(postProcess ); context.ExecuteCommandBuffer(cmd);
  • 42. Post processing stack 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 42 //after rendering the scene PostProcessLayer layer = camera.GetComponent<PostProcessLayer>(); PostProcessRenderContext postProcess = new PostProcessRenderContext(); postProcess.Reset(); postProcess.camera = camera; postProcess.source = RenderPipeline.BackBufferID; postProcess.sourceFormat = RenderTextureFormat.ARGB32; postProcess.destination = Target; postProcess.command = cmd; postProcess.flip = true; layer.Render(postProcess ); context.ExecuteCommandBuffer(cmd);
  • 43. To sum up: 43 — A custom SRP allowed us to do a lot give BP - JD it’s unique look — SRP allowed us to do a lot of things proper that we might have been able to hack in anyways – we customized stuff before SRP – always came with annoying side effects — SRP is abstracted enough that you will get performance benefits from Unity updates
  • 44. To sum up: 44 — SRP allows you to gain performance by stripping the unnecessary — very subjektiv: starting with something different than the default pipeline makes it easier to look unique
  • 45. Custom SRP vs modifying URP 45 — URP can be customized – you can add custom render passes to it as well – might be an option — URP is a very nice reference for designing your own SRP
  • 46. Other graphics workflows and shader stuff … specifically SRP related
  • 47. The game is completely CPU bound … thanks to the SRP
  • 48. Stateless decal systems - there’s a lot of blood in this game - blood should stay as long as possible - from a fill rate-perspective, we can have a lot of decals on the planet - but particle systems come with an overhead 48
  • 49. Stateless decal systems - a stateless decal system is static on the CPU and moves in the shader - fixed amount of decals - only one draw call - only one UnityEngine.Graphics call per frame 49
  • 50. Stateless decal systems 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 struct DecalComputeStruct { float4x4 Transformation; float4 UV; float SpawnTime; float LifeTime; float FadeInDuration; float FadeOutDuration; float ScaleInDuration; float ForwardClipInDuration; float HeightmapEffect; float SelfIllumination; }; StructuredBuffer<DecalComputeStruct> _DecalData; //inside vertex shader DecalComputeStruct decal = _DecalData[instanceID]; float time = _Time.y - currentDecal.SpawnTime v.vertex.xyz *= saturate(time / decal.ScaleInDuration); 50 public struct DecalComputeStruct { public Matrix4x4 DecalTransformation; public Vector4 UV; public float SpawnTime; public float Lifetime; public float FadeInDuration; public float FadeOutDuration; public float ScaleInDuration; public float ForwardClipInDuration; public float HeightmapEffect; public float SelfIllumination; } var buffer = new ComputeBuffer(1024, 176); decalMaterial.SetBuffer(“_DecalData”, buffer); Graphics.DrawMeshInstancedIndirect(…) *actual implementation was different
  • 52. Stateless projectiles - each projectile is a stateless decal - projectiles also get rendered in the light pass 52
  • 53. All segment meshes get baked into one mesh during level generation Destroyed parts get scaled to zero via vertex shader The segments get baked into one mesh. A Destroyable Part ID is baked into a uv channel Level segments are prefabs, consisting of colliders and renderers. Individual parts of the segment can be marked as destroyable Level Geometry Batching 53 Replace with image
  • 54. …and bend it around the path Can be done in a compute shader, hugely optimizes performance Trace a path of the environment around the crater Take a mesh of a straight crater edge mesh… Craters are marked in vertex color of the surface mesh Crater System 54 Replace with image
  • 55. Thank you for listening 55
  • 56. Questions? 56 — steinbock@threaks.com — @henningboat — check out the game at the Made with Unity booth