Birlikte öğreniyoruz...

Unity oyun motorunda oyun yapmak için önemli konulardan biri de Lighting yani ışık ayarlarıdır. Eğer oyununuzun gerçekçi gözükmesini ve istediğimiz atmosferi kullanıcılara aktarmak istiyorsak kamera konusunda olduğu gibi ışıklar konusuna da hakim olmamız gerekiyor.

Bu dersimizde oyunumuzda kullanabileceğimiz unity ışık türlerini ve ayarlarını inceledikten sonra “Skybox” konusuna değineceğim.

Hadi o zaman başlayalım…

Unity oyun motorunda ışık yapısını anlamamız için öğrenmemiz gereken iki adet kavram bulunuyor. Bunlar ışıkların Unity Oyun motoru tarafından nasıl işleneceğinin belirlendiği “Realtime” ve “Baked” yapılarıdır.

Realtime ve Baked Hesaplamaları

Işık hesaplamaları için kullanılan tabirlerdir. Sahnede yer alan ışıkların oyun sırasında mı yoksa Unity tarafından oyunun çalışma anından önce unity ışık haritası oluşturarak hesaplanma yönteminin seçilmesi anlamına gelir.

Her iki yönteminde farklı performans etkileri bulunmaktadır fakat asıl önemli olan oyunumuzda ışığı nasıl ve nerede kullanacağımıza göre seçimlerimizi yapmamız gerektiğidir.

Baked yöntemi, sahnede yer alan ve “baked” olarak belirlenen ışıkların hesaplamalarını önceden hesaplayarak Unity arka planda bir unity ışık haritası oluşturur. Böylece ışığın düşeceği bölgeleri oyunun çalışma anından önce hesaplayarak kaydeder ve oyun başladığında otomatik olarak oluşturduğu ışık haritasından çeker.

Örneğin oyun sahnenize yer alan bir sokak lambasının ışığı sabit olarak sürekli yanıyorsa bu ışığı “baked” olarak belirleyebilir ve oyunun çalışmasından önce işlenmesini sağlayabilirsiniz. Böylece performans anlamında olumlu etki elde edebilirsiniz.

Realtime yöntemi ise, sahnede yer alan ve “realtime” olarak belirlenen ışıkların hesaplamalarını oyun sırasında her frame için hesaplayarak işlem gerçekleştirir. Yani oyun sırasında her karede tüm ayarları hesaplayarak sonuçları verdiği yöntemdir.

Şöyle düşünün alevli ok atan bir silahınız var ve okunuzun ucunda olan alev hareketli olarak fırlatılıyor. Bu durumda oyun anında her karede hesaplamanın yapılması gerektiği için “realtime” hesaplama kullanılması gerekiyor. Tabi anlık olarak bu işlemlerin hesaplanması performans bakımından maliyetli bir durum oluşturacaktır.

Fakat her unity ışık türü “baked” kullanımına uygun değildir. Bazı ışık türleri için “realtime” kullanımı zorunludur.

Ek bir not olarak “realtime” olarak belirlenen ışık türleriyle ilgili yaptığımız değişikliklerin sonuçları anlık olarak sahnemize yansımayacaktır. Bunun sebebi Unity oyun motorunda “Auto Generate” özelliğinin pasif olarak gelmesi. Eğer ekran üzerinde sağ alt köşeye bakarsanız “Auto Generate Ligting Off” yazısını görebilirsiniz.

Bu yazının üzerine tıkladığınızda yaptığınız işlemlerin sahnenize yansıması için aşağıdaki görselde gözüken ayarı açabilir ya da sadece anlık olarak hesaplamasını sağlayabilirsiniz.

Auto Generate Ligting Aktif Etme
Auto Generate Ligting Aktif Etme

“Auto Generate” ayarını açtıktan sonra sahnede yaptığınız ışık işlemlerinden sonra uzun bir bekleme süresi olabilir.

Directional Light Işık Türü

“Directional Light” olarak eklenen unity ışık türünde sahnede yer alan tüm objelere ayarlanan ışık belirtilen yönden etki etmektedir. Gerçek dünyada güneş ışığına benzer etki oluşturmak için kullanılan ışık türüdür.

Unity oyun motoru üzerinde yeni bir sahne oluşturduğunuzda otomatik olarak “Hiararchy” paneline “Directional Light” eklendiğini görmüşsünüzdür. Aslında burada otomatik olara “Directional Light” objesini otomatik olarak eklenen güneş ışığı olarak düşünebilirsiniz.

