补充之前对相机渲染的认识理解
要闹清楚相机渲染的顺序首先我们要清楚理解相机组件中几个属性的具体意思。
还是先概念,注意详细理解,这个必须细抠。。。。
clear flags
确定屏幕的哪一部分将被清除。
每个摄像机在渲染它视图的时候都会缓存颜色和深度信息。绘制出来的图像中那部分没有被绘制到的部分是空白的,默认的情况下会显示天空盒的颜色。
当使用多个摄像机的时候,每个都在缓存中存放了它自己的颜色和深度信息,在每个相机渲染的时候会累积更多的数据。在场景中任何特定的摄像机渲染其视图的时候,可以指定清除标志来清除缓存信息中的不同部分。可选项有sky box,solid color,depth only和dont clear。
<1> Skybox
这是清除标志的默认设置。屏幕的任何空白部分都会显示摄像机的天空盒,如何当前摄像机没有设定天空盒,它会默认使用渲染设置中(Eidt->Render Settings)的天空盒。假如默认渲染设置中也没有设定天空盒,它会退而使用背景色。可以选择是否将一个天空盒组件添加到摄像机。
<2> Solid Color
屏幕的任何空白部分都会显示当前摄像机的背景色
<3> Depth Only
如果想要绘制一个玩家的枪而不让它在环境中不被裁剪,可以设定一个深度为0的相机来绘制环境,同时另一个深度为1的相机单独绘制这个武器。武器相机的清除标志应该设置成Depth Only。这会保持环境的图形显示在屏幕上,但是丢弃所有关于每个对象处于3D空间什么位置的信息。当枪被绘制的时候,被绘制出来的不透明部分会完全覆盖现有的被绘制的环境图像,而不管枪离墙壁多近。
为相机使用Depth Only作为清除标志,会使相机仅仅根据相机的深度信息来输出画面,比如相机深度为N的清除标志设为Depth only,那么它的输出会直接覆盖在所有深度小于N的相机输出画面上,而不管在真实的3D环境中,各种对象的z值如何。
<4> Don’t clear
这个模式下不会清除颜色和深度缓存。这会导致下一帧会在上一帧的结果上进行绘制,这个模式在游戏中用得少,一般用于常规的shader中。
不清除的话不过一会屏幕所有的空白区域都会被填满,完全看不出是什么东西。
Background
在没有天空盒的时候,当所有的元素绘制完成后剩余屏幕的颜色,即那些没有被元素绘制到的屏幕区域显示的颜色
重要的就是上面第一个属性的理解。。。。。今天舶主主要想更新一下对之前对3D物体绘制在2D物体之前Demo的修改,之前说Canvas时候串带的那个其实是有点问题点,今天通过不同摄像机的深度来实现一样的效果推荐使用今天这个,这个逻辑比较清晰。
创建一块画布,画布下面创建张image
修改Canvas及UICamera属性
这里的culling Mask也可以不修改,使用全部都拍摄,但是这里为了把UI独立分出来我做了设置,就当前效果而言改或不改是没影响的。。。这个需要自己仔细理解一下clear flags属性的意义。
创建一个cube并修改其属性
修改拍cube的摄像机的属性
效果如图
总结 一下:绘在前面的,深度值大。clear flags应为deep only(只根据深度管理自己的层的绘制,其它的不管,空白部分为透明色)