Occlusion

简介;

遮挡剔除:剔除视椎体内被其他游戏对象所遮住的物体

静态物体的遮挡剔除:

将需要自动遮挡的对象勾选 为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;                      //渲染门
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值