“Directional Light” objesini “Inspector” alanında bulunan “Position” ve “Scale” değerlerini değiştirmeniz gölgelendirme yapısını değiştirmeyecektir. Sahnede olan pozisyonu ışığın etkisini değiştirmemektedir. Sadece “Rotation” kısmından yapacağınız değişiklikler ile sahneye vuran güneşin açısını belirleyebiliriz.

Işık Rotasyon Değişimi

“Directional Light” objesinin “Inspector” alanında “Type” isminde bir alan göreceksiniz. Bu alan üzerinden Işık tipini değiştirebilirsiniz. Aslında burada yaptığımız işlem objeye bir “light” bileşeni ekleyip ışığın türüni değiştirmek. Diğer unity ışık türleri içinde aynı işlemi gerçekleştirmiş oluyoruz.

Tavsiyem mevcut “Directional Light” objesine dokunmadan “Hiararchy” penceresinde yeni bir obje oluşturmanız olacaktır. Çünkü burada bulunan tüm türler hatta daha fazlasını aşağıdaki gibi hazır objeler arasından bulabilirsiniz.

Unity Işık Objeleri
Unity Işık Objeleri

Bu alanda yer alan “Directional Light” bizim güneş ışığı olarak bahsettiğimiz objemiz. Şimdi sırasıyla diğer unity ışık türlerini inceleyelim.

Herhangi bir objeye “Ligth” bileşenini ekledikten sonra “Type” alanından ışık türleri arasından seçim yapabilirsiniz.

Directional Light seçenekleri aşağıdaki gibi olup detaylı incelemesin “Işık Türleri Ayarları” bölümünde inceledik.

Directional Light Ayarları
Directional Light Ayarları

Point Light Işık Türü

Point Light
Point Light Örnek

“Point Light” seçeneği ışığı eşit dağıttığı için belirli bir noktayı aydınlatmak için kullanılır. Sokak lambalarının yaydığı ışığı örnek olarak gösterebiliriz.

Işığının vurduğu objeden, “Point Light” olarak ayarlan ışık uzaklaştıkça gerçekte olduğu gibi ışığın şiddeti azalacaktır.

Point light seçenekleri aşağıdaki gibi olup detaylı incelemesin “Işık Türleri Ayarları” bölümünde inceledik.

Unity Point Light Seçenekleri
Unity Point Light Seçenekleri

Spotlight Işık Türü

Spot Light Örnek
Spot Light Örnek

“Spot Light” ile bir açı ile ışığı sınırlandırarak, koni şeklinde aydınlatma işlemlerinde kullanılır. Araba farları ya da el feneri gibi objelerin yaydıkları ışık gibi düşünebilirsiniz.

Genellikle oyunlarda el fenerinin yaydığı ışıklar için kullanılır. Örneğin bir el feneri objesinin altına alt obje olarak atayarak işlem gerçekleştirilir.

Spot Light seçenekleri aşağıdaki gibi olup detaylı incelemesin “Işık Türleri Ayarları” bölümünde inceledik.

Spot Light Ayarları
Spot Light Ayarları

Area Light Işık Türü

Area Light Çalışma Mantığı
Görsel docs.unity3d.com sitesinden alınmıştır.

Sahnede yer alan belirli bölümleri aydınlatmak için kullanılan Unity ışık türüdür. “Area Light” ile belirtilen alana yansıtılan ışık eşit olarak dağılmaktadır.

Işık türünü “Area” olarak belirttikten sonra sahne üzerinde ışığın vuracağı alan boyutlandırma yaparak belirtilir. Fakat Area Light sadece “Baked” sistemiyle çalıştığı için ışık haritasına eklenmesi gerekiyor yoksa sahnede değişiklikleri göremezsiniz. Bunun için “Auto Generate” özelliğinin açık ya da oyunu başlatmadan önce bir kez hesaplama yapılmış olması gerekmektedir.

Not: Işığın yansıyacağı alanın “static” olarak belirlenmesi gerekmektedir.

Area Light seçenekleri aşağıdaki gibi olup detaylı incelemesin “Işık Türleri Ayarları” bölümünde inceledik.

Area Light Ayarları
Area Light Ayarları

Işık Türlerinin Tüm Ayarları

Type: Işık türünü değiştirmek için kullanılır. Seçilen Unity ışık türüne göre ayarlar değişecektir.

Range: Yayılan ışığın mesafesini yani ışığın ne kadar genişliğe yansıyacağının belirlendiği seçenektir.

Color: Işığın rengini değiştirebileceğimiz seçenektir.

