ShadowTzu

outline

Sep 18th, 2025
3,197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. float3 Outiner(float2 TexCoord, float3 Final) {
  2.     float halfScaleFloor = floor(OUTLINE_THICKNESS * 0.5f);
  3.     float halfScaleCeil = ceil(OUTLINE_THICKNESS * 0.5f);
  4.    
  5.     float2 uvSamples[4];          
  6.     uvSamples[0] = TexCoord - float2(TEXEL.x, TEXEL.y) * halfScaleFloor;
  7.     uvSamples[1] = TexCoord + float2(TEXEL.x, TEXEL.y) * halfScaleCeil;
  8.     uvSamples[2] = TexCoord + float2(TEXEL.x * halfScaleCeil, -TEXEL.y * halfScaleFloor);
  9.     uvSamples[3] = TexCoord + float2(-TEXEL.x * halfScaleFloor, TEXEL.y * halfScaleCeil);
  10.    
  11.     float Average = 0;
  12.     Average += Decode_MaterialID( EXTRA_MAP.SampleLevel(SAMPLER_POINT_WRAP,uvSamples[0],0).y ).x;
  13.     Average += Decode_MaterialID( EXTRA_MAP.SampleLevel(SAMPLER_POINT_WRAP,uvSamples[1],0).y ).x;
  14.     Average += Decode_MaterialID( EXTRA_MAP.SampleLevel(SAMPLER_POINT_WRAP,uvSamples[2],0).y ).x;
  15.     Average += Decode_MaterialID( EXTRA_MAP.SampleLevel(SAMPLER_POINT_WRAP,uvSamples[3],0).y ).x;    
  16.     Average /= 4.0f;
  17.    
  18.     Average = (Average == 1) ? 0.0f: 1.0f;
  19.    
  20.     float edge = Average > 0.0f ? 1.0f : 0.0f;
  21.    
  22.     Final = ((1 - edge) * Final) + (edge * lerp(Final, OUTLINE_COLOR.rgb,  OUTLINE_COLOR.a));
  23.     return Final;
  24. }
Advertisement
Add Comment
Please, Sign In to add comment