Unity3D Camera设置结合OpenGL详细解读
2017-03-15 00:02
489 查看
Unity里面的Camera是把渲染画面,最终呈现在屏幕上的最后一步操作。所有的渲染操作最终都要通过Camera来呈现。
如果用OpenGL来实现,Camera做了以下几个事情。
通过正交或是透视,剪裁平面,得到一个4x4的矩阵数据。这个矩阵就是,model-view-projection中的projection。所有物体的旋转R,平移T,缩放S,形成的矩阵数据,最终都要和camera的矩阵数据相乘。
设置Viewport,也就是调用 glViewport 限定屏幕的渲染区域。
针对各种类型绘制缓冲区数据的操作,也就是调用 glClear。
通用的shader类型的选择,就是Rendering path。
自身绘制层级和layer的剪裁并非需要OpenGL来实现。
下面解释一下具体的属性意思。主要根据官方文档和自己使用OpenGL的理解。
Clear Flags:
每帧绘制完后,都需要清空各种缓冲区,最主要的是color和depth,一个负责画面最终呈现的颜色,一个负责景深。重要的是,在当前Camera范围内color和depth会有被覆盖的可能性。在范围外的color和depth有被其它Camera使用的可能性。这里的清除很多时候是为了处理,在当前Camera范围外的区域。
Skybox, 可以理解为Camera范围外的区域,使用SkyBox来填充。
Solid color,可以理解为Camera范围外的区域,使用一个纯色来填充。
Depth only,可以理解为Camera范围外的区域,只清空depth,而不清除color。这就保留了其它Camera范围绘制的画面,但丢失了所有景深信息。这就是为什么,当一个Camera选择Depth only的时候,其它Camera的渲染画面可以保留。没有了景深,多个Camera之间的渲染层级就依赖Camera的Depth来设置。
Don’t clear, 就是不清除color和depth,每次绘制都会叠加在一起。
Background:
就是用来填充,当前Camera范围内没有被绘制的区域。
Culling Mask:
没被选中的Layer会被当前Camera给剔除,不会渲染。过滤非选中层的方法有很多,可能都不会调用渲染函数,没必要使用OpenGL的剪裁功能。
Projection:
正交和透视,以及剪裁平面,就是生成一个矩阵数据。
Viewport Rect:
直接对应了,OpenGL的 glViewport 调用。
Depth:
当有多个Camera的时候,每个Camera有自己的绘制空间区域和屏幕视口。所包含的物体会通过Camera的范围渲染出来。多个Camera的层级,决定了所包含物体的渲染顺序。这个数字从小到大,越来越靠近屏幕。
Rendering Path:
通用的几个shader选择,主要处理光照的。
Target Texture:
可以把Camera渲染的画面,绘制到一个纹理上,而不是设备的显示缓冲区里。
如果用OpenGL来实现,Camera做了以下几个事情。
通过正交或是透视,剪裁平面,得到一个4x4的矩阵数据。这个矩阵就是,model-view-projection中的projection。所有物体的旋转R,平移T,缩放S,形成的矩阵数据,最终都要和camera的矩阵数据相乘。
设置Viewport,也就是调用 glViewport 限定屏幕的渲染区域。
针对各种类型绘制缓冲区数据的操作,也就是调用 glClear。
通用的shader类型的选择,就是Rendering path。
自身绘制层级和layer的剪裁并非需要OpenGL来实现。
下面解释一下具体的属性意思。主要根据官方文档和自己使用OpenGL的理解。
Clear Flags:
每帧绘制完后,都需要清空各种缓冲区,最主要的是color和depth,一个负责画面最终呈现的颜色,一个负责景深。重要的是,在当前Camera范围内color和depth会有被覆盖的可能性。在范围外的color和depth有被其它Camera使用的可能性。这里的清除很多时候是为了处理,在当前Camera范围外的区域。
Skybox, 可以理解为Camera范围外的区域,使用SkyBox来填充。
Solid color,可以理解为Camera范围外的区域,使用一个纯色来填充。
Depth only,可以理解为Camera范围外的区域,只清空depth,而不清除color。这就保留了其它Camera范围绘制的画面,但丢失了所有景深信息。这就是为什么,当一个Camera选择Depth only的时候,其它Camera的渲染画面可以保留。没有了景深,多个Camera之间的渲染层级就依赖Camera的Depth来设置。
Don’t clear, 就是不清除color和depth,每次绘制都会叠加在一起。
Background:
就是用来填充,当前Camera范围内没有被绘制的区域。
Culling Mask:
没被选中的Layer会被当前Camera给剔除,不会渲染。过滤非选中层的方法有很多,可能都不会调用渲染函数,没必要使用OpenGL的剪裁功能。
Projection:
正交和透视,以及剪裁平面,就是生成一个矩阵数据。
Viewport Rect:
直接对应了,OpenGL的 glViewport 调用。
Depth:
当有多个Camera的时候,每个Camera有自己的绘制空间区域和屏幕视口。所包含的物体会通过Camera的范围渲染出来。多个Camera的层级,决定了所包含物体的渲染顺序。这个数字从小到大,越来越靠近屏幕。
Rendering Path:
通用的几个shader选择,主要处理光照的。
Target Texture:
可以把Camera渲染的画面,绘制到一个纹理上,而不是设备的显示缓冲区里。
相关文章推荐
- FCKeditor上传详细设置解读【转】
- V4L2 API详解 <二> Camera详细设置
- 如何设置opengl结合vc开发绚丽的3D图形---操作详解
- v4l2 Camera详细设置【转】
- V4L2 API详解 Camera详细设置
- V4L2 API详解 <二> Camera详细设置
- Unity3D之Camera设置
- v4l2 Camera详细设置
- 「Unity3D」(3)事件系统和EventSystem详细解读
- Unity3D Terrain Settings 彻底搞懂 地形详细设置 全实验与解析 (三)Thickness
- V4L2 API详解 <二> Camera详细设置
- Unity3D 相机路径设置 iTween & Camera Path Animator
- Unity3D Terrain Settings 彻底搞懂 地形详细设置 全实验与解析 (一)Pixel Error
- V4L2 API详解 <二> Camera详细设置
- V4L2 API详解 <二> Camera详细设置
- Unity3D Terrain Settings 彻底搞懂 地形详细设置 全实验与解析 (二)base map dist
- [转]如何设置opengl结合vc开发绚丽的3D图形---操作详解
- V4L2 API详解 Camera详细设置
- 【Qt开发】V4L2 API详解 <二> Camera详细设置
- V4L2 API详解 <二> Camera详细设置