Sahne Optimizasyonu: Culling ve LOD Sistemleri Pratik Uygulaması

Oyun sahnesinde binlerce nesne varsa, hepsi aynı anda çizilirse GPU ve CPU yorulur. Culling ve LOD sistemleri bu sorunu çözer: görünmeyen nesneleri atlar, uzaktaki detayları azaltır.

Culling, kameranın göremediği nesneleri render işleminden çıkarmaktır. LOD (Level of Detail) ise uzaklığa göre model karmaşıklığını azaltır. Mesela 100 metre uzakta bir ağacın yaprakları detaylı çizilmez; sadece gövde ve genel şekli görünür.

Unity'de bu işi kameraya yakın bir volume ile yaparız. Frustum culling Unity'nin varsayılan olarak yaptığı işlem, ama manuel kontrol için Physics.OverlapSphere kullanabiliriz.

Bu kod, kamera etrafında 50 metre yarıçaplı bir küre içindeki nesneleri etkinleştirir, dışındakileri devre dışı bırakır:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1using UnityEngine;
2
3public class CullingManager: MonoBehaviour {
4public Camera mainCamera;
5public float cullingRadius = 50f;
6public GameObject[] sceneObjects;
7
8void Update() {
9Vector3 cameraPos = mainCamera.transform.position;
10
11foreach (GameObject obj in sceneObjects) {
12float distance = Vector3.Distance(obj.transform.position, cameraPos);
13bool shouldRender = distance < cullingRadius;
14obj.SetActive(shouldRender);
15}
16}
17}

LOD sistemi için, her nesneye birden fazla model versiyonu ekleriz. Yakında detaylı, uzakta basit model gösterilir:

1using UnityEngine;
2
3public class LODSystem: MonoBehaviour {
4public GameObject highDetail; // Yakın mesafe
5public GameObject lowDetail; // Uzak mesafe
6public float lodDistance = 30f;
7private Camera mainCamera;
8
9void Start() {
10mainCamera = Camera.main;
11}
12
13void Update() {
14float distance = Vector3.Distance(transform.position, mainCamera.transform.position);
15
16if (distance < lodDistance) {
17highDetail.SetActive(true);
18lowDetail.SetActive(false);
19} else {
20highDetail.SetActive(false);
21lowDetail.SetActive(true);
22}
23}
24}

Bu kod çalıştırıldığında kamera 30 metreden yakınsa detaylı model, uzaksa basit model aktif olur. FPS ölçerken farkı göreceksin, culling ve LOD aktifken 2-3 kat daha hızlı çalışabilir.

Gerçek projede Unity'nin yerleşik LOD Group bileşenini de kullanabilirsin; daha optimize ve kontrollüdür. Ama bu mantık anlaşıldıktan sonra karmaşık sistemler kurmak kolay hale gelir.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz