
Selam değerli MMOZirve takipçileri, bugün bu konu üzerinde Unity üzerinde mobil oyun geliştirme (aydınlatma üzerine) bir rehber konusu hazırladım. Umarım işinize yarayan bilgileri aşağıdan bulabilirsiniz. O halde sizleri daha fazla oyalamadan konuya hızlı bir giriş yapalım.
Unity ile mobil oyunlar için aydınlatma (Lighting)
Aydınlatma, bir oyunun en önemli yönlerinden biridir. Ruh halini belirleyebilir, oyuncuyu yönlendirebilir, tehditleri veya hedefleri belirleyebilir ve daha fazlasını yapabilir. Aydınlatma, bir oyunun görsellerini oluşturabilir veya bozabilir. Örneğin, iyi aydınlatma kötü bir modeli oyun içinde daha iyi gösterebilirken, kötü ışık harika bir modeli daha kötü gösterebilir.
Bu kılavuz, bir mobil oyunda daha iyi aydınlatma performansı için bilgi sağlar. Işığı kullanmaya nasıl karar verdiğiniz, mobil oyununuzun performansını etkiler. Oyununuzun olabildiğince sorunsuz çalışmasını sağlamak için aydınlatmayı verimli kullanmak önemlidir.
İşlem hattı seçenekleri
Unity’nin Legacy Render Pipeline düzeni aşağıdaki oluşturma yollarını içerir:
- Forward render
- Ertelenmiş shading
Forward Render ile real-time ışıklar çok pahalıdır. Piksel başına mevcut ışık sayısını azaltırsanız, bu maliyeti dengeleyebilirsiniz.
Deferred shading
Deferred shading için GPU desteği gerekir. Uyumlu donanımda, deferred shading, yüksek düzeyde aydınlatma doğruluğu ile çok sayıda gerçek zamanlı ışığı işleyebilir. Ne yazık ki, deferred shading daha düşük bant genişliğine sahip oldukları için mobil GPU'larda iyi performans göstermez.
Bir mobil oyun oluşturduğunuzda, oyununuzun mümkün olduğunca çok sayıda cihazda sorunsuz çalışması önemlidir.
Universal Render Pipeline
Unity, Universal Render Pipeline'ı (URP) geliştirdi. Mobil oyunlarınız için URP kullanmanızı önemle tavsiye ederiz.
Universal Render Pipeline - İnceleme

