3Textures.shader 109 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809
  1. // Made with Amplify Shader Editor
  2. // Available at the Unity Asset Store - http://u3d.as/y3X
  3. Shader "MTE/URP/3 Textures"
  4. {
  5. Properties
  6. {
  7. [HideInInspector] _EmissionColor("Emission Color", Color) = (1,1,1,1)
  8. [HideInInspector] _AlphaCutoff("Alpha Cutoff ", Range(0, 1)) = 0.5
  9. _Splat0("Layer 1", 2D) = "white" {}
  10. _Splat1("Layer 2", 2D) = "white" {}
  11. _Splat2("Layer 3", 2D) = "white" {}
  12. _Normal0("Normalmap 1", 2D) = "bump" {}
  13. _Normal1("Normalmap 2", 2D) = "bump" {}
  14. _Normal2("Normalmap 3", 2D) = "bump" {}
  15. _Smoothness0("Smoothness 1", Range( 0 , 1)) = 0.5
  16. _Smoothness1("Smoothness 2", Range( 0 , 1)) = 0.5
  17. [Toggle(SMOOTHNESS_TEXTURE)] SMOOTHNESS_TEXTURE("Smoothness Texture", Float) = 0
  18. _Smoothness2("Smoothness 3", Range( 0 , 1)) = 0.5
  19. _Control("Control", 2D) = "white" {}
  20. [Toggle(ENABLE_NORMAL_INTENSITY)] ENABLE_NORMAL_INTENSITY("Normal Intensity", Float) = 1
  21. _NormalIntensity0("Normal Intensity 1", Range( 0.01 , 10)) = 1
  22. _NormalIntensity1("Normal Intensity 2", Range( 0.01 , 10)) = 1
  23. _NormalIntensity2("Normal Intensity 3", Range( 0.01 , 10)) = 1
  24. [ASEEnd]_SpecularColor("SpecularColor", Color) = (0,0,0,0)
  25. //_TransmissionShadow( "Transmission Shadow", Range( 0, 1 ) ) = 0.5
  26. //_TransStrength( "Trans Strength", Range( 0, 50 ) ) = 1
  27. //_TransNormal( "Trans Normal Distortion", Range( 0, 1 ) ) = 0.5
  28. //_TransScattering( "Trans Scattering", Range( 1, 50 ) ) = 2
  29. //_TransDirect( "Trans Direct", Range( 0, 1 ) ) = 0.9
  30. //_TransAmbient( "Trans Ambient", Range( 0, 1 ) ) = 0.1
  31. //_TransShadow( "Trans Shadow", Range( 0, 1 ) ) = 0.5
  32. //_TessPhongStrength( "Tess Phong Strength", Range( 0, 1 ) ) = 0.5
  33. //_TessValue( "Tess Max Tessellation", Range( 1, 32 ) ) = 16
  34. //_TessMin( "Tess Min Distance", Float ) = 10
  35. //_TessMax( "Tess Max Distance", Float ) = 25
  36. //_TessEdgeLength ( "Tess Edge length", Range( 2, 50 ) ) = 16
  37. //_TessMaxDisp( "Tess Max Displacement", Float ) = 25
  38. }
  39. SubShader
  40. {
  41. LOD 0
  42. Tags { "RenderPipeline"="UniversalPipeline" "RenderType"="Opaque" "Queue"="Geometry" }
  43. Cull Back
  44. AlphaToMask Off
  45. HLSLINCLUDE
  46. #pragma target 3.0
  47. #pragma prefer_hlslcc gles
  48. #pragma exclude_renderers d3d11_9x
  49. #ifndef ASE_TESS_FUNCS
  50. #define ASE_TESS_FUNCS
  51. float4 FixedTess( float tessValue )
  52. {
  53. return tessValue;
  54. }
  55. float CalcDistanceTessFactor (float4 vertex, float minDist, float maxDist, float tess, float4x4 o2w, float3 cameraPos )
  56. {
  57. float3 wpos = mul(o2w,vertex).xyz;
  58. float dist = distance (wpos, cameraPos);
  59. float f = clamp(1.0 - (dist - minDist) / (maxDist - minDist), 0.01, 1.0) * tess;
  60. return f;
  61. }
  62. float4 CalcTriEdgeTessFactors (float3 triVertexFactors)
  63. {
  64. float4 tess;
  65. tess.x = 0.5 * (triVertexFactors.y + triVertexFactors.z);
  66. tess.y = 0.5 * (triVertexFactors.x + triVertexFactors.z);
  67. tess.z = 0.5 * (triVertexFactors.x + triVertexFactors.y);
  68. tess.w = (triVertexFactors.x + triVertexFactors.y + triVertexFactors.z) / 3.0f;
  69. return tess;
  70. }
  71. float CalcEdgeTessFactor (float3 wpos0, float3 wpos1, float edgeLen, float3 cameraPos, float4 scParams )
  72. {
  73. float dist = distance (0.5 * (wpos0+wpos1), cameraPos);
  74. float len = distance(wpos0, wpos1);
  75. float f = max(len * scParams.y / (edgeLen * dist), 1.0);
  76. return f;
  77. }
  78. float DistanceFromPlane (float3 pos, float4 plane)
  79. {
  80. float d = dot (float4(pos,1.0f), plane);
  81. return d;
  82. }
  83. bool WorldViewFrustumCull (float3 wpos0, float3 wpos1, float3 wpos2, float cullEps, float4 planes[6] )
  84. {
  85. float4 planeTest;
  86. planeTest.x = (( DistanceFromPlane(wpos0, planes[0]) > -cullEps) ? 1.0f : 0.0f ) +
  87. (( DistanceFromPlane(wpos1, planes[0]) > -cullEps) ? 1.0f : 0.0f ) +
  88. (( DistanceFromPlane(wpos2, planes[0]) > -cullEps) ? 1.0f : 0.0f );
  89. planeTest.y = (( DistanceFromPlane(wpos0, planes[1]) > -cullEps) ? 1.0f : 0.0f ) +
  90. (( DistanceFromPlane(wpos1, planes[1]) > -cullEps) ? 1.0f : 0.0f ) +
  91. (( DistanceFromPlane(wpos2, planes[1]) > -cullEps) ? 1.0f : 0.0f );
  92. planeTest.z = (( DistanceFromPlane(wpos0, planes[2]) > -cullEps) ? 1.0f : 0.0f ) +
  93. (( DistanceFromPlane(wpos1, planes[2]) > -cullEps) ? 1.0f : 0.0f ) +
  94. (( DistanceFromPlane(wpos2, planes[2]) > -cullEps) ? 1.0f : 0.0f );
  95. planeTest.w = (( DistanceFromPlane(wpos0, planes[3]) > -cullEps) ? 1.0f : 0.0f ) +
  96. (( DistanceFromPlane(wpos1, planes[3]) > -cullEps) ? 1.0f : 0.0f ) +
  97. (( DistanceFromPlane(wpos2, planes[3]) > -cullEps) ? 1.0f : 0.0f );
  98. return !all (planeTest);
  99. }
  100. float4 DistanceBasedTess( float4 v0, float4 v1, float4 v2, float tess, float minDist, float maxDist, float4x4 o2w, float3 cameraPos )
  101. {
  102. float3 f;
  103. f.x = CalcDistanceTessFactor (v0,minDist,maxDist,tess,o2w,cameraPos);
  104. f.y = CalcDistanceTessFactor (v1,minDist,maxDist,tess,o2w,cameraPos);
  105. f.z = CalcDistanceTessFactor (v2,minDist,maxDist,tess,o2w,cameraPos);
  106. return CalcTriEdgeTessFactors (f);
  107. }
  108. float4 EdgeLengthBasedTess( float4 v0, float4 v1, float4 v2, float edgeLength, float4x4 o2w, float3 cameraPos, float4 scParams )
  109. {
  110. float3 pos0 = mul(o2w,v0).xyz;
  111. float3 pos1 = mul(o2w,v1).xyz;
  112. float3 pos2 = mul(o2w,v2).xyz;
  113. float4 tess;
  114. tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams);
  115. tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams);
  116. tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams);
  117. tess.w = (tess.x + tess.y + tess.z) / 3.0f;
  118. return tess;
  119. }
  120. float4 EdgeLengthBasedTessCull( float4 v0, float4 v1, float4 v2, float edgeLength, float maxDisplacement, float4x4 o2w, float3 cameraPos, float4 scParams, float4 planes[6] )
  121. {
  122. float3 pos0 = mul(o2w,v0).xyz;
  123. float3 pos1 = mul(o2w,v1).xyz;
  124. float3 pos2 = mul(o2w,v2).xyz;
  125. float4 tess;
  126. if (WorldViewFrustumCull(pos0, pos1, pos2, maxDisplacement, planes))
  127. {
  128. tess = 0.0f;
  129. }
  130. else
  131. {
  132. tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams);
  133. tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams);
  134. tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams);
  135. tess.w = (tess.x + tess.y + tess.z) / 3.0f;
  136. }
  137. return tess;
  138. }
  139. #endif //ASE_TESS_FUNCS
  140. ENDHLSL
  141. Pass
  142. {
  143. Name "Forward"
  144. Tags { "LightMode"="UniversalForward" }
  145. Blend One Zero, One Zero
  146. ZWrite On
  147. ZTest LEqual
  148. Offset 0 , 0
  149. ColorMask RGBA
  150. HLSLPROGRAM
  151. #define _SPECULAR_SETUP 1
  152. #define _NORMAL_DROPOFF_TS 1
  153. #pragma multi_compile_instancing
  154. #pragma multi_compile _ LOD_FADE_CROSSFADE
  155. #pragma multi_compile_fog
  156. #define ASE_FOG 1
  157. #define _NORMALMAP 1
  158. #define ASE_SRP_VERSION 100500
  159. #pragma multi_compile _ _SCREEN_SPACE_OCCLUSION
  160. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS
  161. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
  162. #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS _ADDITIONAL_OFF
  163. #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS
  164. #pragma multi_compile _ _SHADOWS_SOFT
  165. #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE
  166. #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
  167. #pragma multi_compile _ SHADOWS_SHADOWMASK
  168. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  169. #pragma multi_compile _ LIGHTMAP_ON
  170. #pragma vertex vert
  171. #pragma fragment frag
  172. #define SHADERPASS_FORWARD
  173. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  174. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
  175. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
  176. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl"
  177. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
  178. #if ASE_SRP_VERSION <= 70108
  179. #define REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR
  180. #endif
  181. #if defined(UNITY_INSTANCING_ENABLED) && defined(_TERRAIN_INSTANCED_PERPIXEL_NORMAL)
  182. #define ENABLE_TERRAIN_PERPIXEL_NORMAL
  183. #endif
  184. #pragma shader_feature_local SMOOTHNESS_TEXTURE
  185. #pragma shader_feature_local ENABLE_NORMAL_INTENSITY
  186. struct VertexInput
  187. {
  188. float4 vertex : POSITION;
  189. float3 ase_normal : NORMAL;
  190. float4 ase_tangent : TANGENT;
  191. float4 texcoord1 : TEXCOORD1;
  192. float4 texcoord : TEXCOORD0;
  193. UNITY_VERTEX_INPUT_INSTANCE_ID
  194. };
  195. struct VertexOutput
  196. {
  197. float4 clipPos : SV_POSITION;
  198. float4 lightmapUVOrVertexSH : TEXCOORD0;
  199. half4 fogFactorAndVertexLight : TEXCOORD1;
  200. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
  201. float4 shadowCoord : TEXCOORD2;
  202. #endif
  203. float4 tSpace0 : TEXCOORD3;
  204. float4 tSpace1 : TEXCOORD4;
  205. float4 tSpace2 : TEXCOORD5;
  206. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  207. float4 screenPos : TEXCOORD6;
  208. #endif
  209. float4 ase_texcoord7 : TEXCOORD7;
  210. UNITY_VERTEX_INPUT_INSTANCE_ID
  211. UNITY_VERTEX_OUTPUT_STEREO
  212. };
  213. CBUFFER_START(UnityPerMaterial)
  214. float4 _Control_ST;
  215. float4 _Splat0_ST;
  216. float4 _Splat1_ST;
  217. float4 _Splat2_ST;
  218. float4 _SpecularColor;
  219. float _Smoothness0;
  220. float _Smoothness1;
  221. float _Smoothness2;
  222. float _NormalIntensity0;
  223. float _NormalIntensity1;
  224. float _NormalIntensity2;
  225. #ifdef _TRANSMISSION_ASE
  226. float _TransmissionShadow;
  227. #endif
  228. #ifdef _TRANSLUCENCY_ASE
  229. float _TransStrength;
  230. float _TransNormal;
  231. float _TransScattering;
  232. float _TransDirect;
  233. float _TransAmbient;
  234. float _TransShadow;
  235. #endif
  236. #ifdef TESSELLATION_ON
  237. float _TessPhongStrength;
  238. float _TessValue;
  239. float _TessMin;
  240. float _TessMax;
  241. float _TessEdgeLength;
  242. float _TessMaxDisp;
  243. #endif
  244. CBUFFER_END
  245. sampler2D _Control;
  246. sampler2D _Splat0;
  247. sampler2D _Splat1;
  248. sampler2D _Splat2;
  249. sampler2D _Normal0;
  250. sampler2D _Normal1;
  251. sampler2D _Normal2;
  252. float4 WeightedBlend3144( half4 Weight, float4 Layer1, float4 Layer2, float4 Layer3 )
  253. {
  254. return Layer1 * Weight.r + Layer2 * Weight.g + Layer3 * Weight.b;
  255. }
  256. inline float3 MTE_NormalIntensity_fixed146( float3 Normal, float Strength )
  257. {
  258. return lerp(Normal, float3(0,0,1), - Strength + 1.0);
  259. }
  260. inline float3 MTE_NormalIntensity_fixed149( float3 Normal, float Strength )
  261. {
  262. return lerp(Normal, float3(0,0,1), - Strength + 1.0);
  263. }
  264. inline float3 MTE_NormalIntensity_fixed152( float3 Normal, float Strength )
  265. {
  266. return lerp(Normal, float3(0,0,1), - Strength + 1.0);
  267. }
  268. float4 WeightedBlend389( half4 Weight, float4 Layer1, float4 Layer2, float4 Layer3 )
  269. {
  270. return Layer1 * Weight.r + Layer2 * Weight.g + Layer3 * Weight.b;
  271. }
  272. VertexOutput VertexFunction( VertexInput v )
  273. {
  274. VertexOutput o = (VertexOutput)0;
  275. UNITY_SETUP_INSTANCE_ID(v);
  276. UNITY_TRANSFER_INSTANCE_ID(v, o);
  277. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  278. o.ase_texcoord7.xy = v.texcoord.xy;
  279. //setting value to unused interpolator channels and avoid initialization warnings
  280. o.ase_texcoord7.zw = 0;
  281. #ifdef ASE_ABSOLUTE_VERTEX_POS
  282. float3 defaultVertexValue = v.vertex.xyz;
  283. #else
  284. float3 defaultVertexValue = float3(0, 0, 0);
  285. #endif
  286. float3 vertexValue = defaultVertexValue;
  287. #ifdef ASE_ABSOLUTE_VERTEX_POS
  288. v.vertex.xyz = vertexValue;
  289. #else
  290. v.vertex.xyz += vertexValue;
  291. #endif
  292. v.ase_normal = v.ase_normal;
  293. float3 positionWS = TransformObjectToWorld( v.vertex.xyz );
  294. float3 positionVS = TransformWorldToView( positionWS );
  295. float4 positionCS = TransformWorldToHClip( positionWS );
  296. VertexNormalInputs normalInput = GetVertexNormalInputs( v.ase_normal, v.ase_tangent );
  297. o.tSpace0 = float4( normalInput.normalWS, positionWS.x);
  298. o.tSpace1 = float4( normalInput.tangentWS, positionWS.y);
  299. o.tSpace2 = float4( normalInput.bitangentWS, positionWS.z);
  300. OUTPUT_LIGHTMAP_UV( v.texcoord1, unity_LightmapST, o.lightmapUVOrVertexSH.xy );
  301. OUTPUT_SH( normalInput.normalWS.xyz, o.lightmapUVOrVertexSH.xyz );
  302. #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL)
  303. o.lightmapUVOrVertexSH.zw = v.texcoord;
  304. o.lightmapUVOrVertexSH.xy = v.texcoord * unity_LightmapST.xy + unity_LightmapST.zw;
  305. #endif
  306. half3 vertexLight = VertexLighting( positionWS, normalInput.normalWS );
  307. #ifdef ASE_FOG
  308. half fogFactor = ComputeFogFactor( positionCS.z );
  309. #else
  310. half fogFactor = 0;
  311. #endif
  312. o.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
  313. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
  314. VertexPositionInputs vertexInput = (VertexPositionInputs)0;
  315. vertexInput.positionWS = positionWS;
  316. vertexInput.positionCS = positionCS;
  317. o.shadowCoord = GetShadowCoord( vertexInput );
  318. #endif
  319. o.clipPos = positionCS;
  320. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  321. o.screenPos = ComputeScreenPos(positionCS);
  322. #endif
  323. return o;
  324. }
  325. #if defined(TESSELLATION_ON)
  326. struct VertexControl
  327. {
  328. float4 vertex : INTERNALTESSPOS;
  329. float3 ase_normal : NORMAL;
  330. float4 ase_tangent : TANGENT;
  331. float4 texcoord : TEXCOORD0;
  332. float4 texcoord1 : TEXCOORD1;
  333. UNITY_VERTEX_INPUT_INSTANCE_ID
  334. };
  335. struct TessellationFactors
  336. {
  337. float edge[3] : SV_TessFactor;
  338. float inside : SV_InsideTessFactor;
  339. };
  340. VertexControl vert ( VertexInput v )
  341. {
  342. VertexControl o;
  343. UNITY_SETUP_INSTANCE_ID(v);
  344. UNITY_TRANSFER_INSTANCE_ID(v, o);
  345. o.vertex = v.vertex;
  346. o.ase_normal = v.ase_normal;
  347. o.ase_tangent = v.ase_tangent;
  348. o.texcoord = v.texcoord;
  349. o.texcoord1 = v.texcoord1;
  350. return o;
  351. }
  352. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  353. {
  354. TessellationFactors o;
  355. float4 tf = 1;
  356. float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
  357. float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
  358. #if defined(ASE_FIXED_TESSELLATION)
  359. tf = FixedTess( tessValue );
  360. #elif defined(ASE_DISTANCE_TESSELLATION)
  361. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
  362. #elif defined(ASE_LENGTH_TESSELLATION)
  363. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
  364. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  365. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  366. #endif
  367. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  368. return o;
  369. }
  370. [domain("tri")]
  371. [partitioning("fractional_odd")]
  372. [outputtopology("triangle_cw")]
  373. [patchconstantfunc("TessellationFunction")]
  374. [outputcontrolpoints(3)]
  375. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  376. {
  377. return patch[id];
  378. }
  379. [domain("tri")]
  380. VertexOutput DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  381. {
  382. VertexInput o = (VertexInput) 0;
  383. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  384. o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z;
  385. o.ase_tangent = patch[0].ase_tangent * bary.x + patch[1].ase_tangent * bary.y + patch[2].ase_tangent * bary.z;
  386. o.texcoord = patch[0].texcoord * bary.x + patch[1].texcoord * bary.y + patch[2].texcoord * bary.z;
  387. o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z;
  388. #if defined(ASE_PHONG_TESSELLATION)
  389. float3 pp[3];
  390. for (int i = 0; i < 3; ++i)
  391. pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal));
  392. float phongStrength = _TessPhongStrength;
  393. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  394. #endif
  395. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  396. return VertexFunction(o);
  397. }
  398. #else
  399. VertexOutput vert ( VertexInput v )
  400. {
  401. return VertexFunction( v );
  402. }
  403. #endif
  404. #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE)
  405. #define ASE_SV_DEPTH SV_DepthLessEqual
  406. #else
  407. #define ASE_SV_DEPTH SV_Depth
  408. #endif
  409. half4 frag ( VertexOutput IN
  410. #ifdef ASE_DEPTH_WRITE_ON
  411. ,out float outputDepth : ASE_SV_DEPTH
  412. #endif
  413. ) : SV_Target
  414. {
  415. UNITY_SETUP_INSTANCE_ID(IN);
  416. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN);
  417. #ifdef LOD_FADE_CROSSFADE
  418. LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x );
  419. #endif
  420. #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL)
  421. float2 sampleCoords = (IN.lightmapUVOrVertexSH.zw / _TerrainHeightmapRecipSize.zw + 0.5f) * _TerrainHeightmapRecipSize.xy;
  422. float3 WorldNormal = TransformObjectToWorldNormal(normalize(SAMPLE_TEXTURE2D(_TerrainNormalmapTexture, sampler_TerrainNormalmapTexture, sampleCoords).rgb * 2 - 1));
  423. float3 WorldTangent = -cross(GetObjectToWorldMatrix()._13_23_33, WorldNormal);
  424. float3 WorldBiTangent = cross(WorldNormal, -WorldTangent);
  425. #else
  426. float3 WorldNormal = normalize( IN.tSpace0.xyz );
  427. float3 WorldTangent = IN.tSpace1.xyz;
  428. float3 WorldBiTangent = IN.tSpace2.xyz;
  429. #endif
  430. float3 WorldPosition = float3(IN.tSpace0.w,IN.tSpace1.w,IN.tSpace2.w);
  431. float3 WorldViewDirection = _WorldSpaceCameraPos.xyz - WorldPosition;
  432. float4 ShadowCoords = float4( 0, 0, 0, 0 );
  433. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  434. float4 ScreenPos = IN.screenPos;
  435. #endif
  436. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
  437. ShadowCoords = IN.shadowCoord;
  438. #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS)
  439. ShadowCoords = TransformWorldToShadowCoord( WorldPosition );
  440. #endif
  441. WorldViewDirection = SafeNormalize( WorldViewDirection );
  442. float4 localBreakRGBA115 = ( float4( 0,0,0,0 ) );
  443. float2 uv_Control = IN.ase_texcoord7.xy * _Control_ST.xy + _Control_ST.zw;
  444. float4 tex2DNode6 = tex2D( _Control, uv_Control );
  445. float4 Weight144 = tex2DNode6;
  446. float2 uv_Splat0 = IN.ase_texcoord7.xy * _Splat0_ST.xy + _Splat0_ST.zw;
  447. float4 appendResult123 = (float4(1.0 , 1.0 , 1.0 , _Smoothness0));
  448. float4 Layer1144 = ( tex2D( _Splat0, uv_Splat0 ) * appendResult123 );
  449. float2 uv_Splat1 = IN.ase_texcoord7.xy * _Splat1_ST.xy + _Splat1_ST.zw;
  450. float4 appendResult126 = (float4(1.0 , 1.0 , 1.0 , _Smoothness1));
  451. float4 Layer2144 = ( tex2D( _Splat1, uv_Splat1 ) * appendResult126 );
  452. float2 uv_Splat2 = IN.ase_texcoord7.xy * _Splat2_ST.xy + _Splat2_ST.zw;
  453. float4 appendResult129 = (float4(1.0 , 1.0 , 1.0 , _Smoothness2));
  454. float4 Layer3144 = ( tex2D( _Splat2, uv_Splat2 ) * appendResult129 );
  455. float4 localWeightedBlend3144 = WeightedBlend3144( Weight144 , Layer1144 , Layer2144 , Layer3144 );
  456. float4 RGBA115 = localWeightedBlend3144;
  457. float3 RGB115 = float3( 0,0,0 );
  458. float A115 = 0;
  459. {
  460. RGB115 = RGBA115.rgb;
  461. A115 = RGBA115.a;
  462. }
  463. float4 Weight89 = tex2DNode6;
  464. float3 tex2DNode16 = UnpackNormalScale( tex2D( _Normal0, uv_Splat0 ), 1.0f );
  465. float3 Normal146 = tex2DNode16;
  466. float Strength146 = _NormalIntensity0;
  467. float3 localMTE_NormalIntensity_fixed146 = MTE_NormalIntensity_fixed146( Normal146 , Strength146 );
  468. #ifdef ENABLE_NORMAL_INTENSITY
  469. float3 staticSwitch147 = localMTE_NormalIntensity_fixed146;
  470. #else
  471. float3 staticSwitch147 = tex2DNode16;
  472. #endif
  473. float4 Layer189 = float4( staticSwitch147 , 0.0 );
  474. float3 tex2DNode39 = UnpackNormalScale( tex2D( _Normal1, uv_Splat1 ), 1.0f );
  475. float3 Normal149 = tex2DNode39;
  476. float Strength149 = _NormalIntensity1;
  477. float3 localMTE_NormalIntensity_fixed149 = MTE_NormalIntensity_fixed149( Normal149 , Strength149 );
  478. #ifdef ENABLE_NORMAL_INTENSITY
  479. float3 staticSwitch150 = localMTE_NormalIntensity_fixed149;
  480. #else
  481. float3 staticSwitch150 = tex2DNode39;
  482. #endif
  483. float4 Layer289 = float4( staticSwitch150 , 0.0 );
  484. float3 tex2DNode44 = UnpackNormalScale( tex2D( _Normal2, uv_Splat2 ), 1.0f );
  485. float3 Normal152 = tex2DNode44;
  486. float Strength152 = _NormalIntensity2;
  487. float3 localMTE_NormalIntensity_fixed152 = MTE_NormalIntensity_fixed152( Normal152 , Strength152 );
  488. #ifdef ENABLE_NORMAL_INTENSITY
  489. float3 staticSwitch153 = localMTE_NormalIntensity_fixed152;
  490. #else
  491. float3 staticSwitch153 = tex2DNode44;
  492. #endif
  493. float4 Layer389 = float4( staticSwitch153 , 0.0 );
  494. float4 localWeightedBlend389 = WeightedBlend389( Weight89 , Layer189 , Layer289 , Layer389 );
  495. float3 Albedo = RGB115;
  496. float3 Normal = localWeightedBlend389.xyz;
  497. float3 Emission = 0;
  498. float3 Specular = _SpecularColor.rgb;
  499. float Metallic = 0;
  500. float Smoothness = A115;
  501. float Occlusion = 1;
  502. float Alpha = 1;
  503. float AlphaClipThreshold = 0.5;
  504. float AlphaClipThresholdShadow = 0.5;
  505. float3 BakedGI = 0;
  506. float3 RefractionColor = 1;
  507. float RefractionIndex = 1;
  508. float3 Transmission = 1;
  509. float3 Translucency = 1;
  510. #ifdef ASE_DEPTH_WRITE_ON
  511. float DepthValue = 0;
  512. #endif
  513. #ifdef _ALPHATEST_ON
  514. clip(Alpha - AlphaClipThreshold);
  515. #endif
  516. InputData inputData;
  517. inputData.positionWS = WorldPosition;
  518. inputData.viewDirectionWS = WorldViewDirection;
  519. inputData.shadowCoord = ShadowCoords;
  520. #ifdef _NORMALMAP
  521. #if _NORMAL_DROPOFF_TS
  522. inputData.normalWS = TransformTangentToWorld(Normal, half3x3( WorldTangent, WorldBiTangent, WorldNormal ));
  523. #elif _NORMAL_DROPOFF_OS
  524. inputData.normalWS = TransformObjectToWorldNormal(Normal);
  525. #elif _NORMAL_DROPOFF_WS
  526. inputData.normalWS = Normal;
  527. #endif
  528. inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS);
  529. #else
  530. inputData.normalWS = WorldNormal;
  531. #endif
  532. #ifdef ASE_FOG
  533. inputData.fogCoord = IN.fogFactorAndVertexLight.x;
  534. #endif
  535. inputData.vertexLighting = IN.fogFactorAndVertexLight.yzw;
  536. #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL)
  537. float3 SH = SampleSH(inputData.normalWS.xyz);
  538. #else
  539. float3 SH = IN.lightmapUVOrVertexSH.xyz;
  540. #endif
  541. inputData.bakedGI = SAMPLE_GI( IN.lightmapUVOrVertexSH.xy, SH, inputData.normalWS );
  542. #ifdef _ASE_BAKEDGI
  543. inputData.bakedGI = BakedGI;
  544. #endif
  545. inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(IN.clipPos);
  546. inputData.shadowMask = SAMPLE_SHADOWMASK(IN.lightmapUVOrVertexSH.xy);
  547. half4 color = UniversalFragmentPBR(
  548. inputData,
  549. Albedo,
  550. Metallic,
  551. Specular,
  552. Smoothness,
  553. Occlusion,
  554. Emission,
  555. Alpha);
  556. #ifdef _TRANSMISSION_ASE
  557. {
  558. float shadow = _TransmissionShadow;
  559. Light mainLight = GetMainLight( inputData.shadowCoord );
  560. float3 mainAtten = mainLight.color * mainLight.distanceAttenuation;
  561. mainAtten = lerp( mainAtten, mainAtten * mainLight.shadowAttenuation, shadow );
  562. half3 mainTransmission = max(0 , -dot(inputData.normalWS, mainLight.direction)) * mainAtten * Transmission;
  563. color.rgb += Albedo * mainTransmission;
  564. #ifdef _ADDITIONAL_LIGHTS
  565. int transPixelLightCount = GetAdditionalLightsCount();
  566. for (int i = 0; i < transPixelLightCount; ++i)
  567. {
  568. Light light = GetAdditionalLight(i, inputData.positionWS);
  569. float3 atten = light.color * light.distanceAttenuation;
  570. atten = lerp( atten, atten * light.shadowAttenuation, shadow );
  571. half3 transmission = max(0 , -dot(inputData.normalWS, light.direction)) * atten * Transmission;
  572. color.rgb += Albedo * transmission;
  573. }
  574. #endif
  575. }
  576. #endif
  577. #ifdef _TRANSLUCENCY_ASE
  578. {
  579. float shadow = _TransShadow;
  580. float normal = _TransNormal;
  581. float scattering = _TransScattering;
  582. float direct = _TransDirect;
  583. float ambient = _TransAmbient;
  584. float strength = _TransStrength;
  585. Light mainLight = GetMainLight( inputData.shadowCoord );
  586. float3 mainAtten = mainLight.color * mainLight.distanceAttenuation;
  587. mainAtten = lerp( mainAtten, mainAtten * mainLight.shadowAttenuation, shadow );
  588. half3 mainLightDir = mainLight.direction + inputData.normalWS * normal;
  589. half mainVdotL = pow( saturate( dot( inputData.viewDirectionWS, -mainLightDir ) ), scattering );
  590. half3 mainTranslucency = mainAtten * ( mainVdotL * direct + inputData.bakedGI * ambient ) * Translucency;
  591. color.rgb += Albedo * mainTranslucency * strength;
  592. #ifdef _ADDITIONAL_LIGHTS
  593. int transPixelLightCount = GetAdditionalLightsCount();
  594. for (int i = 0; i < transPixelLightCount; ++i)
  595. {
  596. Light light = GetAdditionalLight(i, inputData.positionWS);
  597. float3 atten = light.color * light.distanceAttenuation;
  598. atten = lerp( atten, atten * light.shadowAttenuation, shadow );
  599. half3 lightDir = light.direction + inputData.normalWS * normal;
  600. half VdotL = pow( saturate( dot( inputData.viewDirectionWS, -lightDir ) ), scattering );
  601. half3 translucency = atten * ( VdotL * direct + inputData.bakedGI * ambient ) * Translucency;
  602. color.rgb += Albedo * translucency * strength;
  603. }
  604. #endif
  605. }
  606. #endif
  607. #ifdef _REFRACTION_ASE
  608. float4 projScreenPos = ScreenPos / ScreenPos.w;
  609. float3 refractionOffset = ( RefractionIndex - 1.0 ) * mul( UNITY_MATRIX_V, float4( WorldNormal,0 ) ).xyz * ( 1.0 - dot( WorldNormal, WorldViewDirection ) );
  610. projScreenPos.xy += refractionOffset.xy;
  611. float3 refraction = SHADERGRAPH_SAMPLE_SCENE_COLOR( projScreenPos.xy ) * RefractionColor;
  612. color.rgb = lerp( refraction, color.rgb, color.a );
  613. color.a = 1;
  614. #endif
  615. #ifdef ASE_FINAL_COLOR_ALPHA_MULTIPLY
  616. color.rgb *= color.a;
  617. #endif
  618. #ifdef ASE_FOG
  619. #ifdef TERRAIN_SPLAT_ADDPASS
  620. color.rgb = MixFogColor(color.rgb, half3( 0, 0, 0 ), IN.fogFactorAndVertexLight.x );
  621. #else
  622. color.rgb = MixFog(color.rgb, IN.fogFactorAndVertexLight.x);
  623. #endif
  624. #endif
  625. #ifdef ASE_DEPTH_WRITE_ON
  626. outputDepth = DepthValue;
  627. #endif
  628. return color;
  629. }
  630. ENDHLSL
  631. }
  632. Pass
  633. {
  634. Name "ShadowCaster"
  635. Tags { "LightMode"="ShadowCaster" }
  636. ZWrite On
  637. ZTest LEqual
  638. AlphaToMask Off
  639. ColorMask 0
  640. HLSLPROGRAM
  641. #define _SPECULAR_SETUP 1
  642. #define _NORMAL_DROPOFF_TS 1
  643. #pragma multi_compile_instancing
  644. #pragma multi_compile _ LOD_FADE_CROSSFADE
  645. #pragma multi_compile_fog
  646. #define ASE_FOG 1
  647. #define _NORMALMAP 1
  648. #define ASE_SRP_VERSION 100500
  649. #pragma vertex vert
  650. #pragma fragment frag
  651. #if ASE_SRP_VERSION >= 110000
  652. #pragma multi_compile _ _CASTING_PUNCTUAL_LIGHT_SHADOW
  653. #endif
  654. #define SHADERPASS_SHADOWCASTER
  655. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  656. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
  657. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
  658. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
  659. #pragma shader_feature_local SMOOTHNESS_TEXTURE
  660. struct VertexInput
  661. {
  662. float4 vertex : POSITION;
  663. float3 ase_normal : NORMAL;
  664. UNITY_VERTEX_INPUT_INSTANCE_ID
  665. };
  666. struct VertexOutput
  667. {
  668. float4 clipPos : SV_POSITION;
  669. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  670. float3 worldPos : TEXCOORD0;
  671. #endif
  672. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  673. float4 shadowCoord : TEXCOORD1;
  674. #endif
  675. UNITY_VERTEX_INPUT_INSTANCE_ID
  676. UNITY_VERTEX_OUTPUT_STEREO
  677. };
  678. CBUFFER_START(UnityPerMaterial)
  679. float4 _Control_ST;
  680. float4 _Splat0_ST;
  681. float4 _Splat1_ST;
  682. float4 _Splat2_ST;
  683. float4 _SpecularColor;
  684. float _Smoothness0;
  685. float _Smoothness1;
  686. float _Smoothness2;
  687. float _NormalIntensity0;
  688. float _NormalIntensity1;
  689. float _NormalIntensity2;
  690. #ifdef _TRANSMISSION_ASE
  691. float _TransmissionShadow;
  692. #endif
  693. #ifdef _TRANSLUCENCY_ASE
  694. float _TransStrength;
  695. float _TransNormal;
  696. float _TransScattering;
  697. float _TransDirect;
  698. float _TransAmbient;
  699. float _TransShadow;
  700. #endif
  701. #ifdef TESSELLATION_ON
  702. float _TessPhongStrength;
  703. float _TessValue;
  704. float _TessMin;
  705. float _TessMax;
  706. float _TessEdgeLength;
  707. float _TessMaxDisp;
  708. #endif
  709. CBUFFER_END
  710. float3 _LightDirection;
  711. #if ASE_SRP_VERSION >= 110000
  712. float3 _LightPosition;
  713. #endif
  714. VertexOutput VertexFunction( VertexInput v )
  715. {
  716. VertexOutput o;
  717. UNITY_SETUP_INSTANCE_ID(v);
  718. UNITY_TRANSFER_INSTANCE_ID(v, o);
  719. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o );
  720. #ifdef ASE_ABSOLUTE_VERTEX_POS
  721. float3 defaultVertexValue = v.vertex.xyz;
  722. #else
  723. float3 defaultVertexValue = float3(0, 0, 0);
  724. #endif
  725. float3 vertexValue = defaultVertexValue;
  726. #ifdef ASE_ABSOLUTE_VERTEX_POS
  727. v.vertex.xyz = vertexValue;
  728. #else
  729. v.vertex.xyz += vertexValue;
  730. #endif
  731. v.ase_normal = v.ase_normal;
  732. float3 positionWS = TransformObjectToWorld( v.vertex.xyz );
  733. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  734. o.worldPos = positionWS;
  735. #endif
  736. float3 normalWS = TransformObjectToWorldDir(v.ase_normal);
  737. #if ASE_SRP_VERSION >= 110000
  738. #if _CASTING_PUNCTUAL_LIGHT_SHADOW
  739. float3 lightDirectionWS = normalize(_LightPosition - positionWS);
  740. #else
  741. float3 lightDirectionWS = _LightDirection;
  742. #endif
  743. float4 clipPos = TransformWorldToHClip(ApplyShadowBias(positionWS, normalWS, lightDirectionWS));
  744. #if UNITY_REVERSED_Z
  745. clipPos.z = min(clipPos.z, UNITY_NEAR_CLIP_VALUE);
  746. #else
  747. clipPos.z = max(clipPos.z, UNITY_NEAR_CLIP_VALUE);
  748. #endif
  749. #else
  750. float4 clipPos = TransformWorldToHClip(ApplyShadowBias(positionWS, normalWS, _LightDirection));
  751. #if UNITY_REVERSED_Z
  752. clipPos.z = min(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE);
  753. #else
  754. clipPos.z = max(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE);
  755. #endif
  756. #endif
  757. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  758. VertexPositionInputs vertexInput = (VertexPositionInputs)0;
  759. vertexInput.positionWS = positionWS;
  760. vertexInput.positionCS = clipPos;
  761. o.shadowCoord = GetShadowCoord( vertexInput );
  762. #endif
  763. o.clipPos = clipPos;
  764. return o;
  765. }
  766. #if defined(TESSELLATION_ON)
  767. struct VertexControl
  768. {
  769. float4 vertex : INTERNALTESSPOS;
  770. float3 ase_normal : NORMAL;
  771. UNITY_VERTEX_INPUT_INSTANCE_ID
  772. };
  773. struct TessellationFactors
  774. {
  775. float edge[3] : SV_TessFactor;
  776. float inside : SV_InsideTessFactor;
  777. };
  778. VertexControl vert ( VertexInput v )
  779. {
  780. VertexControl o;
  781. UNITY_SETUP_INSTANCE_ID(v);
  782. UNITY_TRANSFER_INSTANCE_ID(v, o);
  783. o.vertex = v.vertex;
  784. o.ase_normal = v.ase_normal;
  785. return o;
  786. }
  787. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  788. {
  789. TessellationFactors o;
  790. float4 tf = 1;
  791. float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
  792. float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
  793. #if defined(ASE_FIXED_TESSELLATION)
  794. tf = FixedTess( tessValue );
  795. #elif defined(ASE_DISTANCE_TESSELLATION)
  796. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
  797. #elif defined(ASE_LENGTH_TESSELLATION)
  798. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
  799. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  800. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  801. #endif
  802. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  803. return o;
  804. }
  805. [domain("tri")]
  806. [partitioning("fractional_odd")]
  807. [outputtopology("triangle_cw")]
  808. [patchconstantfunc("TessellationFunction")]
  809. [outputcontrolpoints(3)]
  810. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  811. {
  812. return patch[id];
  813. }
  814. [domain("tri")]
  815. VertexOutput DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  816. {
  817. VertexInput o = (VertexInput) 0;
  818. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  819. o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z;
  820. #if defined(ASE_PHONG_TESSELLATION)
  821. float3 pp[3];
  822. for (int i = 0; i < 3; ++i)
  823. pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal));
  824. float phongStrength = _TessPhongStrength;
  825. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  826. #endif
  827. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  828. return VertexFunction(o);
  829. }
  830. #else
  831. VertexOutput vert ( VertexInput v )
  832. {
  833. return VertexFunction( v );
  834. }
  835. #endif
  836. #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE)
  837. #define ASE_SV_DEPTH SV_DepthLessEqual
  838. #else
  839. #define ASE_SV_DEPTH SV_Depth
  840. #endif
  841. half4 frag( VertexOutput IN
  842. #ifdef ASE_DEPTH_WRITE_ON
  843. ,out float outputDepth : ASE_SV_DEPTH
  844. #endif
  845. ) : SV_TARGET
  846. {
  847. UNITY_SETUP_INSTANCE_ID( IN );
  848. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN );
  849. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  850. float3 WorldPosition = IN.worldPos;
  851. #endif
  852. float4 ShadowCoords = float4( 0, 0, 0, 0 );
  853. #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  854. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
  855. ShadowCoords = IN.shadowCoord;
  856. #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS)
  857. ShadowCoords = TransformWorldToShadowCoord( WorldPosition );
  858. #endif
  859. #endif
  860. float Alpha = 1;
  861. float AlphaClipThreshold = 0.5;
  862. float AlphaClipThresholdShadow = 0.5;
  863. #ifdef ASE_DEPTH_WRITE_ON
  864. float DepthValue = 0;
  865. #endif
  866. #ifdef _ALPHATEST_ON
  867. #ifdef _ALPHATEST_SHADOW_ON
  868. clip(Alpha - AlphaClipThresholdShadow);
  869. #else
  870. clip(Alpha - AlphaClipThreshold);
  871. #endif
  872. #endif
  873. #ifdef LOD_FADE_CROSSFADE
  874. LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x );
  875. #endif
  876. #ifdef ASE_DEPTH_WRITE_ON
  877. outputDepth = DepthValue;
  878. #endif
  879. return 0;
  880. }
  881. ENDHLSL
  882. }
  883. Pass
  884. {
  885. Name "DepthOnly"
  886. Tags { "LightMode"="DepthOnly" }
  887. ZWrite On
  888. ColorMask 0
  889. AlphaToMask Off
  890. HLSLPROGRAM
  891. #define _SPECULAR_SETUP 1
  892. #define _NORMAL_DROPOFF_TS 1
  893. #pragma multi_compile_instancing
  894. #pragma multi_compile _ LOD_FADE_CROSSFADE
  895. #pragma multi_compile_fog
  896. #define ASE_FOG 1
  897. #define _NORMALMAP 1
  898. #define ASE_SRP_VERSION 100500
  899. #pragma vertex vert
  900. #pragma fragment frag
  901. #define SHADERPASS_DEPTHONLY
  902. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  903. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
  904. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
  905. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
  906. #pragma shader_feature_local SMOOTHNESS_TEXTURE
  907. struct VertexInput
  908. {
  909. float4 vertex : POSITION;
  910. float3 ase_normal : NORMAL;
  911. UNITY_VERTEX_INPUT_INSTANCE_ID
  912. };
  913. struct VertexOutput
  914. {
  915. float4 clipPos : SV_POSITION;
  916. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  917. float3 worldPos : TEXCOORD0;
  918. #endif
  919. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  920. float4 shadowCoord : TEXCOORD1;
  921. #endif
  922. UNITY_VERTEX_INPUT_INSTANCE_ID
  923. UNITY_VERTEX_OUTPUT_STEREO
  924. };
  925. CBUFFER_START(UnityPerMaterial)
  926. float4 _Control_ST;
  927. float4 _Splat0_ST;
  928. float4 _Splat1_ST;
  929. float4 _Splat2_ST;
  930. float4 _SpecularColor;
  931. float _Smoothness0;
  932. float _Smoothness1;
  933. float _Smoothness2;
  934. float _NormalIntensity0;
  935. float _NormalIntensity1;
  936. float _NormalIntensity2;
  937. #ifdef _TRANSMISSION_ASE
  938. float _TransmissionShadow;
  939. #endif
  940. #ifdef _TRANSLUCENCY_ASE
  941. float _TransStrength;
  942. float _TransNormal;
  943. float _TransScattering;
  944. float _TransDirect;
  945. float _TransAmbient;
  946. float _TransShadow;
  947. #endif
  948. #ifdef TESSELLATION_ON
  949. float _TessPhongStrength;
  950. float _TessValue;
  951. float _TessMin;
  952. float _TessMax;
  953. float _TessEdgeLength;
  954. float _TessMaxDisp;
  955. #endif
  956. CBUFFER_END
  957. VertexOutput VertexFunction( VertexInput v )
  958. {
  959. VertexOutput o = (VertexOutput)0;
  960. UNITY_SETUP_INSTANCE_ID(v);
  961. UNITY_TRANSFER_INSTANCE_ID(v, o);
  962. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  963. #ifdef ASE_ABSOLUTE_VERTEX_POS
  964. float3 defaultVertexValue = v.vertex.xyz;
  965. #else
  966. float3 defaultVertexValue = float3(0, 0, 0);
  967. #endif
  968. float3 vertexValue = defaultVertexValue;
  969. #ifdef ASE_ABSOLUTE_VERTEX_POS
  970. v.vertex.xyz = vertexValue;
  971. #else
  972. v.vertex.xyz += vertexValue;
  973. #endif
  974. v.ase_normal = v.ase_normal;
  975. float3 positionWS = TransformObjectToWorld( v.vertex.xyz );
  976. float4 positionCS = TransformWorldToHClip( positionWS );
  977. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  978. o.worldPos = positionWS;
  979. #endif
  980. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  981. VertexPositionInputs vertexInput = (VertexPositionInputs)0;
  982. vertexInput.positionWS = positionWS;
  983. vertexInput.positionCS = positionCS;
  984. o.shadowCoord = GetShadowCoord( vertexInput );
  985. #endif
  986. o.clipPos = positionCS;
  987. return o;
  988. }
  989. #if defined(TESSELLATION_ON)
  990. struct VertexControl
  991. {
  992. float4 vertex : INTERNALTESSPOS;
  993. float3 ase_normal : NORMAL;
  994. UNITY_VERTEX_INPUT_INSTANCE_ID
  995. };
  996. struct TessellationFactors
  997. {
  998. float edge[3] : SV_TessFactor;
  999. float inside : SV_InsideTessFactor;
  1000. };
  1001. VertexControl vert ( VertexInput v )
  1002. {
  1003. VertexControl o;
  1004. UNITY_SETUP_INSTANCE_ID(v);
  1005. UNITY_TRANSFER_INSTANCE_ID(v, o);
  1006. o.vertex = v.vertex;
  1007. o.ase_normal = v.ase_normal;
  1008. return o;
  1009. }
  1010. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  1011. {
  1012. TessellationFactors o;
  1013. float4 tf = 1;
  1014. float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
  1015. float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
  1016. #if defined(ASE_FIXED_TESSELLATION)
  1017. tf = FixedTess( tessValue );
  1018. #elif defined(ASE_DISTANCE_TESSELLATION)
  1019. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
  1020. #elif defined(ASE_LENGTH_TESSELLATION)
  1021. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
  1022. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  1023. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  1024. #endif
  1025. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  1026. return o;
  1027. }
  1028. [domain("tri")]
  1029. [partitioning("fractional_odd")]
  1030. [outputtopology("triangle_cw")]
  1031. [patchconstantfunc("TessellationFunction")]
  1032. [outputcontrolpoints(3)]
  1033. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  1034. {
  1035. return patch[id];
  1036. }
  1037. [domain("tri")]
  1038. VertexOutput DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  1039. {
  1040. VertexInput o = (VertexInput) 0;
  1041. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  1042. o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z;
  1043. #if defined(ASE_PHONG_TESSELLATION)
  1044. float3 pp[3];
  1045. for (int i = 0; i < 3; ++i)
  1046. pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal));
  1047. float phongStrength = _TessPhongStrength;
  1048. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  1049. #endif
  1050. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  1051. return VertexFunction(o);
  1052. }
  1053. #else
  1054. VertexOutput vert ( VertexInput v )
  1055. {
  1056. return VertexFunction( v );
  1057. }
  1058. #endif
  1059. #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE)
  1060. #define ASE_SV_DEPTH SV_DepthLessEqual
  1061. #else
  1062. #define ASE_SV_DEPTH SV_Depth
  1063. #endif
  1064. half4 frag( VertexOutput IN
  1065. #ifdef ASE_DEPTH_WRITE_ON
  1066. ,out float outputDepth : ASE_SV_DEPTH
  1067. #endif
  1068. ) : SV_TARGET
  1069. {
  1070. UNITY_SETUP_INSTANCE_ID(IN);
  1071. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN );
  1072. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  1073. float3 WorldPosition = IN.worldPos;
  1074. #endif
  1075. float4 ShadowCoords = float4( 0, 0, 0, 0 );
  1076. #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1077. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
  1078. ShadowCoords = IN.shadowCoord;
  1079. #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS)
  1080. ShadowCoords = TransformWorldToShadowCoord( WorldPosition );
  1081. #endif
  1082. #endif
  1083. float Alpha = 1;
  1084. float AlphaClipThreshold = 0.5;
  1085. #ifdef ASE_DEPTH_WRITE_ON
  1086. float DepthValue = 0;
  1087. #endif
  1088. #ifdef _ALPHATEST_ON
  1089. clip(Alpha - AlphaClipThreshold);
  1090. #endif
  1091. #ifdef LOD_FADE_CROSSFADE
  1092. LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x );
  1093. #endif
  1094. #ifdef ASE_DEPTH_WRITE_ON
  1095. outputDepth = DepthValue;
  1096. #endif
  1097. return 0;
  1098. }
  1099. ENDHLSL
  1100. }
  1101. Pass
  1102. {
  1103. Name "Meta"
  1104. Tags { "LightMode"="Meta" }
  1105. Cull Off
  1106. HLSLPROGRAM
  1107. #define _SPECULAR_SETUP 1
  1108. #define _NORMAL_DROPOFF_TS 1
  1109. #pragma multi_compile_instancing
  1110. #pragma multi_compile _ LOD_FADE_CROSSFADE
  1111. #pragma multi_compile_fog
  1112. #define ASE_FOG 1
  1113. #define _NORMALMAP 1
  1114. #define ASE_SRP_VERSION 100500
  1115. #pragma vertex vert
  1116. #pragma fragment frag
  1117. #define SHADERPASS_META
  1118. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  1119. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/MetaInput.hlsl"
  1120. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
  1121. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
  1122. #pragma shader_feature_local SMOOTHNESS_TEXTURE
  1123. #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  1124. struct VertexInput
  1125. {
  1126. float4 vertex : POSITION;
  1127. float3 ase_normal : NORMAL;
  1128. float4 texcoord1 : TEXCOORD1;
  1129. float4 texcoord2 : TEXCOORD2;
  1130. float4 ase_texcoord : TEXCOORD0;
  1131. UNITY_VERTEX_INPUT_INSTANCE_ID
  1132. };
  1133. struct VertexOutput
  1134. {
  1135. float4 clipPos : SV_POSITION;
  1136. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  1137. float3 worldPos : TEXCOORD0;
  1138. #endif
  1139. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1140. float4 shadowCoord : TEXCOORD1;
  1141. #endif
  1142. float4 ase_texcoord2 : TEXCOORD2;
  1143. UNITY_VERTEX_INPUT_INSTANCE_ID
  1144. UNITY_VERTEX_OUTPUT_STEREO
  1145. };
  1146. CBUFFER_START(UnityPerMaterial)
  1147. float4 _Control_ST;
  1148. float4 _Splat0_ST;
  1149. float4 _Splat1_ST;
  1150. float4 _Splat2_ST;
  1151. float4 _SpecularColor;
  1152. float _Smoothness0;
  1153. float _Smoothness1;
  1154. float _Smoothness2;
  1155. float _NormalIntensity0;
  1156. float _NormalIntensity1;
  1157. float _NormalIntensity2;
  1158. #ifdef _TRANSMISSION_ASE
  1159. float _TransmissionShadow;
  1160. #endif
  1161. #ifdef _TRANSLUCENCY_ASE
  1162. float _TransStrength;
  1163. float _TransNormal;
  1164. float _TransScattering;
  1165. float _TransDirect;
  1166. float _TransAmbient;
  1167. float _TransShadow;
  1168. #endif
  1169. #ifdef TESSELLATION_ON
  1170. float _TessPhongStrength;
  1171. float _TessValue;
  1172. float _TessMin;
  1173. float _TessMax;
  1174. float _TessEdgeLength;
  1175. float _TessMaxDisp;
  1176. #endif
  1177. CBUFFER_END
  1178. sampler2D _Control;
  1179. sampler2D _Splat0;
  1180. sampler2D _Splat1;
  1181. sampler2D _Splat2;
  1182. float4 WeightedBlend3144( half4 Weight, float4 Layer1, float4 Layer2, float4 Layer3 )
  1183. {
  1184. return Layer1 * Weight.r + Layer2 * Weight.g + Layer3 * Weight.b;
  1185. }
  1186. VertexOutput VertexFunction( VertexInput v )
  1187. {
  1188. VertexOutput o = (VertexOutput)0;
  1189. UNITY_SETUP_INSTANCE_ID(v);
  1190. UNITY_TRANSFER_INSTANCE_ID(v, o);
  1191. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  1192. o.ase_texcoord2.xy = v.ase_texcoord.xy;
  1193. //setting value to unused interpolator channels and avoid initialization warnings
  1194. o.ase_texcoord2.zw = 0;
  1195. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1196. float3 defaultVertexValue = v.vertex.xyz;
  1197. #else
  1198. float3 defaultVertexValue = float3(0, 0, 0);
  1199. #endif
  1200. float3 vertexValue = defaultVertexValue;
  1201. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1202. v.vertex.xyz = vertexValue;
  1203. #else
  1204. v.vertex.xyz += vertexValue;
  1205. #endif
  1206. v.ase_normal = v.ase_normal;
  1207. float3 positionWS = TransformObjectToWorld( v.vertex.xyz );
  1208. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  1209. o.worldPos = positionWS;
  1210. #endif
  1211. o.clipPos = MetaVertexPosition( v.vertex, v.texcoord1.xy, v.texcoord1.xy, unity_LightmapST, unity_DynamicLightmapST );
  1212. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1213. VertexPositionInputs vertexInput = (VertexPositionInputs)0;
  1214. vertexInput.positionWS = positionWS;
  1215. vertexInput.positionCS = o.clipPos;
  1216. o.shadowCoord = GetShadowCoord( vertexInput );
  1217. #endif
  1218. return o;
  1219. }
  1220. #if defined(TESSELLATION_ON)
  1221. struct VertexControl
  1222. {
  1223. float4 vertex : INTERNALTESSPOS;
  1224. float3 ase_normal : NORMAL;
  1225. float4 texcoord1 : TEXCOORD1;
  1226. float4 texcoord2 : TEXCOORD2;
  1227. float4 ase_texcoord : TEXCOORD0;
  1228. UNITY_VERTEX_INPUT_INSTANCE_ID
  1229. };
  1230. struct TessellationFactors
  1231. {
  1232. float edge[3] : SV_TessFactor;
  1233. float inside : SV_InsideTessFactor;
  1234. };
  1235. VertexControl vert ( VertexInput v )
  1236. {
  1237. VertexControl o;
  1238. UNITY_SETUP_INSTANCE_ID(v);
  1239. UNITY_TRANSFER_INSTANCE_ID(v, o);
  1240. o.vertex = v.vertex;
  1241. o.ase_normal = v.ase_normal;
  1242. o.texcoord1 = v.texcoord1;
  1243. o.texcoord2 = v.texcoord2;
  1244. o.ase_texcoord = v.ase_texcoord;
  1245. return o;
  1246. }
  1247. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  1248. {
  1249. TessellationFactors o;
  1250. float4 tf = 1;
  1251. float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
  1252. float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
  1253. #if defined(ASE_FIXED_TESSELLATION)
  1254. tf = FixedTess( tessValue );
  1255. #elif defined(ASE_DISTANCE_TESSELLATION)
  1256. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
  1257. #elif defined(ASE_LENGTH_TESSELLATION)
  1258. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
  1259. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  1260. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  1261. #endif
  1262. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  1263. return o;
  1264. }
  1265. [domain("tri")]
  1266. [partitioning("fractional_odd")]
  1267. [outputtopology("triangle_cw")]
  1268. [patchconstantfunc("TessellationFunction")]
  1269. [outputcontrolpoints(3)]
  1270. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  1271. {
  1272. return patch[id];
  1273. }
  1274. [domain("tri")]
  1275. VertexOutput DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  1276. {
  1277. VertexInput o = (VertexInput) 0;
  1278. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  1279. o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z;
  1280. o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z;
  1281. o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z;
  1282. o.ase_texcoord = patch[0].ase_texcoord * bary.x + patch[1].ase_texcoord * bary.y + patch[2].ase_texcoord * bary.z;
  1283. #if defined(ASE_PHONG_TESSELLATION)
  1284. float3 pp[3];
  1285. for (int i = 0; i < 3; ++i)
  1286. pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal));
  1287. float phongStrength = _TessPhongStrength;
  1288. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  1289. #endif
  1290. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  1291. return VertexFunction(o);
  1292. }
  1293. #else
  1294. VertexOutput vert ( VertexInput v )
  1295. {
  1296. return VertexFunction( v );
  1297. }
  1298. #endif
  1299. half4 frag(VertexOutput IN ) : SV_TARGET
  1300. {
  1301. UNITY_SETUP_INSTANCE_ID(IN);
  1302. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN );
  1303. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  1304. float3 WorldPosition = IN.worldPos;
  1305. #endif
  1306. float4 ShadowCoords = float4( 0, 0, 0, 0 );
  1307. #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1308. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
  1309. ShadowCoords = IN.shadowCoord;
  1310. #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS)
  1311. ShadowCoords = TransformWorldToShadowCoord( WorldPosition );
  1312. #endif
  1313. #endif
  1314. float4 localBreakRGBA115 = ( float4( 0,0,0,0 ) );
  1315. float2 uv_Control = IN.ase_texcoord2.xy * _Control_ST.xy + _Control_ST.zw;
  1316. float4 tex2DNode6 = tex2D( _Control, uv_Control );
  1317. float4 Weight144 = tex2DNode6;
  1318. float2 uv_Splat0 = IN.ase_texcoord2.xy * _Splat0_ST.xy + _Splat0_ST.zw;
  1319. float4 appendResult123 = (float4(1.0 , 1.0 , 1.0 , _Smoothness0));
  1320. float4 Layer1144 = ( tex2D( _Splat0, uv_Splat0 ) * appendResult123 );
  1321. float2 uv_Splat1 = IN.ase_texcoord2.xy * _Splat1_ST.xy + _Splat1_ST.zw;
  1322. float4 appendResult126 = (float4(1.0 , 1.0 , 1.0 , _Smoothness1));
  1323. float4 Layer2144 = ( tex2D( _Splat1, uv_Splat1 ) * appendResult126 );
  1324. float2 uv_Splat2 = IN.ase_texcoord2.xy * _Splat2_ST.xy + _Splat2_ST.zw;
  1325. float4 appendResult129 = (float4(1.0 , 1.0 , 1.0 , _Smoothness2));
  1326. float4 Layer3144 = ( tex2D( _Splat2, uv_Splat2 ) * appendResult129 );
  1327. float4 localWeightedBlend3144 = WeightedBlend3144( Weight144 , Layer1144 , Layer2144 , Layer3144 );
  1328. float4 RGBA115 = localWeightedBlend3144;
  1329. float3 RGB115 = float3( 0,0,0 );
  1330. float A115 = 0;
  1331. {
  1332. RGB115 = RGBA115.rgb;
  1333. A115 = RGBA115.a;
  1334. }
  1335. float3 Albedo = RGB115;
  1336. float3 Emission = 0;
  1337. float Alpha = 1;
  1338. float AlphaClipThreshold = 0.5;
  1339. #ifdef _ALPHATEST_ON
  1340. clip(Alpha - AlphaClipThreshold);
  1341. #endif
  1342. MetaInput metaInput = (MetaInput)0;
  1343. metaInput.Albedo = Albedo;
  1344. metaInput.Emission = Emission;
  1345. return MetaFragment(metaInput);
  1346. }
  1347. ENDHLSL
  1348. }
  1349. Pass
  1350. {
  1351. Name "Universal2D"
  1352. Tags { "LightMode"="Universal2D" }
  1353. Blend One Zero, One Zero
  1354. ZWrite On
  1355. ZTest LEqual
  1356. Offset 0 , 0
  1357. ColorMask RGBA
  1358. HLSLPROGRAM
  1359. #define _SPECULAR_SETUP 1
  1360. #define _NORMAL_DROPOFF_TS 1
  1361. #pragma multi_compile_instancing
  1362. #pragma multi_compile _ LOD_FADE_CROSSFADE
  1363. #pragma multi_compile_fog
  1364. #define ASE_FOG 1
  1365. #define _NORMALMAP 1
  1366. #define ASE_SRP_VERSION 100500
  1367. #pragma vertex vert
  1368. #pragma fragment frag
  1369. #define SHADERPASS_2D
  1370. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  1371. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
  1372. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
  1373. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl"
  1374. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
  1375. #pragma shader_feature_local SMOOTHNESS_TEXTURE
  1376. #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  1377. struct VertexInput
  1378. {
  1379. float4 vertex : POSITION;
  1380. float3 ase_normal : NORMAL;
  1381. float4 ase_texcoord : TEXCOORD0;
  1382. UNITY_VERTEX_INPUT_INSTANCE_ID
  1383. };
  1384. struct VertexOutput
  1385. {
  1386. float4 clipPos : SV_POSITION;
  1387. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  1388. float3 worldPos : TEXCOORD0;
  1389. #endif
  1390. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1391. float4 shadowCoord : TEXCOORD1;
  1392. #endif
  1393. float4 ase_texcoord2 : TEXCOORD2;
  1394. UNITY_VERTEX_INPUT_INSTANCE_ID
  1395. UNITY_VERTEX_OUTPUT_STEREO
  1396. };
  1397. CBUFFER_START(UnityPerMaterial)
  1398. float4 _Control_ST;
  1399. float4 _Splat0_ST;
  1400. float4 _Splat1_ST;
  1401. float4 _Splat2_ST;
  1402. float4 _SpecularColor;
  1403. float _Smoothness0;
  1404. float _Smoothness1;
  1405. float _Smoothness2;
  1406. float _NormalIntensity0;
  1407. float _NormalIntensity1;
  1408. float _NormalIntensity2;
  1409. #ifdef _TRANSMISSION_ASE
  1410. float _TransmissionShadow;
  1411. #endif
  1412. #ifdef _TRANSLUCENCY_ASE
  1413. float _TransStrength;
  1414. float _TransNormal;
  1415. float _TransScattering;
  1416. float _TransDirect;
  1417. float _TransAmbient;
  1418. float _TransShadow;
  1419. #endif
  1420. #ifdef TESSELLATION_ON
  1421. float _TessPhongStrength;
  1422. float _TessValue;
  1423. float _TessMin;
  1424. float _TessMax;
  1425. float _TessEdgeLength;
  1426. float _TessMaxDisp;
  1427. #endif
  1428. CBUFFER_END
  1429. sampler2D _Control;
  1430. sampler2D _Splat0;
  1431. sampler2D _Splat1;
  1432. sampler2D _Splat2;
  1433. float4 WeightedBlend3144( half4 Weight, float4 Layer1, float4 Layer2, float4 Layer3 )
  1434. {
  1435. return Layer1 * Weight.r + Layer2 * Weight.g + Layer3 * Weight.b;
  1436. }
  1437. VertexOutput VertexFunction( VertexInput v )
  1438. {
  1439. VertexOutput o = (VertexOutput)0;
  1440. UNITY_SETUP_INSTANCE_ID( v );
  1441. UNITY_TRANSFER_INSTANCE_ID( v, o );
  1442. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o );
  1443. o.ase_texcoord2.xy = v.ase_texcoord.xy;
  1444. //setting value to unused interpolator channels and avoid initialization warnings
  1445. o.ase_texcoord2.zw = 0;
  1446. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1447. float3 defaultVertexValue = v.vertex.xyz;
  1448. #else
  1449. float3 defaultVertexValue = float3(0, 0, 0);
  1450. #endif
  1451. float3 vertexValue = defaultVertexValue;
  1452. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1453. v.vertex.xyz = vertexValue;
  1454. #else
  1455. v.vertex.xyz += vertexValue;
  1456. #endif
  1457. v.ase_normal = v.ase_normal;
  1458. float3 positionWS = TransformObjectToWorld( v.vertex.xyz );
  1459. float4 positionCS = TransformWorldToHClip( positionWS );
  1460. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  1461. o.worldPos = positionWS;
  1462. #endif
  1463. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1464. VertexPositionInputs vertexInput = (VertexPositionInputs)0;
  1465. vertexInput.positionWS = positionWS;
  1466. vertexInput.positionCS = positionCS;
  1467. o.shadowCoord = GetShadowCoord( vertexInput );
  1468. #endif
  1469. o.clipPos = positionCS;
  1470. return o;
  1471. }
  1472. #if defined(TESSELLATION_ON)
  1473. struct VertexControl
  1474. {
  1475. float4 vertex : INTERNALTESSPOS;
  1476. float3 ase_normal : NORMAL;
  1477. float4 ase_texcoord : TEXCOORD0;
  1478. UNITY_VERTEX_INPUT_INSTANCE_ID
  1479. };
  1480. struct TessellationFactors
  1481. {
  1482. float edge[3] : SV_TessFactor;
  1483. float inside : SV_InsideTessFactor;
  1484. };
  1485. VertexControl vert ( VertexInput v )
  1486. {
  1487. VertexControl o;
  1488. UNITY_SETUP_INSTANCE_ID(v);
  1489. UNITY_TRANSFER_INSTANCE_ID(v, o);
  1490. o.vertex = v.vertex;
  1491. o.ase_normal = v.ase_normal;
  1492. o.ase_texcoord = v.ase_texcoord;
  1493. return o;
  1494. }
  1495. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  1496. {
  1497. TessellationFactors o;
  1498. float4 tf = 1;
  1499. float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
  1500. float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
  1501. #if defined(ASE_FIXED_TESSELLATION)
  1502. tf = FixedTess( tessValue );
  1503. #elif defined(ASE_DISTANCE_TESSELLATION)
  1504. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
  1505. #elif defined(ASE_LENGTH_TESSELLATION)
  1506. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
  1507. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  1508. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  1509. #endif
  1510. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  1511. return o;
  1512. }
  1513. [domain("tri")]
  1514. [partitioning("fractional_odd")]
  1515. [outputtopology("triangle_cw")]
  1516. [patchconstantfunc("TessellationFunction")]
  1517. [outputcontrolpoints(3)]
  1518. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  1519. {
  1520. return patch[id];
  1521. }
  1522. [domain("tri")]
  1523. VertexOutput DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  1524. {
  1525. VertexInput o = (VertexInput) 0;
  1526. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  1527. o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z;
  1528. o.ase_texcoord = patch[0].ase_texcoord * bary.x + patch[1].ase_texcoord * bary.y + patch[2].ase_texcoord * bary.z;
  1529. #if defined(ASE_PHONG_TESSELLATION)
  1530. float3 pp[3];
  1531. for (int i = 0; i < 3; ++i)
  1532. pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal));
  1533. float phongStrength = _TessPhongStrength;
  1534. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  1535. #endif
  1536. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  1537. return VertexFunction(o);
  1538. }
  1539. #else
  1540. VertexOutput vert ( VertexInput v )
  1541. {
  1542. return VertexFunction( v );
  1543. }
  1544. #endif
  1545. half4 frag(VertexOutput IN ) : SV_TARGET
  1546. {
  1547. UNITY_SETUP_INSTANCE_ID( IN );
  1548. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN );
  1549. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  1550. float3 WorldPosition = IN.worldPos;
  1551. #endif
  1552. float4 ShadowCoords = float4( 0, 0, 0, 0 );
  1553. #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1554. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
  1555. ShadowCoords = IN.shadowCoord;
  1556. #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS)
  1557. ShadowCoords = TransformWorldToShadowCoord( WorldPosition );
  1558. #endif
  1559. #endif
  1560. float4 localBreakRGBA115 = ( float4( 0,0,0,0 ) );
  1561. float2 uv_Control = IN.ase_texcoord2.xy * _Control_ST.xy + _Control_ST.zw;
  1562. float4 tex2DNode6 = tex2D( _Control, uv_Control );
  1563. float4 Weight144 = tex2DNode6;
  1564. float2 uv_Splat0 = IN.ase_texcoord2.xy * _Splat0_ST.xy + _Splat0_ST.zw;
  1565. float4 appendResult123 = (float4(1.0 , 1.0 , 1.0 , _Smoothness0));
  1566. float4 Layer1144 = ( tex2D( _Splat0, uv_Splat0 ) * appendResult123 );
  1567. float2 uv_Splat1 = IN.ase_texcoord2.xy * _Splat1_ST.xy + _Splat1_ST.zw;
  1568. float4 appendResult126 = (float4(1.0 , 1.0 , 1.0 , _Smoothness1));
  1569. float4 Layer2144 = ( tex2D( _Splat1, uv_Splat1 ) * appendResult126 );
  1570. float2 uv_Splat2 = IN.ase_texcoord2.xy * _Splat2_ST.xy + _Splat2_ST.zw;
  1571. float4 appendResult129 = (float4(1.0 , 1.0 , 1.0 , _Smoothness2));
  1572. float4 Layer3144 = ( tex2D( _Splat2, uv_Splat2 ) * appendResult129 );
  1573. float4 localWeightedBlend3144 = WeightedBlend3144( Weight144 , Layer1144 , Layer2144 , Layer3144 );
  1574. float4 RGBA115 = localWeightedBlend3144;
  1575. float3 RGB115 = float3( 0,0,0 );
  1576. float A115 = 0;
  1577. {
  1578. RGB115 = RGBA115.rgb;
  1579. A115 = RGBA115.a;
  1580. }
  1581. float3 Albedo = RGB115;
  1582. float Alpha = 1;
  1583. float AlphaClipThreshold = 0.5;
  1584. half4 color = half4( Albedo, Alpha );
  1585. #ifdef _ALPHATEST_ON
  1586. clip(Alpha - AlphaClipThreshold);
  1587. #endif
  1588. return color;
  1589. }
  1590. ENDHLSL
  1591. }
  1592. Pass
  1593. {
  1594. Name "DepthNormals"
  1595. Tags { "LightMode"="DepthNormals" }
  1596. ZWrite On
  1597. Blend One Zero
  1598. ZTest LEqual
  1599. ZWrite On
  1600. HLSLPROGRAM
  1601. #define _SPECULAR_SETUP 1
  1602. #define _NORMAL_DROPOFF_TS 1
  1603. #pragma multi_compile_instancing
  1604. #pragma multi_compile _ LOD_FADE_CROSSFADE
  1605. #pragma multi_compile_fog
  1606. #define ASE_FOG 1
  1607. #define _NORMALMAP 1
  1608. #define ASE_SRP_VERSION 100500
  1609. #pragma vertex vert
  1610. #pragma fragment frag
  1611. #define SHADERPASS_DEPTHNORMALSONLY
  1612. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  1613. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
  1614. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
  1615. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
  1616. #pragma shader_feature_local SMOOTHNESS_TEXTURE
  1617. struct VertexInput
  1618. {
  1619. float4 vertex : POSITION;
  1620. float3 ase_normal : NORMAL;
  1621. UNITY_VERTEX_INPUT_INSTANCE_ID
  1622. };
  1623. struct VertexOutput
  1624. {
  1625. float4 clipPos : SV_POSITION;
  1626. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  1627. float3 worldPos : TEXCOORD0;
  1628. #endif
  1629. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1630. float4 shadowCoord : TEXCOORD1;
  1631. #endif
  1632. float3 worldNormal : TEXCOORD2;
  1633. UNITY_VERTEX_INPUT_INSTANCE_ID
  1634. UNITY_VERTEX_OUTPUT_STEREO
  1635. };
  1636. CBUFFER_START(UnityPerMaterial)
  1637. float4 _Control_ST;
  1638. float4 _Splat0_ST;
  1639. float4 _Splat1_ST;
  1640. float4 _Splat2_ST;
  1641. float4 _SpecularColor;
  1642. float _Smoothness0;
  1643. float _Smoothness1;
  1644. float _Smoothness2;
  1645. float _NormalIntensity0;
  1646. float _NormalIntensity1;
  1647. float _NormalIntensity2;
  1648. #ifdef _TRANSMISSION_ASE
  1649. float _TransmissionShadow;
  1650. #endif
  1651. #ifdef _TRANSLUCENCY_ASE
  1652. float _TransStrength;
  1653. float _TransNormal;
  1654. float _TransScattering;
  1655. float _TransDirect;
  1656. float _TransAmbient;
  1657. float _TransShadow;
  1658. #endif
  1659. #ifdef TESSELLATION_ON
  1660. float _TessPhongStrength;
  1661. float _TessValue;
  1662. float _TessMin;
  1663. float _TessMax;
  1664. float _TessEdgeLength;
  1665. float _TessMaxDisp;
  1666. #endif
  1667. CBUFFER_END
  1668. VertexOutput VertexFunction( VertexInput v )
  1669. {
  1670. VertexOutput o = (VertexOutput)0;
  1671. UNITY_SETUP_INSTANCE_ID(v);
  1672. UNITY_TRANSFER_INSTANCE_ID(v, o);
  1673. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  1674. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1675. float3 defaultVertexValue = v.vertex.xyz;
  1676. #else
  1677. float3 defaultVertexValue = float3(0, 0, 0);
  1678. #endif
  1679. float3 vertexValue = defaultVertexValue;
  1680. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1681. v.vertex.xyz = vertexValue;
  1682. #else
  1683. v.vertex.xyz += vertexValue;
  1684. #endif
  1685. v.ase_normal = v.ase_normal;
  1686. float3 positionWS = TransformObjectToWorld( v.vertex.xyz );
  1687. float3 normalWS = TransformObjectToWorldNormal( v.ase_normal );
  1688. float4 positionCS = TransformWorldToHClip( positionWS );
  1689. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  1690. o.worldPos = positionWS;
  1691. #endif
  1692. o.worldNormal = normalWS;
  1693. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1694. VertexPositionInputs vertexInput = (VertexPositionInputs)0;
  1695. vertexInput.positionWS = positionWS;
  1696. vertexInput.positionCS = positionCS;
  1697. o.shadowCoord = GetShadowCoord( vertexInput );
  1698. #endif
  1699. o.clipPos = positionCS;
  1700. return o;
  1701. }
  1702. #if defined(TESSELLATION_ON)
  1703. struct VertexControl
  1704. {
  1705. float4 vertex : INTERNALTESSPOS;
  1706. float3 ase_normal : NORMAL;
  1707. UNITY_VERTEX_INPUT_INSTANCE_ID
  1708. };
  1709. struct TessellationFactors
  1710. {
  1711. float edge[3] : SV_TessFactor;
  1712. float inside : SV_InsideTessFactor;
  1713. };
  1714. VertexControl vert ( VertexInput v )
  1715. {
  1716. VertexControl o;
  1717. UNITY_SETUP_INSTANCE_ID(v);
  1718. UNITY_TRANSFER_INSTANCE_ID(v, o);
  1719. o.vertex = v.vertex;
  1720. o.ase_normal = v.ase_normal;
  1721. return o;
  1722. }
  1723. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  1724. {
  1725. TessellationFactors o;
  1726. float4 tf = 1;
  1727. float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
  1728. float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
  1729. #if defined(ASE_FIXED_TESSELLATION)
  1730. tf = FixedTess( tessValue );
  1731. #elif defined(ASE_DISTANCE_TESSELLATION)
  1732. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
  1733. #elif defined(ASE_LENGTH_TESSELLATION)
  1734. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
  1735. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  1736. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  1737. #endif
  1738. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  1739. return o;
  1740. }
  1741. [domain("tri")]
  1742. [partitioning("fractional_odd")]
  1743. [outputtopology("triangle_cw")]
  1744. [patchconstantfunc("TessellationFunction")]
  1745. [outputcontrolpoints(3)]
  1746. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  1747. {
  1748. return patch[id];
  1749. }
  1750. [domain("tri")]
  1751. VertexOutput DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  1752. {
  1753. VertexInput o = (VertexInput) 0;
  1754. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  1755. o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z;
  1756. #if defined(ASE_PHONG_TESSELLATION)
  1757. float3 pp[3];
  1758. for (int i = 0; i < 3; ++i)
  1759. pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal));
  1760. float phongStrength = _TessPhongStrength;
  1761. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  1762. #endif
  1763. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  1764. return VertexFunction(o);
  1765. }
  1766. #else
  1767. VertexOutput vert ( VertexInput v )
  1768. {
  1769. return VertexFunction( v );
  1770. }
  1771. #endif
  1772. #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE)
  1773. #define ASE_SV_DEPTH SV_DepthLessEqual
  1774. #else
  1775. #define ASE_SV_DEPTH SV_Depth
  1776. #endif
  1777. half4 frag( VertexOutput IN
  1778. #ifdef ASE_DEPTH_WRITE_ON
  1779. ,out float outputDepth : ASE_SV_DEPTH
  1780. #endif
  1781. ) : SV_TARGET
  1782. {
  1783. UNITY_SETUP_INSTANCE_ID(IN);
  1784. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN );
  1785. #if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
  1786. float3 WorldPosition = IN.worldPos;
  1787. #endif
  1788. float4 ShadowCoords = float4( 0, 0, 0, 0 );
  1789. #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1790. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
  1791. ShadowCoords = IN.shadowCoord;
  1792. #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS)
  1793. ShadowCoords = TransformWorldToShadowCoord( WorldPosition );
  1794. #endif
  1795. #endif
  1796. float Alpha = 1;
  1797. float AlphaClipThreshold = 0.5;
  1798. #ifdef ASE_DEPTH_WRITE_ON
  1799. float DepthValue = 0;
  1800. #endif
  1801. #ifdef _ALPHATEST_ON
  1802. clip(Alpha - AlphaClipThreshold);
  1803. #endif
  1804. #ifdef LOD_FADE_CROSSFADE
  1805. LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x );
  1806. #endif
  1807. #ifdef ASE_DEPTH_WRITE_ON
  1808. outputDepth = DepthValue;
  1809. #endif
  1810. return float4(PackNormalOctRectEncode(TransformWorldToViewDir(IN.worldNormal, true)), 0.0, 0.0);
  1811. }
  1812. ENDHLSL
  1813. }
  1814. Pass
  1815. {
  1816. Name "GBuffer"
  1817. Tags { "LightMode"="UniversalGBuffer" }
  1818. Blend One Zero, One Zero
  1819. ZWrite On
  1820. ZTest LEqual
  1821. Offset 0 , 0
  1822. ColorMask RGBA
  1823. HLSLPROGRAM
  1824. #define _SPECULAR_SETUP 1
  1825. #define _NORMAL_DROPOFF_TS 1
  1826. #pragma multi_compile_instancing
  1827. #pragma multi_compile _ LOD_FADE_CROSSFADE
  1828. #pragma multi_compile_fog
  1829. #define ASE_FOG 1
  1830. #define _NORMALMAP 1
  1831. #define ASE_SRP_VERSION 100500
  1832. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS
  1833. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
  1834. #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
  1835. #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS
  1836. #pragma multi_compile _ _SHADOWS_SOFT
  1837. #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE
  1838. #pragma multi_compile _ _GBUFFER_NORMALS_OCT
  1839. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  1840. #pragma multi_compile _ LIGHTMAP_ON
  1841. #pragma vertex vert
  1842. #pragma fragment frag
  1843. #define SHADERPASS SHADERPASS_GBUFFER
  1844. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  1845. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
  1846. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
  1847. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl"
  1848. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
  1849. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl"
  1850. #if ASE_SRP_VERSION <= 70108
  1851. #define REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR
  1852. #endif
  1853. #if defined(UNITY_INSTANCING_ENABLED) && defined(_TERRAIN_INSTANCED_PERPIXEL_NORMAL)
  1854. #define ENABLE_TERRAIN_PERPIXEL_NORMAL
  1855. #endif
  1856. #pragma shader_feature_local SMOOTHNESS_TEXTURE
  1857. #pragma shader_feature_local ENABLE_NORMAL_INTENSITY
  1858. struct VertexInput
  1859. {
  1860. float4 vertex : POSITION;
  1861. float3 ase_normal : NORMAL;
  1862. float4 ase_tangent : TANGENT;
  1863. float4 texcoord1 : TEXCOORD1;
  1864. float4 texcoord : TEXCOORD0;
  1865. UNITY_VERTEX_INPUT_INSTANCE_ID
  1866. };
  1867. struct VertexOutput
  1868. {
  1869. float4 clipPos : SV_POSITION;
  1870. float4 lightmapUVOrVertexSH : TEXCOORD0;
  1871. half4 fogFactorAndVertexLight : TEXCOORD1;
  1872. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
  1873. float4 shadowCoord : TEXCOORD2;
  1874. #endif
  1875. float4 tSpace0 : TEXCOORD3;
  1876. float4 tSpace1 : TEXCOORD4;
  1877. float4 tSpace2 : TEXCOORD5;
  1878. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  1879. float4 screenPos : TEXCOORD6;
  1880. #endif
  1881. float4 ase_texcoord7 : TEXCOORD7;
  1882. UNITY_VERTEX_INPUT_INSTANCE_ID
  1883. UNITY_VERTEX_OUTPUT_STEREO
  1884. };
  1885. CBUFFER_START(UnityPerMaterial)
  1886. float4 _Control_ST;
  1887. float4 _Splat0_ST;
  1888. float4 _Splat1_ST;
  1889. float4 _Splat2_ST;
  1890. float4 _SpecularColor;
  1891. float _Smoothness0;
  1892. float _Smoothness1;
  1893. float _Smoothness2;
  1894. float _NormalIntensity0;
  1895. float _NormalIntensity1;
  1896. float _NormalIntensity2;
  1897. #ifdef _TRANSMISSION_ASE
  1898. float _TransmissionShadow;
  1899. #endif
  1900. #ifdef _TRANSLUCENCY_ASE
  1901. float _TransStrength;
  1902. float _TransNormal;
  1903. float _TransScattering;
  1904. float _TransDirect;
  1905. float _TransAmbient;
  1906. float _TransShadow;
  1907. #endif
  1908. #ifdef TESSELLATION_ON
  1909. float _TessPhongStrength;
  1910. float _TessValue;
  1911. float _TessMin;
  1912. float _TessMax;
  1913. float _TessEdgeLength;
  1914. float _TessMaxDisp;
  1915. #endif
  1916. CBUFFER_END
  1917. sampler2D _Control;
  1918. sampler2D _Splat0;
  1919. sampler2D _Splat1;
  1920. sampler2D _Splat2;
  1921. sampler2D _Normal0;
  1922. sampler2D _Normal1;
  1923. sampler2D _Normal2;
  1924. float4 WeightedBlend3144( half4 Weight, float4 Layer1, float4 Layer2, float4 Layer3 )
  1925. {
  1926. return Layer1 * Weight.r + Layer2 * Weight.g + Layer3 * Weight.b;
  1927. }
  1928. inline float3 MTE_NormalIntensity_fixed146( float3 Normal, float Strength )
  1929. {
  1930. return lerp(Normal, float3(0,0,1), - Strength + 1.0);
  1931. }
  1932. inline float3 MTE_NormalIntensity_fixed149( float3 Normal, float Strength )
  1933. {
  1934. return lerp(Normal, float3(0,0,1), - Strength + 1.0);
  1935. }
  1936. inline float3 MTE_NormalIntensity_fixed152( float3 Normal, float Strength )
  1937. {
  1938. return lerp(Normal, float3(0,0,1), - Strength + 1.0);
  1939. }
  1940. float4 WeightedBlend389( half4 Weight, float4 Layer1, float4 Layer2, float4 Layer3 )
  1941. {
  1942. return Layer1 * Weight.r + Layer2 * Weight.g + Layer3 * Weight.b;
  1943. }
  1944. VertexOutput VertexFunction( VertexInput v )
  1945. {
  1946. VertexOutput o = (VertexOutput)0;
  1947. UNITY_SETUP_INSTANCE_ID(v);
  1948. UNITY_TRANSFER_INSTANCE_ID(v, o);
  1949. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  1950. o.ase_texcoord7.xy = v.texcoord.xy;
  1951. //setting value to unused interpolator channels and avoid initialization warnings
  1952. o.ase_texcoord7.zw = 0;
  1953. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1954. float3 defaultVertexValue = v.vertex.xyz;
  1955. #else
  1956. float3 defaultVertexValue = float3(0, 0, 0);
  1957. #endif
  1958. float3 vertexValue = defaultVertexValue;
  1959. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1960. v.vertex.xyz = vertexValue;
  1961. #else
  1962. v.vertex.xyz += vertexValue;
  1963. #endif
  1964. v.ase_normal = v.ase_normal;
  1965. float3 positionWS = TransformObjectToWorld( v.vertex.xyz );
  1966. float3 positionVS = TransformWorldToView( positionWS );
  1967. float4 positionCS = TransformWorldToHClip( positionWS );
  1968. VertexNormalInputs normalInput = GetVertexNormalInputs( v.ase_normal, v.ase_tangent );
  1969. o.tSpace0 = float4( normalInput.normalWS, positionWS.x);
  1970. o.tSpace1 = float4( normalInput.tangentWS, positionWS.y);
  1971. o.tSpace2 = float4( normalInput.bitangentWS, positionWS.z);
  1972. OUTPUT_LIGHTMAP_UV( v.texcoord1, unity_LightmapST, o.lightmapUVOrVertexSH.xy );
  1973. OUTPUT_SH( normalInput.normalWS.xyz, o.lightmapUVOrVertexSH.xyz );
  1974. #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL)
  1975. o.lightmapUVOrVertexSH.zw = v.texcoord;
  1976. o.lightmapUVOrVertexSH.xy = v.texcoord * unity_LightmapST.xy + unity_LightmapST.zw;
  1977. #endif
  1978. half3 vertexLight = VertexLighting( positionWS, normalInput.normalWS );
  1979. #ifdef ASE_FOG
  1980. half fogFactor = ComputeFogFactor( positionCS.z );
  1981. #else
  1982. half fogFactor = 0;
  1983. #endif
  1984. o.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
  1985. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
  1986. VertexPositionInputs vertexInput = (VertexPositionInputs)0;
  1987. vertexInput.positionWS = positionWS;
  1988. vertexInput.positionCS = positionCS;
  1989. o.shadowCoord = GetShadowCoord( vertexInput );
  1990. #endif
  1991. o.clipPos = positionCS;
  1992. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  1993. o.screenPos = ComputeScreenPos(positionCS);
  1994. #endif
  1995. return o;
  1996. }
  1997. #if defined(TESSELLATION_ON)
  1998. struct VertexControl
  1999. {
  2000. float4 vertex : INTERNALTESSPOS;
  2001. float3 ase_normal : NORMAL;
  2002. float4 ase_tangent : TANGENT;
  2003. float4 texcoord : TEXCOORD0;
  2004. float4 texcoord1 : TEXCOORD1;
  2005. UNITY_VERTEX_INPUT_INSTANCE_ID
  2006. };
  2007. struct TessellationFactors
  2008. {
  2009. float edge[3] : SV_TessFactor;
  2010. float inside : SV_InsideTessFactor;
  2011. };
  2012. VertexControl vert ( VertexInput v )
  2013. {
  2014. VertexControl o;
  2015. UNITY_SETUP_INSTANCE_ID(v);
  2016. UNITY_TRANSFER_INSTANCE_ID(v, o);
  2017. o.vertex = v.vertex;
  2018. o.ase_normal = v.ase_normal;
  2019. o.ase_tangent = v.ase_tangent;
  2020. o.texcoord = v.texcoord;
  2021. o.texcoord1 = v.texcoord1;
  2022. return o;
  2023. }
  2024. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  2025. {
  2026. TessellationFactors o;
  2027. float4 tf = 1;
  2028. float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
  2029. float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
  2030. #if defined(ASE_FIXED_TESSELLATION)
  2031. tf = FixedTess( tessValue );
  2032. #elif defined(ASE_DISTANCE_TESSELLATION)
  2033. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
  2034. #elif defined(ASE_LENGTH_TESSELLATION)
  2035. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
  2036. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  2037. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  2038. #endif
  2039. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  2040. return o;
  2041. }
  2042. [domain("tri")]
  2043. [partitioning("fractional_odd")]
  2044. [outputtopology("triangle_cw")]
  2045. [patchconstantfunc("TessellationFunction")]
  2046. [outputcontrolpoints(3)]
  2047. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  2048. {
  2049. return patch[id];
  2050. }
  2051. [domain("tri")]
  2052. VertexOutput DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  2053. {
  2054. VertexInput o = (VertexInput) 0;
  2055. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  2056. o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z;
  2057. o.ase_tangent = patch[0].ase_tangent * bary.x + patch[1].ase_tangent * bary.y + patch[2].ase_tangent * bary.z;
  2058. o.texcoord = patch[0].texcoord * bary.x + patch[1].texcoord * bary.y + patch[2].texcoord * bary.z;
  2059. o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z;
  2060. #if defined(ASE_PHONG_TESSELLATION)
  2061. float3 pp[3];
  2062. for (int i = 0; i < 3; ++i)
  2063. pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal));
  2064. float phongStrength = _TessPhongStrength;
  2065. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  2066. #endif
  2067. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  2068. return VertexFunction(o);
  2069. }
  2070. #else
  2071. VertexOutput vert ( VertexInput v )
  2072. {
  2073. return VertexFunction( v );
  2074. }
  2075. #endif
  2076. #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE)
  2077. #define ASE_SV_DEPTH SV_DepthLessEqual
  2078. #else
  2079. #define ASE_SV_DEPTH SV_Depth
  2080. #endif
  2081. FragmentOutput frag ( VertexOutput IN
  2082. #ifdef ASE_DEPTH_WRITE_ON
  2083. ,out float outputDepth : ASE_SV_DEPTH
  2084. #endif
  2085. )
  2086. {
  2087. UNITY_SETUP_INSTANCE_ID(IN);
  2088. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN);
  2089. #ifdef LOD_FADE_CROSSFADE
  2090. LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x );
  2091. #endif
  2092. #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL)
  2093. float2 sampleCoords = (IN.lightmapUVOrVertexSH.zw / _TerrainHeightmapRecipSize.zw + 0.5f) * _TerrainHeightmapRecipSize.xy;
  2094. float3 WorldNormal = TransformObjectToWorldNormal(normalize(SAMPLE_TEXTURE2D(_TerrainNormalmapTexture, sampler_TerrainNormalmapTexture, sampleCoords).rgb * 2 - 1));
  2095. float3 WorldTangent = -cross(GetObjectToWorldMatrix()._13_23_33, WorldNormal);
  2096. float3 WorldBiTangent = cross(WorldNormal, -WorldTangent);
  2097. #else
  2098. float3 WorldNormal = normalize( IN.tSpace0.xyz );
  2099. float3 WorldTangent = IN.tSpace1.xyz;
  2100. float3 WorldBiTangent = IN.tSpace2.xyz;
  2101. #endif
  2102. float3 WorldPosition = float3(IN.tSpace0.w,IN.tSpace1.w,IN.tSpace2.w);
  2103. float3 WorldViewDirection = _WorldSpaceCameraPos.xyz - WorldPosition;
  2104. float4 ShadowCoords = float4( 0, 0, 0, 0 );
  2105. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  2106. float4 ScreenPos = IN.screenPos;
  2107. #endif
  2108. #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
  2109. ShadowCoords = IN.shadowCoord;
  2110. #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS)
  2111. ShadowCoords = TransformWorldToShadowCoord( WorldPosition );
  2112. #endif
  2113. WorldViewDirection = SafeNormalize( WorldViewDirection );
  2114. float4 localBreakRGBA115 = ( float4( 0,0,0,0 ) );
  2115. float2 uv_Control = IN.ase_texcoord7.xy * _Control_ST.xy + _Control_ST.zw;
  2116. float4 tex2DNode6 = tex2D( _Control, uv_Control );
  2117. float4 Weight144 = tex2DNode6;
  2118. float2 uv_Splat0 = IN.ase_texcoord7.xy * _Splat0_ST.xy + _Splat0_ST.zw;
  2119. float4 appendResult123 = (float4(1.0 , 1.0 , 1.0 , _Smoothness0));
  2120. float4 Layer1144 = ( tex2D( _Splat0, uv_Splat0 ) * appendResult123 );
  2121. float2 uv_Splat1 = IN.ase_texcoord7.xy * _Splat1_ST.xy + _Splat1_ST.zw;
  2122. float4 appendResult126 = (float4(1.0 , 1.0 , 1.0 , _Smoothness1));
  2123. float4 Layer2144 = ( tex2D( _Splat1, uv_Splat1 ) * appendResult126 );
  2124. float2 uv_Splat2 = IN.ase_texcoord7.xy * _Splat2_ST.xy + _Splat2_ST.zw;
  2125. float4 appendResult129 = (float4(1.0 , 1.0 , 1.0 , _Smoothness2));
  2126. float4 Layer3144 = ( tex2D( _Splat2, uv_Splat2 ) * appendResult129 );
  2127. float4 localWeightedBlend3144 = WeightedBlend3144( Weight144 , Layer1144 , Layer2144 , Layer3144 );
  2128. float4 RGBA115 = localWeightedBlend3144;
  2129. float3 RGB115 = float3( 0,0,0 );
  2130. float A115 = 0;
  2131. {
  2132. RGB115 = RGBA115.rgb;
  2133. A115 = RGBA115.a;
  2134. }
  2135. float4 Weight89 = tex2DNode6;
  2136. float3 tex2DNode16 = UnpackNormalScale( tex2D( _Normal0, uv_Splat0 ), 1.0f );
  2137. float3 Normal146 = tex2DNode16;
  2138. float Strength146 = _NormalIntensity0;
  2139. float3 localMTE_NormalIntensity_fixed146 = MTE_NormalIntensity_fixed146( Normal146 , Strength146 );
  2140. #ifdef ENABLE_NORMAL_INTENSITY
  2141. float3 staticSwitch147 = localMTE_NormalIntensity_fixed146;
  2142. #else
  2143. float3 staticSwitch147 = tex2DNode16;
  2144. #endif
  2145. float4 Layer189 = float4( staticSwitch147 , 0.0 );
  2146. float3 tex2DNode39 = UnpackNormalScale( tex2D( _Normal1, uv_Splat1 ), 1.0f );
  2147. float3 Normal149 = tex2DNode39;
  2148. float Strength149 = _NormalIntensity1;
  2149. float3 localMTE_NormalIntensity_fixed149 = MTE_NormalIntensity_fixed149( Normal149 , Strength149 );
  2150. #ifdef ENABLE_NORMAL_INTENSITY
  2151. float3 staticSwitch150 = localMTE_NormalIntensity_fixed149;
  2152. #else
  2153. float3 staticSwitch150 = tex2DNode39;
  2154. #endif
  2155. float4 Layer289 = float4( staticSwitch150 , 0.0 );
  2156. float3 tex2DNode44 = UnpackNormalScale( tex2D( _Normal2, uv_Splat2 ), 1.0f );
  2157. float3 Normal152 = tex2DNode44;
  2158. float Strength152 = _NormalIntensity2;
  2159. float3 localMTE_NormalIntensity_fixed152 = MTE_NormalIntensity_fixed152( Normal152 , Strength152 );
  2160. #ifdef ENABLE_NORMAL_INTENSITY
  2161. float3 staticSwitch153 = localMTE_NormalIntensity_fixed152;
  2162. #else
  2163. float3 staticSwitch153 = tex2DNode44;
  2164. #endif
  2165. float4 Layer389 = float4( staticSwitch153 , 0.0 );
  2166. float4 localWeightedBlend389 = WeightedBlend389( Weight89 , Layer189 , Layer289 , Layer389 );
  2167. float3 Albedo = RGB115;
  2168. float3 Normal = localWeightedBlend389.xyz;
  2169. float3 Emission = 0;
  2170. float3 Specular = _SpecularColor.rgb;
  2171. float Metallic = 0;
  2172. float Smoothness = A115;
  2173. float Occlusion = 1;
  2174. float Alpha = 1;
  2175. float AlphaClipThreshold = 0.5;
  2176. float AlphaClipThresholdShadow = 0.5;
  2177. float3 BakedGI = 0;
  2178. float3 RefractionColor = 1;
  2179. float RefractionIndex = 1;
  2180. float3 Transmission = 1;
  2181. float3 Translucency = 1;
  2182. #ifdef ASE_DEPTH_WRITE_ON
  2183. float DepthValue = 0;
  2184. #endif
  2185. #ifdef _ALPHATEST_ON
  2186. clip(Alpha - AlphaClipThreshold);
  2187. #endif
  2188. InputData inputData;
  2189. inputData.positionWS = WorldPosition;
  2190. inputData.viewDirectionWS = WorldViewDirection;
  2191. inputData.shadowCoord = ShadowCoords;
  2192. #ifdef _NORMALMAP
  2193. #if _NORMAL_DROPOFF_TS
  2194. inputData.normalWS = TransformTangentToWorld(Normal, half3x3( WorldTangent, WorldBiTangent, WorldNormal ));
  2195. #elif _NORMAL_DROPOFF_OS
  2196. inputData.normalWS = TransformObjectToWorldNormal(Normal);
  2197. #elif _NORMAL_DROPOFF_WS
  2198. inputData.normalWS = Normal;
  2199. #endif
  2200. inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS);
  2201. #else
  2202. inputData.normalWS = WorldNormal;
  2203. #endif
  2204. #ifdef ASE_FOG
  2205. inputData.fogCoord = IN.fogFactorAndVertexLight.x;
  2206. #endif
  2207. inputData.vertexLighting = IN.fogFactorAndVertexLight.yzw;
  2208. #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL)
  2209. float3 SH = SampleSH(inputData.normalWS.xyz);
  2210. #else
  2211. float3 SH = IN.lightmapUVOrVertexSH.xyz;
  2212. #endif
  2213. inputData.bakedGI = SAMPLE_GI( IN.lightmapUVOrVertexSH.xy, SH, inputData.normalWS );
  2214. #ifdef _ASE_BAKEDGI
  2215. inputData.bakedGI = BakedGI;
  2216. #endif
  2217. BRDFData brdfData;
  2218. InitializeBRDFData( Albedo, Metallic, Specular, Smoothness, Alpha, brdfData);
  2219. half4 color;
  2220. color.rgb = GlobalIllumination( brdfData, inputData.bakedGI, Occlusion, inputData.normalWS, inputData.viewDirectionWS);
  2221. color.a = Alpha;
  2222. #ifdef _TRANSMISSION_ASE
  2223. {
  2224. float shadow = _TransmissionShadow;
  2225. Light mainLight = GetMainLight( inputData.shadowCoord );
  2226. float3 mainAtten = mainLight.color * mainLight.distanceAttenuation;
  2227. mainAtten = lerp( mainAtten, mainAtten * mainLight.shadowAttenuation, shadow );
  2228. half3 mainTransmission = max(0 , -dot(inputData.normalWS, mainLight.direction)) * mainAtten * Transmission;
  2229. color.rgb += Albedo * mainTransmission;
  2230. #ifdef _ADDITIONAL_LIGHTS
  2231. int transPixelLightCount = GetAdditionalLightsCount();
  2232. for (int i = 0; i < transPixelLightCount; ++i)
  2233. {
  2234. Light light = GetAdditionalLight(i, inputData.positionWS);
  2235. float3 atten = light.color * light.distanceAttenuation;
  2236. atten = lerp( atten, atten * light.shadowAttenuation, shadow );
  2237. half3 transmission = max(0 , -dot(inputData.normalWS, light.direction)) * atten * Transmission;
  2238. color.rgb += Albedo * transmission;
  2239. }
  2240. #endif
  2241. }
  2242. #endif
  2243. #ifdef _TRANSLUCENCY_ASE
  2244. {
  2245. float shadow = _TransShadow;
  2246. float normal = _TransNormal;
  2247. float scattering = _TransScattering;
  2248. float direct = _TransDirect;
  2249. float ambient = _TransAmbient;
  2250. float strength = _TransStrength;
  2251. Light mainLight = GetMainLight( inputData.shadowCoord );
  2252. float3 mainAtten = mainLight.color * mainLight.distanceAttenuation;
  2253. mainAtten = lerp( mainAtten, mainAtten * mainLight.shadowAttenuation, shadow );
  2254. half3 mainLightDir = mainLight.direction + inputData.normalWS * normal;
  2255. half mainVdotL = pow( saturate( dot( inputData.viewDirectionWS, -mainLightDir ) ), scattering );
  2256. half3 mainTranslucency = mainAtten * ( mainVdotL * direct + inputData.bakedGI * ambient ) * Translucency;
  2257. color.rgb += Albedo * mainTranslucency * strength;
  2258. #ifdef _ADDITIONAL_LIGHTS
  2259. int transPixelLightCount = GetAdditionalLightsCount();
  2260. for (int i = 0; i < transPixelLightCount; ++i)
  2261. {
  2262. Light light = GetAdditionalLight(i, inputData.positionWS);
  2263. float3 atten = light.color * light.distanceAttenuation;
  2264. atten = lerp( atten, atten * light.shadowAttenuation, shadow );
  2265. half3 lightDir = light.direction + inputData.normalWS * normal;
  2266. half VdotL = pow( saturate( dot( inputData.viewDirectionWS, -lightDir ) ), scattering );
  2267. half3 translucency = atten * ( VdotL * direct + inputData.bakedGI * ambient ) * Translucency;
  2268. color.rgb += Albedo * translucency * strength;
  2269. }
  2270. #endif
  2271. }
  2272. #endif
  2273. #ifdef _REFRACTION_ASE
  2274. float4 projScreenPos = ScreenPos / ScreenPos.w;
  2275. float3 refractionOffset = ( RefractionIndex - 1.0 ) * mul( UNITY_MATRIX_V, float4( WorldNormal, 0 ) ).xyz * ( 1.0 - dot( WorldNormal, WorldViewDirection ) );
  2276. projScreenPos.xy += refractionOffset.xy;
  2277. float3 refraction = SHADERGRAPH_SAMPLE_SCENE_COLOR( projScreenPos.xy ) * RefractionColor;
  2278. color.rgb = lerp( refraction, color.rgb, color.a );
  2279. color.a = 1;
  2280. #endif
  2281. #ifdef ASE_FINAL_COLOR_ALPHA_MULTIPLY
  2282. color.rgb *= color.a;
  2283. #endif
  2284. #ifdef ASE_FOG
  2285. #ifdef TERRAIN_SPLAT_ADDPASS
  2286. color.rgb = MixFogColor(color.rgb, half3( 0, 0, 0 ), IN.fogFactorAndVertexLight.x );
  2287. #else
  2288. color.rgb = MixFog(color.rgb, IN.fogFactorAndVertexLight.x);
  2289. #endif
  2290. #endif
  2291. #ifdef ASE_DEPTH_WRITE_ON
  2292. outputDepth = DepthValue;
  2293. #endif
  2294. return BRDFDataToGbuffer(brdfData, inputData, Smoothness, Emission + color.rgb);
  2295. }
  2296. ENDHLSL
  2297. }
  2298. }
  2299. CustomEditor "MTE.MTEShaderGUI"
  2300. Fallback "Hidden/InternalErrorShader"
  2301. }
  2302. /*ASEBEGIN
  2303. Version=18927
  2304. 640;93;1329;899;187.4921;796.735;1;True;False
  2305. Node;AmplifyShaderEditor.TexturePropertyNode;37;-1644.116,-562.9706;Float;True;Property;_Splat1;Layer 2;1;0;Create;False;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1
  2306. Node;AmplifyShaderEditor.TexturePropertyNode;19;-1654.834,-945.6718;Float;True;Property;_Splat0;Layer 1;0;0;Create;False;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1
  2307. Node;AmplifyShaderEditor.TexturePropertyNode;41;-1642.848,-129.2168;Float;True;Property;_Splat2;Layer 3;2;0;Create;False;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1
  2308. Node;AmplifyShaderEditor.TexturePropertyNode;103;-1635.359,-1358.877;Float;True;Property;_Control;Control;13;0;Create;True;0;0;0;False;0;False;None;8de744a27d7e04243b05ab8f3ae22805;False;white;Auto;Texture2D;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1
  2309. Node;AmplifyShaderEditor.TextureCoordinatesNode;28;-1366.124,-928.462;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2310. Node;AmplifyShaderEditor.RangedFloatNode;57;-1116.138,-464.2166;Float;False;Property;_Smoothness1;Smoothness 2;10;0;Create;False;0;0;0;False;0;False;0.5;0.366;0;1;0;1;FLOAT;0
  2311. Node;AmplifyShaderEditor.TextureCoordinatesNode;42;-1370.47,-39.30476;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2312. Node;AmplifyShaderEditor.RangedFloatNode;59;-1096.556,44.96426;Float;False;Property;_Smoothness2;Smoothness 3;12;0;Create;False;0;0;0;False;0;False;0.5;0.59;0;1;0;1;FLOAT;0
  2313. Node;AmplifyShaderEditor.TextureCoordinatesNode;40;-1390.519,-501.1515;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2314. Node;AmplifyShaderEditor.RangedFloatNode;54;-1121.69,-946.0693;Float;False;Property;_Smoothness0;Smoothness 1;9;0;Create;False;0;0;0;False;0;False;0.5;0.5784118;0;1;0;1;FLOAT;0
  2315. Node;AmplifyShaderEditor.RangedFloatNode;145;-836.373,-765.2899;Inherit;False;Property;_NormalIntensity0;Normal Intensity 1;15;0;Create;False;0;0;0;False;0;False;1;0;0.01;10;0;1;FLOAT;0
  2316. Node;AmplifyShaderEditor.RangedFloatNode;148;-835.5266,-262.4114;Inherit;False;Property;_NormalIntensity1;Normal Intensity 2;16;0;Create;False;0;0;0;False;0;False;1;0;0.01;10;0;1;FLOAT;0
  2317. Node;AmplifyShaderEditor.SamplerNode;16;-1129.263,-866.5981;Inherit;True;Property;_Normal0;Normalmap 1;3;0;Create;False;0;0;0;False;0;False;-1;None;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2318. Node;AmplifyShaderEditor.DynamicAppendNode;129;-808.5327,-33.82042;Inherit;False;FLOAT4;4;0;FLOAT;1;False;1;FLOAT;1;False;2;FLOAT;1;False;3;FLOAT;0;False;1;FLOAT4;0
  2319. Node;AmplifyShaderEditor.SamplerNode;38;-1116.809,-655.905;Inherit;True;Property;_TextureSample1;Texture Sample 1;0;0;Create;True;0;0;0;False;0;False;-1;None;44b550da39bfea448a4be6b25b1b626c;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2320. Node;AmplifyShaderEditor.RangedFloatNode;151;-812.6137,237.3764;Inherit;False;Property;_NormalIntensity2;Normal Intensity 3;17;0;Create;False;0;0;0;False;0;False;1;0;0.01;10;0;1;FLOAT;0
  2321. Node;AmplifyShaderEditor.SamplerNode;44;-1097.987,131.5944;Inherit;True;Property;_Normal2;Normalmap 3;5;0;Create;False;0;0;0;False;0;False;-1;None;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2322. Node;AmplifyShaderEditor.SamplerNode;43;-1108.139,-160.4059;Inherit;True;Property;_TextureSample3;Texture Sample 3;0;0;Create;True;0;0;0;False;0;False;-1;None;44b550da39bfea448a4be6b25b1b626c;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2323. Node;AmplifyShaderEditor.DynamicAppendNode;123;-832.7972,-1031.363;Inherit;False;FLOAT4;4;0;FLOAT;1;False;1;FLOAT;1;False;2;FLOAT;1;False;3;FLOAT;0;False;1;FLOAT4;0
  2324. Node;AmplifyShaderEditor.SamplerNode;39;-1119.519,-373.9468;Inherit;True;Property;_Normal1;Normalmap 2;4;0;Create;False;0;0;0;False;0;False;-1;None;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2325. Node;AmplifyShaderEditor.SamplerNode;5;-1134.41,-1133.135;Inherit;True;Property;_Splat0;Splat0;0;0;Create;True;0;0;0;False;0;False;37;None;1b02b6db1c381424d925b8bac11cacb1;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2326. Node;AmplifyShaderEditor.TextureCoordinatesNode;104;-1381.158,-1291.34;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2327. Node;AmplifyShaderEditor.DynamicAppendNode;126;-824.8046,-534.9642;Inherit;False;FLOAT4;4;0;FLOAT;1;False;1;FLOAT;1;False;2;FLOAT;1;False;3;FLOAT;0;False;1;FLOAT4;0
  2328. Node;AmplifyShaderEditor.SamplerNode;6;-1133.791,-1356.361;Inherit;True;Property;_CC;CC;1;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;black;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2329. Node;AmplifyShaderEditor.CustomExpressionNode;152;-538.8872,218.7422;Inherit;False; lerp(Normal, float3(0,0,1), - Strength + 1.0);3;Create;2;True;Normal;FLOAT3;0,0,0;In;;Inherit;False;True;Strength;FLOAT;1;In;;Inherit;False;MTE_NormalIntensity_fixed;True;False;0;;False;2;0;FLOAT3;0,0,0;False;1;FLOAT;1;False;1;FLOAT3;0
  2330. Node;AmplifyShaderEditor.SimpleMultiplyOpNode;125;-706.6159,-1080.008;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT4;0,0,0,0;False;1;COLOR;0
  2331. Node;AmplifyShaderEditor.CustomExpressionNode;149;-561.8004,-281.0458;Inherit;False; lerp(Normal, float3(0,0,1), - Strength + 1.0);3;Create;2;True;Normal;FLOAT3;0,0,0;In;;Inherit;False;True;Strength;FLOAT;1;In;;Inherit;False;MTE_NormalIntensity_fixed;True;False;0;;False;2;0;FLOAT3;0,0,0;False;1;FLOAT;1;False;1;FLOAT3;0
  2332. Node;AmplifyShaderEditor.CustomExpressionNode;146;-575.618,-792.1788;Inherit;False; lerp(Normal, float3(0,0,1), - Strength + 1.0);3;Create;2;True;Normal;FLOAT3;0,0,0;In;;Inherit;False;True;Strength;FLOAT;1;In;;Inherit;False;MTE_NormalIntensity_fixed;True;False;0;;False;2;0;FLOAT3;0,0,0;False;1;FLOAT;1;False;1;FLOAT3;0
  2333. Node;AmplifyShaderEditor.SimpleMultiplyOpNode;127;-694.8233,-589.3093;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT4;0,0,0,0;False;1;COLOR;0
  2334. Node;AmplifyShaderEditor.SimpleMultiplyOpNode;128;-659.7041,-78.93899;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT4;0,0,0,0;False;1;COLOR;0
  2335. Node;AmplifyShaderEditor.CommentaryNode;141;9.410235,137.5466;Inherit;False;651.571;333.6749;Comment;5;136;53;58;56;137;Metaillic (not used);0.5882353,0.5882353,0.5921569,1;0;0
  2336. Node;AmplifyShaderEditor.CommentaryNode;154;201.5767,-942.2943;Inherit;False;332;155;Required by MTE shader UI. Don't Delete.;1;155;;1,1,1,1;0;0
  2337. Node;AmplifyShaderEditor.StaticSwitch;153;-332.5536,125.6619;Inherit;False;Property;ENABLE_NORMAL_INTENSITY;Normal Intensity;14;0;Create;False;0;0;0;False;0;False;0;1;1;True;ENABLE_NORMAL_INTENSITY;Toggle;2;Key0;Key1;Create;True;False;9;1;FLOAT3;0,0,0;False;0;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT3;0,0,0;False;4;FLOAT3;0,0,0;False;5;FLOAT3;0,0,0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT3;0,0,0;False;1;FLOAT3;0
  2338. Node;AmplifyShaderEditor.CustomExpressionNode;144;38.80801,-638.1572;Float;False;return Layer1 * Weight.r + Layer2 * Weight.g + Layer3 * Weight.b@;4;Create;4;True;Weight;FLOAT4;0,0,0,0;In;float[5];Half;False;True;Layer1;FLOAT4;0,0,0,0;In;;Float;False;True;Layer2;FLOAT4;0,0,0,0;In;;Float;False;True;Layer3;FLOAT4;0,0,0,0;In;;Float;False;Weighted Blend 3;True;False;0;;False;4;0;FLOAT4;0,0,0,0;False;1;FLOAT4;0,0,0,0;False;2;FLOAT4;0,0,0,0;False;3;FLOAT4;0,0,0,0;False;1;FLOAT4;0
  2339. Node;AmplifyShaderEditor.StaticSwitch;147;-377.538,-866.3924;Inherit;False;Property;ENABLE_NORMAL_INTENSITY;Normal Intensity;14;0;Create;False;0;0;0;False;0;False;0;1;1;True;ENABLE_NORMAL_INTENSITY;Toggle;2;Key0;Key1;Create;True;False;9;1;FLOAT3;0,0,0;False;0;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT3;0,0,0;False;4;FLOAT3;0,0,0;False;5;FLOAT3;0,0,0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT3;0,0,0;False;1;FLOAT3;0
  2340. Node;AmplifyShaderEditor.StaticSwitch;150;-354.0601,-375.4467;Inherit;False;Property;ENABLE_NORMAL_INTENSITY;Normal Intensity;14;0;Create;False;0;0;0;False;0;False;0;1;1;True;ENABLE_NORMAL_INTENSITY;Toggle;2;Key0;Key1;Create;True;False;9;1;FLOAT3;0,0,0;False;0;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT3;0,0,0;False;4;FLOAT3;0,0,0;False;5;FLOAT3;0,0,0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT3;0,0,0;False;1;FLOAT3;0
  2341. Node;AmplifyShaderEditor.RangedFloatNode;56;59.41038,278.7716;Float;False;Property;_Metallic1;Metallic 2;7;1;[Gamma];Create;False;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
  2342. Node;AmplifyShaderEditor.DotProductOpNode;136;530.3508,226.5837;Inherit;False;2;0;COLOR;0,0,0,0;False;1;FLOAT4;0,0,0,0;False;1;FLOAT;0
  2343. Node;AmplifyShaderEditor.StaticSwitch;155;243.7972,-899.2726;Inherit;False;Property;SMOOTHNESS_TEXTURE;Smoothness Texture;11;0;Create;False;0;0;0;True;0;False;0;0;0;True;SMOOTHNESS_TEXTURE;Toggle;2;Key0;Key1;Create;True;False;9;1;FLOAT3;0,0,0;False;0;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT3;0,0,0;False;4;FLOAT3;0,0,0;False;5;FLOAT3;0,0,0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT3;0,0,0;False;1;FLOAT3;0
  2344. Node;AmplifyShaderEditor.DynamicAppendNode;137;382.8748,247.894;Inherit;False;FLOAT4;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT4;0
  2345. Node;AmplifyShaderEditor.RangedFloatNode;53;62.91047,187.5476;Float;False;Property;_Metallic0;Metallic 1;6;1;[Gamma];Create;False;0;0;0;False;0;False;0;0.6331881;0;1;0;1;FLOAT;0
  2346. Node;AmplifyShaderEditor.RangedFloatNode;58;65.50288,357.9968;Float;False;Property;_Metallic2;Metallic 3;8;1;[Gamma];Create;False;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
  2347. Node;AmplifyShaderEditor.CustomExpressionNode;89;36.41405,-423.2212;Float;False;return Layer1 * Weight.r + Layer2 * Weight.g + Layer3 * Weight.b@;4;Create;4;True;Weight;FLOAT4;0,0,0,0;In;float[5];Half;False;True;Layer1;FLOAT4;0,0,0,0;In;;Float;False;True;Layer2;FLOAT4;0,0,0,0;In;;Float;False;True;Layer3;FLOAT4;0,0,0,0;In;;Float;False;Weighted Blend 3;True;False;0;;False;4;0;FLOAT4;0,0,0,0;False;1;FLOAT4;0,0,0,0;False;2;FLOAT4;0,0,0,0;False;3;FLOAT4;0,0,0,0;False;1;FLOAT4;0
  2348. Node;AmplifyShaderEditor.CustomExpressionNode;115;240.8831,-661.2213;Inherit;False;RGB = RGBA.rgb@$A = RGBA.a@;7;Create;3;True;RGBA;FLOAT4;0,0,0,0;In;;Inherit;False;True;RGB;FLOAT3;0,0,0;Out;;Inherit;False;True;A;FLOAT;0;Out;;Inherit;False;BreakRGBA;False;False;0;;False;4;0;FLOAT4;0,0,0,0;False;1;FLOAT4;0,0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT;0;False;3;FLOAT4;0;FLOAT3;3;FLOAT;4
  2349. Node;AmplifyShaderEditor.ColorNode;160;238.5079,-329.735;Inherit;False;Property;_SpecularColor;SpecularColor;18;0;Create;True;0;0;0;False;0;False;0,0,0,0;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
  2350. Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;157;471.1956,-570.4278;Float;False;False;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;DepthNormals;0;6;DepthNormals;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;0;True;17;d3d9;d3d11;glcore;gles;gles3;metal;vulkan;xbox360;xboxone;xboxseries;ps4;playstation;psp2;n3ds;wiiu;switch;nomrt;0;False;True;1;1;False;-1;0;False;-1;0;1;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;False;-1;True;3;False;-1;False;True;1;LightMode=DepthNormals;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0
  2351. Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;112;240.7755,-183.3562;Float;False;False;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;Meta;0;4;Meta;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;0;True;17;d3d9;d3d11;glcore;gles;gles3;metal;vulkan;xbox360;xboxone;xboxseries;ps4;playstation;psp2;n3ds;wiiu;switch;nomrt;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Meta;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0
  2352. Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;109;471.1956,-630.4278;Float;False;True;-1;2;MTE.MTEShaderGUI;0;2;MTE/URP/3 Textures;94348b07e5e8bab40bd6c8a1e3df54cd;True;Forward;0;1;Forward;18;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;2;True;17;d3d9;d3d11;glcore;gles;gles3;metal;vulkan;xbox360;xboxone;xboxseries;ps4;playstation;psp2;n3ds;wiiu;switch;nomrt;0;False;True;1;1;False;-1;0;False;-1;1;1;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;1;False;-1;True;3;False;-1;True;True;0;False;-1;0;False;-1;True;1;LightMode=UniversalForward;False;False;0;Hidden/InternalErrorShader;0;0;Standard;38;Workflow;0;Surface;0; Refraction Model;0; Blend;0;Two Sided;1;Fragment Normal Space,InvertActionOnDeselection;0;Transmission;0; Transmission Shadow;0.5,False,-1;Translucency;0; Translucency Strength;1,False,-1; Normal Distortion;0.5,False,-1; Scattering;2,False,-1; Direct;0.9,False,-1; Ambient;0.1,False,-1; Shadow;0.5,False,-1;Cast Shadows;1; Use Shadow Threshold;0;Receive Shadows;1;GPU Instancing;1;LOD CrossFade;1;Built-in Fog;1;_FinalColorxAlpha;0;Meta Pass;1;Override Baked GI;0;Extra Pre Pass;0;DOTS Instancing;0;Tessellation;0; Phong;0; Strength;0.5,False,-1; Type;0; Tess;16,False,-1; Min;10,False,-1; Max;25,False,-1; Edge Length;16,False,-1; Max Displacement;25,False,-1;Write Depth;0; Early Z;0;Vertex Position,InvertActionOnDeselection;1;0;8;False;True;True;True;True;True;True;True;False;;False;0
  2353. Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;113;240.7755,-183.3562;Float;False;False;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;Universal2D;0;5;Universal2D;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;0;True;17;d3d9;d3d11;glcore;gles;gles3;metal;vulkan;xbox360;xboxone;xboxseries;ps4;playstation;psp2;n3ds;wiiu;switch;nomrt;0;False;True;1;1;False;-1;0;False;-1;1;1;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;False;False;True;1;False;-1;True;3;False;-1;True;True;0;False;-1;0;False;-1;True;1;LightMode=Universal2D;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0
  2354. Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;108;322.1638,-214.9387;Float;False;False;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;ExtraPrePass;0;0;ExtraPrePass;5;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;0;True;17;d3d9;d3d11;glcore;gles;gles3;metal;vulkan;xbox360;xboxone;xboxseries;ps4;playstation;psp2;n3ds;wiiu;switch;nomrt;0;False;True;1;1;False;-1;0;False;-1;0;1;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;1;False;-1;True;3;False;-1;True;True;0;False;-1;0;False;-1;True;0;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0
  2355. Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;111;240.7755,-183.3562;Float;False;False;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;DepthOnly;0;3;DepthOnly;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;0;True;17;d3d9;d3d11;glcore;gles;gles3;metal;vulkan;xbox360;xboxone;xboxseries;ps4;playstation;psp2;n3ds;wiiu;switch;nomrt;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;False;False;True;False;False;False;False;0;False;-1;False;False;False;False;False;False;False;False;False;True;1;False;-1;False;False;True;1;LightMode=DepthOnly;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0
  2356. Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;110;240.7755,-183.3562;Float;False;False;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;ShadowCaster;0;2;ShadowCaster;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;0;True;17;d3d9;d3d11;glcore;gles;gles3;metal;vulkan;xbox360;xboxone;xboxseries;ps4;playstation;psp2;n3ds;wiiu;switch;nomrt;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;False;False;True;False;False;False;False;0;False;-1;False;False;False;False;False;False;False;False;False;True;1;False;-1;True;3;False;-1;False;True;1;LightMode=ShadowCaster;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0
  2357. Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;158;471.1956,-570.4278;Float;False;False;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;GBuffer;0;7;GBuffer;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;0;True;17;d3d9;d3d11;glcore;gles;gles3;metal;vulkan;xbox360;xboxone;xboxseries;ps4;playstation;psp2;n3ds;wiiu;switch;nomrt;0;False;True;1;1;False;-1;0;False;-1;1;1;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;1;False;-1;True;3;False;-1;True;True;0;False;-1;0;False;-1;True;1;LightMode=UniversalGBuffer;False;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0
  2358. WireConnection;28;2;19;0
  2359. WireConnection;42;2;41;0
  2360. WireConnection;40;2;37;0
  2361. WireConnection;16;1;28;0
  2362. WireConnection;129;3;59;0
  2363. WireConnection;38;0;37;0
  2364. WireConnection;38;1;40;0
  2365. WireConnection;44;1;42;0
  2366. WireConnection;43;0;41;0
  2367. WireConnection;43;1;42;0
  2368. WireConnection;123;3;54;0
  2369. WireConnection;39;1;40;0
  2370. WireConnection;5;0;19;0
  2371. WireConnection;5;1;28;0
  2372. WireConnection;104;2;103;0
  2373. WireConnection;126;3;57;0
  2374. WireConnection;6;0;103;0
  2375. WireConnection;6;1;104;0
  2376. WireConnection;152;0;44;0
  2377. WireConnection;152;1;151;0
  2378. WireConnection;125;0;5;0
  2379. WireConnection;125;1;123;0
  2380. WireConnection;149;0;39;0
  2381. WireConnection;149;1;148;0
  2382. WireConnection;146;0;16;0
  2383. WireConnection;146;1;145;0
  2384. WireConnection;127;0;38;0
  2385. WireConnection;127;1;126;0
  2386. WireConnection;128;0;43;0
  2387. WireConnection;128;1;129;0
  2388. WireConnection;153;1;44;0
  2389. WireConnection;153;0;152;0
  2390. WireConnection;144;0;6;0
  2391. WireConnection;144;1;125;0
  2392. WireConnection;144;2;127;0
  2393. WireConnection;144;3;128;0
  2394. WireConnection;147;1;16;0
  2395. WireConnection;147;0;146;0
  2396. WireConnection;150;1;39;0
  2397. WireConnection;150;0;149;0
  2398. WireConnection;136;0;6;0
  2399. WireConnection;136;1;137;0
  2400. WireConnection;137;0;53;0
  2401. WireConnection;137;1;56;0
  2402. WireConnection;137;2;58;0
  2403. WireConnection;89;0;6;0
  2404. WireConnection;89;1;147;0
  2405. WireConnection;89;2;150;0
  2406. WireConnection;89;3;153;0
  2407. WireConnection;115;1;144;0
  2408. WireConnection;109;0;115;3
  2409. WireConnection;109;1;89;0
  2410. WireConnection;109;9;160;0
  2411. WireConnection;109;4;115;4
  2412. ASEEND*/
  2413. //CHKSM=C3AB6B29D9C5341A0CEBA17C0B9AF64E943A2B18