GenericHandShaderX.shader 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. Shader "Ultraleap/GenericHandShaderX"
  2. {
  3. Properties
  4. {
  5. [HDR]_OutlineColor("Outline Color", Color) = (0,0,0,1)
  6. _Outline("Outline width", Range(0,.01)) = .002
  7. _width("width", Range(-.01,.01)) = .01
  8. _GradationThreshold ("Gradation Threshold", Range(0, 1)) = 0.5
  9. _GradationSmooth ("Gradation Smooth", Range(0, 0.5)) = 0.5
  10. }
  11. CGINCLUDE
  12. #include "UnityCG.cginc" // for & UNITY_VERTEX_OUTPUT_STEREO UnityObjectToWorldNormal()
  13. #include "AutoLight.cginc" // for UNITY_SHADOW_COORDS() & UNITY_TRANSFER_SHADOW()
  14. float _width;
  15. float _Outline;
  16. float4 _OutlineColor;
  17. fixed _GradationThreshold;
  18. fixed _GradationSmooth;
  19. struct v2f
  20. {
  21. float2 uv : TEXCOORD0;
  22. float4 pos : POSITION;
  23. float3 worldNormal : NORMAL;
  24. float3 viewDir : TEXCOORD1;
  25. fixed4 diff : COLOR0;
  26. UNITY_VERTEX_OUTPUT_STEREO
  27. UNITY_SHADOW_COORDS(2) // Uses TEXCOORD2
  28. };
  29. ENDCG
  30. SubShader
  31. {
  32. ZWrite On
  33. Blend SrcAlpha OneMinusSrcAlpha
  34. Pass
  35. {
  36. Tags
  37. {
  38. "Queue" = "Geometry-1" "IgnoreProjector" = "True" "RenderType" = "Opaque" "LightMode" = "ForwardBase"
  39. }
  40. Cull Back
  41. Blend Zero One
  42. CGPROGRAM
  43. #pragma vertex vert
  44. #pragma fragment frag
  45. v2f vert(appdata_base v)
  46. {
  47. v2f o;
  48. UNITY_SETUP_INSTANCE_ID(v);
  49. UNITY_INITIALIZE_OUTPUT(v2f, o);
  50. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  51. o.pos = UnityObjectToClipPos(v.vertex);
  52. float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
  53. float2 offset = TransformViewToProjection(norm.xy);
  54. o.uv = v.texcoord;
  55. o.pos.xy = o.pos.xy + offset * _width ;
  56. return o;
  57. }
  58. half4 frag(v2f i) :COLOR
  59. {
  60. return fixed4(1,1,1,1);
  61. }
  62. ENDCG
  63. }
  64. Pass
  65. {
  66. Tags
  67. {
  68. "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "LightMode" = "ForwardBase"
  69. }
  70. Cull Front
  71. CGPROGRAM
  72. #pragma vertex vert
  73. #pragma fragment frag
  74. v2f vert(appdata_base v)
  75. {
  76. v2f o;
  77. UNITY_SETUP_INSTANCE_ID(v);
  78. UNITY_INITIALIZE_OUTPUT(v2f, o);
  79. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  80. o.pos = UnityObjectToClipPos(v.vertex);
  81. float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
  82. float2 offset = TransformViewToProjection(norm.xy);
  83. o.uv = v.texcoord;
  84. o.pos.xy = o.pos.xy + +offset * _width+offset * _Outline ;
  85. return o;
  86. }
  87. half LinearStep(half minValue, half maxValue, half In)
  88. {
  89. return saturate((In-minValue) / (maxValue - minValue));
  90. }
  91. half4 frag(v2f i) :COLOR
  92. {
  93. fixed4 col = _OutlineColor;
  94. fixed jianb=LinearStep(_GradationThreshold-_GradationSmooth,_GradationThreshold+_GradationSmooth,i.uv.y);
  95. return fixed4(col.xyz,jianb*_OutlineColor.a);
  96. }
  97. ENDCG
  98. }
  99. }
  100. }