Unity ile mobil oyunlar için ışıklandırma

Işıklandırma, oyunların en önemli özelliklerinden biridir. Ruh halini belirleyebilir, oyuncuya liderlik edebilir, tehditleri veya hedefleri tespit edebilir ve daha pek çok şey yapabilir. Işıklandırma, bir oyunun görsellerini yapabilir veya bozabilir. Örneğin, iyi ışıklandırma kötü bir modelin oyun içinde daha iyi görünmesini sağlarken kötü ışık daha kötü bir modelin daha kötü görünmesine neden olabilir.

Bu kılavuzda, mobil oyunlarda daha iyi ışıklandırma performansı için bilgi sağlanır. Işıklandırmayı kullanma şekliniz mobil oyununuzun performansını etkiler. Oyununuzun mümkün olduğunca sorunsuz çalıştığından emin olmak için ışıklandırmayı verimli bir şekilde kullanmak önemlidir.

Bu makalenin bazı bölümleri, Arm Limited tarafından katkıda bulunulan ve telif hakkı ile korunan çalışmalara dayanmaktadır.

Oluşturma ardışık düzeni seçenekleri

Unity'nin Eski Oluşturma Ardışık Düzeni aşağıdaki oluşturma yollarını içerir:

  • İleriye dönük oluşturma
  • Ertelenen gölgelendirme

İleriye dönük oluşturma

İleriye dönük oluşturma ile gerçek zamanlı ışıklar çok pahalıdır. Piksel başına mevcut ışık sayısını azaltırsanız bu maliyeti dengeleyebilirsiniz.

Ertelenen gölgelendirme

Ertelenen gölgelendirme için GPU desteği gerekir. Uyumlu donanımlarda ertelenen gölgelendirme, yüksek ışık kalitesine sahip çok sayıda gerçek zamanlı ışığı oluşturabilir. Maalesef ertelenmiş gölgelendirme, daha düşük bant genişliğine sahip olduğundan mobil GPU'larda iyi performans göstermez.

Mobil uygulama geliştirirken oyununuzun mümkün olduğunca çok sayıda cihazda sorunsuz şekilde çalışması önemlidir.

Evrensel Oluşturma Ardışık Düzeni

Unity, Evrensel Oluşturma Ardışık Düzeni'ni (URP) geliştirdi. Mobil oyunlarınızda URP kullanmanızı önemle tavsiye ederiz.

Açık modlar

Işığın hareket etme veya sahnede kullanılma şekline bağlı olarak farklı ışık modları kullanılır. Açık mod türlerinin farklı performans özellikleri vardır. Işıkları uygularken şunları göz önünde bulundurun:

  • Statik ışıklandırma için pişmiş değerini kullanın. Bu, çalışma sırasında ışığı değişmeyen nesneler için en iyi seçenektir. Pişirme ışıkları, ışık haritaları adı verilen doku haritalarında ışık verilerinin önceden hesaplanıp depolanması işlemidir.
    • Fırınlanmış ışık, çalışma zamanında değiştirilemez. Işık haritalarındaki ışık ve gölgeler statiktir. Tüm ışıklandırmalar Unity'de önceden işlendiğinden, performansı etkileyen çalışma zamanı ışıklandırması hesaplaması yoktur.
    • Fırınlanmış ışıkla dinamik gölgeler oluşturulamaz. Bu, dinamik veya hareket eden nesneler için tuhaf görünebilir.
  • Hareket eden nesnelerle etkileşime girmek istediğiniz sabit ışıklar için karma seçeneğini kullanın. Mesela bir meşale, oyuncunun üzerine ışık yayan ve oyuncu geçerken gölge oluşturur.
    • Karma ışıklandırma, dinamik doğrudan ışık ve gölge oluşturur.
    • Statik nesnelerin ışık haritası hesaplamalarına karışık ışıklar ekleyebilirsiniz.
    • Çalışma zamanında yoğunluğu değiştirebilirsiniz. Yalnızca doğrudan ışık güncellendi.
    • Pahalı.
  • Yerden yükselen ve patlayan bir ateş topunun sesi gibi dinamik veya hareketli ışıklar için gerçek zamanlı'yı kullanın.
    • Dinamik ışık ve gölge özellikleri, çalışma zamanında değiştirilebilir.
    • Gerçek zamanlı ışıklar, ışık haritalarına dâhil edilmez.
    • Çok pahalı.

