GenericHandShader.shader 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. Shader "Ultraleap/GenericHandShader"
  2. {
  3. Properties
  4. {
  5. [NoScaleOffset] _MainTex("Texture", 2D) = "white" {}
  6. [HDR]_MainColor("Main Color", Color) = (0,0,0,1)
  7. [MaterialToggle] _useOutline("Use Outline", Float) = 0
  8. [HDR]_OutlineColor("Outline Color", Color) = (0,0,0,1)
  9. _Outline("Outline width", Range(0,.2)) = .01
  10. [MaterialToggle] _useLighting("Use Lighting", Float) = 0
  11. _LightIntensity("Light Intensity", Range(0,1)) = 1
  12. [MaterialToggle] _useFresnel("Use Fresnel", Float) = 0
  13. [HDR]_FresnelColor("Fresnel Color", Color) = (1,1,1,0)
  14. _FresnelPower("Fresnel Power", Range(0,1)) = 1
  15. }
  16. CGINCLUDE
  17. #include "UnityCG.cginc" // for & UNITY_VERTEX_OUTPUT_STEREO UnityObjectToWorldNormal()
  18. #include "AutoLight.cginc" // for UNITY_SHADOW_COORDS() & UNITY_TRANSFER_SHADOW()
  19. float4 _MainColor;
  20. float _Outline;
  21. float4 _OutlineColor;
  22. sampler2D _MainTex;
  23. float4 _FresnelColor;
  24. float _FresnelPower;
  25. float _LightIntensity;
  26. float _useLighting;
  27. float _useFresnel;
  28. float _useOutline;
  29. struct v2f
  30. {
  31. float2 uv : TEXCOORD0;
  32. float4 pos : POSITION;
  33. float3 worldNormal : NORMAL;
  34. float3 viewDir : TEXCOORD1;
  35. fixed4 diff : COLOR0;
  36. UNITY_VERTEX_OUTPUT_STEREO
  37. UNITY_SHADOW_COORDS(2) // Uses TEXCOORD2
  38. };
  39. ENDCG
  40. SubShader
  41. {
  42. Tags
  43. {
  44. "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "LightMode" = "ForwardBase"
  45. }
  46. ZWrite On
  47. Blend SrcAlpha OneMinusSrcAlpha
  48. Pass
  49. {
  50. Cull Back
  51. Blend Zero One
  52. }
  53. Pass
  54. {
  55. Cull Front
  56. CGPROGRAM
  57. #pragma vertex vert
  58. #pragma fragment frag
  59. v2f vert(appdata_base v)
  60. {
  61. v2f o;
  62. UNITY_SETUP_INSTANCE_ID(v);
  63. UNITY_INITIALIZE_OUTPUT(v2f, o);
  64. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  65. o.pos = UnityObjectToClipPos(v.vertex);
  66. float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
  67. float2 offset = TransformViewToProjection(norm.xy);
  68. o.uv = v.texcoord;
  69. o.pos.xy = _useOutline ? o.pos.xy + offset * _Outline : o.pos.xy;
  70. return o;
  71. }
  72. half4 frag(v2f i) :COLOR
  73. {
  74. fixed4 col = tex2D(_MainTex, i.uv) * _OutlineColor;
  75. return col;
  76. }
  77. ENDCG
  78. }
  79. Pass
  80. {
  81. CGPROGRAM
  82. #pragma vertex vert
  83. #pragma fragment frag
  84. #pragma multi_compile_fwdbase nolightmap nodirlightmap nodynlightmap novertexlight
  85. #include "UnityLightingCommon.cginc" // for _LightColor0
  86. v2f vert(appdata_base v)
  87. {
  88. v2f o;
  89. UNITY_SETUP_INSTANCE_ID(v);
  90. UNITY_INITIALIZE_OUTPUT(v2f, o);
  91. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  92. o.pos = UnityObjectToClipPos(v.vertex);
  93. o.uv = v.texcoord;
  94. half3 worldNormal = UnityObjectToWorldNormal(v.normal);
  95. half nl = max(0, dot(worldNormal, _WorldSpaceLightPos0.xyz));
  96. o.diff = nl * _LightColor0;
  97. o.diff.rgb += ShadeSH9(half4(worldNormal, 1));
  98. o.worldNormal = worldNormal;
  99. o.viewDir = WorldSpaceViewDir(v.vertex);
  100. UNITY_TRANSFER_SHADOW(o, o.uv);
  101. return o;
  102. }
  103. //This is the fresnel function that shader graph uses
  104. float Unity_FresnelEffect_float(float3 Normal, float3 ViewDir, float Power)
  105. {
  106. return pow((1.0 - saturate(dot(normalize(Normal), normalize(ViewDir)))), Power);
  107. }
  108. half4 frag(v2f i) :COLOR
  109. {
  110. fixed4 col = tex2D(_MainTex, i.uv);
  111. col *= _MainColor;
  112. if (_useLighting)
  113. col.rgb *= (i.diff * _LightIntensity);
  114. if (_useFresnel)
  115. col.rgb *= _FresnelColor * Unity_FresnelEffect_float(i.worldNormal, i.viewDir, _FresnelPower) *
  116. _FresnelColor.a;
  117. return col;
  118. }
  119. ENDCG
  120. }
  121. UsePass "Legacy Shaders/VertexLit/SHADOWCASTER"
  122. }
  123. Fallback "Diffuse"
  124. }