Unity Shader Graph ile Basit Shader Oluşturma Rehberi

Unity Shader Graph kullanarak görsel tabanlı basit shader'lar oluşturmayı öğrenin. Temellerden pratik ipuçlarına, yaygın hatalardan çözümlerine kadar her şey bu rehberde.

Unity oyun motorunda görsel olarak çarpıcı sahneler yaratmanın temel taşlarından biri shader’lardır. Geleneksel olarak shader yazımı, GLSL veya HLSL gibi düşük seviyeli programlama dilleriyle karmaşık kod satırları gerektirirken, Unity, Unity Shader Graph ile bu süreci çok daha erişilebilir hale getirmiştir. Bu rehberde, Unity Shader Graph‘ın temellerini öğrenerek kendi basit shader’larınızı nasıl oluşturacağınızı adım adım keşfedeceğiz.

Unity Shader Graph Nedir?

Shader’lar, bir objenin ekranda nasıl görüneceğini (rengi, parlaklığı, dokusu, ışığa tepkisi vb.) belirleyen küçük programlardır. Geleneksel yöntemlerle shader yazmak, programlama bilgisi ve matematiksel yetenek gerektiren zorlu bir süreç olabilir. İşte burada Unity Shader Graph devreye giriyor.

Unity Shader Graph, Unity’nin High Definition Render Pipeline (HDRP) ve Universal Render Pipeline (URP) ile birlikte gelen, nod tabanlı (görsel) bir shader düzenleyicisidir. Bu araç sayesinde, kod yazmaya gerek kalmadan, farklı nodları birbirine bağlayarak karmaşık görsel efektler ve materyal özelliklerini kolayca oluşturabilirsiniz. Görsel arayüzü sayesinde, shader’ın nasıl çalıştığını anlamak ve geliştirmek çok daha sezgisel hale gelir.

Shader Graph Ortamının Kurulumu

Unity Shader Graph kullanabilmek için projenizin Universal Render Pipeline (URP) veya High Definition Render Pipeline (HDRP) kullanıyor olması gerekmektedir. Eğer projeniz Built-in Render Pipeline ise, yeni bir URP veya HDRP projesi oluşturmanız veya mevcut projenizi yükseltmeniz gerekir.

Yeni bir URP projesi oluşturduğunuzda, Shader Graph paketi otomatik olarak kurulu gelir. Eğer mevcut bir projede kullanacaksanız:

  1. Unity Editor’da Window > Package Manager yolunu izleyin.
  2. Paket yöneticisinde Unity Registry seçili olduğundan emin olun.
  3. Arama çubuğuna Shader Graph yazın ve paketi yükleyin.

Şimdi basit bir Shader Graph dosyası oluşturalım:

  1. Project penceresinde sağ tıklayın.
  2. Create > Shader Graph > URP > PBR Graph (veya Unlit Graph) seçeneğini seçin.
  3. Shader’ınıza bir isim verin (örn: MyFirstShader).
  4. Yeni oluşturduğunuz Shader Graph dosyasına çift tıklayarak Shader Graph Editor’ı açın.

Basit Bir Unlit Shader Oluşturma

Unlit shader’lar, ışık kaynaklarından etkilenmeyen, genellikle sabit renkli veya kendi ışığını yayan objeler için kullanılır. Basit bir Unlit Shader oluşturalım:

  1. Yukarıdaki adımları takip ederek Create > Shader Graph > URP > Unlit Graph seçeneğini seçin ve ismini SimpleUnlit olarak belirleyin.
  2. Shader Graph Editor’ı açın. Karşınızda Unlit Master nodunu göreceksiniz. Bu nod, shader’ınızın nihai çıktısını temsil eder.
  3. Boş bir alana sağ tıklayın veya klavyeden Space tuşuna basın. Açılan arama çubuğuna Color yazın ve Color nodunu seçin.
  4. Color nodunun çıktısını (out) Unlit Master nodunun Base Color girişine bağlayın.
  5. Color nodunu seçin ve Node Settings panelinden rengini istediğiniz gibi ayarlayın.
  6. Sağ üst köşedeki Save Asset butonuna tıklayın.

Şimdi bu shader’ı bir materyale atayalım:

  1. Project penceresinde sağ tıklayın ve Create > Material seçeneğini seçin. İsmini MyUnlitMaterial olarak belirleyin.
  2. MyUnlitMaterial‘ı seçin. Inspector penceresinde Shader açılır menüsünden Shader Graphs > SimpleUnlit seçeneğini bulun ve atayın.
  3. Bu materyali sahnenizdeki herhangi bir 3D objeye (örn: Cube) sürükleyip bırakın. Objektinizin artık belirlediğiniz renkte olduğunu göreceksiniz.