Universal Render Pipeline (URP), Unity tarafından yapılmış önceden oluşturulmuş bir Scriptable Render Pipeline'dır. URP, mobil cihazlardan üst düzey konsollara ve PC'lere kadar çeşitli platformlarda hızlı ve kolay bir şekilde optimize edilmiş grafikler oluşturmanıza olanak tanıyan sanatçı dostu iş akışları sağlar.
Gereksinimler
Gereksinimler ve uyumluluk hakkında bilgi için, Gereksinimler bölümüne bakın.
URP'deki yenilikler
URP'nin en son sürümündeki yenilikler hakkında bilgi için, URP'deki yenilikler bölümüne bakın.
URP'yi kullanmaya başlama
Sıfırdan yeni bir URP Projesi başlatmak veya mevcut bir Unity Projesine URP'yi yüklemek hakkında bilgi için Başlarken bölümüne bakın.
Güncellemeler
URP'nin önceki bir sürümünden geçerli sürüme yükseltme hakkında veya Hafif İşleme Hattından (LWRP) URP'ye yükseltme hakkında bilgi için Yükseltme kılavuzlarına bakın.
Işık modları
Bir ışığın nasıl hareket ettiğine veya bir Sahnede nasıl kullanıldığına bağlı olarak farklı ışık modları kullanılır. Işık modu türleri farklı performans özelliklerine sahiptir. Işıkları uygularken aşağıdakileri göz önünde bulundurun:
- Statik aydınlatma için baked kullanın. Bu, çalışma süresi boyunca ışıklarını değiştirmeyen nesneler için en iyisidir. Baking lights, ışık haritaları olarak adlandırılan doku haritalarında aydınlatma verilerinin önceden hesaplanması ve saklanması işlemidir.
- Baking Lights çalışma zamanında değiştirilemez. Işık haritalarındaki ışık ve gölgeler statiktir. Tüm aydınlatmalar Unity'de önceden işlendiğinden, performansı etkileyen herhangi bir çalışma zamanı aydınlatma hesaplaması yoktur.
- Baking Light dinamik gölgeler oluşturulamaz. Bu, dinamik veya hareketli nesnelerde garip görünebilir.
- Hareketli nesnelerle etkileşim kurmayı düşündüğünüz sabit ışıklar için karışık kullanın. Örneğin, bir oyuncuya ışık saçan ve oyuncu yanından geçerken gölge oluşturan bir meşale.
- Karışık aydınlatma, dinamik doğrudan ışık ve gölge oluşturur.
- Statik nesneler için ışık haritası hesaplamalarına karışık aydınlatmayı dahil edebilirsiniz.
- Yoğunluğu çalışma zamanında değiştirebilirsiniz. Yalnızca doğrudan ışık güncellenir.
- Yerden yükselen ve patlayan bir ateş topundan gelen ışık gibi dinamik veya hareketli ışıklar için gerçek zamanlı kullanın.
- Dinamik ışık ve gölge özellikleri çalışma zamanında değiştirilebilir.
- Gerçek zamanlı ışıklar, ışık haritalarına dönüştürülmez.
Dinamik veya gerçek zamanlı aydınlatma her karede hesaplanır ve güncellenir. Bu, nesneleri hareket ettirmek, etkileşim ve duygu yaratmak için harikadır.
Buna karşılık, statik ışık bilgisi, ışık haritalarına dönüştürülür. Işık haritası dokusu kullanımı, bir nesnenin pahalı köşe başına veya piksel başına aydınlatma hesaplamalarından kaçınmasını sağlar. Bir ışık haritası dokusunun oluşturma maliyeti her zaman dinamik aydınlatmadan çok daha ucuzdur. Bir mobil oyuna uygulama için baking lights'ın ilk tercihiniz olmasını öneririz.
Lightmap baking
Işığın etkilerinin önceden hesaplanması, ışık haritası pişirme olarak bilinir. Işığın etkisi, ışık haritası adı verilen ayrı bir dokuda saklanır. Işık haritası, nesnelerin görünümünü artırmak için kullanılabilir. Lightmap baking, Sahnenizin her yinelemesinde yalnızca bir kez yapılmalıdır. Sahnenizin geometrisini değiştirirseniz veya pişmiş ışıkların parametrelerini değiştirirseniz, ışık haritalarını yeniden pişirmeniz gerekecektir. Lightmap dokusunun ek yükü dışında, çalışma zamanında herhangi bir ekstra performans maliyeti yoktur. Bu, bir mobil platformda aydınlatmaya yönelik en iyi başlangıç yaklaşımıdır.
Baked lights, Sahnenizin dinamik veya hareketli yönlerinden etkilenmez. Baking Light, tüm statik öğeler için Baked Global Illumination içerir. Bu, ışık haritası hesaplamalarının, diğer statik nesnelerden seken dolaylı ışığı ve nesneye doğrudan çarpan pişmiş ışıkları içerdiği anlamına gelir.

Şekil 1. Armies teknoloji demosunda kullanılan tamamen baking light düzeni.
Işıklarınızı açmak için aşağıdaki üç adımı gerçekleştirin.
Adım 1: Işıkları Karışık veya Baked olarak ayarlayın
Işıkların Modunu Karışık veya Baked olarak ayarlayın. Mobil oyunlar için Karışık yerine Baked ışıklar kullanmak en iyisidir. Baking Lighting, ışık vermenin en kolay yoludur.

