#if _dx_ > 11 cbuffer cbChangeOnCamera : register(b0) { matrix mViewProj; }; cbuffer cbPosition : register(b1) { matrix mWorld; }; cbuffer cbColor : register(b2) { float4 vPureColor; }; Texture2D ImgTexture : register(t0); SamplerState ImgTextureSampler : register(s0); #elif _dx_ > 9 cbuffer cbChangeOnCamera : register(b0) { matrix mViewProj; }; cbuffer cbPosition : register(b1) { matrix mWorld; }; cbuffer cbColor : register(b2) { float4 vPureColor; }; Texture2D ImgTexture : register(t0); SamplerState ImgTextureSampler : register(s0); #else uniform row_major float4x4 mViewProj : register(c0); uniform row_major float4x4 mWorld : register(c4); uniform float4 vPureColor : register(c8); texture ImgTexture : register(t0); sampler2D ImgTexture_Point_Sampler : register(s0) { Texture = ; MinFilter = Point; MipFilter = Point; MagFilter = Point; AddressU = Wrap; AddressV = Wrap; }; #endif struct VS_INPUT { float2 Pos : POSITION; float2 Tex : TEXCOORD; }; struct VS_OUTPUT { float4 Pos : SV_POSITION; float2 Tex : TEXCOORD0; }; VS_OUTPUT VS(VS_INPUT In) { VS_OUTPUT Out; Out.Pos = mul(float4(In.Pos.xy, 0.0f, 1.0f), mWorld); Out.Pos = mul(Out.Pos, mViewProj); Out.Tex = In.Tex; return Out; } float4 PS_Tex(VS_OUTPUT In) : SV_TARGET { float2 vUV = In.Tex.xy; #if _dx_ > 9 float4 vTexColor = ImgTexture.Sample(ImgTextureSampler, vUV); #else float4 vTexColor = tex2D(ImgTexture_Point_Sampler, vUV); #endif vTexColor.a *= vPureColor.a; return vTexColor; } float4 PS_C(VS_OUTPUT In) : SV_TARGET { float2 vUV = In.Tex.xy; float4 vColor; vColor = vPureColor; return vColor; } VS_OUTPUT VS_CB(VS_INPUT In) { VS_OUTPUT Out; Out.Pos = mul(float4(In.Pos.xy, 0.0f, 1.0f), mWorld); Out.Pos = mul(Out.Pos, mViewProj); Out.Tex.x = Out.Pos.x + 1.0; Out.Tex.x = Out.Tex.x * 0.5; Out.Tex.y = 2.0 - (Out.Pos.y + 1.0); Out.Tex.y = Out.Tex.y * 0.5; return Out; } float4 GetTex2DColor(float2 v2In) { float4 vOutColor; #if _dx_ > 9 vOutColor = ImgTexture.Sample(ImgTextureSampler, v2In); #else vOutColor = tex2D(ImgTexture_Point_Sampler, v2In); #endif return vOutColor; } float4 Grayscale(float4 v4InColor) { float4 vOutColor = float4(0, 0, 0, 0); float fGray; fGray = v4InColor.r * 0.299 + v4InColor.g * 0.587 + v4InColor.b * 0.114; vOutColor = float4(fGray, fGray, fGray, fGray); vOutColor.a = 1.0; return vOutColor; } float4 Grayscale(float4 v4Color, float fRatio) { float fGray; fGray = v4Color.r * 0.299 + v4Color.g * 0.587 + v4Color.b * 0.114; v4Color = float4(fGray, fGray, fGray, fGray) * fRatio; v4Color += v4Color * (1.0 - fRatio); v4Color.a = 1.0; return v4Color; } float4 BoxBlur_CB(float2 vTex, float fX, float fY) { float4 v4Color = float4(0, 0, 0, 0); float2 v2Blur; v2Blur.y = vTex.y; const float fRange = 25.0; const float fMid = fRange * 0.5 + 0.5; const float fMidVal = fRange * 0.5 - 0.5; float fWeightSum = 0.0; for (float i = 0.0; i < fRange; i += 1.0) { v2Blur.x = vTex.x + (i - fMidVal) * fX; for (float j = 0.0; j < fRange; j += 1.0) { v2Blur.y = vTex.y + (j - fMidVal) * fY; float fWeight = 1.0; fWeightSum = fWeightSum + fWeight; v4Color += GetTex2DColor(v2Blur.xy) * fWeight; } } v4Color = v4Color / fWeightSum; v4Color.a = 1.0; return v4Color; } float4 CrossBlur_CB(float2 vTex, float fX, float fY) { float4 v4Color = float4(0, 0, 0, 0); float2 v2Blur; const float fRange = 20.0; const float fMid = fRange * 0.5 + 0.5; const float fMidVal = fRange * 0.5 - 0.5; float fWeightSum = 0.0; for (float i = 0.0; i < fRange; i += 1.0) { v2Blur.x = vTex.x + (i - fMidVal) * fX; if (abs(i - fMidVal) <= 4.5) { for (float j = 0.0; j < fRange; j += 1.0) { if (abs(j - fMidVal) <= 4.5) { v2Blur.y = vTex.y + (j - fMidVal) * fY; float fWeight = 1.0; fWeightSum = fWeightSum + fWeight; v4Color += GetTex2DColor(v2Blur.xy) * fWeight; } } } } v4Color = v4Color / fWeightSum; v4Color.a = 1.0; return v4Color; } float4 XBlur_CB(float2 vTex, float fX, float fY) { float4 v4Color = float4(0, 0, 0, 0); float2 v2Blur; const float fRange = 20.0; const float fMid = fRange * 0.5 + 0.5; const float fMidVal = fRange * 0.5 - 0.5; float fWeightSum = 0.0; for (float i = 0.0; i < fRange; i += 1.0) { v2Blur.x = vTex.x + (i - fMidVal) * fX; for (float j = 0.0; j < fRange; j += 1.0) { if (i == j || i == (fRange - 1.0 - j)) { v2Blur.y = vTex.y + (j - fMidVal) * fY; float fWeight = 1.0; fWeightSum = fWeightSum + fWeight; v4Color += GetTex2DColor(v2Blur.xy) * fWeight; } } } v4Color = v4Color / fWeightSum; v4Color.a = 1.0; return v4Color; } float4 MosaicBlur_CB(float2 vTex, float fX, float fY) { float4 v4Color = float4(0, 0, 0, 0); float2 v2Blur; const float fRange = 20.0; const float fMid = fRange * 0.5 + 0.5; const float fMidVal = fRange * 0.5 - 0.5; float fWeightSum = 0.0; float fAspect; fAspect = fY / fX; for (float i = 0.0; i < fRange; i += 1.0) { v2Blur.x = vTex.x + (i - fMidVal) * fX; v2Blur.x = v2Blur.x * (50.0f * fAspect); v2Blur.x = floor(v2Blur.x); v2Blur.x = v2Blur.x / (50.0f * fAspect); for (float j = 0.0; j < fRange; j += 1.0) { v2Blur.y = vTex.y + (j - fMidVal) * fY; v2Blur.y = v2Blur.y * 50.0f; v2Blur.y = floor(v2Blur.y); v2Blur.y = v2Blur.y / 50.0f; float fWeight = 1.0; fWeightSum = fWeightSum + fWeight; v4Color += GetTex2DColor(v2Blur.xy) * fWeight; } } v4Color = v4Color / fWeightSum; v4Color.a = 1.0; return v4Color; } float4 Refraction_CB(float2 vTex, float fX, float fY) { float4 v4Color = float4(0, 0, 0, 0); float2 v2Blur; // R v2Blur.x = vTex.x + cos(vTex.x * 100.0) * 0.01; v2Blur.y = vTex.y + sin(vTex.y * 100.0) * 0.01; v4Color.r += GetTex2DColor(v2Blur.xy).r; // G v2Blur.x = vTex.x + cos(vTex.x * 100.5) * 0.01; v2Blur.y = vTex.y + sin(vTex.y * 100.5) * 0.01; v4Color.g += GetTex2DColor(v2Blur.xy).g; // B v2Blur.x = vTex.x + cos(vTex.x * 101.0) * 0.01; v2Blur.y = vTex.y + sin(vTex.y * 101.0) * 0.01; v4Color.b += GetTex2DColor(v2Blur.xy).b; v4Color.a = 1.0; return v4Color; } float4 CircleBlur_CB(float2 vTex, float fX, float fY) { float4 v4Color = float4(0, 0, 0, 0); float2 v2Blur; #ifndef _CIRCLE_BLUR_DIAMETER_ const float fRange = 30.0; #else const float fRange = _CIRCLE_BLUR_DIAMETER_; #endif if(fRange > 0) { //const float fMid = fRange * 0.5 + 0.5; const float fMidVal = fRange * 0.5 - 0.5; float fWeightSum = 0.0; for (float i = 0.0; i < fRange; i += 1.0) { v2Blur.x = vTex.x + fX * (i - fMidVal); for (float j = 0.0; j < fRange; j += 1.0) { v2Blur.y = vTex.y + fY * (j - fMidVal); float fWeight; float fDis; fDis = (i - fMidVal) * (i - fMidVal) + (j - fMidVal) * (j - fMidVal); fDis = sqrt(fDis); if (fDis <= fRange * 0.5) { //fWeight = 1.0 / fDis; fWeight = 1.0; fWeightSum = fWeightSum + fWeight; v4Color += GetTex2DColor(v2Blur.xy) * fWeight; } } } v4Color = v4Color / fWeightSum; } else v4Color = GetTex2DColor(vTex); v4Color.a = 1.0; return v4Color; } float4 BrushedMetal_CB(float2 vTex, float fX, float fY) { float4 v4Color = float4(0, 0, 0, 0); float2 v2Blur; v2Blur.x = vTex.x + cos(vTex.x * 1000 + vTex.y * 2000.0) * 0.01; v2Blur.y = vTex.y; v4Color += GetTex2DColor(v2Blur.xy); v4Color.a = 1.0; return v4Color; } float4 Grayscale_CB(float2 vTex, float fX, float fY) { float4 v4Color = float4(0, 0, 0, 0); float2 v2Blur; v2Blur.x = vTex.x; v2Blur.y = vTex.y; v4Color += GetTex2DColor(v2Blur.xy); float fGray; fGray = v4Color.r * 0.299 + v4Color.g * 0.587 + v4Color.b * 0.114; v4Color = float4(fGray, fGray, fGray, fGray); v4Color.a = 1.0; return v4Color; } float4 Twist_CB(float2 vTex, float fX, float fY) { float4 v4Color = float4(0, 0, 0, 0); float2 v2Blur; const float fRange = 20.0; const float fMid = fRange * 0.5 + 0.5; const float fMidVal = fRange * 0.5 - 0.5; float fWeightSum = 0.0; float fAspect; fAspect = fY / fX; for (float i = 0.0; i < fRange; i += 1.0) { v2Blur.x = vTex.x + (i - fMidVal) * fX; v2Blur.x = v2Blur.x * (50.0f * fAspect); v2Blur.x = floor(v2Blur.x); v2Blur.x = v2Blur.x / (50.0f * fAspect); v2Blur.x = v2Blur.x + cos(vTex.y * 50.0f) * 0.01; for (float j = 0.0; j < fRange; j += 1.0) { v2Blur.y = vTex.y + (j - fMidVal) * fY; v2Blur.y = v2Blur.y * 50.0f; v2Blur.y = floor(v2Blur.y); v2Blur.y = v2Blur.y / 50.0f; v2Blur.y = v2Blur.y + sin(vTex.x * 50.0f) * 0.01; //float fDis = distance(vTex, v2Blur); float fWeight = 1.0; fWeightSum = fWeightSum + fWeight; v4Color += GetTex2DColor(v2Blur.xy) * fWeight; } } v4Color = v4Color / fWeightSum; v4Color.a = 1.0; return v4Color; } float4 CA_CB(float2 vTex, float fX, float fY) { float4 v4Color = float4(0, 0, 0, 0); float2 v2Blur; // R // v2Blur.x = vTex.x; v2Blur.y = vTex.y; v4Color.r += GetTex2DColor(v2Blur.xy).r; // G // v2Blur.x = vTex.x + sin(abs(0.5 - vTex.x)) * 0.01; v2Blur.y = vTex.y + sin(abs(0.5 - vTex.y)) * 0.01; v4Color.g += GetTex2DColor(v2Blur.xy).g; // B // v2Blur.x = vTex.x + sin(abs(0.5 - vTex.x)) * 0.0125; v2Blur.y = vTex.y + sin(abs(0.5 - vTex.y)) * 0.0125; v4Color.b += GetTex2DColor(v2Blur.xy).b; v4Color.a = 1.0; return v4Color; } float4 SobelH_CB(float2 vTex, float fX, float fY) { float4 v4Color = float4(0, 0, 0, 0); float2 v2Blur; float4 v4Color1 = float4(0, 0, 0, 0); float4 v4Color2 = float4(0, 0, 0, 0); v2Blur.x = vTex.x; v2Blur.y = vTex.y; v4Color1 = GetTex2DColor(v2Blur + float2(fX, -fY)) - GetTex2DColor(v2Blur + float2(-fX, -fY)); v4Color1 = v4Color1 + GetTex2DColor(v2Blur + float2(fX, fY)) - GetTex2DColor(v2Blur + float2(-fX, fY)); v4Color2 = GetTex2DColor(v2Blur + float2(fX, 0.0)) - GetTex2DColor(v2Blur + float2(-fX, 0.0)); v4Color2 = v4Color2 * 2.0; v4Color = v4Color1 + v4Color2; v4Color = v4Color / 8.0; v4Color.a = 1.0; return v4Color; } float4 PS_CB(VS_OUTPUT In) : SV_TARGET { float2 vUV = In.Tex.xy; float4 vTexColor; //vTexColor = BoxBlur_CB(vUV, ddx(vUV.x), ddy(vUV.y)); //vTexColor = CrossBlur_CB(vUV, ddx(vUV.x), ddy(vUV.y)); //vTexColor = MosaicBlur_CB(vUV, ddx(vUV.x), ddy(vUV.y)); //vTexColor = XBlur_CB(vUV, ddx(vUV.x), ddy(vUV.y)); //vTexColor = Refraction_CB(vUV, ddx(vUV.x), ddy(vUV.y)); vTexColor = CircleBlur_CB(vUV, ddx(vUV.x), ddy(vUV.y)); //vTexColor = Grayscale_CB(vUV, ddx(vUV.x), ddy(vUV.y)); //vTexColor = BrushedMetal_CB(vUV, ddx(vUV.x), ddy(vUV.y)); //vTexColor = Twist_CB(vUV, ddx(vUV.x), ddy(vUV.y)); //vTexColor = CA_CB(vUV, ddx(vUV.x), ddy(vUV.y)); //vTexColor = SobelH_CB(vUV, ddx(vUV.x), ddy(vUV.y)); vTexColor = vPureColor * vPureColor.a + (vTexColor * (1.0 - vPureColor.a)); vTexColor.a = 1.0f; return vTexColor; }