笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题。
【Unity Shader】(三)------ 光照模型原理及漫反射和高光反射的实现【Unity Shader】(四)------ 纹理之法线纹理、单张纹理和遮罩纹理的实现
【Unity Shader】(五) ------ 透明效果之半透明效果的原理及实现
目录
前言
本文探讨的是场景中存在多种光源时的渲染情况,在本文之前,我曾经介绍过基础的光照模型原理,而本文也会基于这些基础来进行介绍,如果读者对光照模型不太了解,可以翻看我之前的文章【Unity Shader】(三) ------ 光照模型原理及漫反射和高光反射的实现。本文也可以看作是对这一篇章的拓展和补充。由于完整的光照计算内容较多,所以分为两个部分介绍,本文介绍第一部分,下一篇介绍第二部分,最后会给出综合所有光照计算的完整 shader。
一. 渲染路径
渲染路径决定了光照在 shader 中是如何应用的,所以在计算光源时,需要在每个 Pass 块内指定它的渲染路径,Unity 才会为我们提供正确的光照信息。
我们可以在Unity中的摄像机的看到它支持的渲染路径
Forward (前向渲染)
Deferred (延迟渲染)
Legacy Vertex Lit (遗留的顶点照明渲染)
Legacy Deferred (遗留的延迟渲染)
下图是四种渲染路径的部分属性对比,如果想了解更详细的信息,读者可以自行去 Unity 官方文档查看。
需要注意的是:如果当前显卡不支持所设置的渲染路径,则 Unity 会自动使用更低一级的渲染路径。本文注重介绍前两种渲染路径。
我们需要在 shader 的每一个 Pass中指定它所使用的渲染路径,如:
1 Pass{ 2 Tags {"LightMode" = "ForwardBase"} 3 4 //其它代码 5 }