ฉันกำลังอยู่ในขั้นตอนการดำเนินการกระจายดาวเคราะห์ในอวกาศจากอวกาศ ฉันใช้เฉดสีของ Sean O'Neil จากhttp://http.developer.nvidia.com/GPUGems2/gpugems2_chapter16.htmlเป็นจุดเริ่มต้น
ฉันมีปัญหาเดียวกันที่เกี่ยวข้องกับ fCameraAngle ยกเว้นกับ SkyFromSpace shader ซึ่งตรงข้ามกับ GroundFromSpace shader ที่นี่: http://www.gamedev.net/topic/621187-sean-oneils-atmospheric-scattering/
ฉันได้รับวัตถุแปลกประหลาดที่มีท้องฟ้าจากอวกาศ shader เมื่อไม่ได้ใช้fCameraAngle = 1
ในวงใน สาเหตุของสิ่งประดิษฐ์เหล่านี้คืออะไร? สิ่งประดิษฐ์นั้นหายไปเมื่อ fCameraAngle ถูก จำกัด ไว้ที่ 1 ฉันก็ดูเหมือนจะไม่มีสีสันที่ปรากฏในกล่องทรายของ O'Neil ( http://sponeil.net/downloads.htm )
ตำแหน่งกล้อง X = 0, Y = 0, Z = 500 GroundFromSpace ทางซ้าย, SkyFromSpace ทางด้านขวา
ตำแหน่งกล้อง X = 500, Y = 500, Z = 500 GroundFromSpace ทางซ้าย, SkyFromSpace ทางด้านขวา
ฉันพบว่ามุมกล้องดูเหมือนจะจัดการแตกต่างกันมากขึ้นอยู่กับแหล่งที่มา:
ในเฉดสีดั้งเดิมมุมกล้องใน SkyFromSpaceShader ถูกคำนวณดังนี้:
float fCameraAngle = dot(v3Ray, v3SamplePoint) / fHeight;
มุมกล้องถูกคำนวณดังนี้:
float fCameraAngle = dot(-v3Ray, v3Pos) / length(v3Pos);
อย่างไรก็ตามแหล่งต่าง ๆ ออนไลน์ทิงเกอร์กับ negating รังสี ทำไมนี้
นี่คือโครงการ C # Windows รูปแบบที่แสดงให้เห็นถึงปัญหาและฉันเคยใช้ในการสร้างภาพ: https://github.com/ollipekka/AtmosphericScatteringTest/
อัปเดต:ฉันพบจากโครงการ ScatterCPU ที่พบในไซต์ของ O'Neil ว่ารังสีของกล้องถูกลบล้างเมื่อกล้องอยู่เหนือจุดที่มีการแรเงาเพื่อให้การคำนวณการกระเจิงจากจุดหนึ่งไปยังอีกกล้องหนึ่ง
การเปลี่ยนทิศทางของรังสีเป็นการลบสิ่งประดิษฐ์ แต่แนะนำปัญหาอื่น ๆ ดังที่แสดงไว้ที่นี่:
นอกจากนี้ในโครงการ ScatterCPU โอนีลจะป้องกันสถานการณ์ที่ความลึกเชิงแสงสำหรับแสงน้อยกว่าศูนย์:
float fLightDepth = Scale(fLightAngle, fScaleDepth);
if (fLightDepth < float.Epsilon)
{
continue;
}
ตามที่ระบุไว้ในความคิดเห็นพร้อมกับสิ่งประดิษฐ์ใหม่ ๆ เหล่านี้ยังคงทิ้งคำถามเกิดอะไรขึ้นกับภาพที่วางตำแหน่งกล้องที่ 500, 500, 500? รู้สึกเหมือนว่ารัศมีนั้นมุ่งเน้นไปที่ส่วนที่ผิดอย่างสมบูรณ์ของโลก ใครจะคาดหวังว่าแสงจะเข้าใกล้จุดที่ดวงอาทิตย์น่าจะกระทบกับโลกมากกว่าที่จะเปลี่ยนจากกลางวันและกลางคืน
โครงการ GitHub ได้รับการปรับปรุงเพื่อสะท้อนถึงการเปลี่ยนแปลงในการปรับปรุงนี้