专业的编程技术博客社区

网站首页 > 博客文章 正文

渲染角度理解Unity Camera的Clear Flag属性

baijin 2024-09-09 01:03:06 博客文章 15 ℃ 0 评论

Unity Camera的Clear Flag属性,看似很简单,实际如果不了解渲染流程,总是很难完全理解

官方解释

在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 会渲染不同物体的时候用到。)

渲染流程简介

如下图所示:先不考虑合批与修改渲染层级的情况下,一帧中先渲染背景天空盒的颜色(蓝球后面),再渲染蓝球,最后渲染立方体。先渲染的天空盒后是把颜色放到显卡的缓冲区,再渲染蓝球时对在缓冲区天空盒中与其相同的像素值,根据ZTest(深度测试)通过后进行替换。然后立方体同理。(z是深度轴。离摄像机越近值越小,反之则越大,默认情况下值大的像素会被值小的像素覆盖)。然后最终图片展示。一帧渲染完成。

Clear Flags

  • Skybox 相机会在每一帧渲染之前使用当前的Skybox来清除视图
  • Solid Color 相机用指定的单一颜色来清除其整个视图
  • Depth only 相机只会清除深度缓冲区(Z-buffer),而不会清除颜色缓冲区。这意味着先前渲染的图像将保留在屏幕上,而新的渲染将在其上进行
  • Don't Clear 相机不会清除颜色或深度缓冲区。这就意味着新的渲染将直接覆盖在先前渲染的内容之上

Skybox与Solid Color比较好理解,如上渲染流程就是每帧开始前优先渲染。

Depth only 就比较有意思,一般是利用两个摄像机。比如上图创建一个Camera只拍蓝球。然后Camera Depth大于Main Camera Depth。这样没有改变z轴坐标情况下,蓝球显示在最上面。主要原因是渲染蓝球时,清除缓冲区的(Z-buffer)把深度信息清除掉,然后让当前像素值ZTest通过,所以会显示在最上面。

Don't Clear 就是不会清楚上一帧渲染信息,进行叠加,如下篮球移动轨迹都记录下来。形成的效果。(防止其它摄像机如:Skybox导致清楚缓存,看不到如下效果)


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表