Unity URP 渲染管线实战:URP渲染管线Shader机制剖析
前言
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!
如图1.4-1所示:
URP 渲染管线实现了内置的PBR, Unlit , 地形等游戏开发中常用的Shader。
1: URP Ulit Shader
如图1.4-2所示:
Unlit Shader还是采用的Unity经典的ShaderLab语法,还是熟悉的配方熟悉的味道。主要结构依然是Shader{ SubShader { pass{} pass{} }, SubShader {}, FallBack }与标准的Unity Shader开发不同的是 URP Shader内嵌HLSL的代码,标准的是Cg的代码,其它的差不多。
对于Unlit Shader有两个SubShader,通过”ShaderModel”的版本来进行区分 (我这边的版本是4.5与2.0)。每个SubShader有3个Pass, Unlit Pass, Depth Only Pass, Meta Pass
2: URP PBR Shader 如何处理光照
分析完URP的Unlit Shader后,接下来分析PBR Shader, PBR Shader基于物理的光照,支持金属度与粗超度美术工作流,反射与光泽度工作流,这些参数和标准PBR Shader一样,来看下URP的PBR Shader。如图1.4-4:
相比标准的PBR Shader而言,他整理的更清晰和规范,参数的意义都和标准的PBR一样。和标准PBR Shader不同的是,它把两种美术工作流放一起了。Workflow Mode来设置。接下来看下PBR Shader的结构,打开Lit.shader, 仍然也是ShaderLab语法内嵌HLSL的Shader编程语言,结构如下,如图1.4-5所示:
与Unlit一样Lit也是根据ShaderModel版本来选择SubShader。Lit 每一个SubShader里面有7个pass, 作用如下:
URP 渲染管线内部实现了(向前+延时)渲染管线,每次绘制的时候,来走不同的Pass,从这里看出来,和标准渲染管线不同,所有的光照都在一个pass里面计算完成了。接下来看下PBR Shader中的光照计算的代码,打开LitForwardPass.hlsl, 主要PBR逻辑如下:
Step1: 初始化双向分布函数BRDF:
Step2: 计算主光源MainLight 光照;
Step3: 计算处理GI;
Step4: 计算处理附加光源光照;
Step5: 处理自发光;
具体代码大家可以到源码中阅读,本期的URP的干货内容暂时告一段落,更多的URP实战与底层原理,我们会在VIP的视频教程中有消息讲解。关注我们,持续给大家分享一些架构师进阶,渲染管线进阶的干货内容。