holodepth

Three.js · Varlık optimizasyonu · Geometri

Geometri karmaşıklığı: Poligon bütçesi ve LOD

Her 3D model üçgenlerden (tris) oluşur. GPU bu üçgenlerin köşelerini (vertex) piksellere dönüştürmek için yoğun matematik çalıştırır. Bu sayfa poligon sayısının görünmez maliyetini, ne zaman azaltmanız gerektiğini ve HoloDepth için pratik bir poligon bütçesi çerçevesini bir araya getirir.

Materyal ve shader tarafını zaten optimize ediyorsanız materyal optimizasyonu sayfası ile birlikte okuyun: biri piksel tarafını, bu sayfa ise vertex tarafını hedefler.

Poligon sayısı: görünmez maliyet

Fazla poligon, GPU’nun vertex shader aşamasında daha fazla iş demektir. Gereğinden fazla detay, özellikle mobilde ısınma ve FPS düşüşü olarak geri döner.

Buradaki maliyet yalnızca «üçgen sayısı» değildir: her vertex aynı zamanda bir paket veridir (konum, normal, UV, bazen teğet/renk). Poligon arttıkça bu veriler GPU’ya daha sık taşınır; yani hem hesap hem de bant genişliği baskısı büyür. Sonuç, sahnenin diğer taraflarında (ışık, gölge, materyal) doğru optimizasyon yapsanız bile tavanın erken gelmesi olabilir.

Pratik kural: Eğer bir detay ekranda birkaç piksel seviyesinde kalıyorsa, geometriyle «mükemmelleştirmek» yerine o detayı bake edilmiş dokuya taşıyın veya tamamen kaldırın.

Görünmez detay tuzağı: Vidanın üzerindeki yivler veya bir karakterin cebindeki dikiş izleri, kullanıcı kamerayı dibine getirmediği sürece görünmez. Bu detayları poligonla çözmek, performansı boş yere harcamaktır.

  • Yanılgı 1: «Model ayrıntılı = her mesafede daha iyi» — uzak mesafede ayrıntı çoğu zaman örnekleme gürültüsüne dönüşür.
  • Yanılgı 2: «Bir kere yüksek poly yapalım» — web’de asıl hedef kademeli bütçe (yakın/orta/uzak) ve doğru LOD stratejisidir.

Aşağıdaki panel, aynı «siluet» fikrini sadeleştirilmiş bir çizimle gösterir: poligonu artırdıkça çizim yoğunlaşır; kamerayı «uzak»a alınca ekrandaki kaplanan alan küçülür — fakat vertex tarafındaki baskı tamamen kaybolmaz. FPS göstergesi ölçülen kare hızı ile poligon baskısı tavanını birleştirir (güçlü cihazda bile yüksek poligonda düşüş görünür); GPU çubuğu log eğrisiyle pedagojik özet skordur (gerçek sahnenin yerine geçmez).

Poligon bütçesi + mesafe — görsel fark ile maliyet ayrışmasını hissettirmek için Pedagogy model

Canlı önizleme

Kamera mesafesi (görsel ölçek)

FPS (gösterge)

Ölçülen kare hızı ile poligon baskısı tavanının küçüğü; güçlü cihazda bile yüksek poligonda düşüş görünür.

GPU (0–100, log/eğri pedagojik)

Log tabanlı eğri + omuz (düşük poly’de yumuşak, yüksekte dikleşir); uzak modda piksel parçası küçülür.

Bu panel eğitim içindir; gerçek projede yük birden çok mesh’in toplam geometrisiyle birikir. FPS göstergesi ölçüm + poligon tavanı birleşimidir; GPU çubuğu motor profili değildir — ışık, materyal ve cihaza göre değişir.

Mini doğrulama (Three.js · segment = üçgen)

Üstteki panel «öğretir»; buradaki küçük sahne ise poligon bütçesini gerçek motorda nasıl hissettirdiğini kısa süreliğine doğrular: tek torus, slider ile radial / tubular segment artar — LOD yok, sadece geometri yoğunluğu. WebGL kapalıysa blok atlanır.

WebGL doğrulama

Aynı silüet fikrine yakın kalırken segment arttıkça üçgen sayısı yükselir; aşağıdaki büyük rakam bu mesh’in indekslenmiş üçgen sayısıdır.

Bağ: Üstteki GPU çubuğu, burada gördüğünüz üçgen yükünün soyutlanmış (log/eğri) pedagojik özetidir — aynı sayı değildir; ama slider’ı oynattığınızda ikisinin aynı yönde hareket ettiğini hissetmek yeterlidir.

triangles (GPU input)

GPU’ya gönderilen gerçek üçgen sayısı — bu torus mesh’inin indekslenmiş üçgenleri.

Torus segmenti: —

Kamera sabittir (orbit yok): odak segment–üçgen ilişkisinde kalır. Bu sahne üstteki pedagojik FPS/GPU modelinin yerine geçmez; yalnızca «segment → üçgen → gerçek çizim» zincirini doğrular.

