Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)

ppt:   https://www.slideshare.net/unity3d/best-practices-for-shader-graph

With Shader Graph in Unity 2018, creating powerful and beautiful shaders has never been easier. But with great power, comes great responsibility. This intermediate-level session will explore best practices for rendering performance and shader creation workflow. We'll cover what happens under the hood, share tips to avoid common pitfalls, and highlight what to look for as Shader Graph readies for prime-time release in the near future. 

Charles Sanglimsuwan - Unity Technologies

         "使用Unity 2018中的Shader Graph,创建功能强大且美观的着色器从未如此简单。 但是,有了强大的力量,责任就大了。 此中级会话将探索渲染性能和着色器创建工作流的最佳实践。 我们将介绍在幕后发生的事情,分享提示以避免常见的陷阱,并突出显示在不久的将来Shader Graph准备黄金时段发布的内容。

Charles Sanglimsuwan  -  Unity Technologies"

视频: 

https://www.bilibili.com/video/av56852704?from=search&seid=17853366928719766269

https://www.youtube.com/watch?v=Y6WfgFI5H90

今天要介绍的内容

Motivations初衷

Demo

Shader Graph的工作原理

Choosing the right Master Node选择正确的主节点

Optimizations优化

Workflow工作流程

What’s next下一步是什么

 

初衷:

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第1张图片

      可以解放程序,Shader可以大众化了。     

 

历史简介

早期工作于2017年5月开始

在Unity 2018.1中发布的预览包

自那以来有23次更新

 

 

Shader Graph的工作原理:

可编程脚本的渲染管道Scriptable Render Pipeline

Shader Graph 需要SRP

高清渲染管道(HDRP)

轻量级渲染管道(LWRP)

VR轻量级渲染管道(VR LWRP)

 

 

Shader Generation Process着色器生成过程

每个Render Pipeline都有一个着色器后端shader backend

着色器后端包括支持的Master Nodes的 subshader generators

并非每个RP都支持所有主节点Master Nodes

 

Subshader Generators

每个主节点Master Node都有一个每个管道模板per-pipeline template

模板有很多注入点injection points

遍历您的Shader Graph,注入点将替换为节点值node values

最终结果是着色器(用ShaderLab编写)

 

 

Shader Anatomy着色器解剖

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第2张图片   

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第3张图片

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第4张图片

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第5张图片

 

          Shader Graph  和 跟生成的Code的对应关系: 

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第6张图片

 

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第7张图片

 

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第8张图片

 

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第9张图片

             代码注入

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第10张图片

 

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第11张图片

 

 

 

Choosing the right Master Node选择正确的主节点

        主节点概述

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第12张图片

PBR是最通用的节点   PBR is the most versatile node

仅在适用且必要时使用HD Lit         Use HD Lit only when applicable and necessary

考虑使用Unlit进行粒子效果,UI等        Consider Unlit for particle effects, UI, etc

          现在他们官方建议使用PBR 原型,功能很多。 

 

PBR Master Node

Works with all Render Pipelines适用于所有渲染管道

Good starting point for prototyping原型设计的良好起点

Feature ready for many scenarios功能已准备好用于许多场景,  遮挡,自发光等

 

 

Unlit Master Node

Works with all Render Pipelines适用于所有渲染管道

Very lightweight非常轻巧

Good for effects, vertex modifications适用于效果,顶点修改

可以添加自定义照明:Possible to add custom lighting:

1.创建节点以根据所需的着色模型计算光照(例如,Blinn-Phong)Create nodes to calculate lighting from desired shading model (e.g., Blinn-Phong)

2.将输出颜色连接到颜色端口 Connect output color to the Color port

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第13张图片

 

 

 

HD Lit Master Node

 Compatible only with HDRP仅与HDRP兼容

More features than PBR比PBR更多的功能

Easy to add needless complexity容易增加不必要的复杂性

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第14张图片

 

 

 

Unity Optimizations

Built-in Optimizations内置优化

1. Where ever possible, Shader Graph will not add unused features to output shader尽可能,Shader Graph不会将未使用的功能添加到输出着色器

 Changing the default value will mark the feature active更改默认值将标记功能激活

 Connecting any node will mark the feature active连接任何节点都会将该功能标记为活动状态

2. The shader compiler will compile out no-op features着色器编译器将编译无操作功能

 

Optimization Example: Coat Mask

         如果值为零,则输出ShaderLab代码中不会出现CoatMask代码

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第15张图片

 

Optimization Example: Metallic

       如果Metallic设置为零,那么该着色块将由着色器编译器compiled out

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第16张图片

 

 

