您当前的位置: 首页 > 

VT LI

暂无认证

  • 8浏览

    0关注

    126博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

VT LI 发布时间:2019-04-10 10:12:24 ,浏览量:8

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

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

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

 

 

关注
打赏
1649603425
查看更多评论
立即登录/注册

微信扫码登录

0.1380s