Ne zaman poligon azaltılmalı?

Optimizasyon stratejisi, objenin ekranda kapladığı alanla (piksel alanı) doğru orantılı olmalıdır: ekranda küçük kalan bir varlığa «yakın plan bütçesi» ayırmak verimsizdir.

Küçük objeler

Masanın üstündeki anahtarlık veya kalem gibi küçük objelerin binlerce poligona sahip olması çoğu sahnede hatadır. Bu objeler ekranda birkaç piksel kapladığı için formunu bozmayacak minimum poligon seviyesine (pratikte low-poly) indirilmelidir.

Uzak asset’ler (LOD mantığı)

Kameradan uzaktaki objelerin detayları algılanmaz. Uzak objeler, ana modellerin daha az poligonlu kopyalarıyla (Level of DetailLOD) değiştirilmelidir. Amaç «her şeyi düşük yapmak» değil; her mesafeye uygun bütçe koymaktır.

Optimizasyon araçları ve teknikleri

Modelleme aşamasında poligon sayısını dizginlemek için iki ana yöntem öne çıkar: hızlı «otomatik sadeleştirme» ve üretim kalitesi için «yeniden örme». Bu ikisini rakip değil, farklı üretim hedeflerine hizmet eden iki araç gibi düşünün.

Decimation (otomatik sadeleştirme)

Mevcut bir modeli, formunu büyük ölçüde koruyarak matematiksel olarak sadeleştirir. Algoritma birbirine çok yakın veya aynı düzlemdeki üçgenleri birleştirerek poligon sayısını düşürür. Bu yöntem «şimdi hemen web’e indir» tarzı işlerde hızlı kazanç üretir.

  • Ne zaman? Hızlı sonuç almak ve karmaşık modelleri (ör. heykel taramaları) web uyumlu hale getirmek için.
  • Risk: Kenar akışı (edge flow) bozulabilir; animasyon için ideal olmayabilir. Ayrıca UV dikişleri ve sert kenarlar «dağılmaya» yatkındır.

Pratik bir kontrol: decimation sonrası modelin silueti (dış hat) ve normal tepkisi (ışık altında bantlaşma) bozuluyorsa, tasarrufu geometri yerine doku tarafına kaydırmak daha doğru olabilir (baking).

Retopology (yeniden örme)

Yüksek poligonlu (high-poly) bir modelin üzerinden, manuel veya yarı otomatik olarak temiz ve optimize edilmiş yeni bir poligon ağı geçirme işlemidir. Özellikle animasyon yapılacak karakterlerde poligon akışının düzgün olması kritiktir.

  • Ne zaman? Deformasyon (kol, yüz, kıyafet) beklenen karakterlerde ve yakın plan «kahraman» varlıklarda.
  • Kazanç: Daha az poligonla daha iyi deformasyon ve daha temiz gölgelendirme.

Baking bağlantısı: detayları dokuya «pişirmek»

İnce detaylar, yüksek poligonlu modelden düşük poligonlu modele çoğunlukla normal map olarak bake edilir. Böylece model az poligonlu kalsa bile, ışık tepkisi «çok detaylıymış» gibi görünür: geometri yerine doku taşınır.

Buradaki karar, §2’deki «piksel alanı» mantığıyla birebir ilişkilidir: uzak objelerde normal map’in etkisi zayıflar; yakın planda ise yüksek poligon yerine bake edilmiş detay çoğu zaman daha iyi maliyet/kalite verir.

HoloDepth performans standartları

Gerçekçi bir 3D web deneyimi için hedef poligon bütçeleri (yaklaşık aralıklar):

Obje tipi Önerilen poligon (tris) Strateji
Ana karakter 10.000 – 30.000 Retopology + normal map
Mobilya / araç 2.000 – 8.000 Detayları texture ile çözme
Arka plan detayı 100 – 500 Decimation
Bitki örtüsü (tekil) 200 – 1.000 Alpha texture (plane) kullanımı

HoloDepth teknik notu: «VRAM ve vertex» bağlantısı

Poligon sayısı yalnızca GPU’yu değil, dosya boyutunu da etkiler. Her bir vertex; konum, UV ve normal gibi veriler taşır. Gereksiz poligonlar .glb dosyanızı megabaytlarca şişirir; bu da yükleme süresini ve ağ maliyetini artırır.

Doku tarafında da benzer bir «bütçe» yaklaşımı için doku formatları ve texture atlas sayfalarını birlikte düşünün.

Sonraki okuma

Poligon sayısı düştükten sonra kare süresini çoğu zaman belirleyen bir diğer tavan piksel başına iş (overdraw / fill rate) olur. Önce Overdraw problemi sayfasında şeffaflık ve katman etkisini netleştirin; ardından mesafeye göre detay için LOD sistemi: mesafeye göre adaptasyon ve popping kontrolü sayfasına geçin (pedagojik panel + küçük Three.js doğrulama).