Renkli Animasyon Eklemek

Şimdi bu shader’a basit bir animasyon ekleyelim. Örneğin, rengin zamanla değişmesini sağlayalım:

  1. SimpleUnlit Shader Graph’ınızı tekrar açın.
  2. Boş bir alana Time nodunu ekleyin. Bu nod, oyunun çalışma süresini saniye cinsinden verir.
  3. Time nodunun çıktısını (Time) bir Sine nodunun girişine bağlayın. Sine nodu, zamanla dalgalı bir değer (sinüs dalgası) üretir.
  4. Sine nodunun çıktısını bir Remap nodunun In girişine bağlayın. Remap nodu, bir değeri belirli bir aralıktan başka bir aralığa dönüştürmemizi sağlar. In Min Max değerlerini -1 ve 1 (sinüsün varsayılan aralığı), Out Min Max değerlerini ise 0 ve 1 olarak ayarlayın. Bu, rengin 0 ile 1 arasında değişmesini sağlayacaktır.
  5. Şimdi bir Lerp (Linear Interpolate) nodu ekleyin. Bu nod, iki renk veya değer arasında bir faktöre (T) göre geçiş yapar.
  6. Color nodunuzu (ilk renginiz) Lerp nodunun A girişine bağlayın.
  7. Yeni bir Color nodu daha ekleyin (ikinci renginiz) ve bunu Lerp nodunun B girişine bağlayın. İkinci rengi farklı bir renge ayarlayın.
  8. Remap nodunun çıktısını Lerp nodunun T girişine bağlayın.
  9. Lerp nodunun çıktısını Unlit Master nodunun Base Color girişine bağlayın.
  10. Save Asset butonuna tıklayın ve sahnenize geri dönün. Objektinizin renginin belirlediğiniz iki renk arasında gidip geldiğini göreceksiniz.

PBR Shader ile Daha Fazla Detay

Physically Based Rendering (PBR) shader’lar, ışığın materyallerle gerçekçi bir şekilde etkileşimini simüle eder. Yeni bir PBR Graph oluşturarak temel bir doku ve metalik-pürüzlülük (metallic-smoothness) haritası ekleyelim.

  1. Yeni bir Create > Shader Graph > URP > PBR Graph oluşturun ve ismini TexturedPBR olarak belirleyin.
  2. Shader Graph Editor’ı açın. Karşınızda PBR Master nodunu göreceksiniz.
  3. Boş bir alana sağ tıklayın ve Texture 2D Asset nodunu ekleyin. Bu nod, bir doku (texture) dosyasını shader’a almanızı sağlar.
  4. Texture 2D Asset nodunu seçin. Node Settings panelinde, Texture alanına tıklayarak projenizdeki bir dokuyu (örn: bir ahşap veya taş dokusu) atayın.
  5. Texture 2D Asset nodunun RGBA çıktısını PBR Master nodunun Base Color girişine bağlayın.
  6. Şimdi bir Sampler 2D nodu ekleyin. Texture 2D Asset nodunun Texture çıktısını Sampler 2D nodunun Texture girişine bağlayın. Bu, dokunun UV koordinatları ile örneklenmesini sağlar.
  7. Sampler 2D nodunun RGBA çıktısını PBR Master nodunun Base Color girişine bağlayın. Bu şekilde, dokunuz objeye uygulanacaktır.
  8. Metalik ve pürüzlülük değerlerini kontrol etmek için: Yeni bir Vector1 nodu ekleyin. Bunu PBR Master nodunun Metallic girişine bağlayın. Değerini 0 (metal olmayan) ile 1 (tamamen metal) arasında ayarlayın.
  9. Bir Vector1 nodu daha ekleyin ve bunu PBR Master nodunun Smoothness girişine bağlayın. Değerini 0 (pürüzlü) ile 1 (pürüzsüz) arasında ayarlayın.
  10. Save Asset butonuna tıklayın ve bu shader’ı yeni bir materyale atayarak sonucunu görün.

Shader Graph ile Çalışırken Pratik İpuçları

1. Node Preview ile Hızlı Geri Bildirim

Shader Graph Editor’da her nodun sağ üst köşesinde küçük bir önizleme penceresi bulunur. Bu önizlemeler, nodun o anki çıktısının neye benzediğini görsel olarak görmenizi sağlar. Özellikle karmaşık nod zincirlerinde, her adımda ne olduğunu anlamak için bu özellik çok değerlidir. Bir nodu seçtiğinizde, ana önizleme penceresi de o nodun çıktısını gösterir.

2. Klavye Kısayolları ve Arama

