問題タブ [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 に答える
813 参照

opengl - シャドウマップの外側でサンプリングすると異常な動作が発生する

ライト ビューの外側にあるポイントをサンプリングするときに、シャドウ マップに問題が発生します。これは、GL_CLAMP または GL_CLAMP_TO_EDGE に設定された GL_TEXTURE_WRAP のテクスチャ パラメータでシャドウ マップが作成されるたびに得られるものです。

ここで私が判断したのは、マップの影がある側の影マップの外側のすべてのポイントが影にあると見なされ、影のない側のマップの外側のすべてのポイントも影がないと見なされるということです。これは GL_CLAMP と GL_CLAMP_TO_EDGE の予想される動作だと思いますが、Web で見つけたさまざまなシャドウ マッピングの例ではこの問題は見られませんでした。これらの問題のいくつかは、GL_CLAMP_TO_BORDER を使用して境界線の色を設定することで解消されますが、これも私が見た例のいずれにも見られた修正ではありません。これは、スポットライトをシャドウイングするときに予想される問題ですか? もしそうなら、通常の修正方法は何ですか?

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

opengl - shadowcubemap の市松模様 - samplerCubeShadow の glsl texture() はベクトルの 4 番目のコンポーネントを無視します

ポイント ライト シャドウイングの機能を記述しようとしています。最初はスポットライト シャドウイングが機能していましたが、次にポイント ライト シャドウイングに切り替えると (キューブ マップを使用したり、6 つの POV から深度をレンダリングするなどして...)、市松模様の光のパターンが得られるようになりました (シャドウなし)。これがなぜなのかについて、誰かが直感を持っていますか?

スクリーンショットは次のとおりです。チェッカーボードのスクリーンショット

(よく見ると、立方体の前面が三角形のすぐ右側にある状態でキューブマップがレンダリングされていることがはっきりとわかります)

そして、これが私のレンダー パス フラグメント シェーダー glsl コードです (残りの部分を見たい場合は、それも投稿できますが、これが重要な部分であると考えました)。

注: 私はディファード ライティングを使用しているため、このパスの頂点シェーダーは単なるクワッドであり、pos_tex、norm_tex、および col_tex は、前のパスで生成されたジオメトリ バッファーからのものです。

ありがとうございました!

編集: わかりました、それで私はそれをいじっていました、そして今、テクスチャはランダムに見えます... 変な表示のスクリーンショット

これは、深度キューブがノイズでいっぱいだと思いますか? samplerCubeShadow を使用した texture() 関数が 1.0 を返すには、その時点での値がそのフラグメントでの深さの値と正確に一致する必要があるためです。また、wasd+up+down でライトの位置を制御するように設定してあり、ライトの動きに合わせてパターンが移動します (バックすると大きく/暗くなります)。つまり、値は実際の距離に合わせて動的に変化しなければならないということですか? ああ、私は混乱しています...

EDIT 2 わかりました、申し訳ありませんが、この質問は制御不能ですが、将来同様の問題を抱えている人のために、進捗状況を記録し続けると思いました。

とにかく、シャドウキューブマップで texture() に渡された 4d ベクトルの 4 番目のコンポーネントとして何を入れても、まったく同じ結果が得られることがわかりました。同様に、定数を入れることもでき、まったく同じ結果が得られます。そんなことがあるものか?

編集3 ダーン。エラーは、私が今言ったこととは何の関係もないことがわかりました。詳細については、以下の回答を参照してください:(

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

opengl - OpenGL のシャドウ マップ

OpenGL のシャドウ マップに問題があります。さて、影は次のようになります。

http://i.stack.imgur.com/7wWm2.png

私の頂点シェーダー:

フラグメント シェーダー:

フレームバッファを作成する方法は次のとおりです。

何が問題ですか?物体の影が悪く見えるのはなぜですか?

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

c++ - シャドウ マッピングが正しく投影されない

OpenGL グラフィック エンジンでのシャドウ マッピングの実装に問題があります。

最初の段階で、ライトの視点からシャドウ マップをフレーム バッファー オブジェクトに (深度テクスチャがアタッチされた状態で) レンダリングします。

関数 drawSceneTree() を使用してすべてのシーンを描画し、関数 setTextureMatrix() を使用してライト マトリックスを OpenGL TEXTURE7 に保存します。その内容は次のとおりです。

次に、カメラの視点からシーンをレンダリングし、シェーダーを使用して影をレンダリングします。

setupMatrices() 関数は、射影とモデル ビュー マトリックスを設定します。関数 BindForReading(7) を使用して、shadowMapFBO を OpenGL TEXTURE7 にバインドします。内容は次のとおりです。

最後に、頂点シェーダーとフラグメント シェーダーは次のとおりです。

バーテックス:

断片:

そして、シーンのすべてのオブジェクトに投影されたゲームのキャラクターの影を取得しています。私はそれをgifに記録しました:

https://dl.dropboxusercontent.com/u/658766/captura.gif

PS: シャドウ マップも、デバッグ目的で画面の右上隅にレンダリングされます。

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

c++ - シャドウ マップをレンダリングしようとすると OpenGL シーンが黒くレンダリングされる

現在、アプリケーションにシャドウ マップのサポートを実装しており、次のリンクに示されている手順に従っています: http://www.fabiensanglard.net/shadowmapping/index.php

しかし、彼がシャドウ マップの投影にテクスチャ マトリックスを使用していることに気付きましたが、テクスチャ マトリックスを使用せずにそれを行いたいと考えています。

シーンをレンダリングする方法は次のとおりです。

  • 深度テクスチャの FBO を設定する
  • ライトの視点から投影とモデル ビュー マトリックスを設定する
  • カラーマスクを無効にしてシーンをレンダリングする
  • 次のようにしてシャドウ マトリックスを設定します。 shadowMatrix = bias * lightProjectionMatrix * lightModelViewMatrix
  • シャドウ マトリックスを実際のカメラ モデルビュー マトリックスの逆数で乗算します。
  • shadowMatrix を mat4 ユニフォーム変数としてシェーダーに送信します。

私の頂点シェーダーには、さまざまな vec4 shadowCoord 変数があり、それは、shadowMatrix 均一に gl_ModelViewMatrix と gl_Vertex を乗算して計算されます (shadowCoord = shadowMatrix * gl_ModelViewMatrix * gl_Vertex)

フラグメント シェーダーは、上記のリンクに記載されているものとまったく同じです。その結果、シーンが完全に黒く表示されるか、シャドウに設定されているシェード/カラーが表示されます。

バイアス、lightProjectionMatrix、lightModelViewMatrix にカメラのモデルビュー マトリックスの逆数を掛けると、何か間違ったことをしていると思います。誰かが私が間違っていることを指摘できますか?

編集:複雑なコードを貼り付けなくても誰かが問題を特定できることを望んでいましたが、とにかく貼り付けられるものを貼り付けようとします。コードがごちゃごちゃしていて申し訳ありません。簡単にするために多くのコードを削除する必要がありました。

深度フレームバッファのセットアップ

FBOバインド機能

FBOアンバインド機能

FBOバインド画像機能

頂点シェーダー

フラグメントシェーダー

}

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

opengl - Nvidia グラフィックス カードのシャドウ アクネ

パートナーと私は OpenGL の小さなデモに取り組んでいます。単純なシャドウ マッピングを行っています。彼は ATI と Intel HD グラフィックス 4000 を使用しており、すべて正常に動作しています。私は GTX 560 TI を使用しており、同じコードを使用していますが、影にきびが発生します。 ここに画像の説明を入力

私が動いているとき、影全体がちらつきます。フレームバッファの深度バッファを設定するには、次のようにします。

頂点シェーダーの関連部分は次のとおりです。

フラグメント シェーダーの関連部分は次のとおりです。

さまざまなバイアス値を試しましたが、にきびに影響しないか、影がまったくありません。また、ルックアップ関数として textureProj() および texture() で sampler2DShadow を使用しようとしました。何も機能していないようです。この問題は、シャドウだけでなく、シャドウマップも使用されるボリューム ライティング エフェクトにも影響します。一方、gl_ClipDistance を使用したクリッピングは、私の Nvidia では正常に機能しますが、彼のグラフィック カードでは機能しません。