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:
- Unity Editor’da
Window > Package Manageryolunu izleyin. - Paket yöneticisinde
Unity Registryseçili olduğundan emin olun. - Arama çubuğuna
Shader Graphyazın ve paketi yükleyin.
Şimdi basit bir Shader Graph dosyası oluşturalım:
Projectpenceresinde sağ tıklayın.Create > Shader Graph > URP > PBR Graph(veya Unlit Graph) seçeneğini seçin.- Shader’ınıza bir isim verin (örn:
MyFirstShader). - 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:
- Yukarıdaki adımları takip ederek
Create > Shader Graph > URP > Unlit Graphseçeneğini seçin ve isminiSimpleUnlitolarak belirleyin. - Shader Graph Editor’ı açın. Karşınızda
Unlit Masternodunu göreceksiniz. Bu nod, shader’ınızın nihai çıktısını temsil eder. - Boş bir alana sağ tıklayın veya klavyeden
Spacetuşuna basın. Açılan arama çubuğunaColoryazın veColornodunu seçin. Colornodunun çıktısını (out)Unlit MasternodununBase Colorgirişine bağlayın.Colornodunu seçin veNode Settingspanelinden rengini istediğiniz gibi ayarlayın.- Sağ üst köşedeki
Save Assetbutonuna tıklayın.
Şimdi bu shader’ı bir materyale atayalım:
Projectpenceresinde sağ tıklayın veCreate > Materialseçeneğini seçin. İsminiMyUnlitMaterialolarak belirleyin.MyUnlitMaterial‘ı seçin.InspectorpenceresindeShaderaçılır menüsündenShader Graphs > SimpleUnlitseçeneğini bulun ve atayın.- 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:
SimpleUnlitShader Graph’ınızı tekrar açın.- Boş bir alana
Timenodunu ekleyin. Bu nod, oyunun çalışma süresini saniye cinsinden verir. Timenodunun çıktısını (Time) birSinenodunun girişine bağlayın.Sinenodu, zamanla dalgalı bir değer (sinüs dalgası) üretir.Sinenodunun çıktısını birRemapnodununIngirişine bağlayın.Remapnodu, bir değeri belirli bir aralıktan başka bir aralığa dönüştürmemizi sağlar.In Min Maxdeğerlerini-1ve1(sinüsün varsayılan aralığı),Out Min Maxdeğerlerini ise0ve1olarak ayarlayın. Bu, rengin 0 ile 1 arasında değişmesini sağlayacaktır.- Ş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. Colornodunuzu (ilk renginiz)LerpnodununAgirişine bağlayın.- Yeni bir
Colornodu daha ekleyin (ikinci renginiz) ve bunuLerpnodununBgirişine bağlayın. İkinci rengi farklı bir renge ayarlayın. Remapnodunun çıktısınıLerpnodununTgirişine bağlayın.Lerpnodunun çıktısınıUnlit MasternodununBase Colorgirişine bağlayın.Save Assetbutonuna 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.
- Yeni bir
Create > Shader Graph > URP > PBR Grapholuşturun ve isminiTexturedPBRolarak belirleyin. - Shader Graph Editor’ı açın. Karşınızda
PBR Masternodunu göreceksiniz. - Boş bir alana sağ tıklayın ve
Texture 2D Assetnodunu ekleyin. Bu nod, bir doku (texture) dosyasını shader’a almanızı sağlar. Texture 2D Assetnodunu seçin.Node Settingspanelinde,Texturealanına tıklayarak projenizdeki bir dokuyu (örn: bir ahşap veya taş dokusu) atayın.Texture 2D AssetnodununRGBAçıktısınıPBR MasternodununBase Colorgirişine bağlayın.- Şimdi bir
Sampler 2Dnodu ekleyin.Texture 2D AssetnodununTextureçıktısınıSampler 2DnodununTexturegirişine bağlayın. Bu, dokunun UV koordinatları ile örneklenmesini sağlar. Sampler 2DnodununRGBAçıktısınıPBR MasternodununBase Colorgirişine bağlayın. Bu şekilde, dokunuz objeye uygulanacaktır.- Metalik ve pürüzlülük değerlerini kontrol etmek için: Yeni bir
Vector1nodu ekleyin. BunuPBR MasternodununMetallicgirişine bağlayın. Değerini0(metal olmayan) ile1(tamamen metal) arasında ayarlayın. - Bir
Vector1nodu daha ekleyin ve bunuPBR MasternodununSmoothnessgirişine bağlayın. Değerini0(pürüzlü) ile1(pürüzsüz) arasında ayarlayın. Save Assetbutonuna 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 cihazlardaHalfveyaFixedhassasiyet, performansı artırabilir ancak görsel kaliteden ödün verebilir. Genellikle renkler ve UV koordinatları içinHalfyeterlidir. - 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 (
Ifnodları 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!



