float3 Outiner(float2 TexCoord, float3 Final) {
float halfScaleFloor = floor(OUTLINE_THICKNESS * 0.5f);
float halfScaleCeil = ceil(OUTLINE_THICKNESS * 0.5f);
float2 uvSamples[4];
uvSamples[0] = TexCoord - float2(TEXEL.x, TEXEL.y) * halfScaleFloor;
uvSamples[1] = TexCoord + float2(TEXEL.x, TEXEL.y) * halfScaleCeil;
uvSamples[2] = TexCoord + float2(TEXEL.x * halfScaleCeil, -TEXEL.y * halfScaleFloor);
uvSamples[3] = TexCoord + float2(-TEXEL.x * halfScaleFloor, TEXEL.y * halfScaleCeil);
float Average = 0;
Average += Decode_MaterialID( EXTRA_MAP.SampleLevel(SAMPLER_POINT_WRAP,uvSamples[0],0).y ).x;
Average += Decode_MaterialID( EXTRA_MAP.SampleLevel(SAMPLER_POINT_WRAP,uvSamples[1],0).y ).x;
Average += Decode_MaterialID( EXTRA_MAP.SampleLevel(SAMPLER_POINT_WRAP,uvSamples[2],0).y ).x;
Average += Decode_MaterialID( EXTRA_MAP.SampleLevel(SAMPLER_POINT_WRAP,uvSamples[3],0).y ).x;
Average /= 4.0f;
Average = (Average == 1) ? 0.0f: 1.0f;
float edge = Average > 0.0f ? 1.0f : 0.0f;
Final = ((1 - edge) * Final) + (edge * lerp(Final, OUTLINE_COLOR.rgb, OUTLINE_COLOR.a));
return Final;
}