Unity距离剪裁实现方法
一. 距离剪裁希望达到的效果
我们希望通过距离剪裁,来剔除掉”某些”距离观察点较远的物体。一个例子便是远景中体积比较小的物体,我们希望剔除它的同时依然渲染在相同位置的体积较大的物体。
二. 在Unity中实现距离裁剪的方法
1. 脚本代码中实现
在对象做更新时,检测离camera的距离,如果过大则将renderer禁用。或者是用专门的相机渲染特定物体,将其far clipping panel设置成较小值。这两种方法的问题就在于额外的运行时计算开销。
2. 使用Unity的Camera.layerCullDistances
这个特性允许我们对所有layer分别设置一个剔除距离,但是不能够针对单个对象进行设置。由于很多逻辑功能都依赖于分层(例如Line check),我们很难专门为距离裁剪来定制分层方式。
具体使用方法请参考:
需要说明的是,layerCullDistances设置的值需要小于等于当前camera的far clipping panel值,否则无效。
使用LOD group component,可以为不同LOD level设置激活条件以及指定不同的renderer,并且可以直接指定剔除条件。具体用法后文会介绍。
l 区域2:为当前选中的LOD level指定render。点击图中的Add按钮来设置。
四. 最佳实践
2. 需要做距离裁剪的对象,使用一级LOD,并且这一级LOD的Render设置为对象本身的Render,如图3所示:
3. LOD level 0到Culled状态的切换条件(百分比)可以根据具体情况为每个对象任意设置。
后续如果打算使用多个LOD level,则需要关注引擎对于LOD bias,maximum LOD level的控制,相关内容请参考:
http://docs.unity3d.com/Manual/class-QualitySettings.html