其他分享
首页 > 其他分享> > 第2篇 让你的应用更炫彩 - unity 中的照明 - Unity 3D ShaderLab开发实践

第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]是存取光源数据最可靠的第一首选手段。

image

上述代码中,只使用了第一个光源进行着色。

chapter 7 Forward渲染路径

ForwardAdd这个Pass和ForwardBase需要一起使用,否则会被忽略。

image

Unity Shader入门教程(十) :多光源的光照处理以及光照衰减_程序猴子sy的博客-CSDN博客_unity 多光源

简单理解:一个unity shader通常会定义一个Base Pass(可以是多个)。一个BasePass(Tags { "LightMode" = "ForwardBase" })仅会执行一次(定义多个basePass除外),而一个Additional Pass(Tags { "LightMode" = "ForwardAdd" })会根据影响该物体其他逐像素光源的数目多次调用,即每个逐像素光源会执行一次Additional Pass。

image

chapter 8 lightmapping

参见:unity灯光Lightmapping、LightProbes - MrZivChu - 博客园 (cnblogs.com)

其他资料

Unity3D -- 光照常用函数和变量(Shader学习之二)_阳仔博客-CSDN博客

标签:LightMode,渲染,光源,unity,更炫彩,Unity,Pass,光照
来源: https://www.cnblogs.com/grass-and-moon/p/15271915.html