Unity3D:Camera的Clear Flags
来源:互联网 发布:网络歌曲八万 编辑:程序博客网 时间:2024/06/05 05:49
要理解Clear Flags,首先来看D3D中的IDirect3DDevice9::Clear方法
在每帧开始渲染之前,都要调用该方法来清除缓存,参数Flags定义了清理什么类型的缓存。我们可以选择用Color来清理颜色缓存,也可以用Z来清理深度缓存,清理后,颜色缓存中的颜色为Color,深度缓存中的深度为Z。理解了这个方法,再理解Unity3D中的Clear Flags就很容易了,这不就对应着上述Flags参数吗!
如果Clear Flags为Skybox和Solid Color,在该相机渲染每一帧之前,都会清除深度缓存(清理为多少?应该是最大值1)和颜色缓存(清理为什么颜色?是Skybox和Solor Color中的颜色);
如果Clear Flags为Depth only,那么只会清理深度缓存,而不会清理颜色缓存;要正确理解Depth only,目光不能只盯着Depth。只清理了深度缓存,没清理的是什么?是颜色缓存。
如果Clear Flags为Don’t Clear,那么既不会清理深度缓存,也不会清理颜色缓存,在该相机开始渲染时,深度缓存和颜色缓存中的值保持上一帧渲染结束时的深度缓存区和颜色缓存区中的值。
至于Camera的Depth属性,则决定了当多个Camera存在时Camera之间的渲染顺序。Depth低的Camera先渲染,Depth高的Camera后渲染,这就导致Depth高的Camera会覆盖Depth低的Camera的渲染内容。
下面来考虑常见的双摄像机分别渲染场景和UI的Camera设置思路:
首先,UICamera肯定要覆盖在SceneCamera之上,所以UICamera的Depth为1,SceneCamera为0,这时我们看到的画面只有UICamera拍摄到的内容。
其次,我们还要使UICamera拍摄到的内容堆叠到SceneCamera拍摄内容上。把UICamera的Clear Flags设置为Depth only,那么在渲染完SceneCamera后,再来渲染UICamera时,由于没有清理颜色缓存,因此在UICamera没有拍到的地方,就保留了SceneCamera拍摄的内容。
最后,UICamera拍摄到的物体除了UI控件,可能还会有场景中的其他物体,给UI控件指定统一的tag,再给UICamera设置Culling Mask即可。
- Unity3D:Camera的Clear Flags
- Unity3d Camera的Clear Flags、Culling Mask和Depth三个属性的理解
- Unity3D:Clear Flags
- Unity中Camera的Clear flags,Culling Mask,Depth参数
- Unity 对Camera 属性Clear Flags 的SkyBox/Solid Color/Depth Only深度解析
- unity3d Camera.SetReplacementShader的用法.
- unity 中Clear Flags和Culling Mask
- unity摄像机中clear flags属性介绍
- Unity3d-Camera
- unity3d camera的使用(原)
- Unity3D中Camera的跟随方案
- unity3d之camera
- Unity3D -- 图形 -- Camera
- Unity3D之Camera设置
- Unity3D学习之Camera
- Unity3D 基础篇-Camera
- Unity3D 摄像机(Camera)
- unity3d camera.culling mask
- [leetcode: Python]476. Number Complement
- bnu1055 走迷宫2
- lua table sort
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- VS使用技巧小结
- Unity3D:Camera的Clear Flags
- EMI滤波元件与滤波器的种类
- LinkHashMap实现LRU
- opencv 判断两张图片的相似度
- 阿里云ECS centos7配置jdk-tomcat-mysql 并部署javaweb项目
- 深入Java虚拟机笔记(五):剖析HotSpot的Launcher
- Android Studio隐藏标题栏和系统状态栏
- 线性代数常用基本知识 (含向量和矩阵范数<Matrix or vector norm>)
- 【Redis缓存机制】9.快照持久化和AOF持久化