Three.js · Performans · Draw call · Birleştirme
Scene merge (batching): Performans için objeleri birleştirmek
Scene merge / batching, çok sayıda bağımsız mesh’i mümkün olduğunca az sayıda çizim yoluna indirgeme çabasını anlatır: amaç tek başına «daha çok üçgen», aynı zamanda CPU’nun sahneyi yönetme ve GPU’ya komut gönderme maliyetini düşürmektir.
Sıra: önce darboğazın ne olduğu, sonra kazanç özeti, bedeller, iki teknik hat (static / instance) ve en sonda karar tablosu. Düğüm ağacını koruyan runtime birleştirme burada işlenmez — Scene graph; parça parça animasyon ve kontrol Model parenting ile ayrı ele alınır. Özet diyagram: Draw call akışı, kıyaslama ve «ne zaman hangi yol?» dallanması (birinci bölümde).
Ana amaç: Draw call azaltmak
Modern GPU poligon işinde cömert; darboğaz çoğu web sahnesinde CPU tarafındaki «şunu çiz» komutları (draw call) ve durum değişimidir.
- Belirti: Çok sayıda bağımsız düğüm — her biri için güncelleme ve sıralı komut trafiği; kare bütçesi dolar.
- Yön: Aynı görünümü daha az çizim yoluna sıkıştırmak; hangi yolun seçileceği türler bölümünde, «uygun mu?» sorusu tabloda özetlenir.
Aşağıdaki şekil sayfanın iskeletini tek bakışta toplar: sorun hattı, strateji çatalı ve örnek kıyaslama. En alttaki dallanma, üstteki üç kolu hangi sırayla ve hangi koşulla seçeceğinizi gösterir — aynı bilgiyi tekrarlamaz, süzgeç görevi görür.
Draw call akışı
Kıyaslama (örnek)
Ayrı mesh
10 obje → 10 draw call (kavramsal)
Instancing
100 kopya → 1 draw call (shared örgü)
Merge
500 parça → 1 geometri → 1 draw call
Ne zaman hangi yol?
Önce paylaşılabilirlik; «Hayır» ise statik veya hareketli ayrımı. Renkler üst şemadaki strateji türleriyle eşlenir.
Avantajlar: Neden birleştirmeliyiz?
Bir önceki bölümdeki darboğaz, yalnızca «çok üçgen» değil; CPU’nun her karede sahneyi dolaşması, dünya matrislerini türetmesi ve sürücüye komut göndermesiyle büyür. Aşağıdaki üç başlık, birleştirme veya batching doğru uygulandığında bu yükün nerede hafiflediğini özetler. Hangi tekniğin seçileceği dördüncü bölümde kalır.
-
Daha az grafik yönetimi: Bağımsız mesh sayısı
azaldığında, motorun her karede güncellediği düğüm sayısı ve buna bağlı dünya matrisi
zinciri kısalır. Özellikle kullanıcı veya animasyon her karede sahneyi komple
gezdiriyorsa (
traverse, toplu seçim, debug çizimi), kazanç doğrudan ölçülebilir hale gelir. - Daha sakin GPU beslemesi: Her çizim yolu kendi materyal ve durum setini taşır; çok sayıda küçük yol, sürücüde sık sık «şunu kapat, bunu aç» ritmine dönüşür. Yollar birleştikçe aynı materyal ve örgü üzerinden daha az atlama ile veri akar; GPU işini daha uzun süre kesintisiz sürdürebilir — bu, katalog sahnesi veya yoğun dekorasyonlarda bellek bant genişliğiyle birlikte okunur.
- Kullanıcı hissi: Masaüstünde kare süresi bazen yeterince iyidir; oysa mobil cihazlarda termal kısma ve pil baskısı, VR’da ise baş hareketi ve yeniden projeksiyon, düşük ve dalgalı FPS’i hemen cezalandırır. Birleştirme doğru yerde yapıldığında ilk fark edilen şey genelde stabil kare süresi ve takip eden rahatlıktır.
Dezavantajlar: Bedeli nedir?
Kazanç her zaman bedelsiz değildir; burada üç ayrı «fatura» kalemi vardır — strateji seçerken bunları tartmak gerekir.
- Kontrol: Tek örgüye indiğinizde parça parça oynama, seçim veya animasyon zorlaşır; gerekirse yeniden bölme veya shader maskesi ayrı iş.
- Bellek: Birleştirme sırasında veri kopyalanabilir; RAM artışı görülebilir.
- Görünürlük ayrımı: Tek büyük sınırlayıcıda, görünür kalan küçük bir köşe tüm bloğu çizime aday gösterebilir; ince taneli culling kaybı yaşanabilir.
Batching türleri
İki teknik hat aynı «az çizim yolu» hedefini paylaşır; farkları veri düzeninde. Üçüncü seçenek birleştirme değil, hiyerarşidir — kapı–kol gibi senaryolarda parenting ve pivot öne çıkar.
A. Static batching (statik birleştirme)
Yerinde kalan kütleler (duvar, karo, sabit kaya): birden fazla BufferGeometry
tek tamponda birleşir. Kodda sık kullanılan yol
BufferGeometryUtils.mergeGeometries (examples/jsm/utils).
B. Instanced rendering (örneklenmiş çizim)
Aynı örgü + aynı materyal, çok kopya: matris / renk gibi farklar instance öznitelikleriyle taşınır; stadyum koltuğu veya tekrar eden süs tipik örnektir. Uygulama ayrıntısı için ileri instancing sayfasına gidin.
HoloDepth uygulama rehberi: Ne zaman birleştirmeli?
Tablo yönetici özeti içindir; teknik isimler türler bölümünde, riskler bedeller bölümündedir. Animasyon veya parça başına kontrol gerekiyorsa satır genelde «birleştirme değil» der.
| Senaryo | Strateji | Karar |
|---|---|---|
| Farklı materyalli 10 obje | Manuel geometri birleştirme | Hayır — materyal sayısı kadar yol açılabilir; önce materyal birleştirme / atlas planı gerekir. |
| Aynı materyalli 500 statik taş | Static birleştirme | Evet — güçlü draw call kazanımı. |
| Hareket eden 100 tekerlek | InstancedMesh | Evet — kontrol ve hız dengesi. |
| Kapı ve kapı kolu | Parenting (Group) |
Hayır — birleştirme animasyonu zorlaştırır; pivot ile hiyerarşi daha doğru. |