問題タブ [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.
c++ - シャドウ マップの位置と解像度
私は現在 C++ と OpenGL を学んでおり、以下のコードで正確に何が起こっているのかを誰かが教えてくれるかどうか疑問に思っていました. 現在、3D 環境内のシャドウ マップの位置と解像度を計算しています。
コードは現在機能しており、物事を把握しようとしています。
directx-11 - DirectX11 とラスタライザー深度バイアス
影を落とす移動するディレクショナル ライトの Z ファイティングに問題があります。
シャドウマップをレンダリングするときに、ラスタライザーの設定をいじろうとしています。深度バイアスに関連する 3 つのフィールド (DepthBias、SlopedScaleDepthBias、DepthBiasClamp) があり、どのようにいじっても適切な値を見つけることができません。適切な値の範囲がわかりません。
ほとんどのシーンで機能する、普遍的に受け入れられる/「標準」の傾斜スケール/バイアス値のセットはありますか? 極端なケースがあることは承知していますが、一般的なケースがうまく機能することを望んでいます。
opengl - ウォブリング シャドウ エッジをどのように修正しますか?
全方向シャドウ マップを実装しましたが、シャドウで望ましくない動作が発生していることに気付きました。遮られたポイントと光源の間の角度が非常に急峻な場合、影のエッジが揺れ始めます。脈動しているように見えます。
光源がオクルードされたポリゴンからさらに離れたときに何か関係があるのでしょうか。隣り合うピクセルは、サンプリングしたシャドウ マップ面の対応するテクセルよりも離れています。エイリアシングを実行するときの倍率の副作用?これは本当に勝手な推測です!
このタイプの動作に精通している人や、解決策を持っている人はいますか?
three.js - 解像度を変更するときにTHREE.jsでシャドウマップの解像度を動的に更新する方法は?
THREE.js でスポットライトの影の解像度を動的に変更したいと考えています。 この質問は最初は関連しているように見えますが、私の問題ではありません。シャドウマップのパラメータを動的に変更しましたが、これはシーンに影響を与えていません。この後さらにメッシュ オブジェクトを追加しても、シーン/ライトの影には影響しません。初期値 (256,256) を使用すると適用されますが、シーンを表示した後ではありません。
私は次のことを試みましたが、うまくいきませんでした:
light.position を変更すると、影は更新されますが、結果は更新されません。初期化中のみ、最初に .shadowMapWidth プロパティを使用しているようです。
c++ - 空(白)のフレームバッファ - シャドウ マッピング
問題の最初の部分は解決されているので、EDITを参照してください。
http://learnopengl.com/#!Advanced-Lighting/Shadows/Shadow-Mappingのシャドウ マッピング デモを独自のフレームワークで複製しようとしていますが、興味深いことに、シャドウが得られませんでした。最初の重大な問題は、深度マップが正しく機能していないことです。各行をデバッグして再確認しましたが、成功しませんでした。たぶん、別の目がもっと成功するでしょう。
最初のレンダーパスがうまくいかないようなので、2番目のレンダーパスについて書きます。ちなみに、オブジェクトの中心は 0, 0, 0 です。次のコードは、最初のレンダリング パスに使用されます。
ビュー行列と射影行列の生成が GLM (opengl の数学ライブラリ) とまったく同じ結果をもたらすことをテストしました。ただし、私の正射行列は次のように定義されています。
フレームバッファ オブジェクトとテクスチャの初期化は次のとおりです。
フラグメントと頂点シェーダーは次のようになります。
編集:
少し寝た後、レンダラーに小さなエラーが見つかり、シェーダーは「適切な」深度マップを描画します。
ただし、テクスチャ マッピング (深度比較) は同じ座標系にあるように見えます。
しかし、2 番目のレンダリング ステップはまだ正しくありません。
2 番目のレンダー パスの頂点とフラグメント シェーダーは次のようになります。
と
opengl - 後続のテクスチャの読み取りと書き込みに関する問題
私のレンダリング パイプライン (OpenGL 3.3 コア) には、次のサイクル (疑似コード) があります。
のときn=1
は、すべて OK です。ただし、 の場合n=2
、最初のレンダリングが正しくありません。
のサンプリングが完了する前にrender to texture T
への書き込みを開始したと思われます。T
render to back buffer
T
サイクルの終わりに置くglFlush()
と、レンダリングは正しくなりますが、FPS は少し低下します。インターネットのいたるところで、「glFlush() を使用する必要がある場合は、おそらく何か間違ったことをしている可能性があります」を見つけ続けています。
問題を正しく特定しましたか? glFlush()
この場合、正しい解決策はありますか? 反復ごとに異なるテクスチャを使用すること (私は知っていますn
) がより良い解決策でしょうか?
GTX580 では発生しますが、ATI Mobility Radeon 3470 では発生しません。
私のコンテキスト - 詳細:
2 つのライトと G バッファー (FBO) があります。各反復で、1 つのライトとそのシャドウ マップ (T
すべてのライトに対して相互にテクスチャを持つ別の FBO)を使用してディファード シェーディングを実行していn
ます。中render to back buffer
に光を蓄えます。
次の画像では、光を蓄積しませんでした。代わりに、最初の反復を左側のビューポートにレンダリングし、2 番目の反復を右側のビューポートにレンダリングして、問題を示しました。
glsl - Cubemap PCF: 特定の点でベクトルに垂直な平面を取得する
OpenGL 2.0 でシャドウ キューブ マップの PCF を実装しようとしています。ここで解決策を見つけたと思った(キューブ マップ PCF のセクションの開始を検索する) が、コードはOpenGL 2.0 では使用できない にPercentage closer filtering (PCF) algorithm
依存しているため、その上に表示されているへの呼び出しを使用できません。ページ。samplerCubeShadow
texture(samplerCubeShadow(), vec4())
この質問の最初の部分は次のとおりですsamplerCube
。OpenGL 2.0/GLSL 1.10 から同じ結果を取得する方法はありますか? textureCube
または何か他のものを使用して?
2 番目の部分は、この問題を解決するために私が持っている考えに関連しています。下の画像は、私がやりたいことを示しています。
青い実線と赤い点線はすべてsamplerCube
、深度値を格納する の 1 つの面からのベクトルです。黒い四角の中心にある濃い灰色の四角と青い線の交点は、立方体からサンプリングされたポイントを表します。青いベクトルに垂直な平面 (明るい灰色の長方形で表される) を作成したいと思います。次に、Z ベクトルをライトの位置 (赤い点線) からその平面上の x、Y 値にキャストすることで、カメラから 4 つの黒い点をサンプリングしたいと思います。その後、これらの値を元のサンプルの値と組み合わせて使用して、PCF シャドウ値を計算します。
これは、ポイントライト/キューブマップの PCF を計算する実行可能で効率的な方法ですか? 平行平面を作成し、そこから必要な X 座標と Y 座標を取得するにはどうすればよいでしょうか。