lwrp下,多个摄像机内容不能重叠展示的问题

如果你想两个相机叠加显示内容,如果直接用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;
        }

注意标粗标红的地方,就是如果相机的清理方式是深度清理则用渲染流程用深度剔除。这样就不会清理所有内容了。

当然这个用法要特别注意多个摄像机的深度

 

 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值