差分
ページの作成:「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>
「ぼけた画像からフェードイン」「ぼかしながらフェードアウト」という[[ポケモン]]などの[[ゲーム]]のシーン切り替え時によく使われるエフェクトのアレ。
== 実装例 ==
[[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>