Bir gezegenin uzaydan atmosferik saçılması uygulama sürecindeyim. Http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter16.html adresinden Sean O'Neil'in gölgelendiricilerini başlangıç noktası olarak kullanıyorum .
Ben burada olduğu gibi GroundFromSpace gölgelendiricinin aksine SkyFromSpace gölgelendirici dışında fCameraAngle ile ilgili hemen hemen aynı sorunu var: http://www.gamedev.net/topic/621187-sean-oneils-atmospheric-scattering/
fCameraAngle = 1
İç döngüde kullanmadığınızda uzay gölgelendiricisinden gökyüzü ile garip eserler alıyorum . Bu eserlerin nedeni nedir? FCameraAngle 1 ile sınırlandığında eserler kayboluyor. O'Neil'ın sanal alanında bulunan renk tonundan da yoksun gibi görünüyorum ( http://sponeil.net/downloads.htm )
Kamera konumu X = 0, Y = 0, Z = 500. Solda GroundFromSpace, sağda SkyFromSpace.
Kamera konumu X = 500, Y = 500, Z = 500. Solda GroundFromSpace, sağda SkyFromSpace.
Kamera açısının kaynağa bağlı olarak çok farklı ele alındığını gördüm:
Orijinal gölgelendiricilerde SkyFromSpaceShader'daki kamera açısı şu şekilde hesaplanır:
float fCameraAngle = dot(v3Ray, v3SamplePoint) / fHeight;
Alan gölgelendiriciden zeminde kamera açısı şu şekilde hesaplanır:
float fCameraAngle = dot(-v3Ray, v3Pos) / length(v3Pos);
Ancak, çeşitli kaynaklar ışını reddeden çevrimiçi tamircilik. Bu neden?
İşte sorunu gösteren ve görüntüleri oluşturmak için kullandığım bir C # Windows.Forms projesi: https://github.com/ollipekka/AtmosphericScatteringTest/
Güncelleme: O'Neil'ın sitesinde bulunan ScatterCPU projesinden, kamera gölgelendirilen noktanın üzerinde olduğunda kamera ışınının reddedildiğini öğrendim, böylece saçılma noktadan kameraya hesaplanır.
Işın yönünü değiştirmek gerçekten yapaylıkları ortadan kaldırır, ancak burada gösterildiği gibi başka problemler ortaya çıkarır:
Ayrıca, ScatterCPU projesinde O'Neil, ışık için optik derinliğin sıfırdan küçük olduğu durumlara karşı koruma sağlar:
float fLightDepth = Scale(fLightAngle, fScaleDepth);
if (fLightDepth < float.Epsilon)
{
continue;
}
Yorumlarda belirtildiği gibi, bu yeni eserler ile birlikte bu hala soru bırakıyor, kameranın 500, 500, 500 olarak konumlandırıldığı görüntülerde sorun nedir? Hale, gezegenin tamamen yanlış kısmına odaklanmış gibi geliyor. Biri, ışığın günden geceye değişmek yerine güneşin gezegene çarpması gereken noktaya daha yakın olmasını beklerdi.
Github projesi bu güncellemedeki değişiklikleri yansıtacak şekilde güncellendi.