Lit.shader 83 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302
  1. Shader /*ase_name*/ "Hidden/Legacy/Lit" /*end*/
  2. {
  3. Properties
  4. {
  5. /*ase_props*/
  6. //_TransmissionShadow( "Transmission Shadow", Range( 0, 1 ) ) = 0.5
  7. //_TransStrength( "Trans Strength", Range( 0, 50 ) ) = 1
  8. //_TransNormal( "Trans Normal Distortion", Range( 0, 1 ) ) = 0.5
  9. //_TransScattering( "Trans Scattering", Range( 1, 50 ) ) = 2
  10. //_TransDirect( "Trans Direct", Range( 0, 1 ) ) = 0.9
  11. //_TransAmbient( "Trans Ambient", Range( 0, 1 ) ) = 0.1
  12. //_TransShadow( "Trans Shadow", Range( 0, 1 ) ) = 0.5
  13. //_TessPhongStrength( "Tess Phong Strength", Range( 0, 1 ) ) = 0.5
  14. //_TessValue( "Tess Max Tessellation", Range( 1, 32 ) ) = 16
  15. //_TessMin( "Tess Min Distance", Float ) = 10
  16. //_TessMax( "Tess Max Distance", Float ) = 25
  17. //_TessEdgeLength ( "Tess Edge length", Range( 2, 50 ) ) = 16
  18. //_TessMaxDisp( "Tess Max Displacement", Float ) = 25
  19. //_SpecularHighlights("Specular Highlights", Float) = 1.0
  20. //_GlossyReflections("Reflections", Float) = 1.0
  21. }
  22. SubShader
  23. {
  24. /*ase_subshader_options:Name=Additional Options
  25. Option:Workflow,InvertActionOnDeselection:Specular,Metallic:Metallic
  26. Metallic:ShowPort:Metallic
  27. Specular:ShowPort:Specular
  28. Specular:SetDefine:_SPECULAR_SETUP 1
  29. Option:Surface:Opaque,Transparent:Opaque
  30. Opaque:SetPropertyOnSubShader:RenderType,Opaque
  31. Opaque:SetPropertyOnSubShader:RenderQueue,Geometry
  32. Opaque:SetPropertyOnSubShader:ZWrite,On
  33. Opaque:HideOption: Blend
  34. Opaque:HideOption: Dither Shadows
  35. Opaque:HideOption: Refraction Model
  36. Transparent:SetPropertyOnSubShader:RenderType,Transparent
  37. Transparent:SetPropertyOnSubShader:RenderQueue,Transparent
  38. Transparent:SetPropertyOnSubShader:ZWrite,Off
  39. Transparent:ShowOption: Blend
  40. Transparent:ShowOption: Dither Shadows
  41. Transparent:ShowOption: Refraction Model
  42. Option: Blend:Alpha,Premultiply,Additive,Multiply,Translucent,Custom:Alpha
  43. Alpha:SetPropertyOnPass:ForwardBase:BlendRGB,SrcAlpha,OneMinusSrcAlpha
  44. Alpha:SetPropertyOnPass:ForwardAdd:BlendRGB,SrcAlpha,One
  45. Alpha:SetDefine:_ALPHABLEND_ON 1
  46. Premultiply:SetPropertyOnPass:ForwardBase:BlendRGB,One,OneMinusSrcAlpha
  47. disable,Premultiply,Additive,Multiply,Translucent,Custom:SetPropertyOnPass:ForwardAdd:BlendRGB,One,One
  48. Premultiply:SetDefine:_ALPHAPREMULTIPLY_ON 1
  49. Additive:SetPropertyOnPass:ForwardBase:BlendRGB,One,One
  50. Multiply:SetPropertyOnPass:ForwardBase:BlendRGB,DstColor,Zero
  51. disable,Premultiply,Additive,Multiply,Translucent,Custom:RemoveDefine:_ALPHABLEND_ON 1
  52. disable,Alpha,Additive,Multiply,Translucent,Custom:RemoveDefine:_ALPHAPREMULTIPLY_ON 1
  53. disable,Translucent:SetPropertyOnPass:ForwardBase:BlendRGB,One,Zero
  54. Option: Refraction Model:None:None
  55. None,disable:HidePort:ForwardBase:Refraction Index
  56. None,disable:HidePort:ForwardBase:Refraction Color
  57. None,disable:RemoveDefine:ASE_REFRACTION 1
  58. None,disable:RemoveDefine:ASE_NEEDS_FRAG_SCREEN_POSITION
  59. Legacy:ShowPort:ForwardBase:Refraction Index
  60. Legacy:ShowPort:ForwardBase:Refraction Color
  61. Legacy:SetDefine:ASE_REFRACTION 1
  62. Legacy:SetDefine:ASE_NEEDS_FRAG_SCREEN_POSITION
  63. Option: Dither Shadows:false,true:true
  64. true:SetDefine:UNITY_STANDARD_USE_DITHER_MASK 1
  65. false,disable:RemoveDefine:UNITY_STANDARD_USE_DITHER_MASK 1
  66. Option:Two Sided:On,Cull Back,Cull Front:Cull Back
  67. On:SetPropertyOnSubShader:CullMode,Off
  68. Cull Back:SetPropertyOnSubShader:CullMode,Back
  69. Cull Front:SetPropertyOnSubShader:CullMode,Front
  70. Option:Deferred Pass:false,true:true
  71. true:IncludePass:Deferred
  72. false:ExcludePass:Deferred
  73. Option:Transmission:false,true:false
  74. false:RemoveDefine:ASE_TRANSMISSION 1
  75. false:HidePort:ForwardBase:Transmission
  76. false:HideOption: Transmission Shadow
  77. true:SetDefine:ASE_TRANSMISSION 1
  78. true:ShowPort:ForwardBase:Transmission
  79. true:ShowOption: Transmission Shadow
  80. true:SetOption:Deferred Pass,0
  81. Field: Transmission Shadow:Float:0.5:0:1:_TransmissionShadow
  82. Change:SetMaterialProperty:_TransmissionShadow
  83. Change:SetShaderProperty:_TransmissionShadow,_TransmissionShadow( "Transmission Shadow", Range( 0, 1 ) ) = 0.5
  84. Inline,disable:SetShaderProperty:_TransmissionShadow,//_TransmissionShadow( "Transmission Shadow", Range( 0, 1 ) ) = 0.5
  85. Option:Translucency:false,true:false
  86. false:RemoveDefine:ASE_TRANSLUCENCY 1
  87. false:HidePort:ForwardBase:Translucency
  88. false:HideOption: Translucency Strength
  89. false:HideOption: Normal Distortion
  90. false:HideOption: Scattering
  91. false:HideOption: Direct
  92. false:HideOption: Ambient
  93. false:HideOption: Shadow
  94. true:SetDefine:ASE_TRANSLUCENCY 1
  95. true:ShowPort:ForwardBase:Translucency
  96. true:ShowOption: Translucency Strength
  97. true:ShowOption: Normal Distortion
  98. true:ShowOption: Scattering
  99. true:ShowOption: Direct
  100. true:ShowOption: Ambient
  101. true:ShowOption: Shadow
  102. true:SetOption:Deferred Pass,0
  103. Field: Translucency Strength:Float:1:0:50:_TransStrength
  104. Change:SetMaterialProperty:_TransStrength
  105. Change:SetShaderProperty:_TransStrength,_TransStrength( "Strength", Range( 0, 50 ) ) = 1
  106. Inline,disable:SetShaderProperty:_TransStrength,//_TransStrength( "Strength", Range( 0, 50 ) ) = 1
  107. Field: Normal Distortion:Float:0.5:0:1:_TransNormal
  108. Change:SetMaterialProperty:_TransNormal
  109. Change:SetShaderProperty:_TransNormal,_TransNormal( "Normal Distortion", Range( 0, 1 ) ) = 0.5
  110. Inline,disable:SetShaderProperty:_TransNormal,//_TransNormal( "Normal Distortion", Range( 0, 1 ) ) = 0.5
  111. Field: Scattering:Float:2:1:50:_TransScattering
  112. Change:SetMaterialProperty:_TransScattering
  113. Change:SetShaderProperty:_TransScattering,_TransScattering( "Scattering", Range( 1, 50 ) ) = 2
  114. Inline,disable:SetShaderProperty:_TransScattering,//_TransScattering( "Scattering", Range( 1, 50 ) ) = 2
  115. Field: Direct:Float:0.9:0:1:_TransDirect
  116. Change:SetMaterialProperty:_TransDirect
  117. Change:SetShaderProperty:_TransDirect,_TransDirect( "Direct", Range( 0, 1 ) ) = 0.9
  118. Inline,disable:SetShaderProperty:_TransDirect,//_TransDirect( "Direct", Range( 0, 1 ) ) = 0.9
  119. Field: Ambient:Float:0.1:0:1:_TransAmbient
  120. Change:SetMaterialProperty:_TransAmbient
  121. Change:SetShaderProperty:_TransAmbient,_TransAmbient( "Ambient", Range( 0, 1 ) ) = 0.1
  122. Inline,disable:SetShaderProperty:_TransAmbient,//_TransAmbient( "Ambient", Range( 0, 1 ) ) = 0.1
  123. Field: Shadow:Float:0.5:0:1:_TransShadow
  124. Change:SetMaterialProperty:_TransShadow
  125. Change:SetShaderProperty:_TransShadow,_TransShadow( "Shadow", Range( 0, 1 ) ) = 0.5
  126. Inline,disable:SetShaderProperty:_TransShadow,//_TransShadow( "Shadow", Range( 0, 1 ) ) = 0.5
  127. Option:Cast Shadows:false,true:true
  128. true:IncludePass:ShadowCaster
  129. false,disable:ExcludePass:ShadowCaster
  130. true:ShowOption: Use Shadow Threshold
  131. false:HideOption: Use Shadow Threshold
  132. Option: Use Shadow Threshold:false,true:false
  133. true:ShowPort:ForwardBase:Alpha Clip Threshold Shadow
  134. false,disable:HidePort:ForwardBase:Alpha Clip Threshold Shadow
  135. Option:Receive Shadows:false,true:true
  136. true:SetDefine:ASE_NEEDS_FRAG_SHADOWCOORDS
  137. false:RemoveDefine:ASE_NEEDS_FRAG_SHADOWCOORDS
  138. Option:GPU Instancing:false,true:true
  139. true:SetDefine:pragma multi_compile_instancing
  140. false:RemoveDefine:pragma multi_compile_instancing
  141. Option:LOD CrossFade:false,true:true
  142. true:SetDefine:pragma multi_compile __ LOD_FADE_CROSSFADE
  143. false:RemoveDefine:pragma multi_compile __ LOD_FADE_CROSSFADE
  144. Option:Built-in Fog:false,true:true
  145. true:SetDefine:pragma multi_compile_fog
  146. false:RemoveDefine:pragma multi_compile_fog
  147. true:SetDefine:ASE_FOG 1
  148. false:RemoveDefine:ASE_FOG 1
  149. Option:Ambient Light:false,true:true
  150. true:RemoveDefine:ASE_NO_AMBIENT 1
  151. false:SetDefine:ASE_NO_AMBIENT 1
  152. Option:Meta Pass:false,true:true
  153. true:IncludePass:Meta
  154. false,disable:ExcludePass:Meta
  155. Option:Add Pass:false,true:true
  156. true:IncludePass:ForwardAdd
  157. false,disable:ExcludePass:ForwardAdd
  158. Option:Override Baked GI:false,true:false
  159. true:ShowPort:ForwardBase:Baked GI
  160. false:HidePort:ForwardBase:Baked GI
  161. true:SetDefine:ASE_BAKEDGI 1
  162. false:RemoveDefine:ASE_BAKEDGI 1
  163. Option:Extra Pre Pass:false,true:false
  164. true:IncludePass:ExtraPrePass
  165. false,disable:ExcludePass:ExtraPrePass
  166. Option:Tessellation:false,true:false
  167. true:SetDefine:ASE_TESSELLATION 1
  168. true:SetDefine:pragma require tessellation tessHW
  169. true:SetDefine:pragma hull HullFunction
  170. true:SetDefine:pragma domain DomainFunction
  171. true:ShowOption: Phong
  172. true:ShowOption: Type
  173. false,disable:RemoveDefine:ASE_TESSELLATION 1
  174. false,disable:RemoveDefine:pragma require tessellation tessHW
  175. false,disable:RemoveDefine:pragma hull HullFunction
  176. false,disable:RemoveDefine:pragma domain DomainFunction
  177. false,disable:HideOption: Phong
  178. false,disable:HideOption: Type
  179. Option: Phong:false,true:false
  180. true:SetDefine:ASE_PHONG_TESSELLATION
  181. false,disable:RemoveDefine:ASE_PHONG_TESSELLATION
  182. true:ShowOption: Strength
  183. false,disable:HideOption: Strength
  184. Field: Strength:Float:0.5:0:1:_TessPhongStrength
  185. Change:SetMaterialProperty:_TessPhongStrength
  186. Change:SetShaderProperty:_TessPhongStrength,_TessPhongStrength( "Phong Tess Strength", Range( 0, 1 ) ) = 0.5
  187. Inline,disable:SetShaderProperty:_TessPhongStrength,//_TessPhongStrength( "Phong Tess Strength", Range( 0, 1 ) ) = 0.5
  188. Option: Type:Fixed,Distance Based,Edge Length,Edge Length Cull:Fixed
  189. Fixed:SetDefine:ASE_FIXED_TESSELLATION
  190. Fixed,Distance Based:ShowOption: Tess
  191. Distance Based:SetDefine:ASE_DISTANCE_TESSELLATION
  192. Distance Based:ShowOption: Min
  193. Distance Based:ShowOption: Max
  194. Edge Length:SetDefine:ASE_LENGTH_TESSELLATION
  195. Edge Length,Edge Length Cull:ShowOption: Edge Length
  196. Edge Length Cull:SetDefine:ASE_LENGTH_CULL_TESSELLATION
  197. Edge Length Cull:ShowOption: Max Displacement
  198. disable,Distance Based,Edge Length,Edge Length Cull:RemoveDefine:ASE_FIXED_TESSELLATION
  199. disable,Fixed,Edge Length,Edge Length Cull:RemoveDefine:ASE_DISTANCE_TESSELLATION
  200. disable,Fixed,Distance Based,Edge Length Cull:RemoveDefine:ASE_LENGTH_TESSELLATION
  201. disable,Fixed,Distance Based,Edge Length:RemoveDefine:ASE_LENGTH_CULL_TESSELLATION
  202. disable,Edge Length,Edge Length Cull:HideOption: Tess
  203. disable,Fixed,Edge Length,Edge Length Cull:HideOption: Min
  204. disable,Fixed,Edge Length,Edge Length Cull:HideOption: Max
  205. disable,Fixed,Distance Based:HideOption: Edge Length
  206. disable,Fixed,Distance Based,Edge Length:HideOption: Max Displacement
  207. Field: Tess:Float:16:1:32:_TessValue
  208. Change:SetMaterialProperty:_TessValue
  209. Change:SetShaderProperty:_TessValue,_TessValue( "Max Tessellation", Range( 1, 32 ) ) = 16
  210. Inline,disable:SetShaderProperty:_TessValue,//_TessValue( "Max Tessellation", Range( 1, 32 ) ) = 16
  211. Field: Min:Float:10:_TessMin
  212. Change:SetMaterialProperty:_TessMin
  213. Change:SetShaderProperty:_TessMin,_TessMin( "Tess Min Distance", Float ) = 10
  214. Inline,disable:SetShaderProperty:_TessMin,//_TessMin( "Tess Min Distance", Float ) = 10
  215. Field: Max:Float:25:_TessMax
  216. Change:SetMaterialProperty:_TessMax
  217. Change:SetShaderProperty:_TessMax,_TessMax( "Tess Max Distance", Float ) = 25
  218. Inline,disable:SetShaderProperty:_TessMax,//_TessMax( "Tess Max Distance", Float ) = 25
  219. Field: Edge Length:Float:16:2:50:_TessEdgeLength
  220. Change:SetMaterialProperty:_TessEdgeLength
  221. Change:SetShaderProperty:_TessEdgeLength,_TessEdgeLength ( "Edge length", Range( 2, 50 ) ) = 16
  222. Inline,disable:SetShaderProperty:_TessEdgeLength,//_TessEdgeLength ( "Edge length", Range( 2, 50 ) ) = 16
  223. Field: Max Displacement:Float:25:_TessMaxDisp
  224. Change:SetMaterialProperty:_TessMaxDisp
  225. Change:SetShaderProperty:_TessMaxDisp,_TessMaxDisp( "Max Displacement", Float ) = 25
  226. Inline,disable:SetShaderProperty:_TessMaxDisp,//_TessMaxDisp( "Max Displacement", Float ) = 25
  227. Option:Fwd Specular Highlights Toggle:false,true:false
  228. true:SetShaderProperty:_SpecularHighlights,[ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
  229. false:SetShaderProperty:_SpecularHighlights,//[ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
  230. true:SetDefine:pragma shader_feature _SPECULARHIGHLIGHTS_OFF
  231. false:RemoveDefine:pragma shader_feature _SPECULARHIGHLIGHTS_OFF
  232. Option:Fwd Reflections Toggle:false,true:false
  233. true:SetShaderProperty:_GlossyReflections,[ToggleOff] _GlossyReflections("Reflections", Float) = 1.0
  234. false:SetShaderProperty:_GlossyReflections,//[ToggleOff] _GlossyReflections("Reflections", Float) = 1.0
  235. true:SetDefine:pragma shader_feature _GLOSSYREFLECTIONS_OFF
  236. false:RemoveDefine:pragma shader_feature _GLOSSYREFLECTIONS_OFF
  237. Option:Disable Batching:False,True,LOD Fading:False
  238. False:SetPropertyOnSubShader:DisableBatching,False
  239. True:SetPropertyOnSubShader:DisableBatching,True
  240. LOD Fading:SetPropertyOnSubShader:DisableBatching,LODFading
  241. Option:Vertex Position,InvertActionOnDeselection:Absolute,Relative:Relative
  242. Absolute:SetDefine:ASE_ABSOLUTE_VERTEX_POS 1
  243. Absolute:SetPortName:ForwardBase:15,Vertex Position
  244. Relative:SetPortName:ForwardBase:15,Vertex Offset
  245. Absolute:SetPortName:ExtraPrePass:3,Vertex Position
  246. Relative:SetPortName:ExtraPrePass:3,Vertex Offset
  247. Port:ForwardBase:Alpha Clip Threshold
  248. On:SetDefine:_ALPHATEST_ON 1
  249. Port:ForwardBase:Alpha Clip Threshold Shadow
  250. On:SetDefine:_ALPHATEST_SHADOW_ON 1
  251. */
  252. Tags{ "RenderType" = "Opaque" "Queue" = "Geometry+0" "DisableBatching" = "False" }
  253. LOD 0
  254. Cull Back
  255. AlphaToMask Off
  256. ZWrite On
  257. ZTest LEqual
  258. ColorMask RGBA
  259. /*ase_stencil*/
  260. /*ase_all_modules*/
  261. CGINCLUDE
  262. #pragma target 3.5
  263. float4 FixedTess( float tessValue )
  264. {
  265. return tessValue;
  266. }
  267. float CalcDistanceTessFactor (float4 vertex, float minDist, float maxDist, float tess, float4x4 o2w, float3 cameraPos )
  268. {
  269. float3 wpos = mul(o2w,vertex).xyz;
  270. float dist = distance (wpos, cameraPos);
  271. float f = clamp(1.0 - (dist - minDist) / (maxDist - minDist), 0.01, 1.0) * tess;
  272. return f;
  273. }
  274. float4 CalcTriEdgeTessFactors (float3 triVertexFactors)
  275. {
  276. float4 tess;
  277. tess.x = 0.5 * (triVertexFactors.y + triVertexFactors.z);
  278. tess.y = 0.5 * (triVertexFactors.x + triVertexFactors.z);
  279. tess.z = 0.5 * (triVertexFactors.x + triVertexFactors.y);
  280. tess.w = (triVertexFactors.x + triVertexFactors.y + triVertexFactors.z) / 3.0f;
  281. return tess;
  282. }
  283. float CalcEdgeTessFactor (float3 wpos0, float3 wpos1, float edgeLen, float3 cameraPos, float4 scParams )
  284. {
  285. float dist = distance (0.5 * (wpos0+wpos1), cameraPos);
  286. float len = distance(wpos0, wpos1);
  287. float f = max(len * scParams.y / (edgeLen * dist), 1.0);
  288. return f;
  289. }
  290. float DistanceFromPlane (float3 pos, float4 plane)
  291. {
  292. float d = dot (float4(pos,1.0f), plane);
  293. return d;
  294. }
  295. bool WorldViewFrustumCull (float3 wpos0, float3 wpos1, float3 wpos2, float cullEps, float4 planes[6] )
  296. {
  297. float4 planeTest;
  298. planeTest.x = (( DistanceFromPlane(wpos0, planes[0]) > -cullEps) ? 1.0f : 0.0f ) +
  299. (( DistanceFromPlane(wpos1, planes[0]) > -cullEps) ? 1.0f : 0.0f ) +
  300. (( DistanceFromPlane(wpos2, planes[0]) > -cullEps) ? 1.0f : 0.0f );
  301. planeTest.y = (( DistanceFromPlane(wpos0, planes[1]) > -cullEps) ? 1.0f : 0.0f ) +
  302. (( DistanceFromPlane(wpos1, planes[1]) > -cullEps) ? 1.0f : 0.0f ) +
  303. (( DistanceFromPlane(wpos2, planes[1]) > -cullEps) ? 1.0f : 0.0f );
  304. planeTest.z = (( DistanceFromPlane(wpos0, planes[2]) > -cullEps) ? 1.0f : 0.0f ) +
  305. (( DistanceFromPlane(wpos1, planes[2]) > -cullEps) ? 1.0f : 0.0f ) +
  306. (( DistanceFromPlane(wpos2, planes[2]) > -cullEps) ? 1.0f : 0.0f );
  307. planeTest.w = (( DistanceFromPlane(wpos0, planes[3]) > -cullEps) ? 1.0f : 0.0f ) +
  308. (( DistanceFromPlane(wpos1, planes[3]) > -cullEps) ? 1.0f : 0.0f ) +
  309. (( DistanceFromPlane(wpos2, planes[3]) > -cullEps) ? 1.0f : 0.0f );
  310. return !all (planeTest);
  311. }
  312. float4 DistanceBasedTess( float4 v0, float4 v1, float4 v2, float tess, float minDist, float maxDist, float4x4 o2w, float3 cameraPos )
  313. {
  314. float3 f;
  315. f.x = CalcDistanceTessFactor (v0,minDist,maxDist,tess,o2w,cameraPos);
  316. f.y = CalcDistanceTessFactor (v1,minDist,maxDist,tess,o2w,cameraPos);
  317. f.z = CalcDistanceTessFactor (v2,minDist,maxDist,tess,o2w,cameraPos);
  318. return CalcTriEdgeTessFactors (f);
  319. }
  320. float4 EdgeLengthBasedTess( float4 v0, float4 v1, float4 v2, float edgeLength, float4x4 o2w, float3 cameraPos, float4 scParams )
  321. {
  322. float3 pos0 = mul(o2w,v0).xyz;
  323. float3 pos1 = mul(o2w,v1).xyz;
  324. float3 pos2 = mul(o2w,v2).xyz;
  325. float4 tess;
  326. tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams);
  327. tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams);
  328. tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams);
  329. tess.w = (tess.x + tess.y + tess.z) / 3.0f;
  330. return tess;
  331. }
  332. float4 EdgeLengthBasedTessCull( float4 v0, float4 v1, float4 v2, float edgeLength, float maxDisplacement, float4x4 o2w, float3 cameraPos, float4 scParams, float4 planes[6] )
  333. {
  334. float3 pos0 = mul(o2w,v0).xyz;
  335. float3 pos1 = mul(o2w,v1).xyz;
  336. float3 pos2 = mul(o2w,v2).xyz;
  337. float4 tess;
  338. if (WorldViewFrustumCull(pos0, pos1, pos2, maxDisplacement, planes))
  339. {
  340. tess = 0.0f;
  341. }
  342. else
  343. {
  344. tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams);
  345. tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams);
  346. tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams);
  347. tess.w = (tess.x + tess.y + tess.z) / 3.0f;
  348. }
  349. return tess;
  350. }
  351. ENDCG
  352. /*ase_pass*/
  353. Pass
  354. {
  355. Name "ExtraPrePass"
  356. Tags { "LightMode" = "ForwardBase" }
  357. Blend One Zero
  358. Cull Back
  359. ZWrite On
  360. ZTest LEqual
  361. Offset 0,0
  362. ColorMask RGBA
  363. /*ase_stencil*/
  364. CGPROGRAM
  365. #pragma vertex vert
  366. #pragma fragment frag
  367. #pragma multi_compile_fwdbase
  368. #ifndef UNITY_PASS_FORWARDBASE
  369. #define UNITY_PASS_FORWARDBASE
  370. #endif
  371. #include "HLSLSupport.cginc"
  372. #ifndef UNITY_INSTANCED_LOD_FADE
  373. #define UNITY_INSTANCED_LOD_FADE
  374. #endif
  375. #ifndef UNITY_INSTANCED_SH
  376. #define UNITY_INSTANCED_SH
  377. #endif
  378. #ifndef UNITY_INSTANCED_LIGHTMAPSTS
  379. #define UNITY_INSTANCED_LIGHTMAPSTS
  380. #endif
  381. #include "UnityShaderVariables.cginc"
  382. #include "UnityCG.cginc"
  383. #include "Lighting.cginc"
  384. #include "UnityPBSLighting.cginc"
  385. #include "AutoLight.cginc"
  386. /*ase_pragma*/
  387. struct appdata {
  388. float4 vertex : POSITION;
  389. float4 tangent : TANGENT;
  390. float3 normal : NORMAL;
  391. float4 texcoord1 : TEXCOORD1;
  392. float4 texcoord2 : TEXCOORD2;
  393. /*ase_vdata:p=p;t=t;n=n;uv1=tc1.xyzw;uv2=tc2.xyzw*/
  394. UNITY_VERTEX_INPUT_INSTANCE_ID
  395. };
  396. struct v2f {
  397. #if UNITY_VERSION >= 201810
  398. UNITY_POSITION(pos);
  399. #else
  400. float4 pos : SV_POSITION;
  401. #endif
  402. #if defined(UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTERS) && UNITY_VERSION >= 201810 && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  403. UNITY_LIGHTING_COORDS(2,3)
  404. #elif defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  405. #if UNITY_VERSION >= 201710
  406. UNITY_SHADOW_COORDS(2)
  407. #else
  408. SHADOW_COORDS(2)
  409. #endif
  410. #endif
  411. #ifdef ASE_FOG
  412. UNITY_FOG_COORDS(4)
  413. #endif
  414. float4 tSpace0 : TEXCOORD5;
  415. float4 tSpace1 : TEXCOORD6;
  416. float4 tSpace2 : TEXCOORD7;
  417. /*ase_interp(8,):sp=sp.xyzw;sc=tc2;wn.xyz=tc5.xyz;wt.xyz=tc6.xyz;wbt.xyz=tc7.xyz;wp.x=tc5.w;wp.y=tc6.w;wp.z=tc7.w*/
  418. UNITY_VERTEX_INPUT_INSTANCE_ID
  419. UNITY_VERTEX_OUTPUT_STEREO
  420. };
  421. #ifdef ASE_TESSELLATION
  422. float _TessPhongStrength;
  423. float _TessValue;
  424. float _TessMin;
  425. float _TessMax;
  426. float _TessEdgeLength;
  427. float _TessMaxDisp;
  428. #endif
  429. /*ase_globals*/
  430. /*ase_funcs*/
  431. v2f VertexFunction (appdata v /*ase_vert_input*/ ) {
  432. UNITY_SETUP_INSTANCE_ID(v);
  433. v2f o;
  434. UNITY_INITIALIZE_OUTPUT(v2f,o);
  435. UNITY_TRANSFER_INSTANCE_ID(v,o);
  436. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  437. /*ase_vert_code:v=appdata;o=v2f*/
  438. #ifdef ASE_ABSOLUTE_VERTEX_POS
  439. float3 defaultVertexValue = v.vertex.xyz;
  440. #else
  441. float3 defaultVertexValue = float3(0, 0, 0);
  442. #endif
  443. float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;3;-1;_VertexP*/defaultVertexValue/*end*/;
  444. #ifdef ASE_ABSOLUTE_VERTEX_POS
  445. v.vertex.xyz = vertexValue;
  446. #else
  447. v.vertex.xyz += vertexValue;
  448. #endif
  449. v.vertex.w = 1;
  450. v.normal = /*ase_vert_out:Vertex Normal;Float3;4;-1;_VertexNormalP*/v.normal/*end*/;
  451. v.tangent = /*ase_vert_out:Vertex Tangent;Float4;5;-1;_VertexTangentP*/v.tangent/*end*/;
  452. o.pos = UnityObjectToClipPos(v.vertex);
  453. float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
  454. fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);
  455. fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz);
  456. fixed tangentSign = v.tangent.w * unity_WorldTransformParams.w;
  457. fixed3 worldBinormal = cross(worldNormal, worldTangent) * tangentSign;
  458. o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x);
  459. o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y);
  460. o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z);
  461. #if UNITY_VERSION >= 201810 && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  462. UNITY_TRANSFER_LIGHTING(o, v.texcoord1.xy);
  463. #elif defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  464. #if UNITY_VERSION >= 201710
  465. UNITY_TRANSFER_SHADOW(o, v.texcoord1.xy);
  466. #else
  467. TRANSFER_SHADOW(o);
  468. #endif
  469. #endif
  470. #ifdef ASE_FOG
  471. UNITY_TRANSFER_FOG(o,o.pos);
  472. #endif
  473. return o;
  474. }
  475. #if defined(ASE_TESSELLATION)
  476. struct VertexControl
  477. {
  478. float4 vertex : INTERNALTESSPOS;
  479. float4 tangent : TANGENT;
  480. float3 normal : NORMAL;
  481. float4 texcoord1 : TEXCOORD1;
  482. float4 texcoord2 : TEXCOORD2;
  483. /*ase_vcontrol*/
  484. UNITY_VERTEX_INPUT_INSTANCE_ID
  485. };
  486. struct TessellationFactors
  487. {
  488. float edge[3] : SV_TessFactor;
  489. float inside : SV_InsideTessFactor;
  490. };
  491. VertexControl vert ( appdata v )
  492. {
  493. VertexControl o;
  494. UNITY_SETUP_INSTANCE_ID(v);
  495. UNITY_TRANSFER_INSTANCE_ID(v, o);
  496. o.vertex = v.vertex;
  497. o.tangent = v.tangent;
  498. o.normal = v.normal;
  499. o.texcoord1 = v.texcoord1;
  500. o.texcoord2 = v.texcoord2;
  501. /*ase_control_code:v=appdata;o=VertexControl*/
  502. return o;
  503. }
  504. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  505. {
  506. TessellationFactors o;
  507. float4 tf = 1;
  508. float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/;
  509. float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/;
  510. #if defined(ASE_FIXED_TESSELLATION)
  511. tf = FixedTess( tessValue );
  512. #elif defined(ASE_DISTANCE_TESSELLATION)
  513. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, UNITY_MATRIX_M, _WorldSpaceCameraPos );
  514. #elif defined(ASE_LENGTH_TESSELLATION)
  515. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams );
  516. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  517. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  518. #endif
  519. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  520. return o;
  521. }
  522. [domain("tri")]
  523. [partitioning("fractional_odd")]
  524. [outputtopology("triangle_cw")]
  525. [patchconstantfunc("TessellationFunction")]
  526. [outputcontrolpoints(3)]
  527. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  528. {
  529. return patch[id];
  530. }
  531. [domain("tri")]
  532. v2f DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  533. {
  534. appdata o = (appdata) 0;
  535. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  536. o.tangent = patch[0].tangent * bary.x + patch[1].tangent * bary.y + patch[2].tangent * bary.z;
  537. o.normal = patch[0].normal * bary.x + patch[1].normal * bary.y + patch[2].normal * bary.z;
  538. o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z;
  539. o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z;
  540. /*ase_domain_code:patch=VertexControl;o=appdata;bary=SV_DomainLocation*/
  541. #if defined(ASE_PHONG_TESSELLATION)
  542. float3 pp[3];
  543. for (int i = 0; i < 3; ++i)
  544. pp[i] = o.vertex.xyz - patch[i].normal * (dot(o.vertex.xyz, patch[i].normal) - dot(patch[i].vertex.xyz, patch[i].normal));
  545. float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/;
  546. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  547. #endif
  548. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  549. return VertexFunction(o);
  550. }
  551. #else
  552. v2f vert ( appdata v )
  553. {
  554. return VertexFunction( v );
  555. }
  556. #endif
  557. fixed4 frag (v2f IN /*ase_frag_input*/
  558. #ifdef _DEPTHOFFSET_ON
  559. , out float outputDepth : SV_Depth
  560. #endif
  561. ) : SV_Target
  562. {
  563. UNITY_SETUP_INSTANCE_ID(IN);
  564. #ifdef LOD_FADE_CROSSFADE
  565. UNITY_APPLY_DITHER_CROSSFADE(IN.pos.xy);
  566. #endif
  567. #if defined(_SPECULAR_SETUP)
  568. SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0;
  569. #else
  570. SurfaceOutputStandard o = (SurfaceOutputStandard)0;
  571. #endif
  572. /*ase_local_var:wt*/float3 WorldTangent = float3(IN.tSpace0.x,IN.tSpace1.x,IN.tSpace2.x);
  573. /*ase_local_var:wbt*/float3 WorldBiTangent = float3(IN.tSpace0.y,IN.tSpace1.y,IN.tSpace2.y);
  574. /*ase_local_var:wn*/float3 WorldNormal = float3(IN.tSpace0.z,IN.tSpace1.z,IN.tSpace2.z);
  575. /*ase_local_var:wp*/float3 worldPos = float3(IN.tSpace0.w,IN.tSpace1.w,IN.tSpace2.w);
  576. /*ase_local_var:wvd*/float3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));
  577. #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  578. UNITY_LIGHT_ATTENUATION(atten, IN, worldPos)
  579. #else
  580. /*ase_local_var:sc*/half atten = 1;
  581. #endif
  582. /*ase_frag_code:IN=v2f*/
  583. float3 Color = /*ase_frag_out:Color;Float3;0;-1;_ColorP*/fixed3( 0, 0, 0 )/*end*/;
  584. float Alpha = /*ase_frag_out:Alpha;Float;1;-1;_AlphaP*/1/*end*/;
  585. float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;2;-1;_AlphaClipP*/0.5/*end*/;
  586. float4 c = float4( Color, Alpha );
  587. #ifdef _ALPHATEST_ON
  588. clip( Alpha - AlphaClipThreshold );
  589. #endif
  590. #ifdef _DEPTHOFFSET_ON
  591. outputDepth = IN.pos.z;
  592. #endif
  593. #ifdef ASE_FOG
  594. UNITY_APPLY_FOG(IN.fogCoord, c);
  595. #endif
  596. return c;
  597. }
  598. ENDCG
  599. }
  600. /*ase_pass*/
  601. Pass
  602. {
  603. /*ase_main_pass*/
  604. Name "ForwardBase"
  605. Tags { "LightMode" = "ForwardBase" }
  606. Blend One Zero
  607. CGPROGRAM
  608. #pragma vertex vert
  609. #pragma fragment frag
  610. #pragma multi_compile_fwdbase
  611. #ifndef UNITY_PASS_FORWARDBASE
  612. #define UNITY_PASS_FORWARDBASE
  613. #endif
  614. #include "HLSLSupport.cginc"
  615. #ifndef UNITY_INSTANCED_LOD_FADE
  616. #define UNITY_INSTANCED_LOD_FADE
  617. #endif
  618. #ifndef UNITY_INSTANCED_SH
  619. #define UNITY_INSTANCED_SH
  620. #endif
  621. #ifndef UNITY_INSTANCED_LIGHTMAPSTS
  622. #define UNITY_INSTANCED_LIGHTMAPSTS
  623. #endif
  624. #include "UnityShaderVariables.cginc"
  625. #include "UnityCG.cginc"
  626. #include "Lighting.cginc"
  627. #include "UnityPBSLighting.cginc"
  628. #include "AutoLight.cginc"
  629. /*ase_pragma*/
  630. struct appdata {
  631. float4 vertex : POSITION;
  632. float4 tangent : TANGENT;
  633. float3 normal : NORMAL;
  634. float4 texcoord1 : TEXCOORD1;
  635. float4 texcoord2 : TEXCOORD2;
  636. /*ase_vdata:p=p;t=t;n=n;uv1=tc1.xyzw;uv2=tc2.xyzw*/
  637. UNITY_VERTEX_INPUT_INSTANCE_ID
  638. };
  639. struct v2f {
  640. #if UNITY_VERSION >= 201810
  641. UNITY_POSITION(pos);
  642. #else
  643. float4 pos : SV_POSITION;
  644. #endif
  645. #if defined(LIGHTMAP_ON) || (!defined(LIGHTMAP_ON) && SHADER_TARGET >= 30)
  646. float4 lmap : TEXCOORD0;
  647. #endif
  648. #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH
  649. half3 sh : TEXCOORD1;
  650. #endif
  651. #if defined(UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTERS) && UNITY_VERSION >= 201810 && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  652. UNITY_LIGHTING_COORDS(2,3)
  653. #elif defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  654. #if UNITY_VERSION >= 201710
  655. UNITY_SHADOW_COORDS(2)
  656. #else
  657. SHADOW_COORDS(2)
  658. #endif
  659. #endif
  660. #ifdef ASE_FOG
  661. UNITY_FOG_COORDS(4)
  662. #endif
  663. float4 tSpace0 : TEXCOORD5;
  664. float4 tSpace1 : TEXCOORD6;
  665. float4 tSpace2 : TEXCOORD7;
  666. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  667. float4 screenPos : TEXCOORD8;
  668. #endif
  669. /*ase_interp(9,):sp=sp.xyzw;sc=tc2;wn.xyz=tc5.xyz;wt.xyz=tc6.xyz;wbt.xyz=tc7.xyz;wp.x=tc5.w;wp.y=tc6.w;wp.z=tc7.w;spu=tc8*/
  670. UNITY_VERTEX_INPUT_INSTANCE_ID
  671. UNITY_VERTEX_OUTPUT_STEREO
  672. };
  673. #ifdef ASE_TRANSMISSION
  674. float _TransmissionShadow;
  675. #endif
  676. #ifdef ASE_TRANSLUCENCY
  677. float _TransStrength;
  678. float _TransNormal;
  679. float _TransScattering;
  680. float _TransDirect;
  681. float _TransAmbient;
  682. float _TransShadow;
  683. #endif
  684. #ifdef ASE_TESSELLATION
  685. float _TessPhongStrength;
  686. float _TessValue;
  687. float _TessMin;
  688. float _TessMax;
  689. float _TessEdgeLength;
  690. float _TessMaxDisp;
  691. #endif
  692. /*ase_globals*/
  693. /*ase_funcs*/
  694. v2f VertexFunction (appdata v /*ase_vert_input*/ ) {
  695. UNITY_SETUP_INSTANCE_ID(v);
  696. v2f o;
  697. UNITY_INITIALIZE_OUTPUT(v2f,o);
  698. UNITY_TRANSFER_INSTANCE_ID(v,o);
  699. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  700. /*ase_vert_code:v=appdata;o=v2f*/
  701. #ifdef ASE_ABSOLUTE_VERTEX_POS
  702. float3 defaultVertexValue = v.vertex.xyz;
  703. #else
  704. float3 defaultVertexValue = float3(0, 0, 0);
  705. #endif
  706. float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;15;-1;_Vertex*/defaultVertexValue/*end*/;
  707. #ifdef ASE_ABSOLUTE_VERTEX_POS
  708. v.vertex.xyz = vertexValue;
  709. #else
  710. v.vertex.xyz += vertexValue;
  711. #endif
  712. v.vertex.w = 1;
  713. v.normal = /*ase_vert_out:Vertex Normal;Float3;16;-1;_VertexNormal*/v.normal/*end*/;
  714. v.tangent = /*ase_vert_out:Vertex Tangent;Float4;17;-1;_VertexTangent*/v.tangent/*end*/;
  715. o.pos = UnityObjectToClipPos(v.vertex);
  716. float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
  717. fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);
  718. fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz);
  719. fixed tangentSign = v.tangent.w * unity_WorldTransformParams.w;
  720. fixed3 worldBinormal = cross(worldNormal, worldTangent) * tangentSign;
  721. o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x);
  722. o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y);
  723. o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z);
  724. #ifdef DYNAMICLIGHTMAP_ON
  725. o.lmap.zw = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
  726. #endif
  727. #ifdef LIGHTMAP_ON
  728. o.lmap.xy = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
  729. #endif
  730. #ifndef LIGHTMAP_ON
  731. #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL
  732. o.sh = 0;
  733. #ifdef VERTEXLIGHT_ON
  734. o.sh += Shade4PointLights (
  735. unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0,
  736. unity_LightColor[0].rgb, unity_LightColor[1].rgb, unity_LightColor[2].rgb, unity_LightColor[3].rgb,
  737. unity_4LightAtten0, worldPos, worldNormal);
  738. #endif
  739. o.sh = ShadeSHPerVertex (worldNormal, o.sh);
  740. #endif
  741. #endif
  742. #if UNITY_VERSION >= 201810 && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  743. UNITY_TRANSFER_LIGHTING(o, v.texcoord1.xy);
  744. #elif defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  745. #if UNITY_VERSION >= 201710
  746. UNITY_TRANSFER_SHADOW(o, v.texcoord1.xy);
  747. #else
  748. TRANSFER_SHADOW(o);
  749. #endif
  750. #endif
  751. #ifdef ASE_FOG
  752. UNITY_TRANSFER_FOG(o,o.pos);
  753. #endif
  754. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  755. o.screenPos = ComputeScreenPos(o.pos);
  756. #endif
  757. return o;
  758. }
  759. #if defined(ASE_TESSELLATION)
  760. struct VertexControl
  761. {
  762. float4 vertex : INTERNALTESSPOS;
  763. float4 tangent : TANGENT;
  764. float3 normal : NORMAL;
  765. float4 texcoord1 : TEXCOORD1;
  766. float4 texcoord2 : TEXCOORD2;
  767. /*ase_vcontrol*/
  768. UNITY_VERTEX_INPUT_INSTANCE_ID
  769. };
  770. struct TessellationFactors
  771. {
  772. float edge[3] : SV_TessFactor;
  773. float inside : SV_InsideTessFactor;
  774. };
  775. VertexControl vert ( appdata v )
  776. {
  777. VertexControl o;
  778. UNITY_SETUP_INSTANCE_ID(v);
  779. UNITY_TRANSFER_INSTANCE_ID(v, o);
  780. o.vertex = v.vertex;
  781. o.tangent = v.tangent;
  782. o.normal = v.normal;
  783. o.texcoord1 = v.texcoord1;
  784. o.texcoord2 = v.texcoord2;
  785. /*ase_control_code:v=appdata;o=VertexControl*/
  786. return o;
  787. }
  788. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  789. {
  790. TessellationFactors o;
  791. float4 tf = 1;
  792. float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/;
  793. float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/;
  794. #if defined(ASE_FIXED_TESSELLATION)
  795. tf = FixedTess( tessValue );
  796. #elif defined(ASE_DISTANCE_TESSELLATION)
  797. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, UNITY_MATRIX_M, _WorldSpaceCameraPos );
  798. #elif defined(ASE_LENGTH_TESSELLATION)
  799. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams );
  800. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  801. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  802. #endif
  803. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  804. return o;
  805. }
  806. [domain("tri")]
  807. [partitioning("fractional_odd")]
  808. [outputtopology("triangle_cw")]
  809. [patchconstantfunc("TessellationFunction")]
  810. [outputcontrolpoints(3)]
  811. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  812. {
  813. return patch[id];
  814. }
  815. [domain("tri")]
  816. v2f DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  817. {
  818. appdata o = (appdata) 0;
  819. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  820. o.tangent = patch[0].tangent * bary.x + patch[1].tangent * bary.y + patch[2].tangent * bary.z;
  821. o.normal = patch[0].normal * bary.x + patch[1].normal * bary.y + patch[2].normal * bary.z;
  822. o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z;
  823. o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z;
  824. /*ase_domain_code:patch=VertexControl;o=appdata;bary=SV_DomainLocation*/
  825. #if defined(ASE_PHONG_TESSELLATION)
  826. float3 pp[3];
  827. for (int i = 0; i < 3; ++i)
  828. pp[i] = o.vertex.xyz - patch[i].normal * (dot(o.vertex.xyz, patch[i].normal) - dot(patch[i].vertex.xyz, patch[i].normal));
  829. float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/;
  830. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  831. #endif
  832. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  833. return VertexFunction(o);
  834. }
  835. #else
  836. v2f vert ( appdata v )
  837. {
  838. return VertexFunction( v );
  839. }
  840. #endif
  841. fixed4 frag (v2f IN /*ase_frag_input*/
  842. #ifdef _DEPTHOFFSET_ON
  843. , out float outputDepth : SV_Depth
  844. #endif
  845. ) : SV_Target
  846. {
  847. UNITY_SETUP_INSTANCE_ID(IN);
  848. #ifdef LOD_FADE_CROSSFADE
  849. UNITY_APPLY_DITHER_CROSSFADE(IN.pos.xy);
  850. #endif
  851. #if defined(_SPECULAR_SETUP)
  852. SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0;
  853. #else
  854. SurfaceOutputStandard o = (SurfaceOutputStandard)0;
  855. #endif
  856. /*ase_local_var:wt*/float3 WorldTangent = float3(IN.tSpace0.x,IN.tSpace1.x,IN.tSpace2.x);
  857. /*ase_local_var:wbt*/float3 WorldBiTangent = float3(IN.tSpace0.y,IN.tSpace1.y,IN.tSpace2.y);
  858. /*ase_local_var:wn*/float3 WorldNormal = float3(IN.tSpace0.z,IN.tSpace1.z,IN.tSpace2.z);
  859. /*ase_local_var:wp*/float3 worldPos = float3(IN.tSpace0.w,IN.tSpace1.w,IN.tSpace2.w);
  860. /*ase_local_var:wvd*/float3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));
  861. #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  862. UNITY_LIGHT_ATTENUATION(atten, IN, worldPos)
  863. #else
  864. /*ase_local_var:sc*/half atten = 1;
  865. #endif
  866. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  867. /*ase_local_var:spu*/float4 ScreenPos = IN.screenPos;
  868. #endif
  869. /*ase_frag_code:IN=v2f*/
  870. o.Albedo = /*ase_frag_out:Albedo;Float3;0;-1;_Albedo*/fixed3( 0.5, 0.5, 0.5 )/*end*/;
  871. o.Normal = /*ase_frag_out:Normal;Float3;1;-1;_Normal*/fixed3( 0, 0, 1 )/*end*/;
  872. o.Emission = /*ase_frag_out:Emission;Float3;2;-1;_Emission*/half3( 0, 0, 0 )/*end*/;
  873. #if defined(_SPECULAR_SETUP)
  874. o.Specular = /*ase_frag_out:Specular;Float3;3;-1;_Specular*/fixed3( 0, 0, 0 )/*end*/;
  875. #else
  876. o.Metallic = /*ase_frag_out:Metallic;Float;4;-1;_Metallic*/0/*end*/;
  877. #endif
  878. o.Smoothness = /*ase_frag_out:Smoothness;Float;5;-1;_Smoothness*/0/*end*/;
  879. o.Occlusion = /*ase_frag_out:Occlusion;Float;6;-1;_Occlusion*/1/*end*/;
  880. o.Alpha = /*ase_frag_out:Alpha;Float;7;-1;_Alpha*/1/*end*/;
  881. float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;8;-1;_AlphaClip*/0.5/*end*/;
  882. float AlphaClipThresholdShadow = /*ase_frag_out:Alpha Clip Threshold Shadow;Float;9;-1;_AlphaClipShadow*/0.5/*end*/;
  883. float3 BakedGI = /*ase_frag_out:Baked GI;Float3;10;-1;_BakedGI*/0/*end*/;
  884. float3 RefractionColor = /*ase_frag_out:Refraction Color;Float3;11;-1;_RefractionColor*/1/*end*/;
  885. float RefractionIndex = /*ase_frag_out:Refraction Index;Float;12;-1;_RefractionIndex*/1/*end*/;
  886. float3 Transmission = /*ase_frag_out:Transmission;Float3;13;-1;_Transmission*/1/*end*/;
  887. float3 Translucency = /*ase_frag_out:Translucency;Float3;14;-1;_Translucency*/1/*end*/;
  888. #ifdef _ALPHATEST_ON
  889. clip( o.Alpha - AlphaClipThreshold );
  890. #endif
  891. #ifdef _DEPTHOFFSET_ON
  892. outputDepth = IN.pos.z;
  893. #endif
  894. #ifndef USING_DIRECTIONAL_LIGHT
  895. fixed3 lightDir = normalize(UnityWorldSpaceLightDir(worldPos));
  896. #else
  897. fixed3 lightDir = _WorldSpaceLightPos0.xyz;
  898. #endif
  899. fixed4 c = 0;
  900. float3 worldN;
  901. worldN.x = dot(IN.tSpace0.xyz, o.Normal);
  902. worldN.y = dot(IN.tSpace1.xyz, o.Normal);
  903. worldN.z = dot(IN.tSpace2.xyz, o.Normal);
  904. worldN = normalize(worldN);
  905. o.Normal = worldN;
  906. UnityGI gi;
  907. UNITY_INITIALIZE_OUTPUT(UnityGI, gi);
  908. gi.indirect.diffuse = 0;
  909. gi.indirect.specular = 0;
  910. gi.light.color = _LightColor0.rgb;
  911. gi.light.dir = lightDir;
  912. UnityGIInput giInput;
  913. UNITY_INITIALIZE_OUTPUT(UnityGIInput, giInput);
  914. giInput.light = gi.light;
  915. giInput.worldPos = worldPos;
  916. giInput.worldViewDir = worldViewDir;
  917. giInput.atten = atten;
  918. #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON)
  919. giInput.lightmapUV = IN.lmap;
  920. #else
  921. giInput.lightmapUV = 0.0;
  922. #endif
  923. #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL
  924. giInput.ambient = IN.sh;
  925. #else
  926. giInput.ambient.rgb = 0.0;
  927. #endif
  928. giInput.probeHDR[0] = unity_SpecCube0_HDR;
  929. giInput.probeHDR[1] = unity_SpecCube1_HDR;
  930. #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION)
  931. giInput.boxMin[0] = unity_SpecCube0_BoxMin;
  932. #endif
  933. #ifdef UNITY_SPECCUBE_BOX_PROJECTION
  934. giInput.boxMax[0] = unity_SpecCube0_BoxMax;
  935. giInput.probePosition[0] = unity_SpecCube0_ProbePosition;
  936. giInput.boxMax[1] = unity_SpecCube1_BoxMax;
  937. giInput.boxMin[1] = unity_SpecCube1_BoxMin;
  938. giInput.probePosition[1] = unity_SpecCube1_ProbePosition;
  939. #endif
  940. #if defined(_SPECULAR_SETUP)
  941. LightingStandardSpecular_GI(o, giInput, gi);
  942. #else
  943. LightingStandard_GI( o, giInput, gi );
  944. #endif
  945. #ifdef ASE_BAKEDGI
  946. gi.indirect.diffuse = BakedGI;
  947. #endif
  948. #if UNITY_SHOULD_SAMPLE_SH && !defined(LIGHTMAP_ON) && defined(ASE_NO_AMBIENT)
  949. gi.indirect.diffuse = 0;
  950. #endif
  951. #if defined(_SPECULAR_SETUP)
  952. c += LightingStandardSpecular (o, worldViewDir, gi);
  953. #else
  954. c += LightingStandard( o, worldViewDir, gi );
  955. #endif
  956. #ifdef ASE_TRANSMISSION
  957. {
  958. float shadow = /*ase_inline_begin*/_TransmissionShadow/*ase_inline_end*/;
  959. #ifdef DIRECTIONAL
  960. float3 lightAtten = lerp( _LightColor0.rgb, gi.light.color, shadow );
  961. #else
  962. float3 lightAtten = gi.light.color;
  963. #endif
  964. half3 transmission = max(0 , -dot(o.Normal, gi.light.dir)) * lightAtten * Transmission;
  965. c.rgb += o.Albedo * transmission;
  966. }
  967. #endif
  968. #ifdef ASE_TRANSLUCENCY
  969. {
  970. float shadow = /*ase_inline_begin*/_TransShadow/*ase_inline_end*/;
  971. float normal = /*ase_inline_begin*/_TransNormal/*ase_inline_end*/;
  972. float scattering = /*ase_inline_begin*/_TransScattering/*ase_inline_end*/;
  973. float direct = /*ase_inline_begin*/_TransDirect/*ase_inline_end*/;
  974. float ambient = /*ase_inline_begin*/_TransAmbient/*ase_inline_end*/;
  975. float strength = /*ase_inline_begin*/_TransStrength/*ase_inline_end*/;
  976. #ifdef DIRECTIONAL
  977. float3 lightAtten = lerp( _LightColor0.rgb, gi.light.color, shadow );
  978. #else
  979. float3 lightAtten = gi.light.color;
  980. #endif
  981. half3 lightDir = gi.light.dir + o.Normal * normal;
  982. half transVdotL = pow( saturate( dot( worldViewDir, -lightDir ) ), scattering );
  983. half3 translucency = lightAtten * (transVdotL * direct + gi.indirect.diffuse * ambient) * Translucency;
  984. c.rgb += o.Albedo * translucency * strength;
  985. }
  986. #endif
  987. //#ifdef ASE_REFRACTION
  988. // float4 projScreenPos = ScreenPos / ScreenPos.w;
  989. // float3 refractionOffset = ( RefractionIndex - 1.0 ) * mul( UNITY_MATRIX_V, WorldNormal ).xyz * ( 1.0 - dot( WorldNormal, WorldViewDirection ) );
  990. // projScreenPos.xy += refractionOffset.xy;
  991. // float3 refraction = UNITY_SAMPLE_SCREENSPACE_TEXTURE( _GrabTexture, projScreenPos ) * RefractionColor;
  992. // color.rgb = lerp( refraction, color.rgb, color.a );
  993. // color.a = 1;
  994. //#endif
  995. c.rgb += o.Emission;
  996. #ifdef ASE_FOG
  997. UNITY_APPLY_FOG(IN.fogCoord, c);
  998. #endif
  999. return c;
  1000. }
  1001. ENDCG
  1002. }
  1003. /*ase_pass*/
  1004. Pass
  1005. {
  1006. /*ase_hide_pass*/
  1007. Name "ForwardAdd"
  1008. Tags { "LightMode"="ForwardAdd" }
  1009. ZWrite Off
  1010. Blend One One
  1011. CGPROGRAM
  1012. #pragma vertex vert
  1013. #pragma fragment frag
  1014. #pragma skip_variants INSTANCING_ON
  1015. #pragma multi_compile_fwdadd_fullshadows
  1016. #ifndef UNITY_PASS_FORWARDADD
  1017. #define UNITY_PASS_FORWARDADD
  1018. #endif
  1019. #include "HLSLSupport.cginc"
  1020. #if !defined( UNITY_INSTANCED_LOD_FADE )
  1021. #define UNITY_INSTANCED_LOD_FADE
  1022. #endif
  1023. #if !defined( UNITY_INSTANCED_SH )
  1024. #define UNITY_INSTANCED_SH
  1025. #endif
  1026. #if !defined( UNITY_INSTANCED_LIGHTMAPSTS )
  1027. #define UNITY_INSTANCED_LIGHTMAPSTS
  1028. #endif
  1029. #include "UnityShaderVariables.cginc"
  1030. #include "UnityCG.cginc"
  1031. #include "Lighting.cginc"
  1032. #include "UnityPBSLighting.cginc"
  1033. #include "AutoLight.cginc"
  1034. /*ase_pragma*/
  1035. struct appdata {
  1036. float4 vertex : POSITION;
  1037. float4 tangent : TANGENT;
  1038. float3 normal : NORMAL;
  1039. float4 texcoord1 : TEXCOORD1;
  1040. float4 texcoord2 : TEXCOORD2;
  1041. /*ase_vdata:p=p;t=t;n=n;uv1=tc1.xyzw;uv2=tc2.xyzw*/
  1042. UNITY_VERTEX_INPUT_INSTANCE_ID
  1043. };
  1044. struct v2f {
  1045. #if UNITY_VERSION >= 201810
  1046. UNITY_POSITION(pos);
  1047. #else
  1048. float4 pos : SV_POSITION;
  1049. #endif
  1050. #if UNITY_VERSION >= 201810 && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1051. UNITY_LIGHTING_COORDS(1,2)
  1052. #elif defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1053. #if UNITY_VERSION >= 201710
  1054. UNITY_SHADOW_COORDS(1)
  1055. #else
  1056. SHADOW_COORDS(1)
  1057. #endif
  1058. #endif
  1059. #ifdef ASE_FOG
  1060. UNITY_FOG_COORDS(3)
  1061. #endif
  1062. float4 tSpace0 : TEXCOORD5;
  1063. float4 tSpace1 : TEXCOORD6;
  1064. float4 tSpace2 : TEXCOORD7;
  1065. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  1066. float4 screenPos : TEXCOORD8;
  1067. #endif
  1068. /*ase_interp(9,):sp=sp.xyzw;sc=tc1;wn.xyz=tc5.xyz;wt.xyz=tc6.xyz;wbt.xyz=tc7.xyz;wp.x=tc5.w;wp.y=tc6.w;wp.z=tc7.w;spu=tc8*/
  1069. UNITY_VERTEX_INPUT_INSTANCE_ID
  1070. UNITY_VERTEX_OUTPUT_STEREO
  1071. };
  1072. #ifdef ASE_TRANSMISSION
  1073. float _TransmissionShadow;
  1074. #endif
  1075. #ifdef ASE_TRANSLUCENCY
  1076. float _TransStrength;
  1077. float _TransNormal;
  1078. float _TransScattering;
  1079. float _TransDirect;
  1080. float _TransAmbient;
  1081. float _TransShadow;
  1082. #endif
  1083. #ifdef ASE_TESSELLATION
  1084. float _TessPhongStrength;
  1085. float _TessValue;
  1086. float _TessMin;
  1087. float _TessMax;
  1088. float _TessEdgeLength;
  1089. float _TessMaxDisp;
  1090. #endif
  1091. /*ase_globals*/
  1092. /*ase_funcs*/
  1093. v2f VertexFunction (appdata v /*ase_vert_input*/ ) {
  1094. UNITY_SETUP_INSTANCE_ID(v);
  1095. v2f o;
  1096. UNITY_INITIALIZE_OUTPUT(v2f,o);
  1097. UNITY_TRANSFER_INSTANCE_ID(v,o);
  1098. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  1099. /*ase_vert_code:v=appdata;o=v2f*/
  1100. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1101. float3 defaultVertexValue = v.vertex.xyz;
  1102. #else
  1103. float3 defaultVertexValue = float3(0, 0, 0);
  1104. #endif
  1105. float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;11;-1;_Vertex*/defaultVertexValue/*end*/;
  1106. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1107. v.vertex.xyz = vertexValue;
  1108. #else
  1109. v.vertex.xyz += vertexValue;
  1110. #endif
  1111. v.vertex.w = 1;
  1112. v.normal = /*ase_vert_out:Vertex Normal;Float3;12;-1;_VertexNormal*/v.normal/*end*/;
  1113. v.tangent = /*ase_vert_out:Vertex Tangent;Float4;13;-1;_VertexTangent*/v.tangent/*end*/;
  1114. o.pos = UnityObjectToClipPos(v.vertex);
  1115. float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
  1116. fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);
  1117. fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz);
  1118. fixed tangentSign = v.tangent.w * unity_WorldTransformParams.w;
  1119. fixed3 worldBinormal = cross(worldNormal, worldTangent) * tangentSign;
  1120. o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x);
  1121. o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y);
  1122. o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z);
  1123. #if UNITY_VERSION >= 201810 && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1124. UNITY_TRANSFER_LIGHTING(o, v.texcoord1.xy);
  1125. #elif defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1126. #if UNITY_VERSION >= 201710
  1127. UNITY_TRANSFER_SHADOW(o, v.texcoord1.xy);
  1128. #else
  1129. TRANSFER_SHADOW(o);
  1130. #endif
  1131. #endif
  1132. #ifdef ASE_FOG
  1133. UNITY_TRANSFER_FOG(o,o.pos);
  1134. #endif
  1135. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  1136. o.screenPos = ComputeScreenPos(o.pos);
  1137. #endif
  1138. return o;
  1139. }
  1140. #if defined(ASE_TESSELLATION)
  1141. struct VertexControl
  1142. {
  1143. float4 vertex : INTERNALTESSPOS;
  1144. float4 tangent : TANGENT;
  1145. float3 normal : NORMAL;
  1146. float4 texcoord1 : TEXCOORD1;
  1147. float4 texcoord2 : TEXCOORD2;
  1148. /*ase_vcontrol*/
  1149. UNITY_VERTEX_INPUT_INSTANCE_ID
  1150. };
  1151. struct TessellationFactors
  1152. {
  1153. float edge[3] : SV_TessFactor;
  1154. float inside : SV_InsideTessFactor;
  1155. };
  1156. VertexControl vert ( appdata v )
  1157. {
  1158. VertexControl o;
  1159. UNITY_SETUP_INSTANCE_ID(v);
  1160. UNITY_TRANSFER_INSTANCE_ID(v, o);
  1161. o.vertex = v.vertex;
  1162. o.tangent = v.tangent;
  1163. o.normal = v.normal;
  1164. o.texcoord1 = v.texcoord1;
  1165. o.texcoord2 = v.texcoord2;
  1166. /*ase_control_code:v=appdata;o=VertexControl*/
  1167. return o;
  1168. }
  1169. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  1170. {
  1171. TessellationFactors o;
  1172. float4 tf = 1;
  1173. float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/;
  1174. float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/;
  1175. #if defined(ASE_FIXED_TESSELLATION)
  1176. tf = FixedTess( tessValue );
  1177. #elif defined(ASE_DISTANCE_TESSELLATION)
  1178. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, UNITY_MATRIX_M, _WorldSpaceCameraPos );
  1179. #elif defined(ASE_LENGTH_TESSELLATION)
  1180. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams );
  1181. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  1182. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  1183. #endif
  1184. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  1185. return o;
  1186. }
  1187. [domain("tri")]
  1188. [partitioning("fractional_odd")]
  1189. [outputtopology("triangle_cw")]
  1190. [patchconstantfunc("TessellationFunction")]
  1191. [outputcontrolpoints(3)]
  1192. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  1193. {
  1194. return patch[id];
  1195. }
  1196. [domain("tri")]
  1197. v2f DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  1198. {
  1199. appdata o = (appdata) 0;
  1200. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  1201. o.tangent = patch[0].tangent * bary.x + patch[1].tangent * bary.y + patch[2].tangent * bary.z;
  1202. o.normal = patch[0].normal * bary.x + patch[1].normal * bary.y + patch[2].normal * bary.z;
  1203. o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z;
  1204. o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z;
  1205. /*ase_domain_code:patch=VertexControl;o=appdata;bary=SV_DomainLocation*/
  1206. #if defined(ASE_PHONG_TESSELLATION)
  1207. float3 pp[3];
  1208. for (int i = 0; i < 3; ++i)
  1209. pp[i] = o.vertex.xyz - patch[i].normal * (dot(o.vertex.xyz, patch[i].normal) - dot(patch[i].vertex.xyz, patch[i].normal));
  1210. float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/;
  1211. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  1212. #endif
  1213. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  1214. return VertexFunction(o);
  1215. }
  1216. #else
  1217. v2f vert ( appdata v )
  1218. {
  1219. return VertexFunction( v );
  1220. }
  1221. #endif
  1222. fixed4 frag ( v2f IN /*ase_frag_input*/
  1223. #ifdef _DEPTHOFFSET_ON
  1224. , out float outputDepth : SV_Depth
  1225. #endif
  1226. ) : SV_Target
  1227. {
  1228. UNITY_SETUP_INSTANCE_ID(IN);
  1229. #ifdef LOD_FADE_CROSSFADE
  1230. UNITY_APPLY_DITHER_CROSSFADE(IN.pos.xy);
  1231. #endif
  1232. #if defined(_SPECULAR_SETUP)
  1233. SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0;
  1234. #else
  1235. SurfaceOutputStandard o = (SurfaceOutputStandard)0;
  1236. #endif
  1237. /*ase_local_var:wt*/float3 WorldTangent = float3(IN.tSpace0.x,IN.tSpace1.x,IN.tSpace2.x);
  1238. /*ase_local_var:wbt*/float3 WorldBiTangent = float3(IN.tSpace0.y,IN.tSpace1.y,IN.tSpace2.y);
  1239. /*ase_local_var:wn*/float3 WorldNormal = float3(IN.tSpace0.z,IN.tSpace1.z,IN.tSpace2.z);
  1240. /*ase_local_var:wp*/float3 worldPos = float3(IN.tSpace0.w,IN.tSpace1.w,IN.tSpace2.w);
  1241. /*ase_local_var:wvd*/float3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));
  1242. #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
  1243. UNITY_LIGHT_ATTENUATION(atten, IN, worldPos)
  1244. #else
  1245. /*ase_local_var:sc*/half atten = 1;
  1246. #endif
  1247. #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION)
  1248. /*ase_local_var:spu*/float4 ScreenPos = IN.screenPos;
  1249. #endif
  1250. /*ase_frag_code:IN=v2f*/
  1251. o.Albedo = /*ase_frag_out:Albedo;Float3;0;-1;_Albedo*/fixed3( 0.5, 0.5, 0.5 )/*end*/;
  1252. o.Normal = /*ase_frag_out:Normal;Float3;1;-1;_Normal*/fixed3( 0, 0, 1 )/*end*/;
  1253. o.Emission = /*ase_frag_out:Emission;Float3;2;-1;_Emission*/half3( 0, 0, 0 )/*end*/;
  1254. #if defined(_SPECULAR_SETUP)
  1255. o.Specular = /*ase_frag_out:Specular;Float3;3;-1;_Specular*/fixed3( 0, 0, 0 )/*end*/;
  1256. #else
  1257. o.Metallic = /*ase_frag_out:Metallic;Float;4;-1;_Metallic*/0/*end*/;
  1258. #endif
  1259. o.Smoothness = /*ase_frag_out:Smoothness;Float;5;-1;_Smoothness*/0/*end*/;
  1260. o.Occlusion = /*ase_frag_out:Occlusion;Float;6;-1;_Occlusion*/1/*end*/;
  1261. o.Alpha = /*ase_frag_out:Alpha;Float;7;-1;_Alpha*/1/*end*/;
  1262. float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;8;-1;_AlphaClip*/0.5/*end*/;
  1263. float3 Transmission = /*ase_frag_out:Transmission;Float3;9;-1;_Transmission*/1/*end*/;
  1264. float3 Translucency = /*ase_frag_out:Translucency;Float3;10;-1;_Translucency*/1/*end*/;
  1265. #ifdef _ALPHATEST_ON
  1266. clip( o.Alpha - AlphaClipThreshold );
  1267. #endif
  1268. #ifdef _DEPTHOFFSET_ON
  1269. outputDepth = IN.pos.z;
  1270. #endif
  1271. #ifndef USING_DIRECTIONAL_LIGHT
  1272. fixed3 lightDir = normalize(UnityWorldSpaceLightDir(worldPos));
  1273. #else
  1274. fixed3 lightDir = _WorldSpaceLightPos0.xyz;
  1275. #endif
  1276. fixed4 c = 0;
  1277. float3 worldN;
  1278. worldN.x = dot(IN.tSpace0.xyz, o.Normal);
  1279. worldN.y = dot(IN.tSpace1.xyz, o.Normal);
  1280. worldN.z = dot(IN.tSpace2.xyz, o.Normal);
  1281. worldN = normalize(worldN);
  1282. o.Normal = worldN;
  1283. UnityGI gi;
  1284. UNITY_INITIALIZE_OUTPUT(UnityGI, gi);
  1285. gi.indirect.diffuse = 0;
  1286. gi.indirect.specular = 0;
  1287. gi.light.color = _LightColor0.rgb;
  1288. gi.light.dir = lightDir;
  1289. gi.light.color *= atten;
  1290. #if defined(_SPECULAR_SETUP)
  1291. c += LightingStandardSpecular( o, worldViewDir, gi );
  1292. #else
  1293. c += LightingStandard( o, worldViewDir, gi );
  1294. #endif
  1295. #ifdef ASE_TRANSMISSION
  1296. {
  1297. float shadow = /*ase_inline_begin*/_TransmissionShadow/*ase_inline_end*/;
  1298. #ifdef DIRECTIONAL
  1299. float3 lightAtten = lerp( _LightColor0.rgb, gi.light.color, shadow );
  1300. #else
  1301. float3 lightAtten = gi.light.color;
  1302. #endif
  1303. half3 transmission = max(0 , -dot(o.Normal, gi.light.dir)) * lightAtten * Transmission;
  1304. c.rgb += o.Albedo * transmission;
  1305. }
  1306. #endif
  1307. #ifdef ASE_TRANSLUCENCY
  1308. {
  1309. float shadow = /*ase_inline_begin*/_TransShadow/*ase_inline_end*/;
  1310. float normal = /*ase_inline_begin*/_TransNormal/*ase_inline_end*/;
  1311. float scattering = /*ase_inline_begin*/_TransScattering/*ase_inline_end*/;
  1312. float direct = /*ase_inline_begin*/_TransDirect/*ase_inline_end*/;
  1313. float ambient = /*ase_inline_begin*/_TransAmbient/*ase_inline_end*/;
  1314. float strength = /*ase_inline_begin*/_TransStrength/*ase_inline_end*/;
  1315. #ifdef DIRECTIONAL
  1316. float3 lightAtten = lerp( _LightColor0.rgb, gi.light.color, shadow );
  1317. #else
  1318. float3 lightAtten = gi.light.color;
  1319. #endif
  1320. half3 lightDir = gi.light.dir + o.Normal * normal;
  1321. half transVdotL = pow( saturate( dot( worldViewDir, -lightDir ) ), scattering );
  1322. half3 translucency = lightAtten * (transVdotL * direct + gi.indirect.diffuse * ambient) * Translucency;
  1323. c.rgb += o.Albedo * translucency * strength;
  1324. }
  1325. #endif
  1326. //#ifdef ASE_REFRACTION
  1327. // float4 projScreenPos = ScreenPos / ScreenPos.w;
  1328. // float3 refractionOffset = ( RefractionIndex - 1.0 ) * mul( UNITY_MATRIX_V, WorldNormal ).xyz * ( 1.0 - dot( WorldNormal, WorldViewDirection ) );
  1329. // projScreenPos.xy += refractionOffset.xy;
  1330. // float3 refraction = UNITY_SAMPLE_SCREENSPACE_TEXTURE( _GrabTexture, projScreenPos ) * RefractionColor;
  1331. // color.rgb = lerp( refraction, color.rgb, color.a );
  1332. // color.a = 1;
  1333. //#endif
  1334. #ifdef ASE_FOG
  1335. UNITY_APPLY_FOG(IN.fogCoord, c);
  1336. #endif
  1337. return c;
  1338. }
  1339. ENDCG
  1340. }
  1341. /*ase_pass*/
  1342. Pass
  1343. {
  1344. /*ase_hide_pass*/
  1345. Name "Deferred"
  1346. Tags { "LightMode"="Deferred" }
  1347. AlphaToMask Off
  1348. CGPROGRAM
  1349. #pragma vertex vert
  1350. #pragma fragment frag
  1351. #pragma target 3.5
  1352. #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2
  1353. #pragma multi_compile_prepassfinal
  1354. #ifndef UNITY_PASS_DEFERRED
  1355. #define UNITY_PASS_DEFERRED
  1356. #endif
  1357. #include "HLSLSupport.cginc"
  1358. #if !defined( UNITY_INSTANCED_LOD_FADE )
  1359. #define UNITY_INSTANCED_LOD_FADE
  1360. #endif
  1361. #if !defined( UNITY_INSTANCED_SH )
  1362. #define UNITY_INSTANCED_SH
  1363. #endif
  1364. #if !defined( UNITY_INSTANCED_LIGHTMAPSTS )
  1365. #define UNITY_INSTANCED_LIGHTMAPSTS
  1366. #endif
  1367. #include "UnityShaderVariables.cginc"
  1368. #include "UnityCG.cginc"
  1369. #include "Lighting.cginc"
  1370. #include "UnityPBSLighting.cginc"
  1371. /*ase_pragma*/
  1372. struct appdata {
  1373. float4 vertex : POSITION;
  1374. float4 tangent : TANGENT;
  1375. float3 normal : NORMAL;
  1376. float4 texcoord1 : TEXCOORD1;
  1377. float4 texcoord2 : TEXCOORD2;
  1378. /*ase_vdata:p=p;t=t;n=n;uv1=tc1.xyzw;uv2=tc2.xyzw*/
  1379. UNITY_VERTEX_INPUT_INSTANCE_ID
  1380. };
  1381. struct v2f {
  1382. #if UNITY_VERSION >= 201810
  1383. UNITY_POSITION(pos);
  1384. #else
  1385. float4 pos : SV_POSITION;
  1386. #endif
  1387. float4 lmap : TEXCOORD2;
  1388. #ifndef LIGHTMAP_ON
  1389. #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL
  1390. half3 sh : TEXCOORD3;
  1391. #endif
  1392. #else
  1393. #ifdef DIRLIGHTMAP_OFF
  1394. float4 lmapFadePos : TEXCOORD4;
  1395. #endif
  1396. #endif
  1397. float4 tSpace0 : TEXCOORD5;
  1398. float4 tSpace1 : TEXCOORD6;
  1399. float4 tSpace2 : TEXCOORD7;
  1400. /*ase_interp(8,):sp=sp.xyzw;wn.xyz=tc5.xyz;wt.xyz=tc6.xyz;wbt.xyz=tc7.xyz;wp.x=tc5.w;wp.y=tc6.w;wp.z=tc7.w*/
  1401. UNITY_VERTEX_INPUT_INSTANCE_ID
  1402. UNITY_VERTEX_OUTPUT_STEREO
  1403. };
  1404. #ifdef LIGHTMAP_ON
  1405. float4 unity_LightmapFade;
  1406. #endif
  1407. fixed4 unity_Ambient;
  1408. #ifdef ASE_TESSELLATION
  1409. float _TessPhongStrength;
  1410. float _TessValue;
  1411. float _TessMin;
  1412. float _TessMax;
  1413. float _TessEdgeLength;
  1414. float _TessMaxDisp;
  1415. #endif
  1416. /*ase_globals*/
  1417. /*ase_funcs*/
  1418. v2f VertexFunction (appdata v /*ase_vert_input*/ ) {
  1419. UNITY_SETUP_INSTANCE_ID(v);
  1420. v2f o;
  1421. UNITY_INITIALIZE_OUTPUT(v2f,o);
  1422. UNITY_TRANSFER_INSTANCE_ID(v,o);
  1423. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  1424. /*ase_vert_code:v=appdata;o=v2f*/
  1425. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1426. float3 defaultVertexValue = v.vertex.xyz;
  1427. #else
  1428. float3 defaultVertexValue = float3(0, 0, 0);
  1429. #endif
  1430. float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;10;-1;_Vertex*/defaultVertexValue/*end*/;
  1431. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1432. v.vertex.xyz = vertexValue;
  1433. #else
  1434. v.vertex.xyz += vertexValue;
  1435. #endif
  1436. v.vertex.w = 1;
  1437. v.normal = /*ase_vert_out:Vertex Normal;Float3;11;-1;_VertexNormal*/v.normal/*end*/;
  1438. v.tangent = /*ase_vert_out:Vertex Tangent;Float4;12;-1;_VertexTangent*/v.tangent/*end*/;
  1439. o.pos = UnityObjectToClipPos(v.vertex);
  1440. float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
  1441. fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);
  1442. fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz);
  1443. fixed tangentSign = v.tangent.w * unity_WorldTransformParams.w;
  1444. fixed3 worldBinormal = cross(worldNormal, worldTangent) * tangentSign;
  1445. o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x);
  1446. o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y);
  1447. o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z);
  1448. #ifdef DYNAMICLIGHTMAP_ON
  1449. o.lmap.zw = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
  1450. #else
  1451. o.lmap.zw = 0;
  1452. #endif
  1453. #ifdef LIGHTMAP_ON
  1454. o.lmap.xy = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
  1455. #ifdef DIRLIGHTMAP_OFF
  1456. o.lmapFadePos.xyz = (mul(unity_ObjectToWorld, v.vertex).xyz - unity_ShadowFadeCenterAndType.xyz) * unity_ShadowFadeCenterAndType.w;
  1457. o.lmapFadePos.w = (-UnityObjectToViewPos(v.vertex).z) * (1.0 - unity_ShadowFadeCenterAndType.w);
  1458. #endif
  1459. #else
  1460. o.lmap.xy = 0;
  1461. #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL
  1462. o.sh = 0;
  1463. o.sh = ShadeSHPerVertex (worldNormal, o.sh);
  1464. #endif
  1465. #endif
  1466. return o;
  1467. }
  1468. #if defined(ASE_TESSELLATION)
  1469. struct VertexControl
  1470. {
  1471. float4 vertex : INTERNALTESSPOS;
  1472. float4 tangent : TANGENT;
  1473. float3 normal : NORMAL;
  1474. float4 texcoord1 : TEXCOORD1;
  1475. float4 texcoord2 : TEXCOORD2;
  1476. /*ase_vcontrol*/
  1477. UNITY_VERTEX_INPUT_INSTANCE_ID
  1478. };
  1479. struct TessellationFactors
  1480. {
  1481. float edge[3] : SV_TessFactor;
  1482. float inside : SV_InsideTessFactor;
  1483. };
  1484. VertexControl vert ( appdata v )
  1485. {
  1486. VertexControl o;
  1487. UNITY_SETUP_INSTANCE_ID(v);
  1488. UNITY_TRANSFER_INSTANCE_ID(v, o);
  1489. o.vertex = v.vertex;
  1490. o.tangent = v.tangent;
  1491. o.normal = v.normal;
  1492. o.texcoord1 = v.texcoord1;
  1493. o.texcoord2 = v.texcoord2;
  1494. /*ase_control_code:v=appdata;o=VertexControl*/
  1495. return o;
  1496. }
  1497. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  1498. {
  1499. TessellationFactors o;
  1500. float4 tf = 1;
  1501. float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/;
  1502. float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/;
  1503. #if defined(ASE_FIXED_TESSELLATION)
  1504. tf = FixedTess( tessValue );
  1505. #elif defined(ASE_DISTANCE_TESSELLATION)
  1506. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, UNITY_MATRIX_M, _WorldSpaceCameraPos );
  1507. #elif defined(ASE_LENGTH_TESSELLATION)
  1508. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams );
  1509. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  1510. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  1511. #endif
  1512. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  1513. return o;
  1514. }
  1515. [domain("tri")]
  1516. [partitioning("fractional_odd")]
  1517. [outputtopology("triangle_cw")]
  1518. [patchconstantfunc("TessellationFunction")]
  1519. [outputcontrolpoints(3)]
  1520. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  1521. {
  1522. return patch[id];
  1523. }
  1524. [domain("tri")]
  1525. v2f DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  1526. {
  1527. appdata o = (appdata) 0;
  1528. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  1529. o.tangent = patch[0].tangent * bary.x + patch[1].tangent * bary.y + patch[2].tangent * bary.z;
  1530. o.normal = patch[0].normal * bary.x + patch[1].normal * bary.y + patch[2].normal * bary.z;
  1531. o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z;
  1532. o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z;
  1533. /*ase_domain_code:patch=VertexControl;o=appdata;bary=SV_DomainLocation*/
  1534. #if defined(ASE_PHONG_TESSELLATION)
  1535. float3 pp[3];
  1536. for (int i = 0; i < 3; ++i)
  1537. pp[i] = o.vertex.xyz - patch[i].normal * (dot(o.vertex.xyz, patch[i].normal) - dot(patch[i].vertex.xyz, patch[i].normal));
  1538. float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/;
  1539. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  1540. #endif
  1541. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  1542. return VertexFunction(o);
  1543. }
  1544. #else
  1545. v2f vert ( appdata v )
  1546. {
  1547. return VertexFunction( v );
  1548. }
  1549. #endif
  1550. void frag (v2f IN /*ase_frag_input*/
  1551. , out half4 outGBuffer0 : SV_Target0
  1552. , out half4 outGBuffer1 : SV_Target1
  1553. , out half4 outGBuffer2 : SV_Target2
  1554. , out half4 outEmission : SV_Target3
  1555. #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4)
  1556. , out half4 outShadowMask : SV_Target4
  1557. #endif
  1558. #ifdef _DEPTHOFFSET_ON
  1559. , out float outputDepth : SV_Depth
  1560. #endif
  1561. )
  1562. {
  1563. UNITY_SETUP_INSTANCE_ID(IN);
  1564. #ifdef LOD_FADE_CROSSFADE
  1565. UNITY_APPLY_DITHER_CROSSFADE(IN.pos.xy);
  1566. #endif
  1567. #if defined(_SPECULAR_SETUP)
  1568. SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0;
  1569. #else
  1570. SurfaceOutputStandard o = (SurfaceOutputStandard)0;
  1571. #endif
  1572. /*ase_local_var:wt*/float3 WorldTangent = float3(IN.tSpace0.x,IN.tSpace1.x,IN.tSpace2.x);
  1573. /*ase_local_var:wbt*/float3 WorldBiTangent = float3(IN.tSpace0.y,IN.tSpace1.y,IN.tSpace2.y);
  1574. /*ase_local_var:wn*/float3 WorldNormal = float3(IN.tSpace0.z,IN.tSpace1.z,IN.tSpace2.z);
  1575. /*ase_local_var:wp*/float3 worldPos = float3(IN.tSpace0.w,IN.tSpace1.w,IN.tSpace2.w);
  1576. /*ase_local_var:wvd*/float3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));
  1577. /*ase_local_var:sc*/half atten = 1;
  1578. /*ase_frag_code:IN=v2f*/
  1579. o.Albedo = /*ase_frag_out:Albedo;Float3;0;-1;_Albedo*/fixed3( 0.5, 0.5, 0.5 )/*end*/;
  1580. o.Normal = /*ase_frag_out:Normal;Float3;1;-1;_Normal*/fixed3( 0, 0, 1 )/*end*/;
  1581. o.Emission = /*ase_frag_out:Emission;Float3;2;-1;_Emission*/half3( 0, 0, 0 )/*end*/;
  1582. #if defined(_SPECULAR_SETUP)
  1583. o.Specular = /*ase_frag_out:Specular;Float3;3;-1;_Specular*/fixed3( 0, 0, 0 )/*end*/;
  1584. #else
  1585. o.Metallic = /*ase_frag_out:Metallic;Float;4;-1;_Metallic*/0/*end*/;
  1586. #endif
  1587. o.Smoothness = /*ase_frag_out:Smoothness;Float;5;-1;_Smoothness*/0/*end*/;
  1588. o.Occlusion = /*ase_frag_out:Occlusion;Float;6;-1;_Occlusion*/1/*end*/;
  1589. o.Alpha = /*ase_frag_out:Alpha;Float;7;-1;_Alpha*/1/*end*/;
  1590. float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;8;-1;_AlphaClip*/0.5/*end*/;
  1591. float3 BakedGI = /*ase_frag_out:Baked GI;Float3;9;-1;_BakedGI*/0/*end*/;
  1592. #ifdef _ALPHATEST_ON
  1593. clip( o.Alpha - AlphaClipThreshold );
  1594. #endif
  1595. #ifdef _DEPTHOFFSET_ON
  1596. outputDepth = IN.pos.z;
  1597. #endif
  1598. #ifndef USING_DIRECTIONAL_LIGHT
  1599. fixed3 lightDir = normalize(UnityWorldSpaceLightDir(worldPos));
  1600. #else
  1601. fixed3 lightDir = _WorldSpaceLightPos0.xyz;
  1602. #endif
  1603. float3 worldN;
  1604. worldN.x = dot(IN.tSpace0.xyz, o.Normal);
  1605. worldN.y = dot(IN.tSpace1.xyz, o.Normal);
  1606. worldN.z = dot(IN.tSpace2.xyz, o.Normal);
  1607. worldN = normalize(worldN);
  1608. o.Normal = worldN;
  1609. UnityGI gi;
  1610. UNITY_INITIALIZE_OUTPUT(UnityGI, gi);
  1611. gi.indirect.diffuse = 0;
  1612. gi.indirect.specular = 0;
  1613. gi.light.color = 0;
  1614. gi.light.dir = half3(0,1,0);
  1615. UnityGIInput giInput;
  1616. UNITY_INITIALIZE_OUTPUT(UnityGIInput, giInput);
  1617. giInput.light = gi.light;
  1618. giInput.worldPos = worldPos;
  1619. giInput.worldViewDir = worldViewDir;
  1620. giInput.atten = atten;
  1621. #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON)
  1622. giInput.lightmapUV = IN.lmap;
  1623. #else
  1624. giInput.lightmapUV = 0.0;
  1625. #endif
  1626. #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL
  1627. giInput.ambient = IN.sh;
  1628. #else
  1629. giInput.ambient.rgb = 0.0;
  1630. #endif
  1631. giInput.probeHDR[0] = unity_SpecCube0_HDR;
  1632. giInput.probeHDR[1] = unity_SpecCube1_HDR;
  1633. #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION)
  1634. giInput.boxMin[0] = unity_SpecCube0_BoxMin;
  1635. #endif
  1636. #ifdef UNITY_SPECCUBE_BOX_PROJECTION
  1637. giInput.boxMax[0] = unity_SpecCube0_BoxMax;
  1638. giInput.probePosition[0] = unity_SpecCube0_ProbePosition;
  1639. giInput.boxMax[1] = unity_SpecCube1_BoxMax;
  1640. giInput.boxMin[1] = unity_SpecCube1_BoxMin;
  1641. giInput.probePosition[1] = unity_SpecCube1_ProbePosition;
  1642. #endif
  1643. #if defined(_SPECULAR_SETUP)
  1644. LightingStandardSpecular_GI( o, giInput, gi );
  1645. #else
  1646. LightingStandard_GI( o, giInput, gi );
  1647. #endif
  1648. #ifdef ASE_BAKEDGI
  1649. gi.indirect.diffuse = BakedGI;
  1650. #endif
  1651. #if UNITY_SHOULD_SAMPLE_SH && !defined(LIGHTMAP_ON) && defined(ASE_NO_AMBIENT)
  1652. gi.indirect.diffuse = 0;
  1653. #endif
  1654. #if defined(_SPECULAR_SETUP)
  1655. outEmission = LightingStandardSpecular_Deferred( o, worldViewDir, gi, outGBuffer0, outGBuffer1, outGBuffer2 );
  1656. #else
  1657. outEmission = LightingStandard_Deferred( o, worldViewDir, gi, outGBuffer0, outGBuffer1, outGBuffer2 );
  1658. #endif
  1659. #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4)
  1660. outShadowMask = UnityGetRawBakedOcclusions (IN.lmap.xy, float3(0, 0, 0));
  1661. #endif
  1662. #ifndef UNITY_HDR_ON
  1663. outEmission.rgb = exp2(-outEmission.rgb);
  1664. #endif
  1665. }
  1666. ENDCG
  1667. }
  1668. /*ase_pass*/
  1669. Pass
  1670. {
  1671. /*ase_hide_pass*/
  1672. Name "Meta"
  1673. Tags { "LightMode"="Meta" }
  1674. Cull Off
  1675. CGPROGRAM
  1676. #pragma vertex vert
  1677. #pragma fragment frag
  1678. #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2
  1679. #pragma shader_feature EDITOR_VISUALIZATION
  1680. #ifndef UNITY_PASS_META
  1681. #define UNITY_PASS_META
  1682. #endif
  1683. #include "HLSLSupport.cginc"
  1684. #if !defined( UNITY_INSTANCED_LOD_FADE )
  1685. #define UNITY_INSTANCED_LOD_FADE
  1686. #endif
  1687. #if !defined( UNITY_INSTANCED_SH )
  1688. #define UNITY_INSTANCED_SH
  1689. #endif
  1690. #if !defined( UNITY_INSTANCED_LIGHTMAPSTS )
  1691. #define UNITY_INSTANCED_LIGHTMAPSTS
  1692. #endif
  1693. #include "UnityShaderVariables.cginc"
  1694. #include "UnityCG.cginc"
  1695. #include "Lighting.cginc"
  1696. #include "UnityPBSLighting.cginc"
  1697. #include "UnityMetaPass.cginc"
  1698. /*ase_pragma*/
  1699. struct appdata {
  1700. float4 vertex : POSITION;
  1701. float4 tangent : TANGENT;
  1702. float3 normal : NORMAL;
  1703. float4 texcoord : TEXCOORD0;
  1704. float4 texcoord1 : TEXCOORD1;
  1705. float4 texcoord2 : TEXCOORD2;
  1706. /*ase_vdata:p=p;t=t;n=n;uv0=tc0.xyzw;uv1=tc1.xyzw;uv2=tc2.xyzw*/
  1707. UNITY_VERTEX_INPUT_INSTANCE_ID
  1708. };
  1709. struct v2f {
  1710. #if UNITY_VERSION >= 201810
  1711. UNITY_POSITION(pos);
  1712. #else
  1713. float4 pos : SV_POSITION;
  1714. #endif
  1715. #ifdef EDITOR_VISUALIZATION
  1716. float2 vizUV : TEXCOORD1;
  1717. float4 lightCoord : TEXCOORD2;
  1718. #endif
  1719. /*ase_interp(3,):sp=sp.xyzw*/
  1720. UNITY_VERTEX_INPUT_INSTANCE_ID
  1721. UNITY_VERTEX_OUTPUT_STEREO
  1722. };
  1723. #ifdef ASE_TESSELLATION
  1724. float _TessPhongStrength;
  1725. float _TessValue;
  1726. float _TessMin;
  1727. float _TessMax;
  1728. float _TessEdgeLength;
  1729. float _TessMaxDisp;
  1730. #endif
  1731. /*ase_globals*/
  1732. /*ase_funcs*/
  1733. v2f VertexFunction (appdata v /*ase_vert_input*/ ) {
  1734. UNITY_SETUP_INSTANCE_ID(v);
  1735. v2f o;
  1736. UNITY_INITIALIZE_OUTPUT(v2f,o);
  1737. UNITY_TRANSFER_INSTANCE_ID(v,o);
  1738. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  1739. /*ase_vert_code:v=appdata;o=v2f*/
  1740. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1741. float3 defaultVertexValue = v.vertex.xyz;
  1742. #else
  1743. float3 defaultVertexValue = float3(0, 0, 0);
  1744. #endif
  1745. float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;4;-1;_Vertex*/defaultVertexValue/*end*/;
  1746. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1747. v.vertex.xyz = vertexValue;
  1748. #else
  1749. v.vertex.xyz += vertexValue;
  1750. #endif
  1751. v.vertex.w = 1;
  1752. v.normal = /*ase_vert_out:Vertex Normal;Float3;5;-1;_VertexNormal*/v.normal/*end*/;
  1753. v.tangent = /*ase_vert_out:Vertex Tangent;Float4;6;-1;_VertexTangent*/v.tangent/*end*/;
  1754. #ifdef EDITOR_VISUALIZATION
  1755. o.vizUV = 0;
  1756. o.lightCoord = 0;
  1757. if (unity_VisualizationMode == EDITORVIZ_TEXTURE)
  1758. o.vizUV = UnityMetaVizUV(unity_EditorViz_UVIndex, v.texcoord.xy, v.texcoord1.xy, v.texcoord2.xy, unity_EditorViz_Texture_ST);
  1759. else if (unity_VisualizationMode == EDITORVIZ_SHOWLIGHTMASK)
  1760. {
  1761. o.vizUV = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
  1762. o.lightCoord = mul(unity_EditorViz_WorldToLight, mul(unity_ObjectToWorld, float4(v.vertex.xyz, 1)));
  1763. }
  1764. #endif
  1765. o.pos = UnityMetaVertexPosition(v.vertex, v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST);
  1766. return o;
  1767. }
  1768. #if defined(ASE_TESSELLATION)
  1769. struct VertexControl
  1770. {
  1771. float4 vertex : INTERNALTESSPOS;
  1772. float4 tangent : TANGENT;
  1773. float3 normal : NORMAL;
  1774. float4 texcoord1 : TEXCOORD1;
  1775. float4 texcoord2 : TEXCOORD2;
  1776. /*ase_vcontrol*/
  1777. UNITY_VERTEX_INPUT_INSTANCE_ID
  1778. };
  1779. struct TessellationFactors
  1780. {
  1781. float edge[3] : SV_TessFactor;
  1782. float inside : SV_InsideTessFactor;
  1783. };
  1784. VertexControl vert ( appdata v )
  1785. {
  1786. VertexControl o;
  1787. UNITY_SETUP_INSTANCE_ID(v);
  1788. UNITY_TRANSFER_INSTANCE_ID(v, o);
  1789. o.vertex = v.vertex;
  1790. o.tangent = v.tangent;
  1791. o.normal = v.normal;
  1792. o.texcoord1 = v.texcoord1;
  1793. o.texcoord2 = v.texcoord2;
  1794. /*ase_control_code:v=appdata;o=VertexControl*/
  1795. return o;
  1796. }
  1797. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  1798. {
  1799. TessellationFactors o;
  1800. float4 tf = 1;
  1801. float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/;
  1802. float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/;
  1803. #if defined(ASE_FIXED_TESSELLATION)
  1804. tf = FixedTess( tessValue );
  1805. #elif defined(ASE_DISTANCE_TESSELLATION)
  1806. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, UNITY_MATRIX_M, _WorldSpaceCameraPos );
  1807. #elif defined(ASE_LENGTH_TESSELLATION)
  1808. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams );
  1809. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  1810. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  1811. #endif
  1812. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  1813. return o;
  1814. }
  1815. [domain("tri")]
  1816. [partitioning("fractional_odd")]
  1817. [outputtopology("triangle_cw")]
  1818. [patchconstantfunc("TessellationFunction")]
  1819. [outputcontrolpoints(3)]
  1820. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  1821. {
  1822. return patch[id];
  1823. }
  1824. [domain("tri")]
  1825. v2f DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  1826. {
  1827. appdata o = (appdata) 0;
  1828. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  1829. o.tangent = patch[0].tangent * bary.x + patch[1].tangent * bary.y + patch[2].tangent * bary.z;
  1830. o.normal = patch[0].normal * bary.x + patch[1].normal * bary.y + patch[2].normal * bary.z;
  1831. o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z;
  1832. o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z;
  1833. /*ase_domain_code:patch=VertexControl;o=appdata;bary=SV_DomainLocation*/
  1834. #if defined(ASE_PHONG_TESSELLATION)
  1835. float3 pp[3];
  1836. for (int i = 0; i < 3; ++i)
  1837. pp[i] = o.vertex.xyz - patch[i].normal * (dot(o.vertex.xyz, patch[i].normal) - dot(patch[i].vertex.xyz, patch[i].normal));
  1838. float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/;
  1839. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  1840. #endif
  1841. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  1842. return VertexFunction(o);
  1843. }
  1844. #else
  1845. v2f vert ( appdata v )
  1846. {
  1847. return VertexFunction( v );
  1848. }
  1849. #endif
  1850. fixed4 frag (v2f IN /*ase_frag_input*/
  1851. #ifdef _DEPTHOFFSET_ON
  1852. , out float outputDepth : SV_Depth
  1853. #endif
  1854. ) : SV_Target
  1855. {
  1856. UNITY_SETUP_INSTANCE_ID(IN);
  1857. #ifdef LOD_FADE_CROSSFADE
  1858. UNITY_APPLY_DITHER_CROSSFADE(IN.pos.xy);
  1859. #endif
  1860. #if defined(_SPECULAR_SETUP)
  1861. SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0;
  1862. #else
  1863. SurfaceOutputStandard o = (SurfaceOutputStandard)0;
  1864. #endif
  1865. /*ase_frag_code:IN=v2f*/
  1866. o.Albedo = /*ase_frag_out:Albedo;Float3;0;-1;_Albedo*/fixed3( 0.5, 0.5, 0.5 )/*end*/;
  1867. o.Normal = fixed3( 0, 0, 1 );
  1868. o.Emission = /*ase_frag_out:Emission;Float3;1;-1;_Emission*/half3( 0, 0, 0 )/*end*/;
  1869. o.Alpha = /*ase_frag_out:Alpha;Float;2;-1;_Alpha*/1/*end*/;
  1870. float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;3;-1;_AlphaClip*/0.5/*end*/;
  1871. #ifdef _ALPHATEST_ON
  1872. clip( o.Alpha - AlphaClipThreshold );
  1873. #endif
  1874. #ifdef _DEPTHOFFSET_ON
  1875. outputDepth = IN.pos.z;
  1876. #endif
  1877. UnityMetaInput metaIN;
  1878. UNITY_INITIALIZE_OUTPUT(UnityMetaInput, metaIN);
  1879. metaIN.Albedo = o.Albedo;
  1880. metaIN.Emission = o.Emission;
  1881. #ifdef EDITOR_VISUALIZATION
  1882. metaIN.VizUV = IN.vizUV;
  1883. metaIN.LightCoord = IN.lightCoord;
  1884. #endif
  1885. return UnityMetaFragment(metaIN);
  1886. }
  1887. ENDCG
  1888. }
  1889. /*ase_pass*/
  1890. Pass
  1891. {
  1892. /*ase_hide_pass*/
  1893. Name "ShadowCaster"
  1894. Tags { "LightMode"="ShadowCaster" }
  1895. ZWrite On
  1896. ZTest LEqual
  1897. AlphaToMask Off
  1898. CGPROGRAM
  1899. #pragma vertex vert
  1900. #pragma fragment frag
  1901. #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2
  1902. #pragma multi_compile_shadowcaster
  1903. #ifndef UNITY_PASS_SHADOWCASTER
  1904. #define UNITY_PASS_SHADOWCASTER
  1905. #endif
  1906. #include "HLSLSupport.cginc"
  1907. #ifndef UNITY_INSTANCED_LOD_FADE
  1908. #define UNITY_INSTANCED_LOD_FADE
  1909. #endif
  1910. #ifndef UNITY_INSTANCED_SH
  1911. #define UNITY_INSTANCED_SH
  1912. #endif
  1913. #ifndef UNITY_INSTANCED_LIGHTMAPSTS
  1914. #define UNITY_INSTANCED_LIGHTMAPSTS
  1915. #endif
  1916. #if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN )
  1917. #define CAN_SKIP_VPOS
  1918. #endif
  1919. #include "UnityShaderVariables.cginc"
  1920. #include "UnityCG.cginc"
  1921. #include "Lighting.cginc"
  1922. #include "UnityPBSLighting.cginc"
  1923. /*ase_pragma*/
  1924. struct appdata {
  1925. float4 vertex : POSITION;
  1926. float4 tangent : TANGENT;
  1927. float3 normal : NORMAL;
  1928. float4 texcoord1 : TEXCOORD1;
  1929. float4 texcoord2 : TEXCOORD2;
  1930. /*ase_vdata:p=p;t=t;n=n;uv1=tc1.xyzw;uv2=tc2.xyzw*/
  1931. UNITY_VERTEX_INPUT_INSTANCE_ID
  1932. };
  1933. struct v2f {
  1934. V2F_SHADOW_CASTER;
  1935. /*ase_interp(2,):sp=sp.xyzw*/
  1936. UNITY_VERTEX_INPUT_INSTANCE_ID
  1937. UNITY_VERTEX_OUTPUT_STEREO
  1938. };
  1939. #ifdef UNITY_STANDARD_USE_DITHER_MASK
  1940. sampler3D _DitherMaskLOD;
  1941. #endif
  1942. #ifdef ASE_TESSELLATION
  1943. float _TessPhongStrength;
  1944. float _TessValue;
  1945. float _TessMin;
  1946. float _TessMax;
  1947. float _TessEdgeLength;
  1948. float _TessMaxDisp;
  1949. #endif
  1950. /*ase_globals*/
  1951. /*ase_funcs*/
  1952. v2f VertexFunction (appdata v /*ase_vert_input*/ ) {
  1953. UNITY_SETUP_INSTANCE_ID(v);
  1954. v2f o;
  1955. UNITY_INITIALIZE_OUTPUT(v2f,o);
  1956. UNITY_TRANSFER_INSTANCE_ID(v,o);
  1957. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  1958. /*ase_vert_code:v=appdata;o=v2f*/
  1959. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1960. float3 defaultVertexValue = v.vertex.xyz;
  1961. #else
  1962. float3 defaultVertexValue = float3(0, 0, 0);
  1963. #endif
  1964. float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;3;-1;_Vertex*/defaultVertexValue/*end*/;
  1965. #ifdef ASE_ABSOLUTE_VERTEX_POS
  1966. v.vertex.xyz = vertexValue;
  1967. #else
  1968. v.vertex.xyz += vertexValue;
  1969. #endif
  1970. v.vertex.w = 1;
  1971. v.normal = /*ase_vert_out:Vertex Normal;Float3;4;-1;_VertexNormal*/v.normal/*end*/;
  1972. v.tangent = /*ase_vert_out:Vertex Tangent;Float4;5;-1;_VertexTangent*/v.tangent/*end*/;
  1973. TRANSFER_SHADOW_CASTER_NORMALOFFSET(o)
  1974. return o;
  1975. }
  1976. #if defined(ASE_TESSELLATION)
  1977. struct VertexControl
  1978. {
  1979. float4 vertex : INTERNALTESSPOS;
  1980. float4 tangent : TANGENT;
  1981. float3 normal : NORMAL;
  1982. float4 texcoord1 : TEXCOORD1;
  1983. float4 texcoord2 : TEXCOORD2;
  1984. /*ase_vcontrol*/
  1985. UNITY_VERTEX_INPUT_INSTANCE_ID
  1986. };
  1987. struct TessellationFactors
  1988. {
  1989. float edge[3] : SV_TessFactor;
  1990. float inside : SV_InsideTessFactor;
  1991. };
  1992. VertexControl vert ( appdata v )
  1993. {
  1994. VertexControl o;
  1995. UNITY_SETUP_INSTANCE_ID(v);
  1996. UNITY_TRANSFER_INSTANCE_ID(v, o);
  1997. o.vertex = v.vertex;
  1998. o.tangent = v.tangent;
  1999. o.normal = v.normal;
  2000. o.texcoord1 = v.texcoord1;
  2001. o.texcoord2 = v.texcoord2;
  2002. /*ase_control_code:v=appdata;o=VertexControl*/
  2003. return o;
  2004. }
  2005. TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v)
  2006. {
  2007. TessellationFactors o;
  2008. float4 tf = 1;
  2009. float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/;
  2010. float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/;
  2011. #if defined(ASE_FIXED_TESSELLATION)
  2012. tf = FixedTess( tessValue );
  2013. #elif defined(ASE_DISTANCE_TESSELLATION)
  2014. tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, UNITY_MATRIX_M, _WorldSpaceCameraPos );
  2015. #elif defined(ASE_LENGTH_TESSELLATION)
  2016. tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams );
  2017. #elif defined(ASE_LENGTH_CULL_TESSELLATION)
  2018. tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
  2019. #endif
  2020. o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w;
  2021. return o;
  2022. }
  2023. [domain("tri")]
  2024. [partitioning("fractional_odd")]
  2025. [outputtopology("triangle_cw")]
  2026. [patchconstantfunc("TessellationFunction")]
  2027. [outputcontrolpoints(3)]
  2028. VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
  2029. {
  2030. return patch[id];
  2031. }
  2032. [domain("tri")]
  2033. v2f DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
  2034. {
  2035. appdata o = (appdata) 0;
  2036. o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z;
  2037. o.tangent = patch[0].tangent * bary.x + patch[1].tangent * bary.y + patch[2].tangent * bary.z;
  2038. o.normal = patch[0].normal * bary.x + patch[1].normal * bary.y + patch[2].normal * bary.z;
  2039. o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z;
  2040. o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z;
  2041. /*ase_domain_code:patch=VertexControl;o=appdata;bary=SV_DomainLocation*/
  2042. #if defined(ASE_PHONG_TESSELLATION)
  2043. float3 pp[3];
  2044. for (int i = 0; i < 3; ++i)
  2045. pp[i] = o.vertex.xyz - patch[i].normal * (dot(o.vertex.xyz, patch[i].normal) - dot(patch[i].vertex.xyz, patch[i].normal));
  2046. float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/;
  2047. o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz;
  2048. #endif
  2049. UNITY_TRANSFER_INSTANCE_ID(patch[0], o);
  2050. return VertexFunction(o);
  2051. }
  2052. #else
  2053. v2f vert ( appdata v )
  2054. {
  2055. return VertexFunction( v );
  2056. }
  2057. #endif
  2058. fixed4 frag (v2f IN /*ase_frag_input*/
  2059. #ifdef _DEPTHOFFSET_ON
  2060. , out float outputDepth : SV_Depth
  2061. #endif
  2062. #if !defined( CAN_SKIP_VPOS )
  2063. , UNITY_VPOS_TYPE vpos : VPOS
  2064. #endif
  2065. ) : SV_Target
  2066. {
  2067. UNITY_SETUP_INSTANCE_ID(IN);
  2068. #ifdef LOD_FADE_CROSSFADE
  2069. UNITY_APPLY_DITHER_CROSSFADE(IN.pos.xy);
  2070. #endif
  2071. #if defined(_SPECULAR_SETUP)
  2072. SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0;
  2073. #else
  2074. SurfaceOutputStandard o = (SurfaceOutputStandard)0;
  2075. #endif
  2076. /*ase_frag_code:IN=v2f*/
  2077. o.Normal = fixed3( 0, 0, 1 );
  2078. o.Occlusion = 1;
  2079. o.Alpha = /*ase_frag_out:Alpha;Float;0;-1;_Alpha*/1/*end*/;
  2080. float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;1;-1;_AlphaClip*/0.5/*end*/;
  2081. float AlphaClipThresholdShadow = /*ase_frag_out:Alpha Clip Threshold Shadow;Float;2;-1;_AlphaClipShadow*/0.5/*end*/;
  2082. #ifdef _ALPHATEST_SHADOW_ON
  2083. if (unity_LightShadowBias.z != 0.0)
  2084. clip(o.Alpha - AlphaClipThresholdShadow);
  2085. #ifdef _ALPHATEST_ON
  2086. else
  2087. clip(o.Alpha - AlphaClipThreshold);
  2088. #endif
  2089. #else
  2090. #ifdef _ALPHATEST_ON
  2091. clip(o.Alpha - AlphaClipThreshold);
  2092. #endif
  2093. #endif
  2094. #if defined( CAN_SKIP_VPOS )
  2095. float2 vpos = IN.pos;
  2096. #endif
  2097. #ifdef UNITY_STANDARD_USE_DITHER_MASK
  2098. half alphaRef = tex3D(_DitherMaskLOD, float3(vpos.xy*0.25,o.Alpha*0.9375)).a;
  2099. clip(alphaRef - 0.01);
  2100. #endif
  2101. #ifdef _DEPTHOFFSET_ON
  2102. outputDepth = IN.pos.z;
  2103. #endif
  2104. SHADOW_CASTER_FRAGMENT(IN)
  2105. }
  2106. ENDCG
  2107. }
  2108. /*ase_pass_end*/
  2109. }
  2110. CustomEditor "AmplifyShaderEditor.MaterialInspector"
  2111. }