Bu Makale Hakkında
Daha erişilebilir olması için bilerek basitleştirdim, buna semantik terminoloji kullanımı da dahil - bazı bilgiler eksik ve karmaşık bir konu. Herkesi tartışmaya dostça bir şekilde katkıda bulunmaya açıkça davet ediyorum.
Bu bilgiler teknik olarak bazı açılardan Niagara için de geçerlidir çünkü Niagara hesaplama gölgelendiricileri üretmektedir.
Material Editor
Öncelikle Material Editor’un ne olduğunu anlamamız gerekiyor .. Bu, oldukça basit bir şekilde , bir node grafiği ve bazı meta veriler (karıştırma modları vb.) yardımıyla birden fazla shader üreten ve bunların hepsinin düzgün bir küçük assets’te (malzeme) depolandığı bir araçtır .
Grafikteki her atomik (yeşil) node, derleyiciye hangi kodun (bu durumda HLSL) üretileceğini bildirir ve sonunda birkaç HLSL shader’ımız oluşur. Kullanım bayraklarına ve etki alanı türlerine bağlı olarak, ancak genellikle bir malzeme için birkaç vertex shader’ımız ve piksel shader’ımız olur.

Oluşturulan Shader Kodu
Oluşturulan ara HLSL kodu Window > Shader Code > HLSL Code'dan görüntülenebilir.
Buradan ayrıca oluşturulan platforma özgü kodu da görebiliriz - bu HLSL olabilir veya hatta GLSL’e (örneğin Android) dönüştürülebilir. Çok sayıda şablonlanmış kod göreceksiniz (bu MaterialTemplate.usf’den geliyor) - endişelenmeye gerek yok çünkü derleyici sonunda ihtiyacımız olmayan her şeyi kaldıracaktır.

Material Instance (Material Child)
Material Instance geleneksel malzeme kavramını (yani, Unity’nin tanımı gibi, belirli bir gölgelendirici kümesi için tüm parametreleri içeren bir paket) ve sınıf kalıtımını birleştiren bir kavramdır. İlginç bir kavramdır ve tüm bunlar temelde, birbirlerinden kalıtım alabilen bir malzeme örnekleri ebeveyn-çocuk hiyerarşisine sahip olabileceğimiz anlamına gelir.
Bir materyal örneği, temel materyalin bir kopyasıdır fakat bazı parametreler üzerinde özelleştirmeler yapılmış olabilir. Örneğin, bir temel metal materyaliniz varsa, bu materyalin farklı renklerde, pürüzlülük seviyelerinde veya parlaklık derecelerinde varyasyonlarını oluşturabilirsiniz. Materyal örnekleri, performansı artırabilir ve daha hızlı işlem yapılmasını sağlayabilir çünkü temel materyalin parametrelerini değiştirmek yerine, örnek üzerinde yapılan değişiklikler daha hızlı işlenir.
Material Instance derinlemesine değinilmeyecek genel yapısını anlamak adına açıklandı.
Shader’ları Optimize Etme
Instruction Counts
Talimat sayıları bize temel olarak iki şeyi anlatır.
Shader’ların bellekteki (ve diskteki) boyutu – daha fazla Instruction demektir. Shader’ın tüketeceği daha fazla bellek anlamına gelir.
Shader’ının ne kadar yavaş olduğuna dair potansiyel olarak çok üst düzey bir bakış açısı… ancak tam olarak da değil
Unreal, İstatistikler sekmesi ile materyalinizin ne kadar talimat ürettiğine dair bazı istatistikler sunar ; bu bilgi, materyalinizin ne ürettiğine dair faydalı bir ilk bakış sağlar.

Oluşturulan ara HLSL koduna dayalı bir tahmin! Bu yüzden bu genellikle yanlıştır ve bize yalnızca çok yüksek seviyeli bir görünüm sunar. Bu sorunu çözmek için, bu platformlar için üretilen gölgelendiriciler için gerçek talimat sayılarını (ve diğer istatistikleri) görüntülemek üzere Malzeme Düzenleyicisi içindeki Platform İstatistikleri aracını kullanabiliriz . Bu işe yarar çünkü bu platformlar için bağlantılı derleyicileri kullanacaktır. Bu görünüm inanılmaz derecede faydalıdır çünkü bize farklı kullanım bayrakları için üretilen gölgelendiriciler hakkında biraz daha fazla bilgi verecektir, yani iskelet ağı için tepe gölgelendiriciniz statik bir ağdan çok daha ağır olacaktır!
Tools > Audit > Statistics ile projenize uygun detayları görerek optimize süreçlerini değiştirebilirsiniz.

Static Parameters
Bunun hakkında konuşmadan önce, statik parametrelerden bahsedelim ! Bunlar motor kodunda bahsedilenlerdir, ancak esasen bahsettiğimiz şey..
- Temel özellik geçersiz kılmaları (karıştırma modu, shader modeli, iki taraflı vb.)
- Malzeme katmanları
- Statik anahtarlar ve statik kanal maskesi parametreleri ( ancak normal kanal parametreleri değil – bunlar sadece nokta ürünleridir)
- Manzara katmanları – her manzara proxy’si, hangi katmanların boyandığına ve hangi sırayla boyandığına bağlı olarak yeni permütasyonlar üretecektir (bildiğim kadarıyla bunlar proxy’ler arasında paylaşılmıyor, ancak bu durum son sürümlerde değişmediyse)
Bunlar , materyal örneklerinin içinde değiştirilebilen ve permütasyonu kirletecek, bu materyal için yeni gölgelendiricilerin üretilmesine neden olacak özelliklerdir.
Bu, derleme zamanında tanıtılan bu özellikler/kaynaklar için gölgelendiricilerimizin tam kopyalarını üretecek ve daha fazla yönerge tarafından daha fazla gölgelendirici belleğinin tüketilmesine neden olacaktır.
Eski sürümlerde sadece statik parametre geçersiz kılmalarını kullanmak bu soruna yol açıyordu, ancak son sürümlerde bu sorunun çözüldüğü görülüyor .
Usage Flags
Kullanım bayrağı bu sorunu daha da ileri götürür ( malzemenizde hangi ilkel tiplerle işlenebileceğini belirleyen tüm onay kutuları ). Bunun nedeni, her statik parametrenin her kullanım bayrağı için yeni gölgelendiriciler üretecek olmasıdır (bazı gölgelendiriciler neyse ki paylaşılır).

Bu sorunun önüne geçmek aslında oldukça basittir – Editörde Kullanımı Otomatik Olarak Ayarla seçeneğini devre dışı bırakın ; bu, editör zamanında materyal ilkel tiplere uygulandığında materyallerdeki işaretleri otomatik olarak işaretleme işlevini devre dışı bırakır ve materyalin neyle kullanılacağını açıkça tanımlamayı yazara bırakır.
GPU Döngüleri, Eski donanımlar için Sampling Textures – Pre-Fetches için Optimizasyon (Tepe Noktası Ara Değerlendiricileri) gibi daha uzun makaleye bu linkten ulaşabilirsiniz.