URP渲染管线光照机制剖析

上一节通过剖析URP 摄像机了解摄像机的机制,本节来分析URP的光照的主要机制,并通过与内置的向前渲染管线做对比,来比较它们的与不同。

对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

1: URP渲染管线重新定义了光源

不出意外,UPR渲染管线重新定义了光源组件, 接下来看下相比向前渲染管线摄像机机制的核心变化,如图1.3-1与1.3-2对比:

URP渲染管线光照机制剖析_第1张图片

(图1.3-1) URP平行光组件

URP渲染管线光照机制剖析_第2张图片

(图1.3-2) 普通平行光组件

由上图对比我们发现了UPR 平行光源组件相比向前渲染管线,多了Bias设置,少了Cookie光晕这些。Bias设置的为”Use Pipeline Settings”,我们去Pipeline Settings里面去看下与光相关Bias设置,如图1.3-3:

URP渲染管线光照机制剖析_第3张图片

(图1.3-3) URP平行光组件

先来讲URP光源的几个核心变化:

(1) 采用主光源MainLight+附加光源 Additional Lights模式,代替向前渲染管线里面的Import光源与No Import光源。主光源只能是平行太阳光,Additional Light可以是其它类型的光源。游戏引擎把所有主光源的颜色值叠加好以后,传递给URP的Shader,把所有Additional Lights的光源数据传递给 URP的Shader, URP Shader 获取光源数据,用来做光照计算,来着色, 而向前渲染管线是每个重要光源经过一次pass计算,来叠加到最后得颜色,这样做得有点是可以任意数目的光源与光照计算,缺点是多次绘制性能受影响。相反URP 是一次pass, 处理多个光源, 但是支持的光源的数目不是任意的,当然对于做手机游戏来说这点可以打破,正是打破了这一点,使得很多手机游戏开始用URP了。Additional Light的数目URP做了”Per Object Limit”限制,如图1.3-3

URP渲染管线光照机制剖析_第4张图片

(图1.3-4) URP光源的数目限制

(2) 传统渲染管线,采用是逐顶点光照,还是逐像素光照,都是由Shader的实现来决定,而URP把这个开关放到了光源这边,这样方便我们进行响应的配置与调整。

URP渲染管线光照机制剖析_第5张图片

(图1.3-5) URP光源的逐顶点+逐像素配置

(3) URP 和普通模式向前渲染管线一样,可以支持静态光照与烘培,用法一致。

(4) URP 渲染管线的光照策略,在有限光源数目前提下相比传统的获得更好的性能和更容易配置的选项。

还有一些差别,后续还可以结合URP Shader讲解来进一步体会。

2: URP Shader中如何获取 URP渲染管线中的光源

光照上色的本质就是,渲染Shader拿到光照的数据,根据光照计算,最后决定片元的颜色,上色到屏幕中。URP渲染管线中游戏引擎通过CPU把光源数据传递给GPU,GPU就可以获取到,在URP渲染管线中,Shader库把它封装成了特定的Shader API函数,如下:

URP Shader获取主光源数据:GetMainLight

URP Shader 获取附加光源数据: GetAdditionalLightsCount/ GetAdditionalLight

这里截图了URP PBR Shader中的代码如何获取光源数据,一次性完成光照计算,如图1.3-5:

(图1.3-6) URP Shader一次完成光照计算

今天的分享就到这里,关注我们,下一节继续剖析URP渲染管线的其它核心机制。

你可能感兴趣的:(unity3D,游戏开发,游戏服务器,服务器,游戏引擎,java)