Minecraft büyük ölçüde bir yükseklik haritasına dayanan ve heigtmap bilgisini dünyaya ışıkla akıtmak için kullanan bir oyundur. Anladığım kadarıyla, yükseklik haritasındaki en yüksek nokta, güneş ışığından etkilenen alanın sonu. Yukarıdaki her şey güneş ışığıyla aydınlatılır, altındaki her şey 8 blok yarıçapındaki yakındaki ışıktan etkilenir.
Eğer dünyanızın tepesinde yüzen bir ada varsa, bunun altındaki her şey aslında bir mağara olarak görülecektir. İki ışık aynı noktayı etkilediğinde daha parlak ışık kazanır (bundan emin değildir).
Her iki şekilde de minecrafts aydınlatma modeli ile ilgili birkaç sorun var: her şeyden önce, dünyanızın bir yükseklik haritası yoksa, güneş ışığını tam olarak neyin yayması ve neyin yayılmaması gerektiğini anlamak daha zor hale gelir. Basit bir yol, dünyanın (benim durumumda) yüzen bir kaya olduğunu varsaymak ve daha sonra her ekseni her iki yönden de geçmek ve kayanın nerede başladığını ve bittiğini bulmak olacaktır. Ancak bu, kayadaki eziklerin karanlıkta olmaması gerektiği için sorunu tamamen ortadan kaldırmaz.
Minecraft, bir bloğun malzemesi hakkındaki bilgilerle birlikte parçalarındaki ışık bilgilerini önbelleğe alacaktır. Bu yüzden sadece dünya değiştirilirse aydınlatma güncellenmelidir. Ne yazık ki bu süreç güncellemelerde hala oldukça yavaş ve hızlı ışık değişikliklerinde aydınlatma gecikmesini görebilirsiniz. Bu, özellikle bir çok blok değiştiğinde (TNT, gün batımı vb.) Ve en hızlı bilgisayarı (Veya Mac'te Java) çalıştırmıyorsanız doğrudur.
3D grafik aydınlatma konusundaki sınırlı anlayışımdan, minecraft gibi bir dünya en büyük sorun olmamalı. Sorunu nasıl çözersiniz?
Bence bir voksel dünyasında aydınlatma için temel şartlar
- tek bir karede gerçekleşebilecek kadar hızlı güncelleyin. Grafik cihazda ışıklandırma yapılabilir ve değiştirilen ışık bilgileri ana RAM'e indirilebilir.
- ana oyun mantığı için ışık bilgileri hızlı bir şekilde mevcut olmalıdır, bu yüzden tamamen grafik cihazına dayanmamalıdır: akıl yürütme: ışık çimlerin büyümesini, canavarların yumurtlamasını vb. etkiler.
- hafif güncellemelerin bir yığın için yerel olması veya başka bir sınıra sahip olması gerekir, böylece çok büyük olabilecek tüm dünyayı yeniden sevmek zorunda kalmazsınız.
Ana fikir, ışık güncellemelerini hızlı yapmak, daha güzel olması gerekmez. Genel ışık oluşturma performans iyileştirmeleri için SSAO kolayca eklenebilir ve bunun üzerine çok daha güzel dünyalarla sonuçlanabilir.