New_Eye.shader 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. Shader "New_Eye"{
  2. Properties{
  3. //Cornea角膜1
  4. //Iris虹膜
  5. //Sclera巩膜
  6. _Lum("Luminance", Range(0, 10)) = 4
  7. _BaseMap("Base (RGB)", 2D) = "white" {}
  8. [MainColor]
  9. _BaseColor("Color", Color) = (1,1,1,1)
  10. [NoScaleOffset]_BumpMap("NormalIrisTex (RGB)", 2D) = "white" {}
  11. [NoScaleOffset]_BumpDetialMap("Iris Detial Tex (RGB)", 2D) = "white" {}
  12. [KKBTitle()]_("Specular",Float) = 0.0
  13. _specluarIntensity("Specular Intensity", Range(0, 1)) = 1.0
  14. [NoScaleOffset]_SpecularTex("SpecularTex (RGB), A(Mask)", 2D) = "white" {}
  15. _GLCornea("gloss", Range(0, 2)) = 0.5
  16. _GLIris("Iris Gloss", Range(0, 2)) = 0.5
  17. _SPIris("Iris Specular Power", Range(1, 100)) = 20
  18. _SPScleraDetial("Sclera Detial Specular Color and Instance", Color) = (1, 1, 1, 1)
  19. [KKBTitle()]_("Reflection", Float) = 0.0
  20. [NoScaleOffset]_SSSMap("reflectTex", 2D) = "white"{}
  21. _ReflAmount("ReflAmount", Range(0, 1)) = 1
  22. //_Cubemap("CubeMap", CUBE) = ""{}
  23. [KKBTitle()]_("边缘光", Float) = 0.0
  24. _RimColor("边缘光颜色", color) = (0.5, 0.5, 0.5, 1.0)
  25. _RimPower("边缘光范围", float) = 15.0
  26. _rimMultiplier("边缘光强度", float) = 1.0
  27. [Header(Mask)]
  28. [Space(8)]
  29. _MakeUpMask1_RGB("MakeUpMask1_RGB (R: 眼影 G: 腮红 B: 口红 A: 眼线)", 2D) = "black" {}
  30. _MakeUpMask2_RGB("MakeUpMask2_RGB (R: 纹身区域)", 2D) = "black" {}
  31. _Mask1_Rchannel_TextureAmountA("Mask1_Rchannel_Texture-Amount(A)", 2D) = "black" {}
  32. _Mask1_Gchannel_TextureAmountA("Mask1_Gchannel_Texture-Amount(A)", 2D) = "black" {}
  33. _Mask1_Bchannel_TextureAmountA("Mask1_Bchannel_Texture-Amount(A)", 2D) = "black" {}
  34. _Mask2_Rchannel_TextureAmountA("Mask2_Rchannel_Texture-Amount(A)", 2D) = "black" {}
  35. _Mask2_Gchannel_TextureAmountA("Mask2_Gchannel_Texture-Amount(A)", 2D) = "black" {}
  36. _Mask2_Bchannel_TextureAmountA("Mask2_Bchannel_Texture-Amount(A)", 2D) = "black" {}
  37. _Mask1_Rchannel_ColorAmountA("Mask1_Rchannel_Color-Amount(A)", Color) = (0.7735849, 0.2006942, 0.3233189, 0.7843137)
  38. _Mask1_Gchannel_ColorAmountA("Mask1_Gchannel_Color-Amount(A)", Color) = (0.2, 0.772549, 0.4917381, 0.7843137)
  39. _Mask1_Bchannel_ColorAmountA("Mask1_Bchannel_Color-Amount(A)", Color) = (0.2, 0.406334, 0.772549, 0.7843137)
  40. _Mask1_Achannel_ColorAmountA("Mask1_Achannel_Color-Amount(A)", Color) = (0.2, 0.406334, 0.772549, 0.7843137)
  41. _Mask2_Rchannel_ColorAmountA("Mask2_Rchannel_Color-Amount(A)", Color) = (0.2, 0.772549, 0.7071339, 0.7843137)
  42. _Mask2_Gchannel_ColorAmountA("Mask2_Gchannel_Color-Amount(A)", Color) = (0.772549, 0.2, 0.6776864, 0.7843137)
  43. _Mask2_Bchannel_ColorAmountA("Mask2_Bchannel_Color-Amount(A)", Color) = (0.772549, 0.7037676, 0.2, 0.7843137)
  44. // Needed by the inspector
  45. [HideInInspector] _Culling("Culling", Float) = 0.0
  46. // Lightmapper and outline selection shader need _MainTex, _Color and _Cutoff
  47. [HideInInspector] _MainTex("Albedo", 2D) = "white" {}
  48. [HideInInspector] _Color("Color", Color) = (1,1,1,1)
  49. [HideInInspector] _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.0
  50. // URP 10.1. needs this for the depthnormal pass
  51. [HideInInspector] _Cutoff(" Threshold", Range(0.0, 1.0)) = 0.5
  52. [HideInInspector] _Surface("__surface", Float) = 0.0
  53. }
  54. SubShader
  55. {
  56. Tags
  57. {
  58. "RenderPipeline" = "UniversalPipeline"
  59. "RenderType" = "Opaque"
  60. }
  61. pass{
  62. Tags{ "LightMode" = "UniversalForward" }
  63. Cull Back
  64. CGPROGRAM
  65. #pragma vertex vert
  66. #pragma fragment frag
  67. #include "UnityCG.cginc"
  68. CBUFFER_START(UnityPerMaterial)
  69. half4 _BaseColor;
  70. float4 _SPScleraDetial;
  71. float _SPIris;
  72. float _Lum;
  73. float _ReflAmount;
  74. float4 _LightColor0;
  75. half _specluarIntensity;
  76. float _GLCornea;
  77. float _GLIris;
  78. fixed _RimPower;
  79. fixed3 _RimColor;
  80. sampler2D _BaseMap;
  81. sampler2D _SpecularTex;
  82. sampler2D _BumpMap;
  83. sampler2D _BumpDetialMap;
  84. sampler2D _SSSMap;
  85. sampler2D _MakeUpMask1_RGB;
  86. sampler2D _MakeUpMask2_RGB;
  87. sampler2D _Mask1_Rchannel_TextureAmountA;
  88. sampler2D _Mask1_Gchannel_TextureAmountA;
  89. sampler2D _Mask1_Bchannel_TextureAmountA;
  90. sampler2D _Mask1_Achannel_TextureAmountA;
  91. sampler2D _Mask2_Rchannel_TextureAmountA;
  92. sampler2D _Mask2_Gchannel_TextureAmountA;
  93. sampler2D _Mask2_Bchannel_TextureAmountA;
  94. float _rimMultiplier;
  95. float4 _BaseMap_ST;
  96. // Mask
  97. float4 _MakeUpMask1_RGB_ST;
  98. float4 _MakeUpMask2_RGB_ST;
  99. float4 _Mask1_Rchannel_ColorAmountA;
  100. float4 _Mask1_Gchannel_ColorAmountA;
  101. float4 _Mask1_Bchannel_ColorAmountA;
  102. float4 _Mask1_Achannel_ColorAmountA;
  103. float4 _Mask2_Rchannel_ColorAmountA;
  104. float4 _Mask2_Gchannel_ColorAmountA;
  105. float4 _Mask2_Bchannel_ColorAmountA;
  106. float4 _Mask1_Rchannel_TextureAmountA_ST;
  107. float4 _Mask1_Gchannel_TextureAmountA_ST;
  108. float4 _Mask1_Bchannel_TextureAmountA_ST;
  109. float4 _Mask1_Achannel_TextureAmountA_ST;
  110. float4 _Mask2_Rchannel_TextureAmountA_ST;
  111. float4 _Mask2_Gchannel_TextureAmountA_ST;
  112. float4 _Mask2_Bchannel_TextureAmountA_ST;
  113. float4 _EmissionMap_ST;
  114. CBUFFER_END
  115. struct v2f {
  116. float4 pos : SV_POSITION;
  117. float3 wNormal : NORMAL;
  118. float2 uv : TEXCOORD0;
  119. float3 lightDir : TEXCOORD1;
  120. float3 viewDir : TEXCOORD2;
  121. half3 tspace0 : TEXCOORD3;
  122. half3 tspace1 : TEXCOORD4;
  123. half3 tspace2 : TEXCOORD5;
  124. };
  125. v2f vert(appdata_full v) {
  126. v2f o;
  127. o.pos = UnityObjectToClipPos(v.vertex);
  128. o.lightDir = WorldSpaceLightDir(v.vertex);
  129. o.viewDir = WorldSpaceViewDir(v.vertex);
  130. o.wNormal = UnityObjectToWorldNormal(v.normal);
  131. half3 wTangent = UnityObjectToWorldDir(v.tangent.xyz);
  132. half tangentSign = v.tangent.w * unity_WorldTransformParams.w;
  133. half3 wBitangent = cross(o.wNormal, wTangent) * tangentSign;
  134. o.tspace0 = half3(wTangent.x, wBitangent.x, o.wNormal.x);
  135. o.tspace1 = half3(wTangent.y, wBitangent.y, o.wNormal.y);
  136. o.tspace2 = half3(wTangent.z, wBitangent.z, o.wNormal.z);
  137. o.uv = TRANSFORM_TEX(v.texcoord, _BaseMap);
  138. return o;
  139. }
  140. half4 GetColor(float2 uv) {
  141. //half4 albedoAlpha = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, uv) * _BaseColor;
  142. half4 albedoAlpha = tex2D(_BaseMap, uv) * _BaseColor;
  143. float2 uv_MakeUpMask1_RGB = uv.xy * _MakeUpMask1_RGB_ST.xy + _MakeUpMask1_RGB_ST.zw;
  144. //float4 tex2DNode143 = SAMPLE_TEXTURE2D(_MakeUpMask1_RGB, sampler_MakeUpMask1_RGB, uv_MakeUpMask1_RGB);
  145. float4 tex2DNode143 = tex2D(_MakeUpMask1_RGB, uv_MakeUpMask1_RGB);
  146. float2 uv_Mask1_Rchannel_TextureAmountA = uv.xy * _Mask1_Rchannel_TextureAmountA_ST.xy + _Mask1_Rchannel_TextureAmountA_ST.zw;
  147. //float4 tex2D_mask1_R = SAMPLE_TEXTURE2D(_Mask1_Rchannel_TextureAmountA, sampler_Mask1_Rchannel_TextureAmountA, uv_Mask1_Rchannel_TextureAmountA);
  148. float4 tex2D_mask1_R = tex2D(_Mask1_Rchannel_TextureAmountA, uv_Mask1_Rchannel_TextureAmountA);
  149. float2 uv_Mask1_Gchannel_TextureAmountA = uv.xy * _Mask1_Gchannel_TextureAmountA_ST.xy + _Mask1_Gchannel_TextureAmountA_ST.zw;
  150. //float4 tex2D_mask1_G = SAMPLE_TEXTURE2D(_Mask1_Gchannel_TextureAmountA, sampler_Mask1_Gchannel_TextureAmountA, uv_Mask1_Gchannel_TextureAmountA);
  151. float4 tex2D_mask1_G = tex2D(_Mask1_Gchannel_TextureAmountA, uv_Mask1_Gchannel_TextureAmountA);
  152. float2 uv_Mask1_Bchannel_TextureAmountA = uv.xy * _Mask1_Bchannel_TextureAmountA_ST.xy + _Mask1_Bchannel_TextureAmountA_ST.zw;
  153. //float4 tex2D_mask1_B = SAMPLE_TEXTURE2D(_Mask1_Bchannel_TextureAmountA, sampler_Mask1_Bchannel_TextureAmountA, uv_Mask1_Bchannel_TextureAmountA);
  154. float4 tex2D_mask1_B = tex2D(_Mask1_Bchannel_TextureAmountA, uv_Mask1_Bchannel_TextureAmountA);
  155. float2 uv_Mask1_Achannel_TextureAmountA = uv.xy * _Mask1_Achannel_TextureAmountA_ST.xy + _Mask1_Achannel_TextureAmountA_ST.zw;
  156. //float4 tex2D_mask1_A = SAMPLE_TEXTURE2D(_Mask1_Achannel_TextureAmountA, sampler_Mask1_Achannel_TextureAmountA, uv_Mask1_Achannel_TextureAmountA);
  157. float4 tex2D_mask1_A = tex2D(_Mask1_Achannel_TextureAmountA, uv_Mask1_Achannel_TextureAmountA);
  158. float2 uv_Mask2_Rchannel_TextureAmountA = uv.xy * _Mask2_Rchannel_TextureAmountA_ST.xy + _Mask2_Rchannel_TextureAmountA_ST.zw;
  159. //float4 tex2D_mask2_R = SAMPLE_TEXTURE2D(_Mask2_Rchannel_TextureAmountA, sampler_Mask2_Rchannel_TextureAmountA, uv_Mask2_Rchannel_TextureAmountA);
  160. float4 tex2D_mask2_R = tex2D(_Mask2_Rchannel_TextureAmountA, uv_Mask2_Rchannel_TextureAmountA);
  161. float2 uv_Mask2_Gchannel_TextureAmountA = uv.xy * _Mask2_Gchannel_TextureAmountA_ST.xy + _Mask2_Gchannel_TextureAmountA_ST.zw;
  162. //float4 tex2D_mask2_G = SAMPLE_TEXTURE2D(_Mask2_Gchannel_TextureAmountA, sampler_Mask2_Gchannel_TextureAmountA, uv_Mask2_Gchannel_TextureAmountA);
  163. float4 tex2D_mask2_G = tex2D(_Mask2_Gchannel_TextureAmountA, uv_Mask2_Gchannel_TextureAmountA);
  164. float2 uv_Mask2_Bchannel_TextureAmountA = uv.xy * _Mask2_Bchannel_TextureAmountA_ST.xy + _Mask2_Bchannel_TextureAmountA_ST.zw;
  165. //float4 tex2D_mask2_B = SAMPLE_TEXTURE2D(_Mask2_Bchannel_TextureAmountA, sampler_Mask2_Bchannel_TextureAmountA, uv_Mask2_Bchannel_TextureAmountA);
  166. float4 tex2D_mask2_B = tex2D(_Mask2_Bchannel_TextureAmountA, uv_Mask2_Bchannel_TextureAmountA);
  167. float clampResult295 = clamp((tex2DNode143.r * tex2D_mask1_R.a * _Mask1_Rchannel_ColorAmountA.a), 0.0, 1.0);
  168. float4 _Mask1_R_Color = tex2D_mask1_R * _Mask1_Rchannel_ColorAmountA;
  169. float4 lerpResult145 = lerp(albedoAlpha, _Mask1_R_Color, clampResult295);
  170. float clampResult296 = clamp((tex2DNode143.g * tex2D_mask1_G.a * _Mask1_Gchannel_ColorAmountA.a), 0.0, 1.0);
  171. float4 _Mask1_G_Color = tex2D_mask1_G * _Mask1_Gchannel_ColorAmountA;
  172. float4 lerpResult160 = lerp(lerpResult145, _Mask1_G_Color, clampResult296);
  173. float clampResult297 = clamp((tex2DNode143.b * tex2D_mask1_B.a * _Mask1_Bchannel_ColorAmountA.a), 0.0, 1.0);
  174. float4 _Mask1_B_Color = tex2D_mask1_B * _Mask1_Bchannel_ColorAmountA;
  175. float4 lerpResult161 = lerp(lerpResult160, _Mask1_B_Color, clampResult297);
  176. float clampResult2971 = clamp((tex2DNode143.a * tex2D_mask1_A.a * _Mask1_Achannel_ColorAmountA.a), 0.0, 1.0);
  177. float4 _Mask1_A_Color = tex2D_mask1_A * _Mask1_Achannel_ColorAmountA;
  178. float4 lerpResult1611 = lerp(lerpResult161, _Mask1_A_Color, clampResult2971);
  179. //mask2
  180. float2 uv_MakeUpMask2_RGB = uv.xy * _MakeUpMask2_RGB_ST.xy + _MakeUpMask2_RGB_ST.zw;
  181. //float4 tex2DNode144 = SAMPLE_TEXTURE2D(_MakeUpMask2_RGB, sampler_MakeUpMask2_RGB, uv_MakeUpMask2_RGB);
  182. float4 tex2DNode144 = tex2D(_MakeUpMask2_RGB, uv_MakeUpMask2_RGB);
  183. float clampResult298 = clamp((tex2DNode144.r * tex2D_mask2_R.a * _Mask2_Rchannel_ColorAmountA.a), 0.0, 1.0);
  184. float4 _Mask2_R_Color = tex2D_mask2_R * _Mask2_Rchannel_ColorAmountA;
  185. float4 lerpResult162 = lerp(lerpResult1611, _Mask2_Rchannel_ColorAmountA, clampResult298);
  186. float clampResult299 = clamp((tex2DNode144.g * tex2D_mask2_G.a * _Mask2_Gchannel_ColorAmountA.a), 0.0, 1.0);
  187. float4 _Mask2_G_Color = tex2D_mask2_G * _Mask2_Gchannel_ColorAmountA;
  188. float4 lerpResult163 = lerp(lerpResult162, _Mask2_Gchannel_ColorAmountA, clampResult299);
  189. float clampResult300 = clamp((tex2DNode144.b * tex2D_mask2_B.a * _Mask2_Bchannel_ColorAmountA.a), 0.0, 1.0);
  190. float4 _Mask2_B_Color = tex2D_mask2_B * _Mask2_Bchannel_ColorAmountA;
  191. float4 lerpResult164 = lerp(lerpResult163, _Mask2_Bchannel_ColorAmountA, clampResult300);
  192. albedoAlpha.rgb = half3(lerpResult164.r, lerpResult164.g, lerpResult164.b);
  193. return albedoAlpha;
  194. }
  195. float4 frag(v2f i) :COLOR
  196. {
  197. float3 viewDir = normalize(i.viewDir);
  198. float3 lightDir = normalize(i.lightDir);
  199. float3 H = normalize(lightDir + viewDir);
  200. float3 N = normalize(i.wNormal);
  201. //float3 col = tex2D(_BaseMap, i.uv);
  202. float3 col = GetColor(i.uv);
  203. fixed4 specularCol = tex2D(_SpecularTex, i.uv);
  204. fixed mask = specularCol.a;
  205. /*
  206. *this common algorithm
  207. */
  208. float f = _specluarIntensity + (1 - _specluarIntensity) * pow(2, -10 * dot(H, lightDir));
  209. float VDotH = dot(viewDir, H);
  210. /*
  211. *this part is compute Cornea's PBR specular
  212. */
  213. float _SP = lerp(pow(8192, lerp(0, 0.5, _GLCornea - 0.4)), pow(8192, _GLCornea), mask + 0.005);
  214. float d = (_SP + 2) / (8 * UNITY_PI) * pow(max(0.0, dot(N, H)), _SP);
  215. //float f = _specluarIntensity + (1 - _specluarIntensity) * pow(2, -10 * dot(H, lightDir));
  216. float k = min(1, _GLCornea + 0.545);
  217. float v = 1 / (k * VDotH * VDotH + (1 - k));
  218. float SpecIns = d * f * v;
  219. SpecIns = SpecIns * specularCol * (1 - mask) + SpecIns * mask;
  220. SpecIns = lerp(0, SpecIns, clamp(mask - 0.3, 0, 1));
  221. /*
  222. *this part is compute Iris and Sclera's PBR specular
  223. */
  224. half3 tNormalA = UnpackNormal(tex2D(_BumpMap, i.uv));
  225. half3 tNormalB = UnpackNormal(tex2D(_BumpDetialMap, i.uv));
  226. half3 tNormal = normalize(tNormalA * mask + tNormalB * (1 - mask));
  227. half3 normal = half3(dot(i.tspace0, tNormalB), dot(i.tspace1, tNormalB), dot(i.tspace2, tNormalB));
  228. half diff = dot(normal, lightDir) * 0.49 + 0.49;
  229. half3 worldNormal;
  230. worldNormal.x = dot(i.tspace0, tNormal);
  231. worldNormal.y = dot(i.tspace1, tNormal);
  232. worldNormal.z = dot(i.tspace2, tNormal);
  233. worldNormal = normalize(worldNormal);
  234. _SP = pow(8192, _GLIris) * mask + pow(8192, lerp(1.05, 1.8, _GLIris + 0.1)) * (1 - mask);
  235. d = (_SP + 2) / (8 * UNITY_PI) * pow(max(0.0, dot(worldNormal, H)), _SP);
  236. //f = _specluarIntensity + (1 - _specluarIntensity) * pow(2, -10 * dot(H, lightDir));
  237. k = min(1, _GLIris + 0.545);
  238. v = 1 / (k * VDotH * VDotH + (1 - k));
  239. //float3 refDir = reflect(-viewDir, N);
  240. //float3 ref = texCUBElod(_Cubemap, float4(refDir, 0.5 - _GLCornea*0.5)).rgb;
  241. half3 matnormal = normalize(mul((float3x3)UNITY_MATRIX_V, worldNormal));
  242. half2 matCapUV = matnormal.xy * 0.5 + 0.5;
  243. fixed3 ref = tex2D(_SSSMap, matCapUV);
  244. float fr = saturate(1.0 - dot(viewDir, worldNormal));
  245. fixed3 rimColor = (saturate(pow(diff * fr , _RimPower) * (1.0 + _RimPower)) * _RimColor).rgb * _rimMultiplier;
  246. float roughSpecIns = d * f * v;
  247. roughSpecIns = roughSpecIns * _SPScleraDetial.a * mask;
  248. float3 roughSpec = roughSpecIns * specularCol;
  249. roughSpec = roughSpecIns * _SPScleraDetial.rgb + roughSpecIns;
  250. return float4(col * diff * _Lum + rimColor + roughSpec * _SPIris + SpecIns * col + Luminance(ref) * _ReflAmount, 1) * _LightColor0;
  251. }
  252. ENDCG
  253. }
  254. }
  255. }