Gameloper'a Hoş Geldiniz!

Gameloper, oyun geliştiriciler için oluşturulmuş bir topluluktur. Unity, Unreal Engine ve Godot gibi oyun motorları hakkında bilgi paylaşabilir, sorular sorabilir ve ücretsiz assetler keşfedebilirsiniz.

Hemen Kayıt Ol!

Unity Shader Graph ile İleri Seviye Görsel Efekt Mimarisi: Master Stack ve Custom Function Kullanımı

  • Konuyu Başlatan Konuyu Başlatan Druid
  • Başlangıç tarihi Başlangıç tarihi

Druid

Administrator
Yönetici
Katılım
11 Mar 2026
Mesajlar
52
Tepkime puanı
5
Puan
8
Unity Shader Graph ile İleri Seviye Görsel Efekt Mimarisi: Master Stack ve Custom Function Kullanımı

Giriş: Neden Sadece Kod Yazmak Yetmez?

Modern oyun geliştirmede görsel kalite, sadece yüksek poligonlu modellerden ibaret değildir. Unity Shader Graph, teknik sanatçılar (Technical Artists) için düğüm tabanlı (node-based) bir iş akışı sunarak karmaşık matematiksel hesaplamaları görselleştirir. Orta seviye bir geliştirici olarak, muhtemelen temel PBR (Physically Based Rendering) iş akışlarına hakimsinizdir. Ancak bu rehberde, standart düğümlerin dışına çıkıp performansı optimize eden ve kendi HLSL fonksiyonlarımızı entegre eden ileri seviye tekniklere odaklanacağız.

1. Universal Render Pipeline (URP) ve Lit Master Stack Yapılandırması

Shader Graph'in kalbi olan Master Stack, Shader'ın son çıktısını belirleyen noktadır. Standart bir "Lit" shader oluştururken karşımıza çıkan Vertex ve Fragment aşamalarını anlamak, optimizasyonun ilk kuralıdır.

  • Vertex Stage: Pozisyon, Normal ve Tangent verilerinin işlendiği yerdir. Hareketli bitki sistemleri (Wind Shaders) için Position girişine müdahale edilir.
  • Fragment Stage: Renk, Pürüzsüzlük (Smoothness) ve Metaliklik gibi piksel bazlı verilerin işlendiği bölümdür.

Profesyonel İpucu: Shader ayarlarında (Graph Settings) "Surface Type" değerini Transparent yapacaksanız, "Preserve Specular" seçeneğini aktif ederek cam benzeri yüzeylerde yansıma kalitesini koruyabilirsiniz.

2. Custom Function Node: HLSL Gücünü Grafiğe Dahil Etmek

Bazen Shader Graph'in dahili düğümleri yetersiz kalabilir veya karmaşık bir matematiksel işlemi onlarca düğümle yapmak performansı düşürebilir (Instruction Count artışı). Bu noktada Custom Function Node devreye girer.

Örneğin, özel bir gürültü (noise) algoritması yazmak istiyoruz:

Kod:
void MyCustomNoise_float(float2 UV, float Scale, out float Out)
{
    Out = frac(sin(dot(UV, float2(12.9898, 78.233))) * 43758.5453) * Scale;
}

Önemli Not: Unity, fonksiyon isimlerinde tip belirtecini (örn: _float veya _half) zorunlu tutar. Bu, shader derleyicisinin hangi hassasiyette (precision) çalışacağını belirler.

3. Shader Optimizasyonu: Vector İşlemleri ve Texture Packing

Orta seviye bir projede en büyük darboğaz, çok sayıda Texture Sampler kullanılmasıdır. Mobil platformlarda limit 16'dır ancak performans için bunun çok altına inilmelidir.

Texture Packing (Kanal Paketleme) Tekniği:
Bir texture dosyasının RGBA kanallarını farklı veriler için kullanın:
  • R (Red): Metallic
  • G (Green): Occlusion
  • B (Blue): Detail Mask
  • A (Alpha): Smoothness

Bu sayede 4 farklı veri için 4 ayrı texture okunması yerine, tek bir Sample Texture 2D düğümü ile tüm veriler çekilmiş olur. Bu, bellek bant genişliğini %75 oranında rahatlatır.

4. Vertex Displacement ile Dinamik Çevre Etkileşimi

Karakterin karın üzerinde yürümesi veya suyun dalgalanması gibi efektler için Vertex Displacement kullanılır. Burada dikkat edilmesi gereken, kullanılan mesh'in yeterince subdivision (alt bölümleme) değerine sahip olmasıdır.

Dikkat: Yüksek displacement değerleri, nesnenin Bounding Box (sınır kutusu) dışına çıkmasına neden olabilir. Bu durum kameranın nesneyi "görünmüyor" sanıp rendere katmamasına (Culling) yol açar. Renderer üzerindeki "Bounds Scale" değerini artırarak bu sorunu çözebilirsiniz.

5. Procedural Pattern Generation: Düğümlerle Sanat

Tiling And Offset düğümü, dokuların yüzeydeki dağılımını kontrol eder. Ancak gerçekçi bir görünüm için "Tiling Noise" eklemek gerekir. Gradient Noise ile UV değerlerini manipüle ederek organik, tekrarlamayan yüzeyler elde edebilirsiniz.

Kod:
// Mantık şudur:
UV + (Noise * Intensity) = Jittered UV

6. Performans Analizi ve Keywords

Shader Graph içerisinde kullanabileceğiniz Boolean Keyword ve Enum Keyword özellikleri, shader varyasyonları oluşturmanızı sağlar. Bu, "Multi-compile" veya "Shader Feature" olarak derlenir.

  1. Shader Feature: Eğer bir özellik (örneğin Emission) materyalde kapalıysa, o kod parçası nihai build dosyasına dahil edilmez.
  2. Multi-compile: Tüm varyasyonlar derlenir. Çalışma zamanında (runtime) efekt değiştirecekseniz bunu kullanmalısınız.

Sonuç ve Tavsiyeler

Unity Shader Graph sadece bir görselleştirme aracı değil, aynı zamanda GPU üzerinde koşan güçlü bir programlama arayüzüdür. Kendi shader kütüphanenizi oluştururken:

  • Daima Sub-Graph kullanarak tekrarlayan işlemleri (örn: Normal Blend) paketleyin.
  • Olabildiğince Half precision kullanın; renkler ve basit maskeler için float (32-bit) gereksizdir.
  • Frame Debugger kullanarak hazırladığınız shader'ın render pipeline üzerindeki maliyetini kontrol edin.

Karmaşık projelerde graph karmaşasını önlemek için Group özelliğini kullanın. Düğümleri seçip sağ tıkladığınızda "Create Group" diyerek görsel düzeni sağlayabilirsiniz. Bu, ekip çalışmalarında diğer geliştiricilerin shader'ı anlamasını %200 daha kolay hale getirir.

Herhangi bir sorunuz olursa veya spesifik bir efektin (örn: Dissolve, Rim Light, Triplanar Mapping) yapımını merak ediyorsanız yorumlarda belirtebilirsiniz!
 
Geri
Üst