找回密码
 立即注册
查看: 201|回复: 0

Unity URP渲染管线Shader机制剖析

[复制链接]
发表于 2022-8-4 09:26 | 显示全部楼层 |阅读模式
前言

上一节通过剖析URP 光源机制,本节来分析URP的Shader机制,不同的渲染管线渲染处理的基础与策略是不一样的,所以Shader的写法是不同的,在URP渲染管线下不能使用之前的标准向前渲染管线的Shader,当然向前渲染管线也不能使用URP的shader。URP 渲染管线的Shader采用的是HLSL开发,普通标准的Shader是采用Cg来开发。URP Shader实现了游戏开发中常用的一些Shader,并提供源码,方便我们参考学习URP Shader开发。URP渲染管线的Shader源码在Packages/Universal RP/Shaders目录下,如图1.4-1所示:


图1.4-1 URP Shader
URP 渲染管线实现了内置的PBR, Unlit , 地形等游戏开发中常用的Shader。
这里有个游戏开发·交流小组 大家一起来学习交流哦
1: URP Ulit Shader

我们先来分析一下URP 的Unlit Shader的模板,创建一个材质球,选“Universal Render Pipeline/Unlit” Shader模板,在场景中创建一个Cube,把材质球关联到Cube上。如图1.4-2所示:


图1.4-2
Unlit Shader还是采用的Unity经典的ShaderLab语法,还是熟悉的配方熟悉的味道。主要结构依然是Shader{ SubShader { pass{} pass{} }, SubShader {}, FallBack }与标准的Unity Shader开发不同的是 URP Shader内嵌HLSL的代码,标准的是Cg的代码,其它的差不多。


图1.4-3
对于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:


图1.4-4




图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的视频教程中有消息讲解。关注我们,持续给大家分享一些架构师进阶,渲染管线进阶的干货内容。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-6-16 11:00 , Processed in 0.095609 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表