Optimization Example: Emission

        如果Emission设置为Black,并在Material中禁用,则该着色块将由着色器编译器compiled out

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第17张图片

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第18张图片

 

 

Draw Call Batching

 GPU instancing is supported in shaders   着色器支持GPU实例化

 Needs to be enabled on the material        需要在材料上启用

 Requires hardware support                     需要硬件支持

 All generated shaders are compatible with the SRP Batcher (2018.3) 所有生成的着色器都与SRP Batcher兼容(2018.3)

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第19张图片

 

 

SRP Batcher

 New batching solution, designed for SRP      专为SRP设计的新batching 解决方案

 Improved rendering performance                  改进了渲染性能

 Works with SkinnedMeshRenderers!                 适用于SkinnedMeshRenderers!

 Requires per-material parameters to be stored in a constant buffer    要求将每个材料参数存储在常量缓冲区中

 

 

Render Faster with the SRP Batcher

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第20张图片

 

 

 

Graph Optimizations

        Profiler Performance  First 

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第21张图片

 

 

Node Decimation

 Eliminate no-op nodes               消除无操作节点

 Bake values back into the textures          将值烘焙回纹理

 Examples: gradients, noise                      示例:渐变,噪音

 Combine nodes when possible                尽可能组合节点

 

Example: Texture Modification

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第22张图片

          这个乘法可以删除, 通过增加 亮度的基础纹理。 每帧的数学运算就可以减少了。 

 

 

Example: Power         光线衰减效果    或者某种类似玻璃的表面

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第23张图片

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第24张图片

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第25张图片

            多个节点  弄成一个节点。 

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第26张图片

 

 

 

Data Formats    数据格式

 Each node has a memory cost        每个节点都有内存成本,   降低Shader内存成本,有助于GPU带宽

 Use smaller data structures when possible    尽可能使用较小的数据结构

 Modifying precision                                修改精度

 Requires code modification               需要修改代码

 

修改精度: 

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第27张图片

 

 

Reduce Math Operations     减少数学运算

 Multiply scalar values before vector values        在向量值之前乘以标量值

 Prefer blending results, instead of branching       首选混合结果,而不是分支

 Research impact of certain math operations    某些数学运算的研究影响

 Prefer constants when possible                        尽可能选择常量

 

 

Example: Reciprocal    Reciprocal

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第28张图片

Fast mode requires Shader Model 5

 

 

Example: Properties

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第29张图片

           内联节点   可以暴露在材质Inspector (属性节点), 带来了很大的方便,  但是要注意转换属性节点消除了着色器编译优化的可能性。          属性很好 对于原型设计,   告别原型阶段,  希望将属性节点转换回内联节点, 这将允许着色器编译器生成更好的优化代码

 

 

Workflow: Manual Optimizations工作流程:手动优化

 Hand-optimizing shaders is a one-way path  手动优化着色器是一种单向路径

 Don’t manually optimize too early  不要过早手动优化

 Copy or view shader code in Master Node menu   在主节点菜单中复制或查看着色器代码

Shader Graph最佳实践 (Best practices for Shader Graph - Unite 2018 洛杉矶)_第30张图片

 

 

Workflow: Faster Iterations工作流程:更快的迭代

 Nodes not connected to Master Node aren’t evaluated未评估未连接到主节点的节点

 Can keep them in view for quick iterations可以将它们保持在视图中以便快速迭代

 Create a Preview node that isn’t attached to the Master Node创建未连接到主节点的预览节点

 Editing these nodes will be much faster编辑这些节点会快得多

 

Workflow Summary工作流程摘要

1. Prototype with PBR Master Node使用PBR主节点的原型

 Move to HD Lit if necessary必要时才移至HD Lit

2. Start optimization开始优化

1. Optimize nodes优化节点

2. Convert properties to inline values将属性转换为内联值

3. Near the end of the project, start hand optimizing shaders在项目结束时,开始优化着色器

 

 

Custom API

 Create your own nodes创建自己的节点

 Examples: specialized noise functions, custom lighting, etc.示例:专门的噪音功能,定制照明等。

 Full documentation available on GitHubGitHub上提供完整的文档

 

 

 

Vertex Modification      顶点修改

 Low-impact on CPU performance         对CPU性能影响很小

 Good for animating foliage, water, or cloth       适用于动画树叶,水或布料

 

 

What’s next

路线图

2019.1

First official, verified release首次正式,经过验证的版本

完全彻底改造Node API

关键错误修复,UX改进

 

 

Available Resources

 Plentiful samples abound:

 Andy Touch

 Keijiro Takahashi

 Video tutorials on YouTube

 Source available on GitHub

 

你可能感兴趣的:(学unity涨知识)