Unity 从Built in升级到Universal Render PipeLine

因为可能会经常发生这种事,就在这里加强一下记忆好了,,,

过程

image-20250327172721877

之后就是将shader升级成URP

image-20250327173255949

遇到的问题

当你使用Universal Render Pipeline之后,你可能会有一些shader会无法正常使用,比如在下面的场景,我模拟屏幕环境光遮蔽的时候scene和game的看到的场景不一样

image-20250327214224254

分析原因:

我这两个物体使用了屏幕环境光遮蔽SSAO技术,需要在渲染所有的透明物体之前获取深度纹理,因为这两个物体实际上渲染队列是Transparent,unity默认在渲染队列当中Transparent是在Opaque之后进行渲染的,我们用这个特性,可以获取到在摄像机视角下这个物体背面遮挡(如果存在的话)的深度值,并且使用特殊的方式将非线性深度值转变成真实的线性深度距离,来获取到这个被遮挡物体表面的位置信息,之后我们使用裁剪空间的 w 分量来获取透明物体距离摄像机的距离

所以核心在于,我们需要在渲染所有的透明物体之前获取深度纹理,而Universal Render PipeLine在给摄像机进行渲染的时候,是在渲染所有透明物体之后获取深度纹理的

image-20250327214848258

重新设置之后我们可以看到game显示正常了

image-20250327215038988

但是如果我们需要在Otho正交模式下使用这个效果,就会发生bug了

透视投影的深度缓冲区通常存储 非线性深度值,远处深度变化很小,近处变化很大。

正交投影的深度缓冲是 线性的,物体距离的远近不会影响深度差值的计算方式。