1. // Complex Lit is superset of Lit, but provides
  2. // advanced material properties and is always forward rendered.
  3. // It also has higher hardware and shader model requirements.
  4. Shader "Universal Render Pipeline/Complex Lit"
  5. {
  6. Properties
  7. {
  8. // Specular vs Metallic workflow
  9. [HideInInspector] _WorkflowMode("WorkflowMode", Float) = 1.0
  10.  
  11. [MainTexture] _BaseMap("Albedo", 2D) = "white" {}
  12. [MainColor] _BaseColor("Color", Color) = (1,1,1,1)
  13.  
  14. _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
  15.  
  16. _Smoothness("Smoothness", Range(0.0, 1.0)) = 0.5
  17. _GlossMapScale("Smoothness Scale", Range(0.0, 1.0)) = 1.0
  18. _SmoothnessTextureChannel("Smoothness texture channel", Float) = 0
  19.  
  20. _Metallic("Metallic", Range(0.0, 1.0)) = 0.0
  21. _MetallicGlossMap("Metallic", 2D) = "white" {}
  22.  
  23. _SpecColor("Specular", Color) = (0.2, 0.2, 0.2)
  24. _SpecGlossMap("Specular", 2D) = "white" {}
  25.  
  26. [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
  27. [ToggleOff] _EnvironmentReflections("Environment Reflections", Float) = 1.0
  28.  
  29. _BumpScale("Scale", Float) = 1.0
  30. _BumpMap("Normal Map", 2D) = "bump" {}
  31.  
  32. _Parallax("Scale", Range(0.005, 0.08)) = 0.005
  33. _ParallaxMap("Height Map", 2D) = "black" {}
  34.  
  35. _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0
  36. _OcclusionMap("Occlusion", 2D) = "white" {}
  37.  
  38. [HDR] _EmissionColor("Color", Color) = (0,0,0)
  39. _EmissionMap("Emission", 2D) = "white" {}
  40.  
  41. _DetailMask("Detail Mask", 2D) = "white" {}
  42. _DetailAlbedoMapScale("Scale", Range(0.0, 2.0)) = 1.0
  43. _DetailAlbedoMap("Detail Albedo x2", 2D) = "linearGrey" {}
  44. _DetailNormalMapScale("Scale", Range(0.0, 2.0)) = 1.0
  45. [Normal] _DetailNormalMap("Normal Map", 2D) = "bump" {}
  46.  
  47. _ClearCoat("Clear Coat", Float) = 0.0
  48. _ClearCoatMap("Clear Coat Map", 2D) = "white" {}
  49. _ClearCoatMask("Clear Coat Mask", Range(0.0, 1.0)) = 0.0
  50. _ClearCoatSmoothness("Clear Coat Smoothness", Range(0.0, 1.0)) = 1.0
  51.  
  52. // Blending state
  53. [HideInInspector] _Surface("__surface", Float) = 0.0
  54. [HideInInspector] _Blend("__blend", Float) = 0.0
  55. [HideInInspector] _AlphaClip("__clip", Float) = 0.0
  56. [HideInInspector] _SrcBlend("__src", Float) = 1.0
  57. [HideInInspector] _DstBlend("__dst", Float) = 0.0
  58. [HideInInspector] _ZWrite("__zw", Float) = 1.0
  59. [HideInInspector] _Cull("__cull", Float) = 2.0
  60.  
  61. _ReceiveShadows("Receive Shadows", Float) = 1.0
  62. // Editmode props
  63. [HideInInspector] _QueueOffset("Queue offset", Float) = 0.0
  64.  
  65. [HideInInspector][NoScaleOffset]unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {}
  66. [HideInInspector][NoScaleOffset]unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {}
  67. [HideInInspector][NoScaleOffset]unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {}
  68. }
  69.  
  70. SubShader
  71. {
  72. // Universal Pipeline tag is required. If Universal render pipeline is not set in the graphics settings
  73. // this Subshader will fail. One can add a subshader below or fallback to Standard built-in to make this
  74. // material work with both Universal Render Pipeline and Builtin Unity Pipeline
  75. Tags{"RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "UniversalMaterialType" = "ComplexLit" "IgnoreProjector" = "True" "ShaderModel"="4.5"}
  76. LOD 300
  77.  
  78. // ------------------------------------------------------------------
  79. // Forward only pass.
  80. // Acts also as an opaque forward fallback for deferred rendering.
  81. Pass
  82. {
  83. // Lightmode matches the ShaderPassName set in UniversalRenderPipeline.cs. SRPDefaultUnlit and passes with
  84. // no LightMode tag are also rendered by Universal Render Pipeline
  85. Name "ForwardLit"
  86. Tags{"LightMode" = "UniversalForwardOnly"}
  87.  
  88. Blend[_SrcBlend][_DstBlend]
  89. ZWrite[_ZWrite]
  90. Cull[_Cull]
  91.  
  92. HLSLPROGRAM
  93. #pragma exclude_renderers gles gles3 glcore
  94. #pragma target 4.5
  95.  
  96. // -------------------------------------
  97. // Material Keywords
  98. #pragma shader_feature_local _NORMALMAP
  99. #pragma shader_feature_local _PARALLAXMAP
  100. #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
  101. #pragma shader_feature_local_fragment _ALPHATEST_ON
  102. #pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON
  103. #pragma shader_feature_local_fragment _EMISSION
  104. #pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
  105. #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  106. #pragma shader_feature_local_fragment _OCCLUSIONMAP
  107. #pragma shader_feature_local_fragment _ _CLEARCOAT _CLEARCOATMAP
  108. #pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
  109. #pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
  110. #pragma shader_feature_local_fragment _SPECULAR_SETUP
  111. #pragma shader_feature_local _RECEIVE_SHADOWS_OFF
  112.  
  113. // -------------------------------------
  114. // Universal Pipeline keywords
  115. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS
  116. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
  117. #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
  118. #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
  119. #pragma multi_compile_fragment _ _SHADOWS_SOFT
  120. #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE
  121. #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
  122.  
  123. // -------------------------------------
  124. // Unity defined keywords
  125. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  126. #pragma multi_compile _ LIGHTMAP_ON
  127. #pragma multi_compile_fog
  128.  
  129. //--------------------------------------
  130. // GPU Instancing
  131. #pragma multi_compile_instancing
  132. #pragma multi_compile _ DOTS_INSTANCING_ON
  133.  
  134. #pragma vertex LitPassVertex
  135. #pragma fragment LitPassFragment
  136.  
  137. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  138. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitForwardPass.hlsl"
  139. ENDHLSL
  140. }
  141.  
  142. Pass
  143. {
  144. Name "ShadowCaster"
  145. Tags{"LightMode" = "ShadowCaster"}
  146.  
  147. ZWrite On
  148. ZTest LEqual
  149. ColorMask 0
  150. Cull[_Cull]
  151.  
  152. HLSLPROGRAM
  153. #pragma exclude_renderers gles gles3 glcore
  154. #pragma target 4.5
  155.  
  156. // -------------------------------------
  157. // Material Keywords
  158. #pragma shader_feature_local_fragment _ALPHATEST_ON
  159. #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  160.  
  161. //--------------------------------------
  162. // GPU Instancing
  163. #pragma multi_compile_instancing
  164. #pragma multi_compile _ DOTS_INSTANCING_ON
  165.  
  166. #pragma vertex ShadowPassVertex
  167. #pragma fragment ShadowPassFragment
  168.  
  169. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  170. #include "Packages/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl"
  171. ENDHLSL
  172. }
  173.  
  174. Pass
  175. {
  176. Name "DepthOnly"
  177. Tags{"LightMode" = "DepthOnly"}
  178.  
  179. ZWrite On
  180. ColorMask 0
  181. Cull[_Cull]
  182.  
  183. HLSLPROGRAM
  184. #pragma exclude_renderers gles gles3 glcore
  185. #pragma target 4.5
  186.  
  187. #pragma vertex DepthOnlyVertex
  188. #pragma fragment DepthOnlyFragment
  189.  
  190. // -------------------------------------
  191. // Material Keywords
  192. #pragma shader_feature_local_fragment _ALPHATEST_ON
  193. #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  194.  
  195. //--------------------------------------
  196. // GPU Instancing
  197. #pragma multi_compile_instancing
  198. #pragma multi_compile _ DOTS_INSTANCING_ON
  199.  
  200. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  201. #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl"
  202. ENDHLSL
  203. }
  204.  
  205. // This pass is used when drawing to a _CameraNormalsTexture texture
  206. Pass
  207. {
  208. Name "DepthNormals"
  209. Tags{"LightMode" = "DepthNormals"}
  210.  
  211. ZWrite On
  212. Cull[_Cull]
  213.  
  214. HLSLPROGRAM
  215. #pragma exclude_renderers gles gles3 glcore
  216. #pragma target 4.5
  217.  
  218. #pragma vertex DepthNormalsVertex
  219. #pragma fragment DepthNormalsFragment
  220.  
  221. // -------------------------------------
  222. // Material Keywords
  223. #pragma shader_feature_local _NORMALMAP
  224. #pragma shader_feature_local_fragment _ALPHATEST_ON
  225. #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  226.  
  227. //--------------------------------------
  228. // GPU Instancing
  229. #pragma multi_compile_instancing
  230. #pragma multi_compile _ DOTS_INSTANCING_ON
  231.  
  232. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  233. #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthNormalsPass.hlsl"
  234. ENDHLSL
  235. }
  236.  
  237. // This pass it not used during regular rendering, only for lightmap baking.
  238. Pass
  239. {
  240. Name "Meta"
  241. Tags{"LightMode" = "Meta"}
  242.  
  243. Cull Off
  244.  
  245. HLSLPROGRAM
  246. #pragma exclude_renderers gles gles3 glcore
  247. #pragma target 4.5
  248.  
  249. #pragma vertex UniversalVertexMeta
  250. #pragma fragment UniversalFragmentMeta
  251.  
  252. #pragma shader_feature_local_fragment _SPECULAR_SETUP
  253. #pragma shader_feature_local_fragment _EMISSION
  254. #pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
  255. #pragma shader_feature_local_fragment _ALPHATEST_ON
  256. #pragma shader_feature_local_fragment _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  257. #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
  258.  
  259. #pragma shader_feature_local_fragment _SPECGLOSSMAP
  260.  
  261. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  262. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitMetaPass.hlsl"
  263.  
  264. ENDHLSL
  265. }
  266. Pass
  267. {
  268. Name "Universal2D"
  269. Tags{ "LightMode" = "Universal2D" }
  270.  
  271. Blend[_SrcBlend][_DstBlend]
  272. ZWrite[_ZWrite]
  273. Cull[_Cull]
  274.  
  275. HLSLPROGRAM
  276. #pragma exclude_renderers gles gles3 glcore
  277. #pragma target 4.5
  278.  
  279. #pragma vertex vert
  280. #pragma fragment frag
  281. #pragma shader_feature_local_fragment _ALPHATEST_ON
  282. #pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON
  283.  
  284. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  285. #include "Packages/com.unity.render-pipelines.universal/Shaders/Utils/Universal2D.hlsl"
  286. ENDHLSL
  287. }
  288. }
  289.  
  290. SubShader
  291. {
  292. // Universal Pipeline tag is required. If Universal render pipeline is not set in the graphics settings
  293. // this Subshader will fail. One can add a subshader below or fallback to Standard built-in to make this
  294. // material work with both Universal Render Pipeline and Builtin Unity Pipeline
  295. Tags{"RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "UniversalMaterialType" = "Lit" "IgnoreProjector" = "True" "ShaderModel"="2.0"}
  296. LOD 300
  297.  
  298. Pass
  299. {
  300. // Lightmode matches the ShaderPassName set in UniversalRenderPipeline.cs. SRPDefaultUnlit and passes with
  301. // no LightMode tag are also rendered by Universal Render Pipeline
  302. Name "ForwardLit"
  303. Tags{"LightMode" = "UniversalForwardOnly"}
  304.  
  305. Blend[_SrcBlend][_DstBlend]
  306. ZWrite[_ZWrite]
  307. Cull[_Cull]
  308.  
  309. HLSLPROGRAM
  310. #pragma only_renderers gles gles3 glcore
  311. #pragma target 2.0
  312.  
  313. // -------------------------------------
  314. // Material Keywords
  315. #pragma shader_feature_local _NORMALMAP
  316. #pragma shader_feature_local _PARALLAXMAP
  317. #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
  318. #pragma shader_feature_local_fragment _ALPHATEST_ON
  319. #pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON
  320. #pragma shader_feature_local_fragment _EMISSION
  321. #pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
  322. #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  323. #pragma shader_feature_local_fragment _OCCLUSIONMAP
  324. #pragma shader_feature_local_fragment _ _CLEARCOAT _CLEARCOATMAP
  325. #pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
  326. #pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
  327. #pragma shader_feature_local_fragment _SPECULAR_SETUP
  328. #pragma shader_feature_local _RECEIVE_SHADOWS_OFF
  329.  
  330. // -------------------------------------
  331. // Universal Pipeline keywords
  332. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS
  333. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
  334. #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
  335. #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
  336. #pragma multi_compile_fragment _ _SHADOWS_SOFT
  337. #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE
  338. #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
  339.  
  340. // -------------------------------------
  341. // Unity defined keywords
  342. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  343. #pragma multi_compile _ LIGHTMAP_ON
  344. #pragma multi_compile_fog
  345.  
  346. //--------------------------------------
  347. // GPU Instancing
  348. #pragma multi_compile_instancing
  349.  
  350. #pragma vertex LitPassVertex
  351. #pragma fragment LitPassFragment
  352.  
  353. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  354. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitForwardPass.hlsl"
  355. ENDHLSL
  356. }
  357. Pass
  358. {
  359. Name "ShadowCaster"
  360. Tags{"LightMode" = "ShadowCaster"}
  361.  
  362. ZWrite On
  363. ZTest LEqual
  364. ColorMask 0
  365. Cull[_Cull]
  366.  
  367. HLSLPROGRAM
  368. #pragma only_renderers gles gles3 glcore
  369. #pragma target 2.0
  370.  
  371. //--------------------------------------
  372. // GPU Instancing
  373. #pragma multi_compile_instancing
  374.  
  375. // -------------------------------------
  376. // Material Keywords
  377. #pragma shader_feature_local_fragment _ALPHATEST_ON
  378. #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  379.  
  380. #pragma vertex ShadowPassVertex
  381. #pragma fragment ShadowPassFragment
  382.  
  383. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  384. #include "Packages/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl"
  385. ENDHLSL
  386. }
  387.  
  388. Pass
  389. {
  390. Name "DepthOnly"
  391. Tags{"LightMode" = "DepthOnly"}
  392.  
  393. ZWrite On
  394. ColorMask 0
  395. Cull[_Cull]
  396.  
  397. HLSLPROGRAM
  398. #pragma only_renderers gles gles3 glcore
  399. #pragma target 2.0
  400.  
  401. //--------------------------------------
  402. // GPU Instancing
  403. #pragma multi_compile_instancing
  404.  
  405. #pragma vertex DepthOnlyVertex
  406. #pragma fragment DepthOnlyFragment
  407.  
  408. // -------------------------------------
  409. // Material Keywords
  410. #pragma shader_feature_local_fragment _ALPHATEST_ON
  411. #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  412.  
  413. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  414. #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl"
  415. ENDHLSL
  416. }
  417.  
  418. // This pass is used when drawing to a _CameraNormalsTexture texture
  419. Pass
  420. {
  421. Name "DepthNormals"
  422. Tags{"LightMode" = "DepthNormals"}
  423.  
  424. ZWrite On
  425. Cull[_Cull]
  426.  
  427. HLSLPROGRAM
  428. #pragma only_renderers gles gles3 glcore
  429. #pragma target 2.0
  430.  
  431. #pragma vertex DepthNormalsVertex
  432. #pragma fragment DepthNormalsFragment
  433.  
  434. // -------------------------------------
  435. // Material Keywords
  436. #pragma shader_feature_local _NORMALMAP
  437. #pragma shader_feature_local_fragment _ALPHATEST_ON
  438. #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  439.  
  440. //--------------------------------------
  441. // GPU Instancing
  442. #pragma multi_compile_instancing
  443.  
  444. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  445. #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthNormalsPass.hlsl"
  446. ENDHLSL
  447. }
  448.  
  449. // This pass it not used during regular rendering, only for lightmap baking.
  450. Pass
  451. {
  452. Name "Meta"
  453. Tags{"LightMode" = "Meta"}
  454.  
  455. Cull Off
  456.  
  457. HLSLPROGRAM
  458. #pragma only_renderers gles gles3 glcore
  459. #pragma target 2.0
  460.  
  461. #pragma vertex UniversalVertexMeta
  462. #pragma fragment UniversalFragmentMeta
  463.  
  464. #pragma shader_feature_local_fragment _SPECULAR_SETUP
  465. #pragma shader_feature_local_fragment _EMISSION
  466. #pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
  467. #pragma shader_feature_local_fragment _ALPHATEST_ON
  468. #pragma shader_feature_local_fragment _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  469. #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
  470.  
  471. #pragma shader_feature_local_fragment _SPECGLOSSMAP
  472.  
  473. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  474. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitMetaPass.hlsl"
  475.  
  476. ENDHLSL
  477. }
  478. Pass
  479. {
  480. Name "Universal2D"
  481. Tags{ "LightMode" = "Universal2D" }
  482.  
  483. Blend[_SrcBlend][_DstBlend]
  484. ZWrite[_ZWrite]
  485. Cull[_Cull]
  486.  
  487. HLSLPROGRAM
  488. #pragma only_renderers gles gles3 glcore
  489. #pragma target 2.0
  490.  
  491. #pragma vertex vert
  492. #pragma fragment frag
  493. #pragma shader_feature_local_fragment _ALPHATEST_ON
  494. #pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON
  495.  
  496. #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
  497. #include "Packages/com.unity.render-pipelines.universal/Shaders/Utils/Universal2D.hlsl"
  498. ENDHLSL
  499. }
  500. }
  501.  
  502. //////////////////////////////////////////////////////
  503.  
  504. FallBack "Hidden/Universal Render Pipeline/Lit"
  505. FallBack "Hidden/Universal Render Pipeline/FallbackError"
  506. CustomEditor "UnityEditor.Rendering.Universal.ShaderGUI.LitShader"
  507. }