holodepth

Three.js · Varlık optimizasyonu · Materyal

Materyal optimizasyonu: Çizim ve shader disiplini

Materyaller, CPU’nun GPU’ya gönderdiği «dur ve şu yeni fırçayı al» ritminin ana tetikleyicilerinden biridir. Bu sayfa materyal sayısı ile draw call ilişkisini, shader maliyetini ve HoloDepth için pratik bir kontrol listesini bir araya getirir.

Çizim trafiğinin sayısal sezgisi için Draw call girişini ve doku tarafında Texture atlas sayfasını yan yana okuyun; burada odak materyal kimliği ve gölgelendirici yüküdır.

Shader maliyeti: GPU’nun matematik yükü

Her materyal, arka planda bir shader (renklendirme programı) çalıştırır. Shader ne kadar karmaşıksa, GPU her piksel için o kadar çok matematiksel hesaplama yapar.

PBR vs. basit materyal

  • MeshStandardMaterial: Işık yansımaları, pürüzlülük ve metalik için ağır formüller kullanır; çok gerçekçidir ama maliyetlidir.
  • MeshBasicMaterial / MeshPhongMaterial: Işık hesaplarını sadeleştirir veya kısmen devre dışı bırakır; uzak objeler veya performans öncelikli sahneler için sık kullanılır.

Gereksiz özellikleri kapatmak

Kullanmadığınız her özellik, shader kodunda fazladan dal ve örnek maliyeti demektir.

  • Obje şeffaf değilse transparent: true açmayın — derinlik ve sıralama yükünü şişirir.
  • side: THREE.DoubleSide yalnızca gerektiğinde; iç yüzeyleri de çizmek pratikte yükü artırır.

«Görsel fark gerçekten gerekli mi?» (kritik karar)

§2’deki shader yükü ve gereksiz özellikleri kapatma disiplini, sahneye indiğinde tek bir soruya indirgenebilir: bu detay, izleyici için gerçekten ölçülebilir mi? Bu düşünce, §1’deki «aynı malzemeyi paylaş» hedefiyle çelişmez; ayrı materyal / ayrı doku gerektirmeyen varyantları erken eleyerek hem çizim kimliğini hem piksel başına işi sınırlar.

HoloDepth projelerinde materyal kurgularken şu soruyu sormak gerekir: «Kullanıcı bu detayı iki metre öteden fark edecek mi?» «İki metre» örnektir; asıl ölçüt tipik izleme mesafesi, ekran çözünürlüğü ve sahne yoğunluğu için iç tartınızdır.

Normal, albedo ve çevre

Normal map ve geometri: Çok ince yüzey detayı için poligon eklemek — yükü §1’in öte ucundaki geometri ve çizim tarafına itmek — yerine normal haritası kullanın. Obje uzaklaştıkça aynı normalın verdiği mikro yansıma hissi zayıflar; bu aşamada normal dokusunu kapatıp yalnız albedo (taban renk) ile yetinmek, doku örnek sayısını ve §2’deki «boşta taşınan kanal» riskini birlikte azaltır.

Environment / yansıma: Her küçük metal parçasına sürekli güncellenen yansıma veya yoğun probe zinciri bağlamak, özellikle web ve mobil tarafta GPU ile bellek bantını zorlayabilir. HDRI / çevre hattında statik veya seyrek güncellenen, sahneye ölçülü seçilmiş bir çevre haritasıyla yetinmek çoğu HoloDepth senaryosunda daha ekonomiktir; böylece ağır PBR yolunu tamamen iptal etmeden yansıma işinin kapsamını sınırlamış olursunuz.

Materyal optimizasyon reçetesi

Aşağıdaki liste, §1 (paylaşım ve çizim kimliği), §2 (shader ve gereksiz bayraklar) ile §3 (görsel karar) başlıklarının üretim sırasına konmuş özetidir; yeni bir yöntem ailesi önermez, aynı ana konuları uygulamaya döker.

Profesyonel bir 3D web pipeline için kontrol listesi:

  • Materyal havuzu (pooling): Benzer görünüme ihtiyaç duyan objeler için tek materyal örneği oluşturup aynı referansı paylaştırın; doğrudan §1’deki materyal başına çizim yükünü hedefler. Taslak aşamasında bile her Mesh için ayrı new MeshStandardMaterial() üretmeyi alışkanlık haline getirmeyin.
  • Shader seviyelendirme (LOD): Yakın ve kahraman objeler için MeshStandardMaterial; arka plan ve uzak kütleler için MeshLambertMaterial veya ışıktan bağımsız ihtiyaçlarda MeshBasicMaterial düşünün. Bu, §2’deki ağır / hafif shader ayrımının sahne içi uygulamasıdır.
  • Kanal paketleme: Roughness, metalness ve ambient occlusion verilerini tek dokunun R / G / B kanallarında birleştirerek örnek ve dosya sayısını düşürün; atlas reçetesindeki kanal disiplini ile hizalı kalırsınız — böylece hem bellek hem §1’deki materyal–doku eşlemesi sadeleşir.
  • Alpha test vs. şeffaflık: Keskin yaprak kenarı gibi «ya var ya yok» siluetlerde, §2’de uyarılan transparent: true yoluna düşmeden önce alphaTest değerini deneyin; blending ve derinlik sıralaması maliyetinden kaçınmak mümkün olabilir. Yumuşak kenar ve cam gibi durumlarda şeffaflık hâlâ gerekli olabilir — tek çözüm değildir.

HoloDepth teknik notu: «Daha az, daha çoktur»

Materyal sayısını düşürmek için dokuları texture atlas + simülatör çizgisinde hazırlamak iyi eşleşir. Tek materyal + tek atlas ile çok sayıda objeyi aynı «malzeme ailesinde» toplamak, web GPU performansında sık hedeflenen bir kazançtır — yine de shader varyantı ve şeffaflık gibi nedenlerle «tek draw call sihri» her zaman gerçekleşmez; atlas sayfasındaki model bunu sayıyla gösterir.

Aynı uyarıyı materyal tarafında hissettirmek için §1’deki durum simülatörünü açıp shader tipi ile şeffaflığı oynatın: atlas tek başına yetmez dediğimiz «kırılma» burada sayıya dökülür.

Sonraki okuma

Bu blok içinde doğrudan sonraki adım: Geometri karmaşıklığı (poligon bütçesi). Birleştirme stratejileri için ayrıca Buffer birleştirme dizisine; motor içi materyal ayrıntıları için Materyaller giriş sayfasına devam edebilirsiniz.