問題タブ [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.
opengl - OpenGL と GLSL を使用したシャドウ マッピング「シャドウ アクネ」アーティファクト
有名な前面カリング手法を使用して、ハードおよび PCF シャドウ マッピング アルゴリズムを実装する単純な 3D アプリケーションを作成しました。残念ながら、この手法の問題は、密閉されたメッシュのみがキャスト シャドウを生成できることです。たとえば、平面はそれ自体が前面であるため、このような効果を生み出すことはできません。
したがって、解決策は関数「glPolygonOffset」を使用することです。この目的は、「ライト ビュー」から見える各頂点の深度レンダリング パス中に深度値をわずかに変更することです。言い換えれば、この関数は、今回はすべてのメッシュの前面を維持する「シャドウ アクネ」アーティファクトを回避するために必要です。
ハード シャドウ マッピング アルゴリズムを使用したこのようなレンダリングの表示を次に示します。
ご覧のとおり、影のレンダリングはアーティファクトなしで完璧です!
以下は、深度テクスチャ レンダリング パスを定義する C++ クライアント コードです。
次に、2 番目のレンダリング パスでシャドウ ファクターを計算するためにフラグメント シェーダー コードで使用されるコード:
「ShadowCoords」一様変数はライト空間の頂点位置で、「index」はライト インデックスです。
しかし、最初のパスで「glPolygonOffset」関数も使用して、PCF シャドウ マッピング アルゴリズム (4 つのサンプルの例) を使用すると問題が発生します。
ご覧のとおり、「シャドウ アクネ」のアーティファクトがはっきりとわかります。
私のフラグメントシェーダーのコードは次のとおりです。
「textureProjOffset」コードは次のコードと同じです。
「textureProjOffset(shadowSampler, ShadowCoords[index], ivec2(0, 0))」の呼び出しのみが正しく機能します (もちろん、最初のハード シャドウ マッピング手法を参照しています)。
次の呼び出しのみを使用する場合 (つまり、単純なハード シャドウ マッピングですが、オフセットを使用します):
次のレンダリングがあります。
ご覧のとおり、立方体の右側面のみに「影ニキビ」のアーティファクトがあります。
私の問題を解決するために、いくつかのバイアス値を追加してライト空間の頂点深度値を処理するコードの組み合わせをいくつか試しましたが、成功しませんでした。
c++ - シャドウ マップ: メッシュ全体が影の中にあり、深度マップに従ってあるべき場所にライトがありません
初めて openGL ang glsl シェーダー言語を使用してシャドウ マップを実装しようとしました。テクスチャにレンダリングする最初のパスは正しいと思いますが、深度値を比較すると、すべてが影になっているように見えます。
https://www.dropbox.com/s/myxenx9y41yz2fc/Screenshot%202014-12-09%2012.18.53.png?dl=0
私の透視投影行列は次のようになります。
フレームバッファを初期化する関数
メッシュ毎の描画機能。モデル マトリックスは、Transform クラスの draw 関数から引数として渡されます
私のレンダリングループ
頂点シェーダーを 1 つ渡す
フラグメント シェーダーを 1 つ渡す
2 つの頂点シェーダーを渡す
2 つのフラグメント シェーダーを渡す
opengl - 遅延レンダリングによるシャドウ マッピング
シャドウ マッピング手法を実装しようとしていますが、機能させるにはいくつか問題があります。
ライトの位置にカメラがあり、これが取得したシャドウ マップです。すべての頂点がそれぞれ で乗算されていますmodelViewProjectionMatrix
。
頂点のワールド位置を持つテクスチャもあります。ワールド空間にポイントをGL_RGBA32F
持つためにすべてのポイントがそれぞれ乗算されているため、これはテクスチャです。ModelMatrix
そしてシェーダー:
出力 (カメラはライトのほぼ同じ位置にあります):
各頂点の投影がカメラの位置から正しいかどうかを確認しようとしていますが、そうではないようです。このすべてのポイントは、比較することです。
しかし、それも機能しません。
助けていただければ幸いです。ありがとうございました。
three.js - WebGLRenderer でアンチエイリアシングとシャドウを動的にオン/オフにする
WebGLRenderer でアンチエイリアシングとシャドウを動的にオンまたはオフにするにはどうすればよいですか?
アンチエイリアシングと shadowMapEnable のプロパティを変更するだけでは機能しません。ソースを調べたところ updateShadowMap() メソッドが見つかりましたが、リリース 69 で削除されました。
更新: OK、ここで見つけた質問の後半への回答 https://github.com/mrdoob/three.js/issues/2466
その結果、次のコードは正常に動作します。
c++ - OPENGL Texture2D の直接的/間接的な操作
このチュートリアルに従って、3D シーンでシャドウ マッピングを実行しています。ここで、ARB 拡張を使用してこれを適用する前に、 shadowMapTexture (以下の抜粋を参照)の生のテクセル データを操作したいと考えています。
- 注意: OpenGL 2.1 のみを使用しています。
c++ - OpenGL でのシャドウ マッピング
アプリケーションでシャドウ マッピングを機能させることができません。四輪バイクをレンダリングして、その下の床に影を表示してみます。これが私のコードの一部です。テクスチャの作成:
深度テクスチャにレンダリング:
また、深度テクスチャをレンダリングする「テスト」シェーダー プログラムも使用します。これがどのように見えるかです。
だから今までで良かったと思います。これで、シーンを通常どおりにレンダリングします。
私の頂点シェーダーの関連部分:
私のフラグメントシェーダーの関連部分:
ここでの問題は、すべてが影に覆われているかのように、完全に暗いシーンが得られることです。ライトが四輪バイクに非常に近い場合にのみ、正常にレンダリングされます。(別のプログラムでレンダリングされているため、右側に深度テクスチャが表示されます。テストに使用します)
私は何を間違っていますか?
opengl - キューブマップへの階層化レンダリング
キューブマップで影を計算しようとしています。それらを生成するために、レイヤード レンダリングを使用して、1 回のパスでキューブマップを生成します。いくつかのコードを添付したいのですが、それは私自身のエンジンを備えた完全な Haskell であり、それが良い考えかどうかはわかりません。ただし、これは GLSL コードです。
ligIRad
光半径の逆数です。したがって、結果のマップ (標準の深度マップではありません) は、[0;1] の 6 つの面の各ピクセルの距離ライト ポイントを格納します。ここで、0 = 0 および 1 = 光の半径です。このトリックにより、(1,1,1,1) でカラーマップをクリアし、従来の方向を使用してテクセルをフェッチし、フェッチした.r
値をライトの半径で乗算するだけでライティング フェーズでキューブマップを使用して、ワールドスペース距離。
ただし、黒いキューブマップがあります。使っていないカラー(R)キューブマップとデプスキューブマップをFBOにつけます。レンダー バッファーをアタッチすると、FBO が完全でなくなることがわかりました (レンダー バッファーがレイヤード レンダリングに対応していないためですか?)。
最後の質問: キューブマップへのレイヤード レンダリングにバグがあると聞いたことがあります。それは関連していますか?そのようなバグへのリンクはありますか?