Şekil 2. Unity'de ışığın Modu ayarı.
Adım 2. Nesneleri statik hale getirin
Baked Lights'dan etkilenen nesneleri Statik yapın. Statik olarak işaretlenmiş bir nesne için birçok optimizasyon vardır, ancak genellikle Statik açılır listesinde Her Şey'i seçmek en iyisidir. Statik olarak işaretlenen nesne ile Unity, onu hafif pişirmeye dahil etmeyi bilir.
Not: Batching Static etkinleştirdiyseniz, Statik olarak işaretlenen nesneleri hareket ettiremez veya canlandıramazsınız. Bu optimizasyonu mümkün olan her yerde açık bırakın.

Şekil 3. Örnek bir statik menü.
Adım 3. Baking Lights
Windows > Rendering > Aydınlatma Ayarları'nda bulunan Aydınlatma menüsü ile baking light yapabilirsiniz.
Bake Lights, kaydedilen veriler bake yapmaya başladığınızda hangi Sahnenin etkin olduğuna bağlıdır. Baked Scene ile aynı ada sahip bir klasör oluşturulur. Bu klasör, aydınlatma verilerinin tüm bileşenlerini saklar. Projeniz aynı anda birden fazla Sahne yüklerse, her Sahne için ışıkları pişirmeniz gerekir. Sahnenizi ayarlarsanız, ışıkları yeniden bakedlamanız gerekir.

Şekil 4. Baking Lights Map bir örnek.
Işık haritalarını optimize edin
Işıklar baked üzere ayarlandıktan sonra, hazırlanan haritaların optimize edildiğinden emin olun. Lightmap'lerin boyutu, baked zamanki ayarlarına göre değişir. Mobil cihazlarda bellek kullanımını düşük tutmalısınız, bu nedenle ışık haritası boyutu izlenmelidir.
Armies demosundan alınan aşağıdaki örnekte, yedi adet 1024x1024 piksel ışık haritası vardır. Haritanın ön izlemesinde, ışık haritasına yerleştirilmiş ağları görebilirsiniz. Seçilen kafesler vurgulanır.

Şekil 5. Bu bir ışık haritası örneğidir. Mavi bölümler seçili ağlardır.
Lightmapping Ayarlarında, her haritanın ne kadar bellek ve depolama alanı kullandığını belirleyen haritaların boyutuyla birlikte birçok ayar vardır. Aşağıdaki bölümler birkaç önemli ayarı vurgulamaktadır.
Lightmappers
Unity, Sahnenizdeki ışıkları bake'lemek için aşağıdaki üç yöntemi sunar:
- Enlighten: Yalnızca 2020 uzun vadeli destek (LTS) sürümüne kadar desteklenir. Bunu yeni projeler için kullanmayın.
- Aşamalı CPU: Aşamalı olarak hafif haritalar oluşturduğu için çok zaman kazandırır. Görünüme Öncelik Ver seçilirse, Sahne görünümündeki alanlara öncelik verilir. Bu, Sahnenizin ışığını ayarlamak için yineleme süresini azaltabilir.
- Aşamalı GPU: Bu, Aşamalı CPU ile aynı şekilde çalışır, ancak CPU yerine GPU'da ışık haritasını oluşturur. Desteklenen donanımda bu yöntem, CPU kullanımına kıyasla pişirme süresini büyük ölçüde azaltabilir. Aşamalı GPU'yu kurmak için ek gereksinimler vardır. The Progressive GPU Lightmapper sayfasındaki gereksinimler hakkında daha fazla bilgi edinin.

Şekil 6. Lightmapper Ayarları, Sahneniz için bake yöntemini değiştirmenize olanak tanır.
Texels
Bir texel veya doku pikseli, bir doku haritasındaki tek bir pikseldir. Texels, bir nesneye çarpan her ışık noktası için ışık bilgilerini bir ışık haritasında depolar. Birim alan başına ne kadar çok doku kullanılırsa, aydınlatmanızın kalitesini, pişirme için hesaplama süresini, disk depolama maliyetlerini ve ışık haritalarınızın VRAM maliyetini etkiler.
Gereken ışık haritası verilerinin miktarını azaltmak için, Işık Eşleme Ayarlarında bake birimi başına doku sayısını ayarlayın.

