最近在学习unity渲染的立方体纹理时,对Camera的Clear Flag属性产生了疑惑。Clear Flag有四个可以设置的选项,分别是:Skybox、Solid Color、Depth Only和Don't Clear。后两个比较好理解,无非是在每一帧渲染前,只清除深度缓存或者什么缓存都不不清除。但是前两个就比较让人费解,Skybox是在每次渲染前清除Skybox的颜色值吗?但是,从显示效果上来看并不是。于是,针对这一属性,查阅了很多博客,但大多数都没有讲透彻,总感觉距离理解这个属性就差一层窗户纸,但就是没捅破。最后,终于找到一位解释比较透彻的博客,感谢这位前辈的分享,本文主要参考的就是这篇博客。
参考博客:https://blog.lujun.co/2019/06/02/unity_camera_clear_flags/
首先,在Unity的官方文档中,对Clear Flag的解释是:Determines which parts of the screen will be cleared. This is handy when using multiple Cameras to draw different game elements.(设置这个标志位会对屏幕(缓存帧)指定区域进行清除,通常在多个 Camera 绘渲染不同物体的时候用到。)
其实,unity在渲染每一帧图像之前,都会对每个像素的颜色缓存和深度缓存进行清除,以便写入下一帧画面的颜色值和深度值。Clear Flag就是来设置这个过程中清除哪些缓存,保留哪些缓存的。
当参数设置为Skybox或者Solid Color时,unity会先清空每个像素的颜色缓存和深度缓存,然后再写入新的颜色值,即Skybox的颜色值或者Solid Color的颜色值。