問題タブ [deferred-rendering]
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 - 遅延レンダリング プロセスで一般的に G-Buffer に含めるべきものは何ですか?
OpenGL を使用して単純な遅延レンダラーを実装しようとしています。トピックを説明するさまざまなチュートリアルや論文を読みましたが、ほとんどの場合、G バッファーの構造について非常に最小限または抽象的な説明しか提供していません。通常は、拡散、深度、および法線バッファーを含みます。
しかし、単純なグラフィックス エンジンでさえ、テクスチャや調整可能なスペキュラー ライティングなどを使用した何らかのマテリアル レンダリングがなければ完成しません。すべてのプロパティに追加のバッファを追加すると、明らかに G バッファが大量に肥大化するので、2 番目のレンダリング パスでマテリアルごとのデータをすべて取得するための推奨される方法は何ですか?
私の OpenGL 実装では、フレームバッファを使用して、拡散、法線、および深度をそれぞれ および にレンダリングGL_COLOR_ATTACHMENT0
しGL_COLOR_ATTACHMENT1
ますGL_DEPTH_ATTACHMENT
。できればOpenGL 3.3コアにIDなどを保存する方法はありますか?
java - 遅延レンダリングの使用、空白の出力の取得
つまり、実際のゲームアートを FBO の 1 つのカラーバッファーにレンダリングし、対応する法線を FBO の別のカラーバッファーにレンダリングします。
(基本的には、複数のレンダー ターゲットを使用して、これとこれを作成したいと考えています。)
私の問題は、何もレンダリングされていないか、正しくレンダリングされていないかのように、最終出力が空白であることです。
私のシェーダー (頂点とフラグメント)
画面に有効にして(FBOではなく)いくつかのスプライトを完全に正常にレンダリングすると、レンダリングされるため、これはうまくいくと確信しています。
次のコードはレンダリング ループにあります。
基本的な考え方は、FBO の 2 つのカラー バッファーを glDrawBuffers でバインドすることです。次に、ゲーム アートと通常のゲーム アートの 2 つのテクスチャ ユニットをバインドします。上記のシェーダーは、これを受け取り、ゲーム アートを 1 つのカラー バッファーに出力し、対応する通常アートを別のカラー バッファーに出力することになっています。
私が言ったように、最終出力は空白です。glCheckFramebufferStatus で確認したので、作成した FBO は有効であると確信しています。
そのFBOからカラーテクスチャを取得して画面に描画すると、空白になります。どこが間違っているのかわかりません。
任意の入力に感謝します。
c++ - 遅延レンダリング Skybox OpenGL
遅延レンダリングを実装したばかりで、スカイボックスの動作に問題があります。レンダリング ループの最後でスカイボックスをレンダリングしようとすると、黒い画面しか表示されません。レンダリング ループは次のとおりです。
以下は、スカイボックスのレンダリング関数です
スカイボックスの頂点シェーダーは次のとおりです。
スカイボックスのフラグメント シェーダーは、出力カラーを に設定するだけtexture(cubeMap, TexCoord)
です。頂点シェーダーからわかるように、位置のz
コンポーネントを に設定しw
て、深度が常に 1 になるGL_LEQUAL
ようにします。また、深度関数を に設定して、深度テストに失敗するようにします。これは、他のオブジェクトがまだ描画されていない場所にスカイボックスを描画するだけではありませんか? 黒い画面になるのはなぜですか?
スカイボックスを単独で描画すると問題なく表示されるため、スカイボックスを正しく設定したことはわかっています。
c# - 遅延レンダリングで複数のオブジェクトをレンダリングする方法は?
さて、私は多くの場所を見てきましたが、問題の解決策を見つけることができません。マルチスレッドレンダリング環境で各オブジェクトを同時にレンダリングしたい、または多くの人がそれを遅延レンダリングと呼んでいます。
マルチスレッドを実装しようとするまで、現在のシステムはまったく機能しません。
遅延レンダリングのアイデアは私を大いに混乱させます.指定されたテクスチャとシェーダーを持つ配列からオブジェクトを遅延方法でレンダリングするシステムを作成する方法についての良い説明が必要です.そこには良い説明がなく、キーワード...
c++ - DirectX 11 遅延レンダリング
DirectX 11 を使用して Deferred Renderer を約 1 か月間作成しようとしましたが、かなり失敗しました。
私が見つけたほとんどのホワイト ペーパーはすべて、包括的な実装について説明していますが、実際の実装については説明していません (これは理にかなっていますが、実際に実装するのは面倒です - とにかく私には)。
「Practical Rendering & Computation Direct3D 11」のソース コードhttps://hieroglyph3.codeplex.com/など、いくつかの本格的なエンジン実装を調べましたが、それらは非常に負担が大きく、 /または信じられないほど複雑 (計算シェーダーを含む)。
http://rastertek.com/のチュートリアルを確認しましたが、しばらく更新されておらず (私の知る限り、作成者は永久に休止しています)、DirectX 9/10 のテーマを使用しています。
私は過去数週間、うまくいけば足を踏み入れるために、比較的基本的な実装チュートリアルのセットを見つけようとしてきました.
質問をするために、私が上で説明した基本的な実装を達成するチュートリアルやサンプルプロジェクトのセットはありますか?
前者は c# であり、後者は DirectX や RasterTek チュートリアルではないことを考えると、私は XNA や OpenGL にはあまり興味がありません。
どうもありがとうございました。
c++ - OpenGL の複数のレンダー ターゲットとマルチサンプリング
OpenGL で複数のレンダリング ターゲットを使用する場合、明示的なマルチサンプリングを使用すると問題が発生します。
最初のジオメトリ パス中にレンダリングされる 4 つのレンダー ターゲット (位置、拡散 + 不透明度、法線、鏡面反射 + 指数) があります。
これらはすべて、フレームバッファ オブジェクトにアタッチされた非マルチサンプリング テクスチャであり、glDrawBuffers() を使用してレンダー ターゲットとして設定されます。これは問題なく動作し、後でこれらのテクスチャをサンプリングして、ライティングの計算に必要な情報を取得できます。素晴らしい。
取得しているエイリアシングの一部を削除したいので、マルチサンプル テクスチャを使用して明示的な MSAA の実装を開始しました。ただし、代わりにマルチサンプル テクスチャをレンダー ターゲットとして使用すると、最初のレンダー ターゲットのみが描画され、残りは空白のままになります。
シェーダーでのテクスチャのセットアップ、バインド、読み取りの方法を変更する以外は、他のコードは変更していません。
マルチサンプリングされたテクスチャは、次のコードを使用してフレーム バッファ オブジェクトにアタッチされます。
マルチサンプリングされた深度/ステンシル テクスチャも添付されます。
次に、フレームバッファがバインドされ、描画バッファが設定されます
次に、通常どおりジオメトリを描画します。ただし、apitrace で検査すると、最初の色のアタッチメントだけが引き込まれていることが明らかです。これは、通常の (マルチサンプリングされていない) テクスチャを使用する場合には当てはまりません。
ただし、4 つの描画バッファはすべて、まだ確実に設定されています。
opengl - Deferred Rendering シェーダーの設計に関する疑問
私はグラフィックエンジンを開発しており、すでに延期されたテクニックを実行していますが、すべてのモデルは、そのマテリアル (独自のシェーダーとテクスチャを使用) とは無関係に、同じシェーダーでレンダリングされているということです。情報を G-Buffer に保存し、その情報を使用してライティング部分を実行する 2 番目のパス。
これは、中央の遅延シェーダーで想定されている方法ですか、それとも、各モデルが独自の方法で G バッファーに情報を格納する独自の遅延パスを持つことができますか?
webgl - Depth から 3D ワールド位置を再構築する
独自の webGL エンジンで遅延レンダリングを開発しようとしています。稲妻を計算する準備はすべて整っていますが、深度バッファから位置を適切に再構築できません...
現在、JS を使用して CPU でシェーダーから計算を実行しようとしています。正しい位置を取得できたら、それをシェーダーに変換します。これはJSコードです:
モデルとビューが同一であるときに乗算するなど、役に立たない計算があることは知っていますが、ステップごとに表示するためだけにそれらを表示したいと思います。
ID では、カメラは [0,0,-1] ワールド座標に面しているため、この座標を MVP マトリックスで変換して画面座標を取得すると、画面の中心 [0 ,0,Z]、これは私が得ているものです。
この時点ですべて問題ありません。ここが私が立ち往生している場所です。私はシェーダーにいる場合と同じ環境を持っています。スクリーン座標である XY と Z があります。この座標をワールド座標に投影解除する必要があります。gl-matrix ライブラリを使用していますがvec3.unproject
、外部ソースから取得していませんが、目的の結果 [0,0,-1] が得られません。
ここでテストを見ることができます。何か案は?ありがとう