Daha fazla bilgi için Unity'nin Işıklandırma Ardışık Düzeni'ni okuyun.

Mümkün olduğunda statik ışık kullanın ve dinamik ışıktan kaçının

Dinamik veya gerçek zamanlı ışıklandırma, her kare için hesaplanır ve güncellenir. Bu, hareketli nesneler, etkileşim ve duygular oluşturmak için idealdir.

Statik ışık bilgileri ise ışık haritalarına pişirilir. Işık haritası doku kullanımı, bir nesnenin köşe başına veya piksel başına pahalı ışık hesaplamalarından kaçınmasını sağlar. Işık haritası dokusunun oluşturma maliyeti, her zaman dinamik ışıklandırmadan çok daha ucuzdur. Mobil oyuna uygulama için ilk tercihiniz pişmiş ışıklandırmayı öneririz.

Lightmap ile fırında pişirme

Işığın etkilerinin önceden hesaplanması, ışığıyla pişirme olarak bilinir. Işığın etkisi, ışığı haritası adı verilen ayrı bir dokuda depolanır. Işık haritası, nesnelerin görünümünü artırmak için kullanılabilir. Işık haritasıyla pişirmenin Sahnenizin her yinelemesi için yalnızca bir kez yapılması gerekir. Sahnenizin geometrisini veya fırınlanmış ışıkların parametrelerini değiştirirseniz ışık haritalarını yeniden ayarlamanız gerekir. Işık haritası dokusunun ek yükü haricinde, çalışma zamanında ek performans maliyeti yoktur. Bu, mobil bir platformda ışıklandırmaya en iyi ilk yaklaşım.

Pişmiş ışık, Sahnenizin dinamik veya hareketli yönlerinden etkilenmez. Fırınlanmış aydınlatma, tüm statik öğeler için Fırında Küresel Aydınlatma'yı içerir. Yani, ışık haritası hesaplamaları, diğer statik nesnelerden geri dönen dolaylı ışığın yanı sıra nesneye doğrudan zarar veren pişmiş ışıkları da içerir.

Şekil 1. Ordu'nun teknoloji demosunda kullanılan eksiksiz ışıklandırma düzeneği.

Lambalarınızı pişirmek için aşağıdaki üç adımı uygulayın.

1. Adım: Işıkları Karışık veya Fırında olarak ayarlayın

Işıkların Modu'nu Karışık veya Fırın olarak ayarlayın. Mobil kitaplarda, "Karışık" yerine Fırında Işıklar kullanmak en iyisidir. Fırında hamur işi ışık oluşturmanın en ucuz yoludur.

2. Şekil. Unity'deki ışığın Mod ayarı.

2. Adım: Nesneleri statik yap

Fırında pişirilen ışıklardan etkilenen nesneleri Statik olarak ayarlayın. Statik olarak işaretlenmiş bir nesne için birçok optimizasyon vardır ancak genellikle Statik açılır listesinden Her şey'i seçmek en iyisidir. Nesne Statik olarak işaretlenmiş durumdayken Unity bu nesneyi hafif pişirme işlemine dahil edeceğini bilir.

3. Şekil. Örnek bir statik menü.

3. Adım: Lambaları pişirme

Pencere > Oluşturma > Işıklandırma Ayarları'nda bulunan Işıklandırma menüsünü kullanarak ışıklarınızı pişirmeyi seçebilirsiniz.

Işıklar pişirildiğinde kaydedilen veriler, fırını başlattığınız sırada etkin olan Sahneye dayalı olarak kaydedilir. Fırınlanan Sahne ile aynı adla bir klasör oluşturulur. Bu klasörde ışık verilerinin tüm bileşenleri depolanır. Projeniz aynı anda birden fazla Sahne yüklüyorsa her Sahne için ışıkları pişirmeniz gerekir. Sahneyi ayarlarsanız ışıkları tekrar pişirmeniz gerekir.

