CodeBlanks Logo Icon CodeBlanks

Occlusion culling

Occlusion Culling ile görüş dışı yüzeyleri eleyip öğrenirsin.

Frustum culling vs Occlusion culling

Unity, kamera görüş piramidinin (Frustum) dışındaki nesneleri varsayılan olarak çizmez (Frustum Culling). Ancak görüş alanı içinde olup devasa bir duvarın ya da binanın arkasında kalan nesneler yine de render edilerek GPU'yu gereksiz yorar (Overdraw).

// Occlusion Culling:
// Gorus acisinda olsa bile ondeki nesneler tarafindan
// tamamen kapatilan arka nesneler cizilmez.

Occlusion Culling, öndeki engellerin arkasında kalan nesneleri eleyerek gereksiz çizimleri engeller.

Occlusion bake ve static ayarları

Occlusion Culling verileri sahne için önceden pişirilir (Bake). Arkasını kapatacak büyük yapılar Occluder Static, engeller arkasında gizlenebilecek küçük nesneler ise Occludee Static olarak işaretlenir.

// Editorden ayar:
// Pencere -> Rendering -> Occlusion Culling -> Bake
// 'Smallest Occluder' degeriyle engel hassasiyeti belirlenir.

Bake işlemi tamamlandığında kamera hücreler arası hareket ederken arkada kalan nesneler anında devreden çıkarılır.

Uygulama Culling durumunu simüle et

inFrustum ve isOccluded bayraklarını incele: Görüş alanı dışında ise (!inFrustum) "Frustum Disi", görüş alanında ama kapalıysa (isOccluded) "Occlusion ile Elendi", aksi halde "Cizildi" durumunu Console.WriteLine ile ekrana yazdır.

Başlangıç kodu

Player.cs
using System;

class CullingTest
{
    static void Main()
    {
        bool inFrustum = true;
        bool isOccluded = true;
        // Culling durumunu belirle ve ekrana yazdir
        
    }
}

Örnek çözüm

Player.cs
using System;

class CullingTest
{
    static void Main()
    {
        bool inFrustum = true;
        bool isOccluded = true;
        string status;
        if (!inFrustum)
            status = "Frustum Disi";
        else if (isOccluded)
            status = "Occlusion ile Elendi";
        else
            status = "Cizildi";

        Console.WriteLine($"Durum: {status}");
    }
}

Beklenen çıktı

Durum: Occlusion ile Elendi

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Kamera görüş açısı içinde olmasına rağmen önündeki duvar yüzünden görünmeyen nesnelerin çizilmesini engelleyen sistem hangisidir?

  • Occlusion Culling Doğru cevap
  • Frustum Culling
  • Dynamic Batching
  • Post-processing Bloom

Açıklama: Occlusion Culling, kamera görüş alanında bulunsa dahi diğer katı nesnelerin arkasında kalanları tespit edip render listesinden eler.

2 Occluder static bayrağı

Soru
StaticEditorFlags flags = StaticEditorFlags.____;
Cevap
StaticEditorFlags flags = StaticEditorFlags.OccluderStatic;

Açıklama: Arkasına geçen nesnelerin görüşünü kapatan sabit yapılar OccluderStatic olarak işaretlenir.

3 Culling terimleri

Kavram Anlamı
Frustum Culling Kamera görüş alanı dışındakileri çizmez
Occlusion Culling Arkada gizlenen nesneleri eler
Occluder Arkasındakileri gizleyen engel
Occludee Engel arkasında gizlenebilen nesne

Uzman bölümündeki tüm dersler