Mode: Işığı nasıl hesaplayacağını belirleyeceğimiz alandır. Yazımızın başlarında bahsettiğimiz gibi ışıklandırma sistemini nasıl hesaplayacağını belirleyebiliriz. “Baked” ve “Realtime” bilgilerine ek olarak bu alanda “Mixed” olan bir seçenek göreceksiniz. “Mixed” seçeneği ise Unity tarafından arka planda otomatik olarak “Baked” ya da “Realtime” olarak otomatik ayarlanmasını sağlayabiliriz.

Intensty: Işığın parlaklığını ayarlayabileceğimiz kısımdır.

Indirect Multiplier: Dolaylı ışık kaynağının yoğunluğunu değiştirmek için kullanılan ayardır. Burada dolaylı olarak bahsettiğimiz kısım için şöyle bir örnek verebiliriz. Örneğin karanlık bir odaya girerek el fenerini açtığınızda belirli bir alanı aydınlatırsınız fakat el fenerinin vurduğu alan haricinde diğer kısımlarda da hafif bir aydınlanma olur. İşte bu kısmın yoğunluğunu “Indirect Multiplier” ile değiştirebiliriz.

Shadow Type: Işığın çarptığı bölgelerde gölge oluşup, oluşmayacağını seçtiğimiz kısımdır. Gerçek hayattaki gibi el fenerini bir objeye tuttuğumuzda arkasında bir gölge oluşmasını yönetebiliriz. Bu seçenek altında bulunan “Hard Shadow” ve “Light Shadow” ayarları ile gölgenin keskinliğini ayarlayabiliyoruz.

Eğer Mode kısmındaki seçeneği “Realtime” olarak değiştirirseniz “Shadow Type” ve altındaki seçeneklerin kullanılmasının tavsiye edilmediği uyarısını göreceksiniz.

Baked Shadow Radius: Sadece “Shadow Type” alanını “Light Shadow” olarak değiştirdiğinizde görünecek olan bir seçenektir. Gölge yapısının kenarlarına yapay yumuşatma ekleyerek daha doğal gözükmesi için kullanılır.

Strength: Gölgelerin koyuluğunun belirlendiği alandır. 0-1 arasında değer almaktadır.

Resolution: Gölgelerin çözünürlüğünü yükselterek gerçekliğini arttırmak için kullanılan ayardır. Alt seçenekleri içinde yer alan özelliklerle kaliteyi arttırabilirsiniz fakat ayarı ne kadar yükseltirsek oyun performansını o kadar etkileyecektir.

Bias: Işık vuran alandan uzaklaştıkça yapay görüntüsünü azalmasını önlemek için kullanılan ayardır.

Normal Bias: Gölgenin objeye çarptığı yüzeydeki kaymaları engelleyerek gerçekçi görüntü oluşmasını sağlayan ayardır.

Near Plane: Gölgelerin yakın düzlemlerinin değerlerini kontrol etmek için kullanılan ayardır.

Cookie: Gölgeye doku atamak için kullanılan seçenektir. Örneğin gölgeye içinden geçeceği bir dolgu atayarak duvara yansmasını değiştirebilirsiniz.

“Spot light” Unity ışık türüne aşağıdaki gibi doku atayarak farklı görüntüler elde edebilirsiniz.

Spotlight cookie ekleme sonuçları
Spotlight cookie ekleme sonuçları

Not: Eklenecek Texture’nin type alanında “Cookie” seçilmiş olması herekmektedir.

Draw Halo: Küresel bir ışık çizmek için kullanılan ayardır. İlgili kutucuk seçildiğinde sis bulutuna benzer bir yapı oluşturur.

Flare: Yansıma anlamına gelmektedir. Işığın konumunda bir parlama ayarlamak için kullanılır.

Render Mode: Sahnede olan ışıkların önceliğini ayarlamak için kullanılır. Örneğin “Important” olarak belirlenen bir ışık türü oyundaki her karede hesaplanacaktır ve render önceliği olacaktır. Fakat bu seçeneğin aktif edilmesi performas anlamında olumsuz etkiler yaratabilir.

Culling Mask: Işığın vuracağı katmanların belirlendiği alandır. Belirli katmanları seçerek sadece o katmanlarda ışık nesnesinin ayarlarının geçerli olmasını sağlayabilirsiniz.

Mask yani katmanlarla ilgili konuyu unuttuysanız Unity Katmanlar konusuna tekrar bakabilirsiniz.

Lighting Penceresi Ayarları

Işıklandırmayla ilgili kritik dokunuşların yapıldığı Lighting penceresindeki parametreleri inceleyeceğiz.

