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; }