Şekil 7. Işık haritaları için mevcut ayarlar.
Işık Eşleme Ayarlarında, Işık Haritası Çözünürlüğü parametresi, ışık haritasındaki birim başına kaç metin kullanıldığını kontrol eder. Aşağıda, farklı Lightmap Çözünürlüğü ayarlarına sahip bir küp örneği verilmiştir. Daha yüksek bir çözünürlüğün gereken iş miktarını nasıl hızla artırdığını görebilirsiniz.

Şekil 8. Birinci küpün Lightmap Çözünürlüğü 1'dir. İkinci küpün Lightmap Çözünürlüğü 2'dir. Üçüncü küpün Lightmap Çözünürlüğü 5'tir.
Not: Düşük bir Lightmap Çözünürlüğü ile başlamanızı öneririz. 5 ile 10 arasında bir başlangıç ayarı kullanın ve Sahne gereksinimlerinize göre yukarı veya aşağı ölçeklendirin.
Sahnenizde dokuların nasıl düzenlendiğini görmek için, Sahne görünümünde Çizim Modu açılır listesini seçin ve Fırında Işık Haritası'nı seçin.
Baked nesneler bir dama tahtası kaplamasıyla kaplanmıştır. Dama tahtası deseni, ışıkları pişirdiğinizde dokularınızın nasıl dağıldığını gösterir.
Aşağıdaki örnekte, Armies demosunda Lightmap Çözünürlüğünün 15'ten 12'ye düşürülmesi, gereken ışık haritası sayısını yediden dörde düşürür.

Şekil 9. Lightmap Çözünürlüğü 12 olan The Armies demosu
Texel kullanımı
Bütün bir Sahnede birim başına düşen metin sayısını ayarlayabilseniz de, çoğu zaman bu kadar çok tekse ihtiyaç duymayan bazı nesneler vardır.
Unity, her nesnenin kaç tane doku kullandığını kontrol etmenizi sağlar. Bir nesne için Inspector > Mesh Renderer'da, Scale In Lightmap parametre değeri, nesnenin ışık haritasında kullandığı metinlerin sayısını kontrol eder.
Aşağıdaki örnekte, soldaki küp, bake ünitesi başına beş texel ışık bilgisine sahiptir. Sağdaki kutunun Lightmap'te Ölçeklemesi 0,5'e ayarlanmıştır. Bu ayar, ışık metinlerini 2.5'e ölçeklendirir, bu da ışık haritasında soldaki kutudan daha az yer gerektirir.

Şekil 10. Farklı ışık haritası çözünürlüklerine sahip iki küp.

Şekil 11. Bir nesnenin daha az dokuya sahip olması için Lightmap'te Ölçekle ayarını değiştirebilirsiniz.
Aşağıdakilere metin harcamaktan kaçınmaya çalışın:
- Bir oyuncunun göremediği yüzeyler ve nesneler. Bu, ekranda olmayan ayrıntılar için ışık haritalarında boşa harcanan belleği önler.
- Üzerinde çok az ışık değişimi olan yüzeyler. Örneğin, gölgedeki veya tek bir ışık kaynağı tarafından dokunulan nesneler.
- Küçük veya ince nesneler. Bunların aldığı ışık miktarı, Sahnenin son haline getirilmesine fazla bir katkı sağlamayacaktır.
İşleme gereksinimlerini azaltmak için bazı öğeleri taklit edebilirsiniz. Bu, içeriğinizin ışık kullanıyormuş gibi görünmesine neden olabilir, ancak aslında daha verimli yöntemler kullanır.
Sahte gölgeler
Gerçek zamanlı gölgeler kasmalara neden olabilir Gölge haritalama adı verilen bir teknikle üretilirler. Bir Sahnenin geometrisini gölge haritasına işlemenin maliyeti, gölgeler etkinken çizilen tepe noktalarının sayısı ile orantılıdır. Gölge oluşturan geometri miktarını ve gerçek zamanlı gölge oluşturma ışıklarının sayısını sınırlamanızı öneririz.
Dinamik ışıklar olmadan dinamik nesnelerde gölgeler için sahte gölgeler uygulayabilirsiniz. Bu, oluşturma maliyetlerini düşük tutar ve dinamik gölgelere benzer bir etki sağlayabilir. Aşağıda sahte gölgeler uygulamanın bazı yolları verilmiştir:
- Karakterin altına yerleştirilmiş uçak veya dörtlü gibi bir 3B ağ kullanın ve ona bulanık bir doku uygulayın.
- Daha karmaşık blob gölgeleri için kendi özel gölgelendiricinizi yazabilirsiniz.

