Advertisement
Guest User

Untitled

a guest
Feb 27th, 2025
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. Shader "Unlit/Fast Outline"
  2. {
  3. Properties
  4. {
  5. _OutlineColor ("Outline Color", Color) = (0,1,0,1)
  6. _OutlineWidth ("Outline Width", Range (0, 10)) = 0.5
  7. }
  8.  
  9. SubShader
  10. {
  11. Tags
  12. {
  13. "RenderType" = "Opaque"
  14. "RenderPipeline" = "UniversalPipeline"
  15. }
  16.  
  17. ZWrite Off
  18. Cull Off
  19. ZTest LEqual
  20. Blend SrcAlpha OneMinusSrcAlpha
  21.  
  22. HLSLINCLUDE
  23. #pragma fragment frag
  24.  
  25. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  26.  
  27. CBUFFER_START(UnityPerMaterial)
  28. half4 _OutlineColor;
  29. half _OutlineWidth;
  30. CBUFFER_END
  31.  
  32. struct Attributes
  33. {
  34. float4 positionOS : POSITION;
  35. half3 normalOS : NORMAL;
  36. UNITY_VERTEX_INPUT_INSTANCE_ID
  37. };
  38.  
  39. struct Varyings
  40. {
  41. float4 positionHCS : SV_POSITION;
  42. UNITY_VERTEX_OUTPUT_STEREO
  43. };
  44.  
  45. half4 frag(Varyings IN) : SV_Target
  46. {
  47. return _OutlineColor;
  48. }
  49. ENDHLSL
  50.  
  51. Pass
  52. {
  53. Name "NORMAL VECTOR (CLIP SPACE)"
  54.  
  55. HLSLPROGRAM
  56. #pragma vertex vert
  57.  
  58. Varyings vert(Attributes IN)
  59. {
  60. Varyings OUT;
  61. UNITY_SETUP_INSTANCE_ID(IN);
  62. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
  63.  
  64. half width = _OutlineWidth;
  65.  
  66. OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
  67.  
  68. float3 normalHCS = mul((float3x3)UNITY_MATRIX_VP, mul((float3x3)UNITY_MATRIX_M, IN.normalOS));
  69. OUT.positionHCS.xy += normalize(normalHCS.xy) / _ScreenParams.xy * OUT.positionHCS.w * width * 2;
  70.  
  71. return OUT;
  72. }
  73. ENDHLSL
  74. }
  75. }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement