4Textures_height_blend_packed.shader 111 KB

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