今天对Camera的Clear Flags 各个参数进行分析,懂的原理:
通过设置Camera的Clear Flags参数,在摄像机进行渲染前,对颜色缓冲及深度缓冲,进行不同控制操作。
Skybox :清除颜色缓冲和深度缓冲,没有物体遮挡的背景,用天空盒子填充。
Solid Color :清除颜色缓冲和深度缓冲,没有物体遮挡的背景,用 Camera 的另一个属性Background的颜色填充。
Depth Only:只清除深度缓存。
Don't Clear:颜色缓冲和深度缓冲都不清除。
在Unity中建一个场景,创建两个摄像机CubeCamera、SyphereCamera,一个专门渲染Cube,一个专门渲染Sphere,设置CubeCamera的Depth为3,SyphereCamera的depth为2。Unity中,depth大的后渲染。
摆放Cube、Sphere、CubeCamera、SyphereCamera位置如下:
1.设置SyphereCamera的Clear Flags为Solid Color,Background为蓝色,设置CubeCamera的Clear Flags为Solid Color,Background为黄色:
因为SyphereCamera先渲染,会先渲染球体,背景颜色为蓝色。CubeCamera的Clear Flags为Solid Color,要渲染之前会先把颜色缓冲跟深度缓冲都清除,然后渲染到屏幕上是Cube,背景颜色是黄色。
2.设置SyphereCamera的Clear Flags为Solid Color,Background为蓝色,设置CubeCamera的Clear Flags为Depth Only,Background为黄色:
因为SyphereCamera先渲染,会先渲染球体,背景颜色为蓝色。CubeCamera的Clear Flags为Depth Only,要渲染之前先把深度缓存清除,而颜色缓存不会清楚,因为深度缓冲都被清除了,Cube的深度直接写入到深度缓存中,Cube就会把与Syphere重合的地方覆盖掉。,背景颜色是蓝色。结果如下:
3.设置SyphereCamera的Clear Flags为Solid Color,Background为蓝色,设置CubeCamera的Clear Flags为Don't Clear,Background为黄色:
因为SyphereCamera先渲染,会先渲染球体,背景颜色为蓝色。CubeCamera的Clear Flags为Don't Clear,在渲染前不会清除颜色缓存和深度缓存,这样Cube被Sphere遮挡的部分,因为深度测试不通过,不会显示出来。背景颜色为蓝色。结果如下:
其他情况,读者可以自己试验一下。。。