4. Şekil. İşlenmiş ışık haritaları örneği.

Işık haritalarını optimize edin

Işıklar fırınlanacak şekilde ayarlandıktan sonra, hamur işi haritalarının optimize edildiğinden emin olun. Işık haritalarının boyutları, fırınlandıklarında bulundukları ayarlara bağlı olarak değişir. Mobil cihazlarda bellek kullanımını düşük tutmanız gerekir. Bu nedenle ışık haritası boyutunun izlenmesi gerekir.

Armies demosunu gösteren aşağıdaki örnekte, 1024x1024 piksellik yedi adet ışık haritası bulunmaktadır. Harita önizlemesinde, ışık haritasına yerleştirilmiş örgüleri görebilirsiniz. Seçilen örgüler vurgulanır.

5.Şekil Bu bir ışık haritası örneğidir. Mavi bölümler örgüler seçilir.

Işık Haritalama Ayarları'nda, haritaların boyutunun yanı sıra her bir haritanın ne kadar bellek ve depolama alanı kullandığını belirleyen birçok ayar vardır. Aşağıdaki bölümlerde birkaç önemli ayar vurgulanmaktadır.

Işık haritacıları

Unity, Sahnenizdeki ışıkları pişirmek için aşağıdaki üç yöntemi sunuyor:

  • Enlighten: Yalnızca 2020 uzun vadeli destek (LTS) sürümüne kadar desteklenir. Yeni projeler için bunu kullanmayın.
  • Progresif CPU: Kademeli olarak ışık 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 iterasyon süresini kısaltabilir.
  • Progresif GPU: Progresif CPU ile aynı şekilde çalışır, ancak ışık eşlemesini CPU yerine GPU'da oluşturur. Desteklenen donanımlarda bu yöntem, CPU kullanımına kıyasla pişirme süresini önemli ölçüde kısaltabilir. Progresif GPU'yu ayarlamak için ek şartlar vardır. Progresif GPU Lightmapper sayfasında gereksinimler hakkında daha fazla bilgi edinin.

6.Şekil Lightmapper Ayarları, Sahneniz için fırınlama yöntemini değiştirmenize olanak tanır.

Texel

Texel veya doku pikseli, doku haritasındaki tek bir pikseldir. Texel'ler, bir nesneye ulaşan her ışık noktası için ışık bilgilerini ışık haritasında depolar. Alan birimi başına kullanılan ne kadar çok işlem; ışık haritalarınızın kalitesini, pişirme hesaplama süresini, disk depolama maliyetlerini ve ışık haritalarınızın VRAM maliyetini etkiler.

Gerekli ışık haritası verisi miktarını azaltmak için Işık Haritalama Ayarları'nda fırının birimi başına texel sayısını ayarlayın.

7. Şekil. Lightmaps için kullanılabilir ayarlar.

Işık Haritalama Ayarları'ndaki Işık Haritası Çözünürlüğü parametresi, ışık haritasındaki birim başına kaç tane komutun kullanılacağını kontrol eder. Aşağıda, farklı Işık Haritası Çözünürlüğü ayarlarına sahip bir küp örneği gösterilmektedir. Daha yüksek bir çözünürlüğün gereken iş miktarını hızla nasıl artırdığını görebilirsiniz.

Şekil 8. İlk küpün Işık Haritası Çözünürlüğü 1. İkinci küpün Işık Haritası Çözünürlüğü 2 olur. Üçüncü küpün Işık Haritası Çözünürlüğü 5 olur.

Eklerin Sahnenizde nasıl yerleştirdiğinizi görüntülemek için Sahne görünümündeki Çizim Modu açılır listesini seçin ve Hafif Işık Haritası'nı seçin.

Fırında pişmiş nesneler, dama tahtasıyla kaplı. Dama tahtası deseni, ışıkları pişirme sırasında uzmanlarınızın nasıl dağıldığını gösterir.

