Screen Space Ambient Occlusion
Klasik render yöntemlerinde (Direct Illumination), sadece ışığın çarptığı yüzeyler aydınlatılır. Ama gerçek hayatta ışık ilk çarptığı yüzeyde durmayıp, yüzeylerden sekerek, aydınlatmaya devam eder. Bunu bilgisayarda elde etmemizi sağlayan aydınlatma modeli Global Illumination’dır. GI’nin hesaplanması için farklı yöntemler (radiosity, photon mapping yöntemleri akla ilk gelenler)olmasına karşın, hesaplaması çok daha uzun sürer. Direct Illumination’da ışığın bir noktadan sonra aydınlatma etkisi hesaplanmazken, GI’de çok daha kompleks ilişkiler ve ışının yayılması göz önüne alınmak zorundadır. Eğer hesaplayamıyorsan, taklit et…Burada devreye giriyor…
Ambient Occlusion tam GI hesaplaması yapmadan, ortamın aydınlatma (ambient) etkisini canlandırmayı sağlayan bir tekniktir. İlk olarak ILM tarafından Pearl Harbor filminde kullanılan yöntem, mantık olarak sahnede bulunan tüm nesnelerin ortam ışığından (ambient) aynı oranda etkilenmediği düşüncesinden hareket eder. Işından daha çok, aydınlatılan yüzeyin ne kadar ışık alabileceğini saptamaya çalışılır. Sonuç tam GI hesaplamalarının ürettiği sonuçlar kadar başarılı olmasa da, çoğu zaman yeterlidir. Aşağıdaki resimde gördüğünüz gibi aydınlatılacak yüzeyin çevresindeki nesnelerle ilişkisi göz önüne alınarak, sahte ama çok daha hızlı bir GI etkisi elde edilir.
Ambient Occlusion’ın oyunlarda çokça görünmeye başladığı günümüzde, kullanılan yöntem ise etkinin tam olarak 3D olarak elde edilmeyip, ekranda görünen kısmın, derinlik ve normal verilerini kullanılarak sonuca ulaşılması metodudur. Screen Space Ambient Occlusion olarak adlandırılan bu yöntemi Starcraft II oyunundan, Crysis’e kadar birçok oyunda görmek mümkündür. Çok hızlı olan bu yöntem oyun geliştiriciler açısından bilinen, bir yöntem olmasına rağmen, prodüksiyon dünyasında çok üzerinde durulmayan ya da gözden kaçan yöntemlerden biridir.
Kullandığımız 3D yazılımlarda zaten Occlusion alabiliyoruz. Hız olarakta oldukça makul seviyelerde. Ama bazen bir sahnedeki etkiyi arttırmak ve hızlı şekilde occlusion almak için yeni bir pass almak ve kompozisyon yazılımda kullanmak gerekebiliyor. Gerektiğinde, direkt olarak kompozisyon yazılımında Ambient Occlusion almak nasıl olur? SSAO ile mümkün… Nasıl mı? Burası benim teknik sınırlarımı aşıyor, ama başlangıç için bir takım bulgularımı sizinle paylaşabilirim… Eklenti geliştirici arkadaşlarımıza kolay gelsin…
Etkiyi hızlı olarak test etmeniz ve görmeniz için online örnek:
http://www.smart-page.net/as3/sp_smartssao/
GameDev Sitesinde Konuyla ilgili bir makale.
http://archive.gamedev.net/reference/programming/features/simpleSSAO/
Nvidia sitesinde yer alan konuyla ilgili bilgi, video ve örnek kod
http://developer.download.nvidia.com/SDK/10.5/direct3d/Source/ScreenSpaceAO/doc/ScreenSpaceAO.pdf
http://developer.download.nvidia.com/SDK/10.5/direct3d/Source/ScreenSpaceAO/doc/ScreenSpaceAO.wmv
http://developer.download.nvidia.com/SDK/10.5/Samples/ScreenSpaceAO.zip
Ogre oyun motoru için kod örneği
http://www.ogre3d.org/forums/viewtopic.php?f=11&t=58839
Yine Nvidia’dan farklı bir yazı
http://www.slideshare.net/NVIDIA/multilayer-dualresolution-screenspace-ambient-occlusion
StarCraft 2 oyununda Screen Space Occlusion kullanımıyla ilgili yazı
http://developer.amd.com/documentation/presentations/legacy/Chapter05-Filion-StarCraftII.pdf
Nuke için plug-in :
http://www.nukepedia.com/gizmos/plugins/filter/ssao/
Shake için plug-in:
http://www.pixelmania.se/shake
Plug-in’in arayüzü — > http://www.pixelmania.se/shake/occlusion.asp