トップページ > 記事閲覧
バイラテラルブラー搭載の提案
名前:名無三 日時: 2025/07/13 19:09

お疲れ様です。 フィルター処理として、バイラテラルブラーの追加を提案させて頂きます。 ガウスブラーなどに近いですがエッジを残すものになります。画像処理などでかなり便利かと思いますので、ご検討のほどお願い致します。
メンテ

Page: 1 |

Re: バイラテラルブラー搭載の提案 ( No.1 )
名前:名無三 日時:2025/07/26 04:45

当方で実装している際のサンプルです。(ShaderToyなどのパクリですが…) 編集:カラー対応しました // ピクセルシェーダーの入力 struct PS_INPUT { float4 dif : COLOR0; // ディフューズカラー float2 texCoords0 : TEXCOORD0; // テクスチャ座標 float4 pos : SV_POSITION; // 座標( プロジェクション空間 ) }; // ピクセルシェーダーの出力 struct PS_OUTPUT { float4 color0 : SV_TARGET0; // 色 }; // 定数バッファピクセルシェーダー基本パラメータ struct DX_D3D11_PS_CONST_BUFFER_BASE { float4 FactorColor; // アルファ値等 float MulAlphaColor; // カラーにアルファ値を乗算するかどうか( 0.0f:乗算しない 1.0f:乗算する ) float AlphaTestRef; // アルファテストで使用する比較値 float2 Padding1; int AlphaTestCmpMode; // アルファテスト比較モード( DX_CMP_NEVER など ) int3 Padding2; float4 IgnoreTextureColor; // テクスチャカラー無視処理用カラー }; // 基本パラメータ cbuffer cbD3D11_CONST_BUFFER_PS_BASE : register(b1) { DX_D3D11_PS_CONST_BUFFER_BASE g_Base; }; // プログラムとのやり取りのために使うレジスタ1 cbuffer cbMULTIPLYCOLOR_CBUFFER1 : register(b2) { float2 dispsize; } SamplerState g_DiffuseMapSampler : register(s0); // ディフューズマップサンプラ Texture2D g_DiffuseMapTexture : register(t0); // ディフューズマップテクスチャ float Gaussian2(float sigma, float2 x) { return exp(-dot(x, x) / (2.0 * sigma * sigma)); } float Gaussian3(float sigma, float3 x) { return exp(-dot(x, x) / (2.0 * sigma * sigma)); } float3 JoinedBilateralGaussianBlur(float2 uv) { float2 g_pixelSize = float2(1.0 / dispsize.x, 1.0 / dispsize.y); float g_sigmaV = 3.; const float c_halfSamplesX = 4.; const float c_halfSamplesY = 4.; float3 total = 0.0; float ret = 0.0; float3 pivot = g_DiffuseMapTexture.Sample(g_DiffuseMapSampler, uv).rgb; for (float iy = -c_halfSamplesY; iy <= c_halfSamplesY; iy++) { for (float ix = -c_halfSamplesX; ix <= c_halfSamplesX; ix++) { float3 value = g_DiffuseMapTexture.Sample(g_DiffuseMapSampler, uv + float2(ix * g_pixelSize.x, iy * g_pixelSize.y)).rgb; float weight = Gaussian2(g_sigmaV, float2(ix, iy)) * Gaussian3(g_sigmaV, value - pivot); total += value * weight; ret += weight; } } return total / ret; } PS_OUTPUT main(PS_INPUT PSInput) { PS_OUTPUT PSOutput; PSOutput.color0.rgb = JoinedBilateralGaussianBlur(PSInput.texCoords0); PSOutput.color0.a = g_DiffuseMapTexture.Sample(g_DiffuseMapSampler, PSInput.texCoords0).a; return PSOutput; }
メンテ
Re: バイラテラルブラー搭載の提案 ( No.2 )
名前:管理人 日時:2025/07/15 01:17

新しいフィルター機能のご提案&ソースのご提供ありがとうございます m(_ _)m 現在毎週末はDXライブラリ関係の作業が立て込んでいて時間が取れそうに無いのですが、 平日中にさくっと実装できそうなタイミングがあったら実装してみます!
メンテ
Re: バイラテラルブラー搭載の提案 ( No.3 )
名前:管理人 日時:2025/07/20 23:07

結局平日に時間が確保できず本日実装をしようとテストしていたのですが、 載せていただいたシェーダーコードではフィルターの結果がグレーの単色になってしまうと思います こちらは名無三さんが期待されるバイラテラルブラーの結果として合っていますでしょうか?
メンテ
Re: バイラテラルブラー搭載の提案 ( No.4 )
名前:名無三 日時:2025/07/21 13:26

すいません、SSAOのスムージング用作ったのでグレースケールでいいやと省略してしまっていました… 普通のバイラテラルブラーの方とは異なります(ちゃんと色がのる脳に修正します
メンテ
Re: バイラテラルブラー搭載の提案 ( No.5 )
名前:管理人 日時:2025/07/22 01:19

了解です カラー対応のシェーダーコードに変更して頂けましたら 実装を試してみたいと思います m(_ _)m ( 今週・来週は平日が忙しいので恐らく週末になると思います… )
メンテ
Re: バイラテラルブラー搭載の提案 ( No.6 )
名前:名無三 日時:2025/07/26 04:46

すいません、お待たせしました。色の方対応しました。
メンテ
Re: バイラテラルブラー搭載の提案 ( No.7 )
名前:管理人 日時:2025/07/27 22:07

色の対応ありがとうございます 早速実装してみましたので、よろしければこちらをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) GraphFilter に渡せるタイプで DX_GRAPH_FILTER_BILATERAL_BLUR を追加しました フィルター用の引数はありません ただ、実際に画像に対してこちらのフィルターを実行してみたところ、 エッジが残らず全体的にボヤける結果となりました 載せていただいたソースが正常に実行できていればエッジが残るはずでしょうか? (・・;
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存