第2篇 让你的应用更炫彩 - unity 中的照明 - Unity 3D ShaderLab开发实践
第2篇 让你的应用更炫彩 - unity 中的照明 - Unity 3D ShaderLab开发实践
chapter 5 第一个被执行的pass
Rendering Path其实指的就是渲染场景中光照的方式。
unity支持三种RenderingPath:VertexLit,Forward,Deffered Lighting,为Pass中使用的LightMode标签有:Vertex,ForwardBase,ForwardAdd,PrepassBase,PrepassFinal等。
VertexLit:基于顶点的光照计算方式,是Forward的子集;
Forward:前向渲染是内置渲染管线中的默认渲染路径。它是一个通用的渲染路径。在每个像素进行光照计算,渲染次数依赖于光源数量;如果光源的RenderMode设置成了Not Important,那么总是per-vertex计算或采用球谐函数(每个vertex上最多有4个点光源,其余采用球谐波函数,TODO??);平行光总是per-pixel,RenderMode为important的光源总是per-pixel;如果上述结果导致灯光少于当前像素灯光计数质量设置,那么会有更多个光源按照亮度递减的顺序,进行per-pixel渲染;
Deffered Lighting:延迟着色是内置渲染管线中光照和阴影保真度最高的渲染路径。并不支持半透物体。不支持正交投影。不支持硬件抗锯齿,如果您的项目有大量实时灯光并且需要高水平的照明保真度,并且您的目标硬件支持延迟着色,那么此渲染路径可能是您项目的不错选择。
可以参见:【原】实时渲染中常用的几种Rendering Path - 桑果 - 博客园 (cnblogs.com),Unity3D光照前置知识——Rendering Paths(渲染路径)及LightMode(光照模式)译解 - oayx - 博客园 (cnblogs.com)
chapter 6 VertexLit渲染路径
顶点照明,就是基于物体的每一个顶点进行光的照明计算,然后根据顶点的光照信息,对面片上的像素光照进行线性插值。即,在顶点着色器中计算颜色,然后片段着色器中的颜色是顶点颜色插值得到的。所以Vertex Lighting的效果和效率与物体的网格密度有关,密度大,效果就贴近实物。Edit/Render Settings命令有相关的参数设置。
unity内置着色器变量见:内置着色器变量 - Unity 手册
在LightMode = Vertex
的pass内,unity_LightPosition[4]
和unity_LightColor[4]
是存取光源数据最可靠的第一首选手段。
上述代码中,只使用了第一个光源进行着色。
chapter 7 Forward渲染路径
ForwardAdd这个Pass和ForwardBase需要一起使用,否则会被忽略。
Unity Shader入门教程(十) :多光源的光照处理以及光照衰减_程序猴子sy的博客-CSDN博客_unity 多光源
简单理解:一个unity shader通常会定义一个Base Pass(可以是多个)。一个BasePass(Tags { "LightMode" = "ForwardBase" }
)仅会执行一次(定义多个basePass除外),而一个Additional Pass(Tags { "LightMode" = "ForwardAdd" }
)会根据影响该物体其他逐像素光源的数目多次调用,即每个逐像素光源会执行一次Additional Pass。
chapter 8 lightmapping
参见:unity灯光Lightmapping、LightProbes - MrZivChu - 博客园 (cnblogs.com)
其他资料
作者: grassofsky
出处: http://www.cnblogs.com/grass-and-moon
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(grass-of-sky@163.com)咨询.