タグ付けされた質問 「shadow-mapping」

2
シャドウマッピングでの投影エイリアスの処理
3D印刷用の小さな建物を作るために、単純な手続き型3Dモデリングをいじっています。例: モデルを画面上で読みやすくするために、単一の指向性ライトの基本的なシャドウマッピングを実装しました。シーンは変わらないので、シーンの軸に合わせたボックスを使用してシャドウマップを1回レンダリングするだけで、シャドウマップの境界がどうあるべきかを把握します。影と境界線は、すべての行列が正しいように見えますが、少し近づくとひどく見えます: 私が行った読書から、私はピーターのパンニングとそれに対して何ができるかを理解していますが、ぼんやりしたエッジは射影エイリアシングの一種であると信じているため、私の基本的な実装では何かが間違っていると思います。 ピクセルシェーダーをハッキングして、シャドウテクセルの境界を表示しました。 テクスチャにバイリニアフィルタリングを適用しました(これがないと、深刻な影のにきびができます)。悲しいことに、PCFでの私の試みも失敗しました-それはちょうど不規則に見えます: バイリニアフィルタリングを無効にした単一のサンプルケースを次に示します。 これは「典型的な」射影エイリアシングのように見えますか?おそらくカスケードでシーンにクリップされた視錐台を使用したシャドウマップの動的レンダリングは、問題に対処できますか? 編集:私が得るものを示すために、双線形フィルタリングのクローズアップ、ポストシャドウ比較を追加します。内側の端が原因で、悪い影のにきびが現れます。スタックされた仮想ブロックを使用してモデリングしており、適切な結合操作を行っていません。私の読書から、多面体にブール演算を実装することは簡単ではありませんが、静的なシャドウボリュームを実装するだけでなく、いくつかの3D印刷ソフトウェアをクリーンアップすることもできます。

1
WebGL全方向性シャドウマッピングの問題
まず第一に、深度マップとキューブマップを使用したシャドウマッピングに関する多くの投稿を読み、それらがどのように機能するかを理解しています。また、OpenGLを使用してそれらを使用した経験がありますが、実装に問題があります。 「EZ3」という名前の3Dグラフィックエンジンで単一の点光源を使用した全方向シャドウマッピングテクニック。私のエンジンでは、WebGLを3DグラフィックAPIとして、JavaScriptをプログラミング言語として使用しています。これは、コンピューターサイエンスの学士論文のためです。 基本的に、これはシャドウマッピングアルゴリズムを実装した方法ですが、ポイントライトの場合にのみ焦点を当てます。 まず、次のように前面カリングをアクティブにします。 if (this.state.faceCulling !== Material.FRONT) { if (this.state.faceCulling === Material.NONE) gl.enable(gl.CULL_FACE); gl.cullFace(gl.FRONT); this.state.faceCulling = Material.FRONT; } 次に、各キューブマップ面の深度値を記録するために深度プログラムを作成します。これは、GLSL 1.0の深度プログラムコードです。 頂点シェーダー: precision highp float; attribute vec3 position; uniform mat4 uModelView; uniform mat4 uProjection; void main() { gl_Position = uProjection * uModelView * vec4(position, 1.0); } フラグメントシェーダー: precision highp float; …

1
シャドウマッピングアーティファクト
私は深度テクスチャを使用してOpenGLのシャドウマッピングをいじっています。深度テクスチャは細かいので、シーンにマッピングできますが、オブジェクトの裏側に奇妙なアーティファクトがあります。 私の質問は、これを引き起こしているものであり、どうすれば修正できますか? 私が使用しているフラグメントシェーダーはかなり単純です(ここに青がない理由に疑問がある場合に備えて、簡単にするために色を取り除いています)。 in vec4 vShadowCoord; uniform sampler2DShadow shadowMap; out vec4 fragColor; void main() { float bias = 0.005; float visibility = 1.0; if (texture(shadowMap, vec3(vShadowCoord.xy, vShadowCoord.z / vShadowCoord.w)) < (vShadowCoord.z - bias) / vShadowCoord.w) visibility = 0.25; fragColor = vec4(visibility); } 編集:必要に応じて、上記のコードのみを使用する最低限の作業例のスクリーンショット(色なし)。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.