輝度によるエッジ検出
t-potからのパクリ。
サンプリングポイントを増やして重みを付ければもっと良くなる。
異なる色の境界を黒にする。
処理の流れは下記の通り。
サンプリング→モノクロ化→輝度の差計算→ネガポジ反転
//-------------------------------------------------------------------------------------- // Pixel Shader //-------------------------------------------------------------------------------------- float4 PS(PS_INPUT input) : SV_Target { float2 p = 0.5f*SizeInfo.zw; if(input.Pos.x < SizeInfo.x/2) { // sampling float4 p0 = Texture.Sample(SamplerLinear, input.Tex0+float2(-p.x, -p.y)); float4 p1 = Texture.Sample(SamplerLinear, input.Tex0+float2(-p.x, +p.y)); float4 p2 = Texture.Sample(SamplerLinear, input.Tex0+float2(+p.x, -p.y)); float4 p3 = Texture.Sample(SamplerLinear, input.Tex0+float2(-p.x, -p.y)); // mono float mono0 = 0.299f*p0.r + 0.587f*p0.g + 0.114f*p0.b; float mono1 = 0.299f*p1.r + 0.587f*p1.g + 0.114f*p1.b; float mono2 = 0.299f*p2.r + 0.587f*p2.g + 0.114f*p2.b; float mono3 = 0.299f*p3.r + 0.587f*p3.g + 0.114f*p3.b; // detect float diff = (mono0-mono3)*(mono0-mono3)+(mono1-mono2)*(mono1-mono2); diff = diff>0?1.0f:0.0f; float3 negaposi = 1.0f-diff; return float4(negaposi, 1.0f); } else { return Texture.Sample(SamplerLinear, input.Tex0); } }