您现在的位置是:首页 >学无止境 >Unity Camera -- (3)控制相机能看到的东西网站首页学无止境
Unity Camera -- (3)控制相机能看到的东西
使用剪裁平面(Clipping Planes)定义相机可视范围
Clipping Planes定义了相机所能看到的场景范围。在有些时候,限制相机所能看到的范围是出于风格上的考量,但编辑Clipping Planes的主要目的是为了优化性能。相机所需要渲染的东西越少,程序的负载就越低。
相机的剪裁平面有两个参数值:near(近平面)和far(远平面)。near定义了离相机最近且还能被相机所渲染的平面所处位置;far则是相反的一个平面。
对于正交投影相机来说,远近平面呈金字塔形状,可以在场景视图中选中了相机后看到:
对于正交投影相机来说,这个平面是一个矩形:
接下来我们调整一下clipping planes的参数(正交投影类型相机):
1. Hierarchy中选中Main Camera,缩放一下场景视图以便能观察到相机整体远近平面的情况。
2. 在Main Camera的Inspector中,修改一下Clipping Planes里的Far参数,从1000改为100,从100改为10,然后从10改为1。观察一下场景视图中相机的远近平面线框的情况以及相机预览窗口的变化。
我们可以看到,随着Far的减小,相机所能看到的东西也跟着减少。原来能够被看到的东西,看不见之后,会用背景做填充(一般是天空盒背景)。
3. 在场景视图中,我们使用移动工具,让相机沿着z轴向前平移。
随着相机的向前平移,我们可以看到之前不可见的物体,到达了Far平面范围内后,会突然跳出来。虽然这种效果可以被刻意用来做一些风格化的需求,但一般来说,在游戏或实时应用要尽量避免。一般我们会设置一个较大的Far值,让用户感受不到这种物体突然消失或突然出现的现象。这里我们将Far设置回默认的1000。
4. 近平面参数Near的意思和Far是类似的,我们也可以调整一下这个参数。但有一个常见的问题是,当角色或某个游戏物体的模型有部分处于近平面外的时候,我们可能会看到物体内部的mesh。
我们在一些3D游戏中可能会看到这种场景,要解决这种问题,最好是能保证相机和物体保持一段安全距离, 如果相机是固定的,也可以调整一下Near的值。
使用culling masks来隐藏或显示物体
如果有一个物体处于相机的Near和Far平面之内,但我们又要隐藏或显示它时该怎么做呢?解决这个问题有多种方法,对于相机来说,有一个culling masks可以用来实现这个功能。
1. 场景视图中,选中红色的胶囊体,按F聚焦。
2. 在胶囊体的Inspector中,选择Layer -> Add Layer, 然后将User Layer6设置为Culled。
3. 重新在场景视图中选择胶囊体,然后在Inspector中将Culled这个layer设置给胶囊体。
4. 选择Main Camera,定位到Inspector中,Camera组件中Rendering部分里的Culling Mask选项, 将Culled禁用掉。
在场景视图中,胶囊体还在,但是从相机预览窗口中可以看到,胶囊体消失了。
修改背景类型
默认情况下,场景会使用一个默认的天空盒作为背景。这个天空盒和Directional Light(也是创建场景时默认的平行光源)是绑定的。这两个物体一起为场景的环境光(ambient light)起到了贡献。虽然天空盒及相关光照是由天空盒的shader和光照属性所决定的,但camera可以管理在场景中天空盒是否可见。
1.调整相机视角,确保相机能够看到天空盒。
2. 在Inspector中,找到Camera组件的Enviroment部分
3. 将Background Type从Skybox修改为Solid Color
4. 此时我们对比看场景视图和相机预览视图,会发现场景中,天空盒仍然存在,相机视图中显示的天空是一片蓝色。如果场景中有多个相机,每个相机都可以有不同的背景类型设置,这一点可以用来实现一些特殊的效果。
5. 点击Background的颜色条,将颜色修改为其他颜色试试,比如绿色。
需要注意的一点是,背景类型选择为Solid Color,其颜色并不会对场景的光照产生影响,这和Skybox是不同的。Solid Color只是简单的让相机停止渲染天空盒并且用一个我们选择的颜色替换掉。即便天空盒在相机中并不可见,任何对天空盒的修改,仍然会在环境中可见。