Unity Scriptable Render Pipeline
в кастомизацию рендеринга с головой
Надеждин Кирилл
SWAG MASHA
Шейдер или Пайплайн
Шейдер или Пайплайн
Шейдер - “сам по себе”
Пайплайн - совокупность разных этапов отрисовки
Шейдер или Пайплайн?
Шейдер или Пайплайн?
Шейдер или Пайплайн?
Шейдер или Пайплайн?
Шейдер или Пайплайн?
Шейдер или Пайплайн
Краткая история рендеринга и шейдеров в Unity
ShaderLab
ShaderLab
Shader "SomeShader" {
[Properties]
__Subshaders__
}
ShaderLab
SubShader {
Pass {
Material {
Diffuse[_Color] // fixed function
}
}
}
ShaderLab
SubShader {
Pass {
Material {
Diffuse[_Color] // fixed function
}
} Pass {...}
}
ShaderLab
SubShader {
Pass {
Material {
Diffuse[_Color] // fixed function
}
} Pass {...} Pass {...}
}
ShaderLab
ShaderLab = Shaders = Pipelines
ShaderLab
Command Buffers
Command Buffers
Command Buffers
Scriptable Render Pipeline
Scriptable Render Pipeline
LWRP + HDRP
LWRP = мобилки
HDRP = “убийца” Unreal Engine
LWRP - “легкий” пайплайн
LWRP
LWRP
LWRP → URP
URP
Scriptable Render Pipeline
“Этюд” с Shadow Fight 3
(почти)
SRP
• ScriptableRenderAsset
• RenderPipeline
• ScriptableRenderContext
SRP
var cmds = new CommandBuffer();
cmds.ClearRenderTarget(true, true, _asset.clearColor);
SRP
SRP
camera.TryGetCullingParameters(out var cullingParameters);
var results = context.Cull(ref cullingParameters);
context.DrawRenderers(cullingResults, ref ds, ref of);
SRP
SRP
context.DrawSkybox(camera);
SRP
SRP
drawSettings.perObjectData = PerObjectData.Lightmaps;
SRP
SRP
cmd.SetRenderTarget(tempRt);
{
...
cmd.DrawRenderer(renderer, solidMat, 0, 0);
…
}
SRP
SRP
cmd.DrawRenderer(renderer, alphaShadowMat, 0, 0);
SRP
SRP
• Детальный, гранулированный контроль
• Единая точка входа - проще для понимания и отладки
• Полное отсутствие ненужного функционала
Вопросы?

Unity Scriptable Render Pipeline - diving into scriptable customization