SlideShare a Scribd company logo
1 of 34
Download to read offline
Steel monkeys: Unity3D глазами программиста графики
Words to say 
• Рассмотрим graphics pipeline в Unity3D . 
• Коснемся работы с шейдерами в Unity3D . 
• Поговорим об оптимизации графики. 
• Поговорим о image post processing.
WhoAmI() 
• Программист графики. 
•В разное время работал с Adobe flash -> 
DirectX -> OpenGL -> Unity. 
• Работал с open-source движками: 
Ogre3D, Irrlicht3D, Horde3D, HGE. 
Контрибьютил в Irrlicht3D, Horde3D. 
• На данный момент работаю на 
мобильной разработке в Steel Monkeys 
(Unity 3D).
Graphics pipelines 
• Vertex lit (hardware transform & lighting) 
• Forward (multi-pass forward rendering) 
• Deferred (light footprint deferred shading)
Hardware Transform & Lighting 
• Аппаратная трансформация, 
отсечение и освещение. 
• Texture blending тоже аппаратный. 
• Очень быстрый расчет освещения, 
буквально несколько тактов GPU. 
• Реализуется через программный API. 
• В Unity реализована в виде fixed-function 
шейдеров.
Fixed function shader 
// DirectX9 code 
D3DLIGHT9 light; 
D3DMATERIAL9 material; 
ZeroMemory(&light, sizeof(light)); 
light.Type = D3DLIGHT_POINT; 
light.Diffuse = D3DXCOLOR(0.5, 0.5, 0.5, 0.5); 
light.Position = D3DXVECTOR3(0.0f, 5.0f, 0.0f); 
light.Range = 100.0f; 
light.Attenuation0 = 0.0f; 
light.Attenuation1 = 0.125f; 
light.Attenuation2 = 0.0f; 
d3ddev->SetLight(0, &light); 
d3ddev->LightEnable(0, TRUE); 
ZeroMemory(&material, sizeof(D3DMATERIAL9)); 
material.Diffuse = D3DXCOLOR(1, 1, 1, 1); 
material.Ambient = D3DXCOLOR(1, 1, 1, 1); 
d3ddev->SetMaterial(&material);
Conclusion: Fixed function rendering 
Да, если Нет, если 
• Не требуется попиксельного 
освещения. 
• Вообще не требуется 
динамического освещения, 
и/или взаимодействия с 
лайтмапами. 
• Вы работаете с очень 
старым железом (iphone 4, 
ipad 1). 
• Требуется попиксельное 
освещение, лайтмапы, 
realtime-тени, любые 
шейдерные эффекты. 
• Ваша платформа позволяет 
использовать что угодно 
другое.
Per-pixel forward rendering oveview 
• Per-pixel освещение накладывается во 
фрагментном шейдере. 
• Один Forward Base проход для самого 
яркого Directional источника на сцене. 
• N дополнительных Forward Add 
проходов в аддитивном блендинге 
для N избранных источников света. 
• До четырех per-vertex источников 
света в вершинном шейдере. 
• Легко взаимодействовать с помощью 
surface-шейдеров.
Surface shader 
• SubShader: 
• Forward base 
• OpenGL 
• Base 
• KEYWORD_A 
• KEYWORD_B 
• Vertex program 
• Fragment program 
• Shadow caster 
• Shadow collector 
• DX9 
• WP8 
… 
• Forward add 
• Prepass base 
• Prepass final 
e.g. over 100 vertex/fragment programs
Forward Base (brightest directional light) 
Stats: 
• 2K triangles 
• 4K vertices
Forward Add (x1) 
Stats: 
• 4K triangles 
• 8K vertices 
• 1X Blend “One One”
Forward Add (x2) 
Stats: 
• 6K triangles 
• 12K vertices 
• 2X Blend “One One”
Forward Add (x3) 
Stats: 
• 8K triangles 
• 16K vertices 
• 3X Blend “One One”
Forward Add (x4) 
Stats: 
• 10K triangles 
• 20K vertices 
• 4X Blend “One One”
Forward Add (x5) 
Stats: 
• 12K triangles 
• 24K vertices 
• 5X Blend “One One”
Forward rendering overhead 
Итого имеем: 
• 5X дополнительных циклов вершинной трансформации, 
• 5X операций аддитивного блендинга. 
• 5X дополнительных текстурных операций. 
• 5X дополнительных итераций всего шейдерного кода. 
• 5X overdraw по tris’ам. 
Какой бы то ни было оптимизации в Light-manager’e Unity не 
предусмотрено. 
Давайте ему поможем!
Accessing built-in shader constants 
1. _WorldSpaceLightPos0 – позиция 
первого 
направленного источника. 
2. _LightColor0 – цвет этого источника 
3. unity_4LightPosX0, unity_4LightPosY0, 
unity_4LightPosZ0 – позиции четырех 
источников света, которые считались 
бы per-vertex. 
4. unity_4LightAtten0 – аттенюация этих 
источников света 
5. unity_LightColor – цвет этих источников
Implementing an algorithm 
Get on github: https://github.com/RChehowski/devgamm_expo 
int index = 0; 
while (index < 4) 
{ 
float4 lightPosition = float4( unity_4LightPosX0[index], 
unity_4LightPosY0[index], 
unity_4LightPosZ0[index], 1.0); 
// calculate direction 
float3 vertexToLightSource = lightPosition.xyz - input.posWorld.xyz; 
float3 lightDirection = normalize(vertexToLightSource); 
// find distance and calculate attenuation 
float squaredDistance = dot(vertexToLightSource, vertexToLightSource); 
float attenuation = 1.0 / (1.0 + unity_4LightAtten0[index] * squaredDistance); 
// calculate diffuse intensity 
float3 diffuseReflection = attenuation * unity_LightColor[index].rgb * 
_Color.rgb * max(0.0, dot(input.normalDir, lightDirection)); 
output += diffuseReflection; 
index++; 
}
• 1X per-pixel directional light. 
• 4X per-pixel point light. 
• All in one pass! 
Result
Conclusion: Forward rendering 
Да, если Нет, если 
• Количество динамических 
источников света и 
освещенных объектов мало. 
• Требуется поддержка 
динамических теней от 
directional лайтов. 
• Требуется поддержка 
лайтмапов из коробки. 
• Количество динамических 
источников велико. 
• Есть возможность обойтись 
Hardware Transform & 
Lighting. 
• Требуется доступ к буферу 
глубины или view-нормалей.
Deferred rendering overview 
• Освещение рассчитывается как пост- 
процессинг, только для видимых 
фрагментов. 
• Все освещение на сцене рендерится 
попиксельно. 
• Легко получить depth и view normals 
для собственных манипуляций при 
пост-процессинге. 
• Производительность сильно зависит 
от пропускной способности памяти 
видеокарты и способа реализации.
Forward approach
Deferred approach
Thousands of dynamic per-pixel lights 
FORWARD 
• 20 objects * 50 
lights = 1000 DIP 
Deferred 
• 20 objects + 50 
lights + 3 post pass 
= 73 DIP 
Feel the difference!
Prepass: View normals & depth 
Renders the scene into the RenderTexture
Lighting calculation: Rendering light footprints 
Uses the RT from the previous pass
Final pass 
Unfortunately, renders the scene one more time :(
Conclusion: Deferred rendering 
Да, если Нет, если 
• Количество динамических 
источников очень велико. 
• Используется хотя бы 
один пост-эффект, 
работающих с глубиной 
сцены (SSAO, DOF, soft 
particles, point light shafts) 
• Количество динамических 
источников невелико. 
• Слабое железо или железо 
без поддержки рендеринга в 
текстуру. 
• Много transparent объектов 
(alpha-test не считается).
Post processing 
Попиксельная обработка 
отрендеренного изображения для 
получения необходимого эффекта: 
• SSAO 
• Bloom 
• FXAA 
• Gamma correction 
• DOF 
• Outlines 
• … and many, many more!
Post processing 
Сообщения: 
• OnRenderImage() – вызывается после того, как все объекты на сцене 
были отрисованы в рендертекстуру. 
• OnPreRender() – вызывается перед тем, как начнется рендеринг. 
• OnPostRender() – вызывается после того как отрендерятся все объекты в 
текущем кадре. 
• OnWillRenderObject() – вызывается перед рендерингом каждого 
видимого объекта. 
Методы: 
• Graphics.DrawMesh() – сабмитит mesh на отрисовку. 
• Graphics.DrawMeshNow() – рисует mesh в текущем кадре. 
• Graphics.Blit() – копирует данные из рендертекстуры в рендертекстуру
Post process example
High price of the Depth 
• Camera.depthTextureMode = 
DepthTextureMode.Depth; 
• UNITY_TRANSFER_DEPTH(), 
• UNITY_OUTPUT_DEPTH() 
• В forward-пайплайне стоит одного 
дополнительного прохода рендера 
• В deferred-пайплайне просто 
берется из G-буфера.
Conclusion 
• К сожалению, формат данной презентации не 
позволяет уделить каждой реализации конвейера 
достаточного количество внимания. 
• В погоне за универсальностью, рендер Unity 
нередко жертвует производительностью. 
• Использование каждого из пайплайнов создает 
свои проблемы, но их можно устранить в рамках 
каждой конкретной задачи.
Спасибо за внимание! 
Special thanks to: <Dmitry Minsky> http://halfbus.co/ 
r.chehowsky@gmail.com 
inangwish

More Related Content

Viewers also liked

Practical guide to optimization in Unity
Practical guide to optimization in UnityPractical guide to optimization in Unity
Practical guide to optimization in UnityDevGAMM Conference
 
Shtanchaev_SPEKTR
Shtanchaev_SPEKTRShtanchaev_SPEKTR
Shtanchaev_SPEKTRshtanchaev
 
UP200 dental 3d scanner with dental CAD
UP200 dental 3d scanner with dental CADUP200 dental 3d scanner with dental CAD
UP200 dental 3d scanner with dental CADDragon Cai
 
Pelican Mapping - FOSS4G 2011
Pelican Mapping - FOSS4G 2011Pelican Mapping - FOSS4G 2011
Pelican Mapping - FOSS4G 2011Glenn Waldron
 
GLSL Shading with OpenSceneGraph
GLSL Shading with OpenSceneGraphGLSL Shading with OpenSceneGraph
GLSL Shading with OpenSceneGraphMike Weiblen
 
Special Photo Effects
Special Photo EffectsSpecial Photo Effects
Special Photo EffectsMarco Belzoni
 
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel”
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel” Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel”
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel” Shane Tilton
 
Radiosity algorithm
Radiosity algorithmRadiosity algorithm
Radiosity algorithmHung Sun
 
Human Action Recognition Based on Spacio-temporal features
Human Action Recognition Based on Spacio-temporal featuresHuman Action Recognition Based on Spacio-temporal features
Human Action Recognition Based on Spacio-temporal featuresnikhilus85
 
Woden 2: Developing a modern 3D graphics engine in Smalltalk
Woden 2: Developing a modern 3D graphics engine in SmalltalkWoden 2: Developing a modern 3D graphics engine in Smalltalk
Woden 2: Developing a modern 3D graphics engine in SmalltalkESUG
 
Typography on the Web
Typography on the WebTypography on the Web
Typography on the WebSara Cannon
 
Quadtree In Game
Quadtree In GameQuadtree In Game
Quadtree In GameDương Nyl
 
What is 3 d modeling unit 66
What is 3 d modeling   unit 66What is 3 d modeling   unit 66
What is 3 d modeling unit 66Richard Marshall
 
Orthographic projection
Orthographic projectionOrthographic projection
Orthographic projectionlaura_gerold
 
Building a DIY 3D Scanner
Building a DIY 3D ScannerBuilding a DIY 3D Scanner
Building a DIY 3D ScannerMatthewShotton
 
Chapter 11 biotechnology by mohanbio
Chapter 11 biotechnology by mohanbioChapter 11 biotechnology by mohanbio
Chapter 11 biotechnology by mohanbiomohan bio
 

Viewers also liked (20)

Practical guide to optimization in Unity
Practical guide to optimization in UnityPractical guide to optimization in Unity
Practical guide to optimization in Unity
 
Shtanchaev_SPEKTR
Shtanchaev_SPEKTRShtanchaev_SPEKTR
Shtanchaev_SPEKTR
 
UP200 dental 3d scanner with dental CAD
UP200 dental 3d scanner with dental CADUP200 dental 3d scanner with dental CAD
UP200 dental 3d scanner with dental CAD
 
Pelican Mapping - FOSS4G 2011
Pelican Mapping - FOSS4G 2011Pelican Mapping - FOSS4G 2011
Pelican Mapping - FOSS4G 2011
 
GLSL Shading with OpenSceneGraph
GLSL Shading with OpenSceneGraphGLSL Shading with OpenSceneGraph
GLSL Shading with OpenSceneGraph
 
Special Photo Effects
Special Photo EffectsSpecial Photo Effects
Special Photo Effects
 
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel”
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel” Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel”
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel”
 
Radiosity algorithm
Radiosity algorithmRadiosity algorithm
Radiosity algorithm
 
Human Action Recognition Based on Spacio-temporal features
Human Action Recognition Based on Spacio-temporal featuresHuman Action Recognition Based on Spacio-temporal features
Human Action Recognition Based on Spacio-temporal features
 
Woden 2: Developing a modern 3D graphics engine in Smalltalk
Woden 2: Developing a modern 3D graphics engine in SmalltalkWoden 2: Developing a modern 3D graphics engine in Smalltalk
Woden 2: Developing a modern 3D graphics engine in Smalltalk
 
Shells
ShellsShells
Shells
 
Typography on the Web
Typography on the WebTypography on the Web
Typography on the Web
 
Quadtree In Game
Quadtree In GameQuadtree In Game
Quadtree In Game
 
What is 3 d modeling unit 66
What is 3 d modeling   unit 66What is 3 d modeling   unit 66
What is 3 d modeling unit 66
 
Orthographic projection
Orthographic projectionOrthographic projection
Orthographic projection
 
Building a DIY 3D Scanner
Building a DIY 3D ScannerBuilding a DIY 3D Scanner
Building a DIY 3D Scanner
 
Chapter 11 biotechnology by mohanbio
Chapter 11 biotechnology by mohanbioChapter 11 biotechnology by mohanbio
Chapter 11 biotechnology by mohanbio
 
3D internet
3D  internet3D  internet
3D internet
 
3D scanner using kinect
3D scanner using kinect3D scanner using kinect
3D scanner using kinect
 
3D Laser Scanning
3D Laser Scanning 3D Laser Scanning
3D Laser Scanning
 

Similar to Steel monkeys: Unity3D глазами программиста графики

Interactive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3DInteractive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3DDevGAMM Conference
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorDevGAMM Conference
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
Shader magic: Breakdown of popular visual effects for games
Shader magic: Breakdown of popular visual effects for gamesShader magic: Breakdown of popular visual effects for games
Shader magic: Breakdown of popular visual effects for gamesDevGAMM Conference
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1Eduard Antsupov
 
Xe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновXe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновЕкатерина Макарова
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
 
Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++corehard_by
 
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИССуперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИСYandex
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняAlexander Granin
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Sergey Platonov
 
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019corehard_by
 
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Ontico
 
Artisto App, Highload 2016
Artisto App, Highload 2016Artisto App, Highload 2016
Artisto App, Highload 2016Eduard Tyantov
 
DirectX12 Graphics and Performance
DirectX12 Graphics and PerformanceDirectX12 Graphics and Performance
DirectX12 Graphics and PerformanceDevGAMM Conference
 

Similar to Steel monkeys: Unity3D глазами программиста графики (20)

Interactive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3DInteractive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3D
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Shader magic: Breakdown of popular visual effects for games
Shader magic: Breakdown of popular visual effects for gamesShader magic: Breakdown of popular visual effects for games
Shader magic: Breakdown of popular visual effects for games
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
JavaFX 2.0 overview
JavaFX 2.0 overviewJavaFX 2.0 overview
JavaFX 2.0 overview
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1
 
Xe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновXe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леонов
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++
 
Dsl for c++
Dsl for c++Dsl for c++
Dsl for c++
 
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИССуперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
 
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
 
Artisto App, Highload 2016
Artisto App, Highload 2016Artisto App, Highload 2016
Artisto App, Highload 2016
 
DirectX12 Graphics and Performance
DirectX12 Graphics and PerformanceDirectX12 Graphics and Performance
DirectX12 Graphics and Performance
 

More from DevGAMM Conference

The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...DevGAMM Conference
 
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...DevGAMM Conference
 
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...DevGAMM Conference
 
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...DevGAMM Conference
 
AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)DevGAMM Conference
 
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...DevGAMM Conference
 
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...DevGAMM Conference
 
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...DevGAMM Conference
 
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...DevGAMM Conference
 
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)DevGAMM Conference
 
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)DevGAMM Conference
 
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...DevGAMM Conference
 
