如果你想两个相机叠加显示内容,如果直接用lwrp是做不到的
得到的结果是
(其实后面还有ui层,而且用了Depth清除摄像机,并且没有背景)
我们查看frame debugger可以看到
1.在Blit时用的混合模式是 One Zero。所以看不到后面的物体,都被清除掉了背景。
2.lwrp除了天空盒的清理方式,其他都是摄像机全部清理的,所以一个相机中的内容全部都清掉了,就不会显示多个相机重叠的(他这么做的原因是减少overdraw的情况,每次渲染只有一个屏幕上的像素需要渲染,那么这种情况下,多个光照来了也是只有一次渲染,类似做了延迟渲染)
解决方案:
解决也简单:
1.只需要找到Hidden/Lightweight Render Pipeline/Blit的shader,然后修改他的Blend为Blend SrcAlpha OneMinusSrcAlpha 。
这样就能解决问题了,最后看看效果
2.在DefaultRendererSetup(在自己没重写渲染方式下)把清除方式
ClearFlag clearFlag = ScriptableRenderer.GetCameraClearFlag(renderingData.cameraData.camera);
这里面的GetCameraClearFlag修改为:
public static ClearFlag GetCameraClearFlag(Camera camera) { if (camera == null) throw new ArgumentNullException("camera");
// LWRP doesn't support CameraClearFlags.DepthOnly. // In case of skybox we know all pixels will be rendered to screen so // we don't clear color. In Vulkan/Metal this becomes DontCare load action if (camera.clearFlags == CameraClearFlags.Skybox && RenderSettings.skybox != null) return ClearFlag.Depth;
if (camera.clearFlags == CameraClearFlags.Depth) { return ClearFlag.Depth; }
// Otherwise we clear color + depth. This becomes either a clear load action or glInvalidateBuffer call // on mobile devices. On PC/Desktop a clear is performed by blitting a full screen quad. return ClearFlag.All; }
注意标粗标红的地方,就是如果相机的清理方式是深度清理则用渲染流程用深度剔除。这样就不会清理所有内容了。
当然这个用法要特别注意多个摄像机的深度