Aşağıdaki örnekte, Armies demosunda Işık Haritası Çözünürlüğü'nün 15 değerinden 12 değerine düşürülmesi, gereken ışık haritası sayısını yediden dörde düşürmektedir.

Şekil 9. 12 Işık Haritası Çözünürlüğü içeren Armies demosu.

Texel kullanımı

Bir Sahne'nin tamamındaki birim başına texel sayısını ayarlayabilirsiniz ancak genellikle bu kadar çok uzmana ihtiyaç duymayan bazı nesneler vardır.

Unity, her nesnenin kaç texel kullandığını kontrol etmenizi sağlar. Bir nesne için İnceleyici > Örgü Oluşturucu bölümündeki Işık Haritasında Ölçeklendir parametre değeri, nesnenin ışık eşlemesinde kullandığı texel sayısını kontrol eder.

Aşağıdaki örnekte, soldaki küpte, pişirme birimi başına beş on uzantılı ışık bilgisi bulunuyor. Sağdaki kutuda Lightmap'te Ölçek 0,5 olarak ayarlanmıştır. Bu ayar, ışık sınırlarını 2,5'e kadar ölçeklendirir.Bu da, ışık haritasında soldaki kutudan daha az yer kaplar.

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

Şekil 11. Lightmap'te Ölçeklendir ayarını değiştirerek bir nesnenin daha az uzantıya sahip olmasını sağlayabilirsiniz.

Aşağıdakilere özel ifadeler kullanmaktan kaçınmaya çalışın:

  • Oyuncunun göremeyeceği yüzeyler ve nesneler. Bu sayede, ışık haritalarında ekranda bulunmayan ayrıntılar için bellekte yer israfı önlenmiş olur.
  • Üzerinde çok az ışık sapması olan yüzeyler. Örneğin, gölgedeki veya tek bir ışık kaynağının dokunduğu nesneler.
  • Küçük veya ince nesneler. Bunların aldığı ışıklandırma miktarı, sahnenin nihai oluşturmasında fazla bir etki yaratmaz.

Mümkün olduğunca sahte ışıklandırma

İşleme gereksinimlerini azaltmak için bazı öğeleri taklit edebilirsiniz. Bu, içeriğinizin ışığı kullanıyormuş gibi görünmesine neden olabilir, ancak aslında daha etkili yöntemler kullanır.

Sahte gölgeler

Gerçek zamanlı gölgeler pahalıdır. Bunlar gölge eşleme adı verilen bir teknikle oluşturulur. Bir sahnenin geometrisini gölge haritasına oluşturmanın maliyeti, gölgeler etkinken çizilen köşe noktalarının sayısıyla orantılıdır. Gölge oluşturan geometri miktarını ve gerçek zamanlı gölge yayınlama ışıklarının sayısını sınırlamanızı öneririz.

Dinamik ışık içermeyen 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ş düzlem veya dörtlü gibi bir 3D ağ kullanarak bulanık bir doku uygulayın.
  • Daha karmaşık blob gölgeleri için kendi özel gölgelendiricinizi yazabilirsiniz.

Aşağıdaki örnekte, bir gölge için 3D örgü kullanırsanız sonuç gösterilmektedir:

Şekil 12. Armies teknoloji 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 sayede, daha az ışık haritası verisi gerektiği için Sahne ışıklarınızı pişirirken bellekten tasarruf edersiniz.

Işık Probları

Fırınlanmış ışık içeren dinamik nesneler kullandığınızda, bu nesneler ışık haritalarından etkilenmez. Bu, sahnenin bir parçası olmadıklarını hissetmelerine neden olabilir.

Bu sorunu Işık Probları ile çözebilirsiniz. Işık Probları, ışık haritalarına benzer avantajlara sahiptir. Bu uygulamalar, önceden hesaplanabilen ve çalışma zamanında kullanılmak üzere saklanabilen hafif verileri saklar. Bu da hesaplama maliyetlerinin büyük bir kısmını süreyi düzenlemeye yönlendirir.

