Unity Editor绘制时分辨率减一

        复现环境:Unity 2021.3.16 SRP

        在测试FXAA时发现一个挺恶心的bug,Unity Editor中渲染的CameraTarget的分辨率,和camera.pixelWidth并不相同,前者比后者少1。

        这导致了这样的问题,因为_CameraColorAttachment是按照camera.pixelWidth的大小创建的,在渲染结束准备将_CameraColorAttachment写入到相机CameraTarget时,因为分辨率发生了变化会导致采样坐标发生缩放,如果刚好在这个步骤依赖之前的采样坐标(比如FXAA需要采样之前的贴图),就会产生误差。

        这里给出了RenderDoc在写入到相机CameraTarget步骤前后的截图:

        可以看到, 相机渲染最后一步时改变了分辨率。而这最后一步只是做了简单的复制,不可能会对分辨率造成影响。

        之所以认为这是个bug,是因为Build后的项目是正常的,降分辨率的问题只在Editor中出现。 

        问题显然是Copy Color引起的,Editor正常情况下要做分辨率-1的操作,但因为我们提前降RenderTarget重定向到了_CameraColorAttachment,后面的渲染都按照没有-1的流程执行了。那么解决办法显然就有两种:

        1. 修改_CameraColorAttachment的分辨率,手动让它减一,即camera.pixelWidth - 1

        2. 保持_CameraColorAttachment的分辨率,将依赖采样坐标的操作独立出来执行,最后再执行一次单独的写回。

        笔者使用的解法是2,因为项目中其他后处理颜色缓存都是用的camera.pixelWidth作为分辨率,1的改法代价比较高。相关修改可以用Editor的宏将相关修改包起来,不影响Build后的执行。

猜你喜欢

转载自blog.csdn.net/paserity/article/details/129543859
今日推荐