Lighting penceresine ulaşmak için “Window/Rendering/Lighting Settings” adresini kullanabilir ya da sağ alt köşede bulunan “Auto Generate Lighting Off” yazısına tıklayabilirsiniz.

Lighting Settings
Lighting Settings

Skybox Material: Unity oyun motorunu açtığınız zaman karşınıza çıkan gökyüzü, zemin ve sonsuzluk aslında skybox olarak anılmaktadır. “Skybox Material” alanından skybox’u değiştirebilirsiniz.

Sun Source: “Directional Light” konusunu anlatırken genellikle güneş ışığı olarak kullanıldığından bahsetmiştik. Güneş ışınları olarak oluşturduğunuz ışık objesini bu alandan tanımlayabilirsiniz.

Environment Lighting

Source: Çevre ışıklandırmasının yani sahne ışıklarının neyi kaynak olarak almasını ayarlayabileceğimiz bölümdür. Mevcut skybox yapısını kullanabilir ya da istediğimiz renk ve renk geçişleri uygulayabiliriz.

Intensity Multiplier: Ortam ışığının parlaklığını ayarlamak için kullanılan ayardır.

Environtment Reflections

Source: Sahnenin yansıma kaynağını yapabileceğimiz ayardır. Custom seçilirse “Cubemap” türünde bir seçim yapılabilir.

Resolution: Yansıma kalitesini ayarlayabileceğimiz ekrandır. Ne kadar yüksek seçilirse performansı etkileyecektir.

Compression: Yansıma dokularının sıkıştırılıp, sıkıştırılmamasının seçildiği alandır. Auto olarak bırakılarak Unity oyun motoruna kararı bırakabilir ya da kendiniz belirleyebilirsiniz.

Intensity Multiplier: Yansıtmanın parlaklığının seçildiği ayardır.

Bounces: Işığın yansıması olduktan sonra yani bir yere yansıdıktan sonra kaç kere daha yansıyabileceğinin belirlendiği ayardır.

Realtime Lighting: Unity’den kaldırılacağı için incelememize gerek yok.

Mixed Lighting

Baked Global Illumination: Bu ayar seçili olmazsa sahnede ayarladığımız mixed ve baked ışık işlenme yöntemleri realtime olarak değişecektir.

Lighting Mode: Mixed ışıklar için değişiklik yapmak için kullanılır.

  • Sahnede yer alan tüm Mixed ışık işleme yöntemlerini Baked olarak değiştirmek için “Baked Indirect” seçilir.
  • Mixed olarak belirtilen aydınlatma işlemlerinde gölgelendirme kalitesini düşürmek için “Subtractive” seçilebilir.
  • Mixed olarak seçilmiş ışık işleme türleri için Unity tarafından hesaplanmış bir algoritma uygulanması için “Shadowmask” ayarı seçilebilir. Performans açısından daha faydalı olduğu için varsayılan olarak gelir.

-Lightmapping Settings

Lightmapper: Işık haritalarını hesaplamak için hangi sistemi kullanacağını seçiyoruz. Seçim olarak işlemci ya da ekran kartı seçimlerinden biri yapılabilmektedir.

Prioritize View: Yapılan işlemlerde değişikliklerin gerçekleşmesi için varsayılan olarak seçili bir ayardır.

Multiple Imortance Sampling: Işık haritalarının daha hızlı hesaplanması için kullanılır. Fakat bazı zayıf ışık vuran alanların hesaplanmasında hata yapma durumu olduğunda pasife çekilebilir.

Direct Samples: Sistemin ışık hesaplanması için sahneden alınan örneklerin sayısıdır. Sayının arttırarak daha iyi sonuçlar alabiliriz ama süreyi ışık haritası oluşturma süresini uzatacaktır.

Indirect Samples: Dolaylı yani yansıma ile oluşan ışıkların hesaplaması için alınan örnekleme sayısıdır. Direct Samples gibi süreyi uzatacaktır.

Environment Samples: Çevre aydıınlatmalarının hesaplanması için alınan örnekleme sayısıdır.

Direct Samples, Indirect Samples ve Environment Samples görüntü kalitesini arttıracaktır fakat ışık haritası oluşturma süresini arttıracaktır.

Light Prob Sample Multiplier: Işık problarının işlenmesi sırasında kaç tanesinin hesaplamaya katılacağının seçildiği alandır.

Bounces: Işığın yasıma sayısını yani ana kaynaktan sonra kaç kere yansıyacağının seçildiği alandır.

