URP渲染管线与Buildin管线的区别

URP介绍

        UPR前身是LWRP,区别是URP集成了postProcessing。主要是为移动平台设计。UPR相当于SBP(可编程渲染管线)里的一个模板。Universal RP包里可以看到源码。

区别:

        1.光照: 

        传统Bulidin渲染管线的光照是多Pass渲染,每多一个动态光就多一个Pass,这个光影响的物体就要多画一遍。eg:所有物体都受动态光影响,则m个动态光,n个物体,绘制次数m*n。

        URP实现了单Pass渲染光照。也就是上面的例子,最后绘制只需要n次。但URP中限制了灯光的数量。目前是支持1詹平行光,每个对象最多只能接受4个动态光。(版本不同可能不一样)

URP渲染管线与Buildin管线的区别_第1张图片

          2.URP的shader可以使用 Shader Graph,HLSL编写的shader,CG语言因为已经停止更新很多年,所以使用的代码库是HLSL。也支持CG,比如:Bulidin管线中使用CG的Unlit Shader可以延用。Bulidin管线中的其他shader都不能支持。

        3.批处理:

        之前Unity支持:动态批处理,静态批处理,GPU Instancing。SRP在原来的基础上还支持SRP Batcher。SRP Batcher不会减少Draw Call数量,但可以减少Set Pass Call的数量。并减少绘制命令的开销。

        减少绘制命令的开销的原因:CPU不需要每帧都给GPU发送渲染数据,如果数据没有变化,就保存在GPU内存中,每个绘制仅调用包含一个指向正确内存位置的偏移量。(值传递变成了引用传递?!)

        减少Set Pass Call的原因:传统批处理的前提是同一材质,SRP的判断依据是Shader 变种是否变化,Shader变种相同,即使是不同材质都不会被打断。

底层原理:

SRP会在主存中将模型的坐标信息、材质信息、主光源信息阴影参数和非主光源阴影参数分别保存到不同的CBUFFER(常量缓冲区)中,只有CBUFFER发生变化才会重新提交到GPU并保存。

CBUFFER在Shader中就是包含各种声明的Property。所以支持CG的UnlitShader是不能使用SRP

Batcher的。只有使用了名为UnityPerMaterial的CBUFFER才能使用SRP Batcher。

URP渲染管线与Buildin管线的区别_第2张图片

URP渲染管线与Buildin管线的区别_第3张图片

 官网上的对比:

 

 URP渲染管线与Buildin管线的区别_第4张图片

你可能感兴趣的:(Unity,Shader,shader,unity3d,unity)