Occlusion(遮擋剔除)


Occlusion

1.視錐體剔除(Frustum Culling)
  根據攝像機的視見體的范圍對場景模型進行剔除操作,在視見體以外的物體不被渲染,但是在視見體中的物體會以離攝像機最遠的物體開始渲染,逐漸渲染靠近攝像機的物體。后渲染的物體會覆蓋先前渲染的物體。
錐體剔除只剔除攝像機視角范圍外的物體而對於被包含在視見體中的其他對象還是會進行渲染,即攝像機看不到的游戲對象也會進行渲染。
2.遮擋剔除(Occlusion Culling)
  剔除視見體以外的游戲對象,並且剔除視見體內被其他游戲對象所遮住的物體。

靜態物體的遮擋剔除:

  將需要自動遮擋的對象勾選 為Occluder Static/Occludee Static,然后在 Occlusion 中進行簡單的設置 Bake 即可。最后可以在 Visualization 模式下進行測試。

   

Occluder Static: 需要進行遮擋剔除操作的對象勾選;

Occludee Static: 進行遮擋剔除操作的對象為透明或半透明,以及那些不太可能遮擋其他物體的小物體。即能被其他物體遮擋而本身卻不會遮擋到其他物體,這將有效減少計算量。

 Smallest Occluder: 該值越小,烘焙的效果越好越精確

 Smallest Hole: 最小的洞

 Backface Threshold: 

Visualization :形象化。在測遮擋剔除效果時選擇此項(需要選擇一個攝像機)

動態物體的遮擋剔除:

  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;                      //渲染門
        }
    }
}

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM