従来の三角形ベースのモデルとパーティクルを、適度なフレームレートでレイトレースされたシーンで構成したいと考えています。
webGLではgl_FragDepth
、フラグメントシェーダーでを記述できません。複数のレンダーターゲットを持つことはできませんが、RGBAテクスチャにレンダーしてから、そのテクスチャを別の描画操作への入力として使用できます。そのため、レイトレースされたシーンをレンダリングし、次のステージへの入力として深度を保存できます。これは明らかに理想からかけ離れていますが、実行可能です。
私はこれについて誤解したいのですが、これは決定的なソースではなく試行錯誤から集められたものです。欠陥のある仮定を修正してください
GLSLフラグメントシェーダーで、フロートおよび理想的にはいくつかのフラグビットなどをRGBAテクスチャに効率的にパック/アンパックするにはどうすればよいですか?
2
最初のGPU Gemsブックには、シャドウマッピングに関する古い記事があります(ここで読むことができます:http.developer.nvidia.com/GPUGems/gpugems_ch12.html)。フロートをRGBAテクスチャにパックする方法を2つの異なる方法で説明します。書き込みについてはセクション12.3.3、読み取りについては12.3.6を参照してください。
—
ベンリッツ
役立つ可能性のある別のリソースは、UnityのAras Pによる記事「小さなGバッファー用のコンパクトな通常のストレージ」(aras-p.info/texts/CompactNormalStorage.html)です。この記事は法線のみに限定されています。
—
Mortennobel
R32Fテクスチャを作成し、そこに深度値を書き込むだけです。梱包はありません。次に、2回目の「従来の三角形ベースの」パスで、このテクスチャを深度バッファとして使用します(深度としてFBOにアタッチされます)。これが明確でない場合は、遠慮なく質問してください。
—
alariq 2013年
@alariqはい、float拡張機能が広くサポートされるようになりました。
—
2013年
@Will float拡張機能で問題が解決した場合は、回答として投稿して受け入れます。
—
Polar