[Unity3D]URP中,除了主摄像机的PIPELINE,其他PIPELINE无法获得默认的ScreenColor

记录一个我认为是比较缺陷的设计,ScreenColor当前不是全局的参数。官方文档说无法兼顾所有情况,所以不做全局,其他PIPELINE需求的,自己要针对性去实现。我是觉得这样的设计还不如直接不做,让开发者自己去定义实现,不然这种每个地方都有的有,有的没有。如果不是很熟悉文档,你得先怀疑自己是不是哪里错了,找几个小时没找到问题,用起来莫名其妙,最后幸运找到了对应说明,靠,原来如此。十分弟弟。

1.设置
m_ColorHandle = UnityEngine.Rendering.Universal.RenderTargetHandle.CameraTarget;
cmd.GetTemporaryRT(m_ColorHandle.id, cameraTextureDescriptor, FilterMode.Bilinear);

2.Blitting到_GrabTexture2
int screenCopyID = Shader.PropertyToID("_ScreenCopyTexture");
buf.GetTemporaryRT(screenCopyID, m_OpaqueDesc, FilterMode.Bilinear);
buf.Blit(m_ColorHandle.Identifier(), screenCopyID);
buf.SetGlobalTexture("_GrabTexture2", screenCopyID);

3.使用上述获得全局的GrabTexture2作为原本SceneColor
ShaderGraph中Sample GraTexture2 ,注意,这个地方的UV需要用ScenePosition.

这几天研究了一下URP,感觉到UNITY的满满恶意。这玩意全网都找不到个像样能说明白的教程,零零散散而且不明不白。

官方文档:
https://docs.unity3d.com/Packages/[email protected]/manual/Scene-Color-Node.html

你可能感兴趣的:([Unity3D]URP中,除了主摄像机的PIPELINE,其他PIPELINE无法获得默认的ScreenColor)