多摄像机处理

475 阅读3分钟

在使用之前,要先明白摄像机的几个参数:

depth:深度,

该参数决定了摄像机的渲染顺序,值越小越先渲染。

CullingMask:层级遮罩,

  • 只有前面勾选的层级所在的物体才会渲染。
  • 我们可以通过代码设置,只渲染某个层级的物体,只要是左移和右移操作
        Camera.main.cullingMask = 1 << 2; //只渲染第二层
        Camera.main.cullingMask = ~(1 << 2); //除了第二层以外的都渲染
        Camera.main.cullingMask = (1 << 2) | (1 << 4);//渲染二四层
        Camera.main.cullingMask = 0; //什么都不渲染,对应nothing
        Camera.main.cullingMask = -1;//什么都渲染,对应everything

ClearFlags:摄像机清除上一次背景色的方式

摄像机在将物体绘制到深度缓冲和颜色缓冲之前,可以选择是否清除上一帧或上一个相机产生的颜色缓冲和深度缓冲数据。

  • Skybox:把颜色缓冲设置为天空盒,并完全清空深度缓冲
  • Solid:和天空盒一样,只是把颜色缓冲设置为纯色
  • Depth only:这个选项会保留颜色缓冲,但会清空深度缓冲
  • Don’t Clear:不清除任何缓冲

多摄像机使用

  • 创建一个场景并添加一个新的摄像机,此摄像机的depth可以设置为0,因为Main Camera默认使用的depth为-1,这样可以设置的结果就是MainCamera渲染完毕后,新的摄像机才会渲染。
  • 设置一下每个摄像机的CullingMasK,这样可以保证每个摄像机只能看到固定层级的东西,方便观察结果。

  • 这里为了方便观察,我自己重新自定义了渲染管线,所以可以从FrameDebug中观察到两个摄像机得渲染顺序,名字分别于对应的摄像机得名字相同。

  • 最先渲染得摄像机,也就是depth小得摄像机的ClearFlags必须为SkyBox或者Solid,因为这样可以在本帧渲染开始前,清楚上一帧得颜色和深度缓冲数据
  • 第二个摄像机(depth大的)决定了最终呈现得画面。
  • 当第二个摄像机得ClearFlags设置为SkyBox或者Solid,也就是说这个摄像机会清楚上个摄像机渲染得到得颜色和深度数据,然后只呈现自己渲染得到的数据;若设置为Depth Only,只会清除上一个摄像机渲染得到得深度信息,所以第二个摄像机渲染渲染时,自己渲染得所以东西都会呈现在最前面,很适合渲染UI,而且半透明物体也会遮挡住前一个摄像机渲染得不透明物体(因为上一个摄像机产生得深度数据被清除了,所以第二个相机渲染时,深度缓冲中得数据默认为最大);若设置为Dont Clear,则深度和颜色数据都保留,这看起来就像是一个摄像机渲染一样,当也有一个问题,当渲染得物体移动时,看起来像是被复制过了很多次一样。
  • 以下为第二个摄像机得ClearFlags设置为SkyBox,Depth Only ,Dont Clear (物体未移动),Dont Clear(物体移动)得画面。

SkyBox

DepthOnly

Dont Clear ,物体未移动

Dont Clear,物体移动