Unity Shader Graph, shader dosyalarınızı standart kodlama yöntemi yerine görsel programlama diyebileceğimiz yöntemle oluşturmamızı sağlayan bir araçtır. Daha önce Shader Forge, Amplify Shader Editor gibi eklentiler ile benzer şekilde shader oluşturma şansımız vardı. Ancak Unity’nin yeni HDRP ve URP teknolojileriyle gelen Shader Graph paketi, bu özelliğe ücretsiz olarak erişmemizi sağlıyor.
HDRP ve URP konusuna gelirsek, aslında standart olan sistemin de üstüne koyarak Unity’nin görsel becerilerini arttıran, render becerisini daha kullanıcı dostu ve daha performanslı halde kullanmamızı sağlayan render pipeline adındaki yapılar. Türkçe’ye çevirdiğimizde direkt çevirirsek “boru hattı” gibi bir anlam karşımıza çıksa da, “edinme yolu” daha doğru bir kelime olacaktır. Grafikleri elde etme yöntemimiz dersek yanlış olmaz.
Shader Graph için bunların önemli olmasının nedeniyse, projemizin ya HDRP ya da URP altyapısına sahip olması gerekmesi. Yani Shader Graph özelliklerinden yararlanabilmek için bu grafik edinme yollarından birini kullanmamız gerekiyor. Aynı anda sadece 1 tanesini kullanabilmekteyiz, bu da aklınızda olsun.
Unity Shader Graph Kurulumu
Unity Shader Graph kurulumu konusunda çok çok şanslıyız, HDRP veya URP tabanlı herhangi bir proje üzerinde, otomatik olarak bunu kullanabilmekteyiz. Yani render pipeline içerisinde dahil olan bir özellik. HDRP veya URP tabanlı bir proje nasıl oluşturulur veya varolan projeye nasıl eklenir konusunda bilgi edinmek isterseni “Unity HDRP ve URP“ adlı yazımıza göz atabilirsiniz. Ancak herhangi bir nedenden dolayı aktif edemediyseniz de, package manager üzerinden kontrolleri nasıl sağlarsınız ona bir göz atalım sizinle.
İlk yapmanız gereken, durumdan emin olmak. Bunu da en garanti şekilde, bir shader yaratabiliyor muyuz buradan anlarız. Project paneli içerisinde boş bir alana sağ tıklayıp “Create>Shader” altında “graph” içeren bir seçenek varsa, tamamdır hiçbir sıkıntımız yok, direkt olarak “Unity Shader Graph Kullanımı” başlığına inebilirsiniz.
Eğer yoksa, yapmamız gereken Window>Package Manager yoluyla, package manager penceresini açmak. Şayet bilmiyorsanız, bu pencere sayesinde Unity’nin bize sunduğu ve bizim AssetStore üzerinden aldığımız paketleri projeye ekleyebilir veya varolanları güncelleyebiliriz. Daha ayrıntılı bilgi edinmek isterseniz “Unity Package Manager” isimli yazımıza göz atabilirsiniz.
Package Manager penceresini açtıktan sonra, solda bulunan “Packages” seçeneğinin yanında “Unity Registery” yazdığından emin olun. Ardından isterseniz sol taraftaki listeyi kaydırarak, isterseniz arama kısmına “Shader Graph” yazarak alakalı eklentiyi bulabilirsiniz. Seçtikten sonra açılan panelde, şayet yüklü değilse Download ve ardından Import ile projenize dahil edin, eğer yüklü halde ise de Update seçeneği aktif olabilir. Bu seçenek ile güncellemeyi deneyin. Bu şekilde artık kullanıma hazır olacaksınız. Aksi bir durum olursa ve kontrol ettiğiniz durumda yine de bahsettiğimiz seçenekleri göremiyorsanız farklı bir proje oluşturup kontrolü sağlayabilirsiniz. Projenin kendisinde bir sorun varsa büyük ihtimalle console üzerinden hata da alacaksınızdır.
Unity Shader Graph Kullanımı
Unity Shader Graph kullanımı için ilk yapmamız gereken tabii ki bir graph dosyası oluşturmak. Yazının öncesinde Create seçeneği altından bir kontrol sağlamıştık. Yine aynı yolu izleyerek “PBR Graph” oluşturmanızı istiyorum. Basitçe bahsetmek gerekirse PBR, İngilizce açılımı ile “Physically based rendering”, gerçek dünyadaki gibi fizik tabanlı render işlemi gerçekleştirmemizi sağlayan bir shader türü. Işığın fiziksel olarak etkilerinden faydalanmamızı sağlıyor bu tür.
Dosyayı oluşturduktan sonra istediğiniz gibi isimlendirebilirsiniz. Tabii, shader oluşturduk ama Unity içerisinde kullanabimemiz için bunu bir materyale atamamız gerekiyor. İsterseniz yeni oluşturduğunuz dosyamıza sağ tıklayıp “Create>Material” ile direkt bu dosyayı temel alan bir materyal oluşturabilirsiniz ya da var olan bir materyalin üzerine sürükleyip bırakarak atamayı sağlayabilirsiniz. Pek tabii, sahnemizde görsek de fena olmaz bu materyali. O yüzden bir “Sphere” objesi oluşturup materyalimizi bu objemize atayalım. Bunu yaptıktan sonra artık kullanımdan bahsedebiliriz.
Adım adım bir basit bir örnek yaparak ilerlemek istiyorum burada. Shader dosyamıza çift tıklayarak açmamız gerekiyor öncelikle. Bunu yaptıktan sonra karşınıza aşağıdaki gibi bir pencere gelmeli.
Bu görselde gördüğümüz kutucuk Unity’nin “Node” olarak isimlendirdiği yapılar. Dikkatinizi çekmiştir, sol tarafında bazı noktalar bulunuyor. Bu noktalar sayesinde bu kutucukları birbirine bağlayabiliyor, bu sayede bir akış oluşturabiliyoruz. E akış olunca noluyor derseniz, aslında bu kutuların bir fonksiyon gibi çalıştığı söyleyebiliriz. Mantık çok basit, sol taraftan değişkenleri fonksiyona veriyoruz, sağ taraftan da fonksiyon içerisinden sonuçları elde ediyoruz. Sol giriş, sağ çıkış. Çok basit.
Tahmin ettiğiniz üzere, şu anda PBR Graph kutucuğu bizden giriş için değerler veriyor. Bu aşamada objemizi renklendirmeye geçebiliriz. Bunun için yapmamız gereken “Color” tipinde bir kutucuk oluşturmak. Bu pencere içerisinde boş bir alana sağ tıklayın, ardından “Create Node” seçeneğine tıklayın. Aşağıdaki gibi bir arama penceresi çıkacaktır. GameObject üzerinden bileşen eklemek gibi, gayet basit. İstersek başlıklar altından istersek arama kısmından faydalanarak kutucukları bulabiliriz.
Şu aşamada renklendirme için bize “Color” kutusu gerektiğini söylemiştim. Arama kısmına bunu direkt yazın ve çıkan seçeneğe tıklayın. Bu sayede bir kutucuk eklenecek. Buradaki renk paletinden yararlanarak istediğiniz rengi seçebilirsiniz. Ardından “Out” değerini PBR Master üzerinden “Albedo” kısmına bağlayacağız. Aşağıdaki hareketli görselden adım adım nasıl yapıldığını da görebilirsiniz. Ben siyah rengi seçtim, siz de istediğinizi seçebilirsiniz. Tabii unutmadan, yaptığınız değişiklikler sonrasında sol üstte bulunan “Save Asset” seçeneğine tıklamayı unutmayın, dosyamızı bu şekilde kaydediyoruz.
Eğer kutucukları silmek, çoğaltmak veya kopyalayıp yapıştırmak isterseniz, seçili haldeyken sağ tıklamanız yeterli. Burada bütün seçenekleri görebiliyorsunuz. Ayrıca, boş bir alana tıklayıp farenizi sürükleyip bırakarak, belirlediğiniz alan içerisinde çoklu şekilde de seçim yapmanız mümkün. Standart olarak aslında dosya sisteminden aşina olduğumuz yapılar bunlar.
BlackBoard
Açıkçası, bu rengin materyal üzerinden de değiştirilebiliyor olması güzel olur. Bunu da başarmak çok kolay. İlk görselde dikkatinizi çekmiş olmalı. Sol kısımda koyu renkli bir bölge bulunuyor. Eğer bu sizde aktif değilse, sağ üstte “Blackboard” isimli, evet karatahta, butona tıklamanız gerekli. Bu sayede açıp kapatabiliyorsunuz.
Eğer konumundan mennun değilseniz, üstündeki daha koyu olan kısmından tutup sürükleyerek ekranda farklı bir yere konumlandırmanız mümkün. Ayrıca, sağ alt kısmından büyütüp küçültmemiz de mümkün.
Blackboard, shader üzerinde değişkenler oluşturmamızı ve bunları sonrasında farklı materyallerde farklı değerlere sahip olacak şekilde düzenlememizi sağlayan bir özellik. Aynı bileşenlerde kısımlardan her objeye farklı bir transform değeri verebilmemiz gibi. Bu kısımda “+” butonuna tıklamanızı ve Color seçeneğini seçmenizi istiyorum. Yeni bir alan oluşacak burada, bunun ismini “Birincil Renk” veya genel kullanımda da olduğu gibi “Main Color” şeklinde belirleyebilirsiniz.
Altında gördüğünüz gibi farklı seçenekler bulunuyor. Bunları şimdi belirlesek de, sonrasında materyaller üzerinde değiştirebiliriz. Tabii bunu oluşturduk ama nasıl kullanacağız derseniz de, çok basit. Değişkenin isminin olduğu alanın üzerine gelin, etrafının farklı renge büründüğünü göreceksiniz. Bundan sonra tıklayıp sürükleyerek boş bir alana alabilirsiniz. Daha sonrasında da daha önce yaptığımız gibi PBR Master kutucuğuna bağlamanızı istiyorum.
Eh işlem tamam 🙂 Gidip materyalinizi de kontrol ederseniz, yeni bir alan oluştuğunu göreceksiniz. Bu şekilde farklı değişkenler ekleyebilir ve objelerinizde kullanabilirsiniz. Bunlar arasında texture dosyaları da bulunuyor. Tıkladığımız “+” butonu üzerinden ne tarz değişkenler ekleyebileceğimizi görebilirsiniz. İncelemenizi öneririm. Ayrıca, artık kullanmadığımız “Color” kutucuğunu da silmenizi istiyorum.
Renk dışında, direkt görsel, yani Texture eklemeniz de mümkün. Texture dosyasına sahip herhangi bir modeliniz varsa, direkt onu da kullanabilirsiniz. Anca ben şu linkteki texture dosyalarından birini kullanacağım. Prototipleme aşamasında işime yarayan bir paket, size de öneririm. Aynı Color değişkeni eklediğimiz gibi, Texture değişkenini de blackboard üzerinden ekliyorum. Renk tipindeki değişkenden farklı olarak, Texture dosyamı Albedo kanalına direkt bağlamam mümkün değil.
Resimleri, görselleri shader içerisinde kullanabilmek için, “Sample Texture2D” kutucuğunu kullanmamız gerekiyor. Bunun sayesinde aslında UV işlemlerini de gerçekleştirebiliyoruz, yani tiling, offset gibi ayarları da yapabiliyoruz. Bu yüzden böyle bir yapı kullanmak da mantıklı. Yine aşağıdaki görselde, adım adım nasıl ekleyeceğimizi de görebilirsiniz.
Bunu yaptıktan sonra isterseniz materyal üzerinden, isterseniz de BlackBoard içerisindeki alandan “default” ismindeki alana bir texture objesi atayarak istediğiniz görseli materyalinize ekleyebilirsiniz.
Main Preview
Main Preview, shader graph içerisinde yaptığımız değişikliklerin ön izlemesini görebildiğimiz alandır. Şayet sizde aktif değilse, aynı Blackboard için yaptığımız şekilde sağ üst kısımda “Main Preview” yazan alandan bunu açıp kapatabilirsiniz. Bu sayede sahneye dönmenize gerek kalmadan nasıl bir görüntü elde ediyorsunuz bunu görmeniz mümkün.
Standart olarak küre şeklinde bir obje üzerinde bu değişiklikleri görüyoruz. Ancak bunu değiştirme şansına sahibiz. Eğer görselin üzerine sağ tıklarsak farklı seçeneklerin olduğunu görebiliriz. Buradan “Cube” seçeneğini seçmenizi istiyorum. Bunu yaptıktan sonra büyük ihtimalle bir kare şekli görüyorsunuz, bir şeyler yanlış gibi.
Şayet sol tıklayıp farenizi hareket ettirirseniz, 3 boyutlu olarak bir küp elde ettiğimizi de görebilirsiniz. Sadece başlangıç pozisyonu ve açısı yüzünden öyle gözüküyordu.
Bunun dışında, en altta “Custom Mesh” seçeneği bulunuyor. Şayet buna tıklarsanız, mesh tipinde bir değişken seçmemiz için bir ekran karşımıza çıkacaktır. Bu sayede hem farklı türlerde objeler üzerinde etkisi görebilirsiniz hem de sadece tek 1 mesh için özel bir shader oluşturuyorsanız direkt bu mesh dosyasını açarak bunu takip edebilirsiniz.
Evet, genel olarak Unity Shader Graph üzerine diyeceklerim şimdilik bu kadar. Farklı node tipleri ve örnekler üzerine de içerikler oluşturarak devam edeceğim bu seriye. Şimdilik kendinize iyi bakın diyorum, bir dahaki yazılarda görüşmek dileğiyle.
Ha unutmadan, son olarak Youtube kanalımdaki “Shader Graph” oynatma listesini de sizinle paylaşayım, yazılı halleri gelene kadar sabredemeyenler olursa bu videolardan da faydalanabilir 🙂