0

後処理効果に含めることができるように遅延レンダラーでスカイボックスをレンダリングする方法を見つけようとしていますが、私のジオメトリステージはビュー空間にあり、残念ながらこのステージのスカイボックスは、他のオブジェクトと同じように明るくなります (光源から非常に遠くにある大きなボックスのように動作し、非常に暗く表示されます)。後処理にスカイボックスを組み込もうとしない私のセットアップは次のとおりです。

1:(FBO をバインド) ジオメトリをカラー、法線、位置 FBO テクスチャ アタッチメントにレンダリングします (FBO のバインドを解除します)。

2:(FBO をバインド) シーンをレンダリングし、画面空間の照明を計算します。(FBO をアンバインド)

3:(FBO のバインド) 後処理効果の適用 (FBO のバインド解除)

4: ジオメトリ FBO の深度バッファをデフォルトのフレーム バッファにブリットします。

5: スカイボックスをレンダリングします。

次のように、ステップ 5 を 3 に切り替えようとしました。

2:(バインド FBO) シーンをレンダリングし、スクリーン スペースの照明を計算します。

5: スカイボックスをレンダリングする

(FBO のバインドを解除)

3:(FBO のバインド) 後処理効果の適用 (FBO のバインド解除)

4: ジオメトリ FBO の深度バッファをデフォルトのフレーム バッファにブリットします。

しかし明らかに、スカイボックスにはシーンに関する深度情報がなく、照明ステージの上にレンダリングされます。また、2 から 5 の間で深度ブリッティングを行おうとすると、無効な GL 呼び出しを行っていると思います。呼び出し中に既に FBO にバインドされているためです。

 GL30.glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, DeferredFBO.fbo_handle);
 GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, 0); // Write to default
                                                            // framebuffer or a skybox framebuffer    


    GL30.glBlitFramebuffer(0, 0, DisplayManager.Width,
            DisplayManager.Height, 0, 0, DisplayManager.Width,
            DisplayManager.Height, GL11.GL_DEPTH_BUFFER_BIT,
            GL11.GL_NEAREST);
4

2 に答える 2