Unity 从Built in升级到Universal Render PipeLine
Unity 从Built in升级到Universal Render PipeLine
因为可能会经常发生这种事,就在这里加强一下记忆好了,,,
过程
之后就是将shader升级成URP
遇到的问题
当你使用Universal Render Pipeline之后,你可能会有一些shader会无法正常使用,比如在下面的场景,我模拟屏幕环境光遮蔽的时候scene和game的看到的场景不一样
分析原因:
我这两个物体使用了屏幕环境光遮蔽SSAO技术,需要在渲染所有的透明物体之前获取深度纹理,因为这两个物体实际上渲染队列是Transparent,unity默认在渲染队列当中Transparent是在Opaque之后进行渲染的,我们用这个特性,可以获取到在摄像机视角下这个物体背面遮挡(如果存在的话)的深度值,并且使用特殊的方式将非线性深度值转变成真实的线性深度距离,来获取到这个被遮挡物体表面的位置信息,之后我们使用裁剪空间的 w
分量来获取透明物体距离摄像机的距离
所以核心在于,我们需要在渲染所有的透明物体之前获取深度纹理,而Universal Render PipeLine在给摄像机进行渲染的时候,是在渲染所有透明物体之后获取深度纹理的
重新设置之后我们可以看到game显示正常了
但是如果我们需要在Otho正交模式下使用这个效果,就会发生bug了
透视投影的深度缓冲区通常存储 非线性深度值,远处深度变化很小,近处变化很大。
正交投影的深度缓冲是 线性的,物体距离的远近不会影响深度差值的计算方式。
评论