問題タブ [shadow-mapping]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
125 参照

c++ - シャドウ マップの位置と解像度

私は現在 C++ と OpenGL を学んでおり、以下のコードで正確に何が起こっているのかを誰かが教えてくれるかどうか疑問に思っていました. 現在、3D 環境内のシャドウ マップの位置と解像度を計算しています。

コードは現在機能しており、物事を把握しようとしています。

0 投票する
0 に答える
101 参照

glsl - シャドウが正しくレンダリングされない

シャドウ マップ

シャドウ マップを使用してシャドウを作成しようとしています。シャドウ マップは適切にレンダリングされていると思います。

球体の影が正しい位置にないようですが、どうすれば修正できますか? また、球の周りに黒いリングがあるのはなぜですか? また、それを取り除く方法は?

シャドウ マップの頂点シェーダーで

シャドウ マップ フラグメント シェーダー内

vs.glsl

fs.glsl

0 投票する
1 に答える
1369 参照

directx-11 - DirectX11 とラスタライザー深度バイアス

影を落とす移動するディレクショナル ライトの Z ファイティングに問題があります。

シャドウマップをレンダリングするときに、ラスタライザーの設定をいじろうとしています。深度バイアスに関連する 3 つのフィールド (DepthBias、SlopedScaleDepthBias、DepthBiasClamp) があり、どのようにいじっても適切な値を見つけることができません。適切な値の範囲がわかりません。

ほとんどのシーンで機能する、普遍的に受け入れられる/「標準」の傾斜スケール/バイアス値のセットはありますか? 極端なケースがあることは承知していますが、一般的なケースがうまく機能することを望んでいます。

0 投票する
0 に答える
131 参照

opengl - ウォブリング シャドウ エッジをどのように修正しますか?

全方向シャドウ マップを実装しましたが、シャドウで望ましくない動作が発生していることに気付きました。遮られたポイントと光源の間の角度が非常に急峻な場合、影のエッジが揺れ始めます。脈動しているように見えます。

光源がオクルードされたポリゴンからさらに離れたときに何か関係があるのでしょうか。隣り合うピクセルは、サンプリングしたシャドウ マップ面の対応するテクセルよりも離れています。エイリアシングを実行するときの倍率の副作用?これは本当に勝手な推測です!

このタイプの動作に精通している人や、解決策を持っている人はいますか?

0 投票する
1 に答える
1314 参照

three.js - 解像度を変更するときにTHREE.jsでシャドウマップの解像度を動的に更新する方法は?

THREE.js でスポットライトの影の解像度を動的に変更したいと考えています。 この質問は最初は関連しているように見えますが、私の問題ではありません。シャドウマップのパラメータを動的に変更しましたが、これはシーンに影響を与えていません。この後さらにメッシュ オブジェクトを追加しても、シーン/ライトの影には影響しません。初期値 (256,256) を使用すると適用されますが、シーンを表示した後ではありません。

私は次のことを試みましたが、うまくいきませんでした:

light.position を変更すると、影は更新されますが、結果は更新されません。初期化中のみ、最初に .shadowMapWidth プロパティを使用しているようです。

0 投票する
1 に答える
894 参照

c++ - 空(白)のフレームバッファ - シャドウ マッピング

問題の最初の部分は解決されているので、EDITを参照してください。

http://learnopengl.com/#!Advanced-Lighting/Shadows/Shadow-Mappingのシャドウ マッピング デモを独自のフレームワークで複製しようとしていますが、興味深いことに、シャドウが得られませんでした。最初の重大な問題は、深度マップが正しく機能していないことです。各行をデバッグして再確認しましたが、成功しませんでした。たぶん、別の目がもっと成功するでしょう。

参照 (左上、5 行目 - 画像は完全に白です): ここに画像の説明を入力

最初のレンダーパスがうまくいかないようなので、2番目のレンダーパスについて書きます。ちなみに、オブジェクトの中心は 0, 0, 0 です。次のコードは、最初のレンダリング パスに使用されます。

