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
|