メインメニューを開く

差分

HLSLでGaussian Blur

1,795 バイト追加, 2019年1月22日 (火) 04:40
ページの作成:「HLSLで画面全体(=画面全体をテクスチャ化したもの)にGaussian Blurを掛けたい。 「ぼけた画像からフェードイン」「ぼ…」
[[HLSL]]で画面全体(=画面全体をテクスチャ化したもの)に[[Gaussian Blur]]を掛けたい。

「ぼけた画像からフェードイン」「ぼかしながらフェードアウト」という[[ポケモン]]などの[[ゲーム]]のシーン切り替え時によく使われるエフェクトのアレ。

== 実装例 ==
[[Android]]版の[[MonoGame]]で動かす前提([[OpenGL ES]]で動かす前提)なので、[[シェーダーモデル]]は3.0にしてある。<syntaxhighlight lang="text">
#define RADIUS 7
#define KERNEL_SIZE (RADIUS * 2 + 1)

//-----------------------------------------------------------------------------
// Globals.
//-----------------------------------------------------------------------------

float weights[KERNEL_SIZE];
float2 offsets[KERNEL_SIZE];

//-----------------------------------------------------------------------------
// Textures.
//-----------------------------------------------------------------------------

sampler colorMapTexture : register(s0);

//-----------------------------------------------------------------------------
// Pixel Shaders.
//-----------------------------------------------------------------------------

float4 PS_MAIN(float4 position : SV_Position, float4 col : COLOR0, float2 uv : TEXCOORD0) : COLOR0
{
float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);

for (int i = 0; i < KERNEL_SIZE; ++i)
color += tex2D(colorMapTexture, uv + offsets[i]) * weights[i];

return color;
}

//-----------------------------------------------------------------------------
// Techniques.
//-----------------------------------------------------------------------------

technique GaussianBlur
{
pass Pass1
{
PixelShader = compile ps_3_0 PS_MAIN();
}
}

</syntaxhighlight>
匿名利用者