ビュー行列と射影行列の生成が GLM (opengl の数学ライブラリ) とまったく同じ結果をもたらすことをテストしました。ただし、私の正射行列は次のように定義されています。

フレームバッファ オブジェクトとテクスチャの初期化は次のとおりです。

フラグメントと頂点シェーダーは次のようになります。

編集:

少し寝た後、レンダラーに小さなエラーが見つかり、シェーダーは「適切な」深度マップを描画します。 ここに画像の説明を入力 ただし、テクスチャ マッピング (深度比較) は同じ座標系にあるように見えます。

しかし、2 番目のレンダリング ステップはまだ正しくありません。 ここに画像の説明を入力

2 番目のレンダー パスの頂点とフラグメント シェーダーは次のようになります。

0 投票する
0 に答える
145 参照

opengl - 後続のテクスチャの読み取りと書き込みに関する問題

私のレンダリング パイプライン (OpenGL 3.3 コア) には、次のサイクル (疑似コード) があります。

のときn=1は、すべて OK です。ただし、 の場合n=2、最初のレンダリングが正しくありません。


のサンプリングが完了する前にrender to texture Tへの書き込みを開始したと思われます。Trender to back bufferT

サイクルの終わりに置くglFlush()と、レンダリングは正しくなりますが、FPS は少し低下します。インターネットのいたるところで、「glFlush() を使用する必要がある場合は、おそらく何か間違ったことをしている可能性があります」を見つけ続けています。

問題を正しく特定しましたか? glFlush()この場合、正しい解決策はありますか? 反復ごとに異なるテクスチャを使用すること (私は知っていますn) がより良い解決策でしょうか?

GTX580 では発生しますが、ATI Mobility Radeon 3470 では発生しません。


私のコンテキスト - 詳細:

2 つのライトと G バッファー (FBO) があります。各反復で、1 つのライトとそのシャドウ マップ (Tすべてのライトに対して相互にテクスチャを持つ別の FBO)を使用してディファード シェーディングを実行していnます。中render to back bufferに光を蓄えます。

次の画像では、光を蓄積しませんでした。代わりに、最初の反復を左側のビューポートにレンダリングし、2 番目の反復を右側のビューポートにレンダリングして、問題を示しました。

分離されたシェーディング パス

0 投票する
1 に答える
339 参照

glsl - Cubemap PCF: 特定の点でベクトルに垂直な平面を取得する

OpenGL 2.0 でシャドウ キューブ マップの PCF を実装しようとしています。ここで解決策を見つけたと思った(キューブ マップ PCF のセクションの開始を検索する) が、コードはOpenGL 2.0 では使用できない にPercentage closer filtering (PCF) algorithm依存しているため、その上に表示されているへの呼び出しを使用できません。ページ。samplerCubeShadowtexture(samplerCubeShadow(), vec4())

この質問の最初の部分は次のとおりですsamplerCube。OpenGL 2.0/GLSL 1.10 から同じ結果を取得する方法はありますか? textureCubeまたは何か他のものを使用して?

2 番目の部分は、この問題を解決するために私が持っている考えに関連しています。下の画像は、私がやりたいことを示しています。

ライトから頂点/プレーン

青い実線と赤い点線はすべてsamplerCube、深度値を格納する の 1 つの面からのベクトルです。黒い四角の中心にある濃い灰色の四角と青い線の交点は、立方体からサンプリングされたポイントを表します。青いベクトルに垂直な平面 (明るい灰色の長方形で表される) を作成したいと思います。次に、Z ベクトルをライトの位置 (赤い点線) からその平面上の x、Y 値にキャストすることで、カメラから 4 つの黒い点をサンプリングしたいと思います。その後、これらの値を元のサンプルの値と組み合わせて使用​​して、PCF シャドウ値を計算します。

これは、ポイントライト/キューブマップの PCF を計算する実行可能で効率的な方法ですか? 平行平面を作成し、そこから必要な X 座標と Y 座標を取得するにはどうすればよいでしょうか。