zoukankan      html  css  js  c++  java
  • Unity 3D-- 摄像机Clear Flags和Culling Mask属性用途详解(转)

    1.简述两个属性

    1.1 Clear Flags 清除标记

           每个相机在渲染时会存储颜色和深度信息。屏幕的未绘制部分是空的,默认情况下会显示天空盒。当你使用多个相机时,每一个都将自己的颜色和深度信息存储在缓冲区中,还将积累大量的每个相机的渲染数据。当场景中的任何特定相机进行渲染时,你可以设定清除标记以清除缓冲区信息的不同集合。可以通过下面四个选项之一来完成:

    1.Skybox 天空盒

         这是默认设置。在屏幕上空的部分将显示当前相机的天空盒。如果当前相机没有设置天空盒,它会默认使用渲染设置(在Edit->Render Settings里)中选择的天空盒。然后它将退回使用背景颜色。另外天空盒组件可以添加到相机上。如果你想创建一个新的天空盒,您可以使用本指南

    2.Solid Color 纯色

         屏幕上的任何空的部分将显示当前相机的背景颜色。

    3.Depth Only 仅深度

         如果你想绘制一个玩家的枪而不让它在环境内部得到裁剪,你要设置一个深度为0的相机来绘制环境,还要另一个深度为1的相机单独绘制武器。该武器相机的清除标记应设置为仅深度。这将保持环境的图形显示在屏幕上,但会丢弃所有关于每个对象在三维空间中的位置的信息。当枪被绘制出来,不透明的部分将完全覆盖任何已绘制的事物,而不管枪到墙之间如何接近。(这部分看起来很费劲)

    4.Don't Clear 不清除

    该模式不清除任何颜色或深度缓存。其结果是,每帧绘制在下一帧之上,造成涂片效果。这不是用于游戏的典型方式,最好是与自定义着色器一起使用。

    1.2 Culling Mask 剔除遮罩

    剔除遮罩使用层有选择地渲染一组对象。有关使用层的信息可以在这里找到。

    通常好的做法,是把用户界面放到不同的层,然后用一个独立相机单独渲染UI层。

    为了使UI显示在其他相机视角的顶部,你还需要设置清除标记为Depth only,并确保UI相机的深度比其他相机高。

    2.下面将通过几步演示来展示摄像机该两个属性

    一:

    首先在Unity场景中创建两个摄像机,分别命名为camera1和camera2;

     再在场景中创建一个cube和Sphere作为摄像机的拍摄物体;并让两摄像机都能够拍摄到两个物体。

    接着设置camera1的Depth为0,camera2的Depth为1;

    你会发现Game窗口将只显示camera2拍摄到的画面;

     可见摄像机Depth属性设置相机绘图顺序,具有较大值的相机将被绘制在具有较小值的相机的上面,换言之,一个深度为1的相机将绘制在一个深度为0的相机之上。

    二:

    Clear Falgs默认Skybox;

    将camera2的Clear Falgs设置为Depth Only;

    此时你可以看到Game窗口将显示camera1和camera2同时拍摄到的画面; 

    由此可见,要想将多个相机拍摄的画面渲染到同一个画面是很简单的事情,只需要将它们的Clear Falgs设置为Depth Only;但是有一个条件是,它们的Depth都需要比Clear Falgs为Skybox或Solid Color的摄像机的Depth高,这样才可以将多个相机单独拍摄的画面叠加于同一个画面上。

    三:

    现在的问题是,两个摄像机拍摄的物体是一样的,我该如何让camera1只拍摄场景背景,而camera2只拍摄制定的物体;

    在场景中创建一个plane,并设置材质,充满camera1画面,当做场景背景。 

    接下来,我们要为物体设置层关系。Unity的Layer的概念可以类比PS里面的图层。

    首先,添加一个层(Layer),如下图所示,并命名为object;

    其次,给物体设置层;如图将sphere物体的层设为object层;同样cube的层也设置为object层。

    最后你将设置两个摄像机的culling mask 属性,以使摄像机渲染指定层物体。

    摄像机的cullingmask默认为Everything,表明渲染所有层的物体。

    Camera1:将culling mask里面的object层勾去掉,culling mask将显示为Mixed… ;你将发现Camera1的窗口将只显示背景图片,物体没有被渲染。

    Camera2:在culling mask选项里面先勾选Nothing,再勾选object层,表明该摄像机只渲染属于object的东西,将不会拍摄到别的图层。

    最后,在Game窗口看到两个摄像机叠加的画面;

    四:

             至此,我们明白了摄像机的Depth、Clear Falgs和Culling Mask的强大作用。

             同样的,如果是制作游戏,你可以创建一个界面摄像机,单独渲染界面,而别的摄像机将渲染场景。你只需要添加UI图层,将所有的界面物体的Layer设置为UI,UI摄像机的Culling Mask也只勾选UI层。

     

    上面的Game窗口视图,为三个摄像机拍摄的画面叠加而成。

    由于本博文上传的图片丢失,故将文档上传,下载地址:http://download.csdn.net/detail/tanmengwen/5255294 转载:http://blog.csdn.net/tanmengwen/article/details/8798231

  • 相关阅读:
    动态传参
    函数的介绍
    文件的操作
    send email with formatted table
    minimize and close window with customed winform
    python algorithm
    something important about docker
    book list
    which language is suitable for what to do
    Find Duplicate Items in list fast
  • 原文地址:https://www.cnblogs.com/weiqiangwaideshijie/p/6733679.html
Copyright © 2011-2022 走看看