关于URP14绘制全屏Blit后处理的改动

最近用回URP,发现RendererFeature这部分改动很大,启用了之前HDRP的RTHandle,RTHandle的设计类似于优化版本的RenderTexture,

可以统一控制缩放或者并非一对一的RT内存申请。

并且Blit的方式变成了先SetTarget后做一次绘制,也是和HDRP对齐。

 

在新的URP中实现全屏后处理效果可以走StackPostProcessing的扩展或者写RendererFeature,

这篇文章写的很详细:

https://zhuanlan.zhihu.com/p/621840900

 

官方对于新的RenderFeature修改,给出了完整Demo案例:

https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@14.0/manual/renderer-features/how-to-fullscreen-blit.html

 

但是,真正使用时会发现这个教程有点问题,用的是_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无效

 

posted @ 2024-02-03 23:22  HONT  阅读(60)  评论(0编辑  收藏  举报