Filtering: Işık haritasının nasıl oluşturulacağının seçileceği alandır. Genellikle Auto olarak seçilir.

Lightmap Resolution: Işık haritalarının birim başına texels sayısı için seçim yapılan alandır. Arttırılması kaliteyi arttırır fakat harita oluşturma işlemini uzatır.

Lightmap Padding: Texels birimleri arasındaki boşluğu belirlemek için kullanılır.

Lightmap Size: Işık haritasının boyutunu belirlemek için kullanılır. Çok büyük sahnelerde boyut arttırılabilir.

Compress Lightmaps: Işık haritasını sıkıştırmak için kullanılır. Fakat sıkıştırma işleminden sonra sahnede kaymalar olabilir.

Directional Mode: Objelere vuran ışıkların açıları, yapıları vb özellikleri depolaması için “Directional” olarak seçilebilir.

Indirect Intensity: Dolaylı ışık yani yansıyan ışığın parlaklığını değiştirebileceğimiz ayardır.

Albedo Boost: Yüzeyler arasında sıçrayan ışık miktarını ayarlayabildiğimiz alandır.

Lightmap Parameters: Işık haritaları için Unity tarafından arka planda ışık eşleştirmesi için otomatik olarak oluşturduğu parametrelerdir. Hazır yapıları kullanabilir ya da kendimiz bir yapı oluşturabiliriz.

-Other Settings

Fog: Sahnede sis ortamı oluşturmak için kullanılır.

Color: Sis rengini belirtmek için kullanılır.

Mode: Sisin görünüm modları için kullanılacak alandır.

Density: Sisin yoğunluğunu kontrol etmek için kullanılır.

Skybox Kullanımı ve Ayarları

Genellikle 3D oyunlarda derinlik ve gerçekçilik olması için kullanılan bir yapıdır. Daha önce bahsettiğim gibi Unity ekranında gördüğünüz gökyüzü, yer yüzü ve sonsuzluk çizgisi aslında bir skybox yapısıdır.

Kendi Skybox yapımızı oluşturabilir ya da Asset Store üzerinden ücretsiz veya ücretli çalışmaları oyunumuzda kullanabiliriz.

Skybox için önceden tasarlanmış küpler diyebiliriz. Bizim sahnemiz bu küpün içinde yer aldığını düşünebilirsiniz. Aşağıda örnek bir skybox sahne yapısını gösteren görseli ekliyorum. Sizde isterseniz bu şekilde bir yapı oluşturabilirsiniz.

Skybox Şablonu
Skybox Şablonu

Hazır ücretsiz yapıları kullanmak için Asset Store içinde “Free Assets” kutucuğunu işaretleyerek, arama kısmına “skybox” yazıyoruz.

asset store skybox arama

Çıkan sonuçlardan beğendiğiniz bir tanesinin içine girerek önce “Download” butonuna basıyoruz ve indirme işlemi bittikten sonra “Import” butonuna basarak Unity’e aktarıyoruz.

Ücretsiz Skybox Asset İndirme
Ücretsiz Skybox Asset İndirme

Skybox aktarmak için benim kullandığım yöntem şu şekilde.

Project bölümünde yeni “Create/Material” seçeneği ile yeni bir materyal oluşturuyoruz.

Oluşturulan materyale tıkladığımızda sağ tarafta açılan “Inspector” penceresinde “Shader” seçeneğine gelerek “Skybox/Cubemap” olarak değiştiriyoruz.

Cubemap (HDR)” seçeneğine tıkladığımızda indirdiğimiz skybox “cubemap” dosyalarını otomatik olarak görecektir. Bunlardan birini seçiyoruz.

Skybox Ekleme
Skybox Ekleme

Son olarak “Lighting” penceresinde yer alan “Skybox Material” kısmına yeni oluşturduğumuz materyali sürükleyerek değişikliği gerçekleştiriyoruz.

Lighting Kısmından Skybox Ekleme
Lighting Kısmından Skybox Ekleme

Tabi mobil oyun için bir skybox yapmak istiyorsak performans açısından 6 parçalı yapı kullanılması önerilmektedir. Bunun için materyalin “Shader” kısmında “Mobile/Skybox” seçilmeli ve parçalar isimlendirmeler aynı olacak şekilde atanmalıdır.

Ya da indirdiğiniz hazır yapılarda otomatik olarak “Mobile/Skybox” için oluşturulmuş materyaller olabiliyor. Bu materyali “Lighting” penceresinde “Skybox Material” kısmından atayabilirsiniz.

Mobil için skybox ekleme
Mobil için skybox ekleme