关于URP14绘制全屏Blit后处理的改动
最近用回URP,发现RendererFeature这部分改动很大,启用了之前HDRP的RTHandle,RTHandle的设计类似于优化版本的RenderTexture,
可以统一控制缩放或者并非一对一的RT内存申请。
并且Blit的方式变成了先SetTarget后做一次绘制,也是和HDRP对齐。
在新的URP中实现全屏后处理效果可以走StackPostProcessing的扩展或者写RendererFeature,
这篇文章写的很详细:
https://zhuanlan.zhihu.com/p/621840900
官方对于新的RenderFeature修改,给出了完整Demo案例:
但是,真正使用时会发现这个教程有点问题,用的是_CameraOpaqueTexture,如果屏幕内有半透明内容则会出现错误。
目前的解决方法是拷贝FullscreenPass自己修改。但该Pass对应的ShaderGraph材质仍有问题,
若是正交相机求世界空间位置则内部未做判断(或是因为过早点击生成代码所致)。
而自定义StackPostProcessing做法,可能相比RendererFeature更方便一些:
https://docs.unity3d.com/Packages/com.unity.postprocessing@3.4/manual/Writing-Custom-Effects.html
Tips: 若需要Texture2D传入,可使用接口Shader.SetGlobalTexture,SharedPropertyBlock无效