Işık haritası, yüzeyler için teksel içinde alınan ışığı kodlarken Işık Sondası, boş alandan geçen ışığı depolar. Bu verileri hareket eden nesneleri aydınlatmak için kullanabilirsiniz. Işık Probları, dinamik nesneleri Sahnenizdeki ışık haritası çıkarılan nesnelerle görsel olarak entegre etmenize yardımcı olur.

Işık Probları, Sahnenizde hareket eden nesneleri ışıklandırmak için en iyi şekilde kullanılır. Problar, fırınınızdaki ışıklardan yararlanarak hareket eden nesnelerin Sahne ile aynı ışığa sahip olmasını sağlar. Işık Problarıyla dinamik nesneleri ışıklandırmak, gerçek zamanlı ışıklardan daha ucuzdur.

Işık Problarıyla Statik Işıklandırma ve Işık Probları sayfaları hakkında daha fazla bilgi edinebilirsiniz.

Şekil 13. Armies teknoloji demosundaki dinamik kalabalığı aydınlatmak için ışık probları yerleştirildi.

Örgü Oluşturucu ayarları

Sahnenizin kullandığı ışık türü ne olursa olsun Örgü Oluşturucu ayarlarınızın doğru olması önemlidir.

Kullanmadıklarınızı kapatın. Cast Gölgeleri gibi ayarlar, nesne aydınlatılmamış olsa bile Sahneyi oluşturduğunuz zaman maliyet ekler. Aşağıdaki Ağ Oluşturucu ayarlarına ilişkin örnek, Şekil 13'te gösterilen bir karakter içindir. Karakter, ışık yoklama verilerini kullanıyor ancak yansıma yoklamayı kullanmıyor.

Işık Probları'nın Probları Karışım ayarı, en yakın Işık Probları'ndan gelen ışık bilgilerini karakterle harmanlar. Karakter Sahne etrafında hareket ettikçe, karakteri etkileyen Işık Probları değişecektir. Oluşturma işlemi blob yöntemini kullandığından Cast Shadows devre dışı bırakılır. Ayrıca, Sahne hazırlandığı ve gerçek zamanlı gölgeler olmadığı için Gölgelendirme özelliği de kapatılmıştır.

Şekil 14. Şekil 13 oluşturma işlemi için Mesh Oluşturucu ayarları.

Gerçek zamanlı ışıklar ve ışık türleri

Işığınızı pişmiş aydınlatma, Işık Probları ve boyalı aydınlatma dokuları ya da gölgelendirici malzeme efektleri gibi sahte ışıklandırma teknikleriyle yönetmenizi öneririz. Ancak gerçek zamanlı ışığa ihtiyacınız varsa kullanılacak ışık türünü göz önünde bulundurmalısınız.

Her lamba türünün, aydınlatmayı hesaplamanın farklı bir maliyeti vardır. Aşağıdaki listede her ışık türüyle ilgili ayrıntılar verilmiştir:

  • Yönlü: Bu ışığın tek tip bir yönü vardır ve düşme yoktur. Yönlü ışık, gerçek zamanlı en ucuz ışıktır. Genellikle her Sahne için yalnızca bir yönlü ışığa ihtiyacınız olur. İleriye doğru oluşturma sayesinde, mobil cihazlar için önerilen oluşturma yolu, Sahnede hiç yön ışığı yoksa Unity varsayılan bir yön ışığı içerir.
  • Noktalı: Spot ışıkları, konilerinin dışındaki nesneleri yayar ve bunları aydınlatmaz. Bu durum, spot ışıkları hesaplama açısından küresel nokta ışıklarından daha ucuz hale getirir. En iyi performansı elde etmek için koni genişliğini sıkı tutun ve yalnızca amaçlanan nesnelere çarpın.
  • Nokta: Bunlar her yöne ışık verir. Her yönde ışık yayını yapmak faydalı ama çok pahalı. Nokta ışıkları geniş bir bölgede pahalıdır. Ayrıca gölge hesaplama, aydınlatmanın en pahalı kısmı olabilir. Tüm yönlere ışık yayınladığınızda, daha çok gölge ve hesaplama olur.