Şekil 12. Armies techs demosunda gölge uygulaması.
Işık bilgilerini doğrudan dokular üzerine boyayın
Gölgenin bir kısmını dokulara boyarsanız, ekstra ışıklar için gereken hesaplamayı azaltırsınız. Bu, daha az ışık haritası verisi gerektirdiğinden, Sahne ışıklarınızı pişirdiğinizde bellek tasarrufu sağlar.
Işık Sondaları
Bake aydınlatmalı dinamik nesneler kullandığınızda, ışık haritalarından etkilenmezler. Bu, Sahnenin bir parçası olmadıklarını hissetmelerine neden olabilir.
Bunu Işık Probları ile çözebilirsiniz. Işık Sondaları, ışık haritalarına benzer avantajlara sahiptir. Önceden hesaplanabilen ve çalışma zamanında kullanılmak üzere kaydedilebilen hafif verileri depolarlar. Bu, hesaplama maliyetlerinin çoğunu zamanı düzenlemeye taşır.
Bir ışık haritası yüzeyler için bir dokuya alınan ışığı kodlarken, bir Işık Sondası boş alandan geçen ışığı depolar. Bu verileri hareket eden nesneleri aydınlatmak için kullanabilirsiniz. Işık Probları, Sahne'niz boyunca dinamik nesneleri ışıkla eşleştirilmiş nesnelerle görsel olarak entegre etmeye yardımcı olur.
Işık Sondaları, Sahnenizde hareket eden nesneleri aydınlatmak için en iyi şekilde kullanılır. Problar, hareketli nesnelerinizin Sahne ile aynı ışığa sahip olmasını sağlayan fırınlanmış ışıklarınızdan yararlanır. Dinamik nesneleri Işık Sondaları ile aydınlatmak, gerçek zamanlı ışıklardan daha ucuzdur.

Şekil 13. Armies tech demosundaki dinamik kalabalığı aydınlatmak için yerleştirilmiş ışık sondaları.
Mesh Renderer ayarları
Sahnenizin kullandığı ışık türü ne olursa olsun, Mesh Renderer ayarlarınızın doğru olması önemlidir.
Kullanmadığınız her şeyi kapatın. Cast Shadows gibi ayarlar, nesne aydınlatılmamış olsa bile Sahneyi işlediğinizde maliyet ekler. Aşağıdaki Mesh Renderer ayarları örneği, Şekil 13'te gösterilen bir karakter içindir. Karakter ışık probu verilerini kullanır, ancak yansıma problarını kullanmaz.
Işık Sondaları için Karıştırma Sondaları ayarı, karaktere en yakın Işık Sondalarından gelen ışık bilgilerini karıştırır. Karakter Sahnede hareket ettikçe, karakteri etkileyen Işık Sondaları değişecektir. Oluşturma blob yöntemini kullandığından Cast Shadows kapatıldı. Gölgeleri Al da kapalıdır çünkü Sahne hazırdır ve gerçek zamanlı gölgeler yoktur.

Şekil 14. Şekil 13 render için Mesh Renderer ayarları.
Bir rehber konumuzun daha sonuna geldik. Bu tarz konuları kaçırmamak için forumumuza üye olmayı ve beni takip etmeyi unutmayın. Gelecek rehber konularında görüşmek dileğiyle. Ayrıca, BURAYA TIKLAYARAK forumumuza hızlı bir şekilde üye olabilirsiniz.