Nod eklemek için boş bir alana sağ tıklamak yerine Space tuşuna basarak hızlı arama çubuğunu açabilirsiniz. Bu, nodları çok daha hızlı bulmanızı ve eklemenizi sağlar. Ayrıca, bir nodun çıktısından sürükleyip boş bir alana bıraktığınızda, Unity otomatik olarak uyumlu nodları önerir.

3. Gruplama ve Düzenleme

Karmaşık shader’lar oluşturmaya başladığınızda, nodlar hızla birikebilir ve grafiğiniz dağınık hale gelebilir. Nodları seçip sağ tıklayarak Group Selection seçeneğini kullanın. Bu, ilgili nodları tek bir kutu içine alır ve grafiğinizi okunabilir hale getirir. Ayrıca, Sticky Note nodunu kullanarak grafiğin farklı bölümlerine açıklamalar ekleyebilirsiniz.

Yaygın Hatalar ve Çözümleri

1. Yanlış Render Pipeline Kullanımı

Hata: Shader Graph materyalleriniz pembe renkte görünüyor veya hiç çalışmıyor.
Çözüm: Projenizin URP veya HDRP kullandığından emin olun. Shader Graph, Built-in Render Pipeline ile çalışmaz. Yeni bir URP/HDRP projesi oluşturun veya mevcut projenizi yükseltin.

2. Shader’ı Materyale Atamayı Unutmak

Hata: Shader’ı oluşturdunuz ama objenizde hiçbir değişiklik görmüyorsunuz.
Çözüm: Oluşturduğunuz Shader Graph dosyasından bir materyal oluşturmanız ve bu materyali objenize atamanız gerekir. Materyali seçtikten sonra Inspector penceresinden Shader açılır menüsünden kendi Shader Graph’ınızı seçtiğinizden emin olun.

3. Nod Bağlantı Hataları

Hata: Nodları birbirine bağlamaya çalışırken hata alıyorsunuz veya bağlantı kuramıyorsunuz.
Çözüm: Nodların giriş ve çıkış tiplerinin uyumlu olduğundan emin olun (örn: Vector3 bir girişe Vector1 bağlamaya çalışmak hata verebilir). Genellikle Unity, uyumsuz bağlantıları engeller veya otomatik dönüştürmeye çalışır, ancak bazen manuel düzeltme gerekebilir.

4. Performans Sorunları

Hata: Shader’ınız çok karmaşık ve oyununuzun performansını düşürüyor.
Çözüm: Shader’lar GPU’da çalışır ve çok fazla hesaplama, performansı olumsuz etkileyebilir. Özellikle Fragment Shader’da (objenin her pikseli için çalışan kısım) gereksiz hesaplamalardan kaçının. Karmaşık bölümleri Sub Graph‘lara ayırarak yeniden kullanılabilir hale getirin ve gereksiz nodları silin.

Performans ve Optimizasyon

Shader’lar, özellikle mobil platformlar için performans kritik olabilir. İşte bazı ipuçları:

  • Basit Tutun: Mümkün olduğunca az nod ve işlem kullanın. Her ek nod, GPU üzerinde ek bir maliyet demektir.
  • Sub Graph’ları Kullanın: Tekrar eden nod gruplarını Sub Graph‘lara dönüştürün. Bu, sadece grafiği düzenli tutmakla kalmaz, aynı zamanda Unity’nin shader’ı daha verimli bir şekilde derlemesine yardımcı olabilir.
  • Precision (Hassasiyet): Nodların hassasiyet ayarlarını (Float, Half, Fixed) doğru kullanın. Özellikle mobil cihazlarda Half veya Fixed hassasiyet, performansı artırabilir ancak görsel kaliteden ödün verebilir. Genellikle renkler ve UV koordinatları için Half yeterlidir.
  • Kullanılmayan Çıktıları Bağlamayın: Bir nodun çıktısını kullanmıyorsanız, onu bir yere bağlamayın. Unity akıllıca kullanılmayan hesaplamaları atlayabilir.
  • Branching’den Kaçının: Çok sayıda koşullu ifade (If nodları gibi) içeren shader’lar performans sorunlarına yol açabilir. Mümkün olduğunca matematiksel işlemlerle çözmeye çalışın.

Unity Shader Graph, Unity’de görsel olarak çarpıcı ve performanslı materyaller oluşturmak için güçlü ve erişilebilir bir araçtır. Bu rehberdeki temel bilgileri kullanarak kendi shader’larınızı oluşturmaya başlayabilir ve yaratıcılığınızın sınırlarını zorlayabilirsiniz. Denemekten ve farklı nod kombinasyonlarını keşfetmekten çekinmeyin!

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir