渲染管线:
定义:图形数据在CPU上经过运算处理,最后输出到屏幕的过程
1. 顶点处理:接收模型顶点数据、坐标系转换
2. 图元装配:组装面、连接相邻的顶点,绘制为三角面
3. 光栅化:计算三角面上的像素,并为后面着色阶段提供合理的插值参数(以及深度值)
4. 像素处理:对每个像素区域进行着色、写入到缓存中
5. 缓存:一个存储像素数据的内存块,最重要的缓存是帧缓存与深度缓存
• 帧缓存:存储每个像素的色彩(缓冲)
• 深度缓存 Z—buffer:前后排序(深度信息,物体到摄像机的距离)
Draw Call绘制调用:每帧调用显卡渲染物体的次数
一.Occlusion Culling遮挡剔除:
定义:当物体被送进渲染流水线之前,
将视锥以内看不到的物体进行剔除,减少每帧的渲染量,提高渲染性能
例一:unity自带的Occlusion Culling(用碰撞实现的)很消耗GUP
步骤:
1.在Window中找到并点击Occlusion Culling
2.把需要进行渲染剔除的物体勾选为Static
3.在右边的Occlusion中选中Object->Occlusion Areas点击Create new Occlusion Areas
4.在Object中点击Bake,和在Bake中点击Bake
5.点击Visuslization和移动相机就可以查看效果了
效果展示:(相机没有看到的物体自动把MeshRander隐藏了)
实例二:用InstantOC(使用射线)检测物体
步骤
下载:AssetStore中下载InstantOC_Dynamic_Occlusion_Culling__LOD_v2.0.0.unitypackage插件
百度云链接:链接:http://pan.baidu.com/s/1jHPrAfG 密码:v0yr
1.创建层
2.为游戏物体指定层(将参与遮挡剔除)与标签(将自动附加 IOClod脚本)
3.物体添加碰撞器Collider组件(通过射线去检测物体)
4.摄像机附加脚本IOCcam
属性
确保剔除物体显示正常的阴影。Layer mask:参与遮挡剔除的游戏对象层。
IOC Tag:将为指定标签的游戏对象自动添加IOClod脚本对象。
Samples:每帧摄像机发射的射线数目。数量多剔除效果 好,但性能开销大。通常在150—500之间。
Rays FOV:射线视野,应大于摄像机视野Field of View。
View Distance:视图距离,射线长度。将影响摄像机Clipping Planes –Far 数值。
Hide Delay:延迟隐藏,当物体被剔除时延迟的帧数,建 议50—100之间。
•PreCullCheck:检查采集信息,建议勾选,可以提高剔除 效率。
•RealtimeShadows:实时阴影,如果场景需要实时阴影, 建议启用,
注意:(物体需要添加Box Collider组件)
缺点:需要消耗额外CUP
适用:存在大量被遮挡的物体时使用
BUG:Realtime Shadows——使用会显示材质丢失
优点:减少渲染压力,优化GPU显示
效果图:
标记的物体没有被遮挡时
标记的物体被遮挡了
二.LOD多细节层次:
定义:根据物体模型的节点在显示环境中所处的位置 和重要度,决定物体渲染的资源分配,降低