2
宇宙人工物からの大気散乱空
私は宇宙からの惑星の大気散乱を実装する過程にいます。http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter16.htmlからSean O'Neilのシェーダーを出発点として使用しています。 ここにあるGroundFromSpaceシェーダーではなく、SkyFromSpaceシェーダーを除いて、fCameraAngleに関連する問題はほとんどあります。http://www.gamedev.net/topic/621187-sean-oneils-atmospheric-scattering/ 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); しかし、さまざまなソースがオンラインで、レイを否定しています。どうしてこれなの? 問題を示し、画像の生成に使用したC#Windows.Formsプロジェクトは次のとおりです。https : //github.com/ollipekka/AtmosphericScatteringTest/ 更新: O'NeilのサイトにあるScatterCPUプロジェクトから、カメラがシェーディングされているポイントの上にあるときにカメラレイが無効になり、ポイントからカメラへの散乱が計算されることがわかりました。 光線の方向を変更すると、実際にアーティファクトは削除されますが、次に示すように他の問題が発生します。 さらに、ScatterCPUプロジェクトでは、O'Neilは光の光学的深さが0未満の状況から保護します。 float fLightDepth = Scale(fLightAngle, fScaleDepth); …