How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...DevGAMM Conference
 
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)DevGAMM Conference
 
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...DevGAMM Conference
 
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...DevGAMM Conference
 
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...DevGAMM Conference
 
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...DevGAMM Conference
 
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...DevGAMM Conference
 
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...DevGAMM Conference
 

More from DevGAMM Conference (20)

The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...
 
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
 
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
 
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
 
AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)
 
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
 
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
 
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
 
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
 
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
 
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
 
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
 
How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...
 
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
 
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
 
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
 
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
 
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
 
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
 
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
 

Steel monkeys: Unity3D глазами программиста графики

  • 2. Words to say • Рассмотрим graphics pipeline в Unity3D . • Коснемся работы с шейдерами в Unity3D . • Поговорим об оптимизации графики. • Поговорим о image post processing.
  • 3. WhoAmI() • Программист графики. •В разное время работал с Adobe flash -> DirectX -> OpenGL -> Unity. • Работал с open-source движками: Ogre3D, Irrlicht3D, Horde3D, HGE. Контрибьютил в Irrlicht3D, Horde3D. • На данный момент работаю на мобильной разработке в Steel Monkeys (Unity 3D).
  • 4. Graphics pipelines • Vertex lit (hardware transform & lighting) • Forward (multi-pass forward rendering) • Deferred (light footprint deferred shading)
  • 5. Hardware Transform & Lighting • Аппаратная трансформация, отсечение и освещение. • Texture blending тоже аппаратный. • Очень быстрый расчет освещения, буквально несколько тактов GPU. • Реализуется через программный API. • В Unity реализована в виде fixed-function шейдеров.
  • 6. Fixed function shader // DirectX9 code D3DLIGHT9 light; D3DMATERIAL9 material; ZeroMemory(&light, sizeof(light)); light.Type = D3DLIGHT_POINT; light.Diffuse = D3DXCOLOR(0.5, 0.5, 0.5, 0.5); light.Position = D3DXVECTOR3(0.0f, 5.0f, 0.0f); light.Range = 100.0f; light.Attenuation0 = 0.0f; light.Attenuation1 = 0.125f; light.Attenuation2 = 0.0f; d3ddev->SetLight(0, &light); d3ddev->LightEnable(0, TRUE); ZeroMemory(&material, sizeof(D3DMATERIAL9)); material.Diffuse = D3DXCOLOR(1, 1, 1, 1); material.Ambient = D3DXCOLOR(1, 1, 1, 1); d3ddev->SetMaterial(&material);
  • 7. Conclusion: Fixed function rendering Да, если Нет, если • Не требуется попиксельного освещения. • Вообще не требуется динамического освещения, и/или взаимодействия с лайтмапами. • Вы работаете с очень старым железом (iphone 4, ipad 1). • Требуется попиксельное освещение, лайтмапы, realtime-тени, любые шейдерные эффекты. • Ваша платформа позволяет использовать что угодно другое.
  • 8. Per-pixel forward rendering oveview • Per-pixel освещение накладывается во фрагментном шейдере. • Один Forward Base проход для самого яркого Directional источника на сцене. • N дополнительных Forward Add проходов в аддитивном блендинге для N избранных источников света. • До четырех per-vertex источников света в вершинном шейдере. • Легко взаимодействовать с помощью surface-шейдеров.
  • 9. Surface shader • SubShader: • Forward base • OpenGL • Base • KEYWORD_A • KEYWORD_B • Vertex program • Fragment program • Shadow caster • Shadow collector • DX9 • WP8 … • Forward add • Prepass base • Prepass final e.g. over 100 vertex/fragment programs
  • 10. Forward Base (brightest directional light) Stats: • 2K triangles • 4K vertices
  • 11. Forward Add (x1) Stats: • 4K triangles • 8K vertices • 1X Blend “One One”
  • 12. Forward Add (x2) Stats: • 6K triangles • 12K vertices • 2X Blend “One One”
  • 13. Forward Add (x3) Stats: • 8K triangles • 16K vertices • 3X Blend “One One”
  • 14. Forward Add (x4) Stats: • 10K triangles • 20K vertices • 4X Blend “One One”
  • 15. Forward Add (x5) Stats: • 12K triangles • 24K vertices • 5X Blend “One One”
  • 16. Forward rendering overhead Итого имеем: • 5X дополнительных циклов вершинной трансформации, • 5X операций аддитивного блендинга. • 5X дополнительных текстурных операций. • 5X дополнительных итераций всего шейдерного кода. • 5X overdraw по tris’ам. Какой бы то ни было оптимизации в Light-manager’e Unity не предусмотрено. Давайте ему поможем!
  • 17. Accessing built-in shader constants 1. _WorldSpaceLightPos0 – позиция первого направленного источника. 2. _LightColor0 – цвет этого источника 3. unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0 – позиции четырех источников света, которые считались бы per-vertex. 4. unity_4LightAtten0 – аттенюация этих источников света 5. unity_LightColor – цвет этих источников
  • 18. Implementing an algorithm Get on github: https://github.com/RChehowski/devgamm_expo int index = 0; while (index < 4) { float4 lightPosition = float4( unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index], 1.0); // calculate direction float3 vertexToLightSource = lightPosition.xyz - input.posWorld.xyz; float3 lightDirection = normalize(vertexToLightSource); // find distance and calculate attenuation float squaredDistance = dot(vertexToLightSource, vertexToLightSource); float attenuation = 1.0 / (1.0 + unity_4LightAtten0[index] * squaredDistance); // calculate diffuse intensity float3 diffuseReflection = attenuation * unity_LightColor[index].rgb * _Color.rgb * max(0.0, dot(input.normalDir, lightDirection)); output += diffuseReflection; index++; }
  • 19. • 1X per-pixel directional light. • 4X per-pixel point light. • All in one pass! Result
  • 20. Conclusion: Forward rendering Да, если Нет, если • Количество динамических источников света и освещенных объектов мало. • Требуется поддержка динамических теней от directional лайтов. • Требуется поддержка лайтмапов из коробки. • Количество динамических источников велико. • Есть возможность обойтись Hardware Transform & Lighting. • Требуется доступ к буферу глубины или view-нормалей.
  • 21. Deferred rendering overview • Освещение рассчитывается как пост- процессинг, только для видимых фрагментов. • Все освещение на сцене рендерится попиксельно. • Легко получить depth и view normals для собственных манипуляций при пост-процессинге. • Производительность сильно зависит от пропускной способности памяти видеокарты и способа реализации.
  • 24. Thousands of dynamic per-pixel lights FORWARD • 20 objects * 50 lights = 1000 DIP Deferred • 20 objects + 50 lights + 3 post pass = 73 DIP Feel the difference!
  • 25. Prepass: View normals & depth Renders the scene into the RenderTexture
  • 26. Lighting calculation: Rendering light footprints Uses the RT from the previous pass
  • 27. Final pass Unfortunately, renders the scene one more time :(
  • 28. Conclusion: Deferred rendering Да, если Нет, если • Количество динамических источников очень велико. • Используется хотя бы один пост-эффект, работающих с глубиной сцены (SSAO, DOF, soft particles, point light shafts) • Количество динамических источников невелико. • Слабое железо или железо без поддержки рендеринга в текстуру. • Много transparent объектов (alpha-test не считается).
  • 29. Post processing Попиксельная обработка отрендеренного изображения для получения необходимого эффекта: • SSAO • Bloom • FXAA • Gamma correction • DOF • Outlines • … and many, many more!
  • 30. Post processing Сообщения: • OnRenderImage() – вызывается после того, как все объекты на сцене были отрисованы в рендертекстуру. • OnPreRender() – вызывается перед тем, как начнется рендеринг. • OnPostRender() – вызывается после того как отрендерятся все объекты в текущем кадре. • OnWillRenderObject() – вызывается перед рендерингом каждого видимого объекта. Методы: • Graphics.DrawMesh() – сабмитит mesh на отрисовку. • Graphics.DrawMeshNow() – рисует mesh в текущем кадре. • Graphics.Blit() – копирует данные из рендертекстуры в рендертекстуру
  • 32. High price of the Depth • Camera.depthTextureMode = DepthTextureMode.Depth; • UNITY_TRANSFER_DEPTH(), • UNITY_OUTPUT_DEPTH() • В forward-пайплайне стоит одного дополнительного прохода рендера • В deferred-пайплайне просто берется из G-буфера.
  • 33. Conclusion • К сожалению, формат данной презентации не позволяет уделить каждой реализации конвейера достаточного количество внимания. • В погоне за универсальностью, рендер Unity нередко жертвует производительностью. • Использование каждого из пайплайнов создает свои проблемы, но их можно устранить в рамках каждой конкретной задачи.
  • 34. Спасибо за внимание! Special thanks to: <Dmitry Minsky> http://halfbus.co/ r.chehowsky@gmail.com inangwish

Editor's Notes

  1. В Unity реализована в форме fixed-function шейдеров. – что отчасти удобно, так как позволяет не лезть в код и иметь метаданные прямо в шейдере. Помните technique в dx11? Это оно.
  2. В Unity реализована в форме fixed-function шейдеров. – что отчасти удобно, так как позволяет не лезть в код и иметь метаданные прямо в шейдере. Помните technique в dx11? Это оно.
  3. Использование пост-процессинга (RToText) не является причиной, потому что его все равно можно прикрутить. Вопрос целесообразно ли это?
  4. Методом сферических гармоник рендерятся также лайтпробы N дополнительных Forward Add проходов в аддитивном блендинге для N избранных источников света COMMENT (per-pixel) где N – «Pixel Light Count» в Quality settings. До четырех per-vertex источников света COMMENT (рендерятся в первом проходе). Все остальные источники света рендерятся методом сферических гармоник COMMENT (также в первом проходе).
  5. Эти слайды проматываются за 5-10 секунд
  6. Эти слайды проматываются за 5-10 секунд
  7. Эти слайды проматываются за 5-10 секунд
  8. Эти слайды проматываются за 5-10 секунд
  9. Эти слайды проматываются за 5-10 секунд
  10. Эти слайды проматываются за 5-10 секунд
  11. Плюс такого подхода – остается много операций АЛУ для пользовательского кода.
  12. Отделить геометрическую сложность сцены от процесса расчета освещения. Получить возможность использовать сколько угодно динамических попиксельных источников освещения. Можно осуществлять разными способами – с футпринтами или без. Для каждого источника света рендерится футпринт (сфера, гекс или фрустум)
  13. Отделить геометрическую сложность сцены от процесса расчета освещения. Получить возможность использовать сколько угодно динамических попиксельных источников освещения. Можно осуществлять разными способами – с футпринтами или без. Для каждого источника света рендерится футпринт (сфера, гекс или фрустум)
  14. Отделить геометрическую сложность сцены от процесса расчета освещения. Получить возможность использовать сколько угодно динамических попиксельных источников освещения. Можно осуществлять разными способами – с футпринтами или без. Для каждого источника света рендерится футпринт (сфера, гекс или фрустум)
  15. Отделить геометрическую сложность сцены от процесса расчета освещения. Получить возможность использовать сколько угодно динамических попиксельных источников освещения. Можно осуществлять разными способами – с футпринтами или без. Для каждого источника света рендерится футпринт (сфера, гекс или фрустум)
  16. Перефигачить картинку более явно указать лайты
  17. Вызывается каждый кадр, олицетворяет перенос изображения из рендертекстуры во фреймбуффер. Нужна для image processing’a. В реальности – рисует full-screen quad. Заглушка Blit(source, dest) не помогает, нужно отключать скрипт. Представляет из себя per-pixel обработку картинки, которая записывалась в рендертекстуру, в итоге то что получилось по-любому должно сблититься на экран, поэтому если вы используете онРендерИмэдж, вы должны сделать блит дроМешНау() для рисования аутлайнов Graphics.DrawMesh() – сабмитит меш на отрисовку. В Update() Graphics.DrawMeshNow() – рисует меш в текущем кадре, в OnPostRender()
  18. Вызывается каждый кадр, олицетворяет перенос изображения из рендертекстуры во фреймбуффер. Нужна для image processing’a. В реальности – рисует full-screen quad. Заглушка Blit(source, dest) не помогает, нужно отключать скрипт. Представляет из себя per-pixel обработку картинки, которая записывалась в рендертекстуру, в итоге то что получилось по-любому должно сблититься на экран, поэтому если вы используете онРендерИмэдж, вы должны сделать блит дроМешНау() для рисования аутлайнов Graphics.DrawMesh() – сабмитит меш на отрисовку. В Update() Graphics.DrawMeshNow() – рисует меш в текущем кадре, в OnPostRender()
  19. Вызывается каждый кадр, олицетворяет перенос изображения из рендертекстуры во фреймбуффер. Нужна для image processing’a. В реальности – рисует full-screen quad. Заглушка Blit(source, dest) не помогает, нужно отключать скрипт. Представляет из себя per-pixel обработку картинки, которая записывалась в рендертекстуру, в итоге то что получилось по-любому должно сблититься на экран, поэтому если вы используете онРендерИмэдж, вы должны сделать блит дроМешНау() для рисования аутлайнов Graphics.DrawMesh() – сабмитит меш на отрисовку. В Update() Graphics.DrawMeshNow() – рисует меш в текущем кадре, в OnPostRender()
  20. В Unity реализована в форме fixed-function шейдеров. – что отчасти удобно, так как позволяет не лезть в код и иметь метаданные прямо в шейдере. Помните technique в dx11? Это оно.