简介;
遮挡剔除:剔除视椎体内被其他游戏对象所遮住的物体
静态物体的遮挡剔除:
将需要自动遮挡的对象勾选 为Occluder Static/Occludee Static,然后在 Occlusion 中进行简单的设置 Bake 即可。最后可以在 Visualization 模式下进行测试。
Occluder Static: 需要进行遮挡剔除操作的对象勾选;
Occludee Static: 进行遮挡剔除操作的对象为透明或半透明,以及那些不太可能遮挡其他物体的小物体。即能被其他物体遮挡而本身却不会遮挡到其他物体,这将有效减少计算量。
bake参数:
Smallest Occluder: 该值越小,烘焙的效果越好越精确
Smallest Hole: 最小的洞
Backface Threshold:
Visualization :形象化。在测遮挡剔除效果时选择此项(需要选择一个摄像机)。就是在scene模式下,在移动摄像机位置时,对可视范围内的物体,进行剔除的预览,可以看到位置变化时,哪些物体被删除。
动态物体的遮挡剔除:
1.为运动物体的运动范围添加遮挡区域 ,即添加组件 Occlusion Area 进行设置。
2.将其他静态对象勾选为遮挡剔除静态物体,然后在 Occlution 窗口中进行设置烘焙即可
入口遮挡:
为了创建可实时开启和关闭的遮挡。上面的静态、动态物体遮挡为引擎自动遮挡,而入口遮挡为人工控制的遮挡(脚本控制)。如下图:
1.给门添加 Occlusion Portal 组件,不勾选 Open 属性。即门后的物体不渲染。
2.Bake 其他静态物体
3.添加脚本控制
/**
*
* 项目: 遮挡剔除
*
* 功能: Occlusion Portal 的简单应用
*
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OcclusionPortalPractice : MonoBehaviour
{
private OcclusionPortal _OcclusionPortal; //遮挡入口
private Renderer _Renderer; //渲染器
private void Start()
{
_OcclusionPortal = GetComponent<OcclusionPortal>();
_Renderer = GetComponent<Renderer>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
_OcclusionPortal.open = true; //渲染门后面的内容
_Renderer.enabled = false; //不渲染门
}
if (Input.GetKeyDown(KeyCode.D))
{
_OcclusionPortal.open = false; //不渲染门后面的内容
_Renderer.enabled = true; //渲染门
}
}
}