ここでは、に焦点を当て、ブルーム効果の様々な問題提起とその解決策の。
ガウスぼかし、いくつかの実践を記録しました:
https://www.shadertoy.com/view/XdfGDH
https://www.shadertoy.com/view/ltScRG
https://gamedev.stackexchange.com/questions/166182/my-single-pass-gaussian-blur-looks-awful
https://github.com/Jam3/glsl-fast-gaussian-blur
この練習の原作者:
開始から終了までのマップの原作者がスムーズに動作するので、すべての方法は、アンチエイリアシング(MSAA)ではないことに注意してください。そして、ちょうどいくつかの簡単なシーンがマッピングされます。
梁は私がFXAAを考えてみましょう、MSAAは無駄である大幅に私に言いました。
そして、私のアプローチは、次のとおりです。
テクスチャは、複数のテクスチャをサンプリングするhdrFBO。私は直接プロセスにおける後処理ステップをバッファに供給されるFBOを考えるようになりました。
のみ2点が第一のテスト後処理にシーン、送信バッファ2の第二の部分のレンダリングをレンダリングする、部品をレンダリングされます。
問題に遭遇です。
シーンはFBOの後処理にコピーする必要があります後1は、hdrFBOマルチサンプリングFBOテクスチャレンダリングが完了しています。
何の問題を処理していない最後のポストへの最初のシーンの2、hdrFBOマルチサンプリングFBOテクスチャコピー。
3、hdrFBOは(第2の色アタッチメントである)は、第2のテクスチャをマルチサンプリング必要が通過するように、マルチサンプルテクスチャ、後に配信される材料です。
コードをより腐っ書き込むことができるように、図4に示すように、方法によってこの設計を認識MSAAは直接コードを制限します
vec4 textureMSAA(sampler2DMS TEX、VEC2 TexCoords){ ivec2 texSize = textureSize(TEX)。 vec4 mtex = vec4(1 )。 以下のために(INT iが= 0 ; I < 32 ; ++ I) { mtex + = texelFetch(TEX、ivec2(TexCoords * texSize)、I)。 } mtex = mtex / 32.0f ; リターンmtex。 }
#version 450 コア #extension GL_ARB_shading_language_include:必要 #include " /shaders/common/utils.glsl " の#include " /shaders/common/postprocess.glsl " アウトvec4 FragColor。 中VEC2 TexCoords。 均一sampler2D sceneImage。 均一sampler2DMS brightImage。 均一なフロート暴露。 無効メイン() { vec4シーン = テクスチャ(sceneImage、TexCoords)。 vec4 mtex = textureMSAA(brightImage、TexCoords)。 vec3結果 = トーンマッピング(scene.rgb、露光)。 FragColor = vec4(その結果、1.0F )。 }