summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/MaterializeFX/Shaders
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/ThirdParty/MaterializeFX/Shaders')
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/ASE.meta9
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/ASE/MFX_ASE_Uber_Standart.shader434
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/ASE/MFX_ASE_Uber_Standart.shader.meta13
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart.meta10
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/MFX_Uber_Standard.shader396
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/MFX_Uber_Standard.shader.meta10
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCore.cginc780
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCore.cginc.meta10
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForward.cginc26
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForward.cginc.meta10
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc376
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc.meta10
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardInput.cginc240
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardInput.cginc.meta10
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardMeta.cginc64
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardMeta.cginc.meta10
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardShadow.cginc233
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardShadow.cginc.meta10
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/cginc.meta9
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/cginc/MFX.cginc169
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/cginc/MFX.cginc.meta9
21 files changed, 2838 insertions, 0 deletions
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/ASE.meta b/Assets/ThirdParty/MaterializeFX/Shaders/ASE.meta
new file mode 100644
index 00000000..9aac5972
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/ASE.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 014a9b7111b61dc4aa6ab583b753e18d
+folderAsset: yes
+timeCreated: 1521346420
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/ASE/MFX_ASE_Uber_Standart.shader b/Assets/ThirdParty/MaterializeFX/Shaders/ASE/MFX_ASE_Uber_Standart.shader
new file mode 100644
index 00000000..1a35e463
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/ASE/MFX_ASE_Uber_Standart.shader
@@ -0,0 +1,434 @@
+// Made with Amplify Shader Editor
+// Available at the Unity Asset Store - http://u3d.as/y3X
+Shader "QFX/MFX/ASE/Uber/Standart"
+{
+ Properties
+ {
+ _Cutoff( "Mask Clip Value", Float ) = 0.5
+ [HDR]_Color("Albedo Color", Color) = (1,1,1,1)
+ _MainTex("Albedo", 2D) = "white" {}
+ _BumpMap("Normal Map", 2D) = "bump" {}
+ _Glossiness("Smoothness", Range( 0 , 1)) = 0
+ _Metallic("Metallic", Range( 0 , 1)) = 0
+ _MetallicGlossMap("Metallic Texture", 2D) = "white" {}
+ _OcclusionMap("Occlusion", 2D) = "white" {}
+ _OcclusionStrength("Occlusion", Range( 0 , 1)) = 0
+ [HDR]_EmissionColor("Emission Color", Color) = (1,1,1,1)
+ _EmissionMap("Emission Texture", 2D) = "white" {}
+ [HDR]_Color2("Albedo Color 2", Color) = (1,1,1,1)
+ _MainTex2("Albedo 2", 2D) = "white" {}
+ _BumpMap2("Normal Map 2", 2D) = "bump" {}
+ [HDR]_EmissionColor2("Emission Color 2", Color) = (1,1,1,1)
+ _EmissionMap2("Emission Texture 2", 2D) = "white" {}
+ _EmissionMap2_Scroll("Emission Texture 2 Scroll", Vector) = (0,0,0,0)
+ _Emission2Size("Emission 2 Size", Range( 0 , 1)) = 3.008756
+ [HDR]_EdgeColor("Edge Color", Color) = (1,1,1,1)
+ _EdgeMap("Edge Map", 2D) = "white" {}
+ _EdgeMap_Scroll("Edge Map Scroll", Vector) = (0,0,0,0)
+ _EdgeSize("Edge Size", Range( 0 , 1)) = 0
+ _EdgeStrength("Edge Strength", Range( 0 , 1)) = 0.1
+ _DissolveMap1("Dissolve Map", 2D) = "white" {}
+ _DissolveMap1_Scroll("Dissolve Map Scroll", Vector) = (0,0,0,0)
+ _DissolveSize("Dissolve Size", Range( 0 , 3)) = 0
+ [HDR]_DissolveEdgeColor("Dissolve Edge Color", Color) = (0,0,0,0)
+ _DissolveEdgeSize("Dissolve Edge Size", Range( 0 , 1)) = 0.1
+ _MaskOffset("Mask Offset", Range( -5 , 5)) = -1.253842
+ _Axis("Axis", Vector) = (1,0,0,0)
+ [Toggle]_PositionType("Position Type", Float) = 0
+ _WorldPos("World Pos", Vector) = (0,0,0,0)
+ [HideInInspector] _texcoord( "", 2D ) = "white" {}
+ [HideInInspector] _texcoord2( "", 2D ) = "white" {}
+ [HideInInspector] __dirty( "", Int ) = 1
+ }
+
+ SubShader
+ {
+ Tags{ "RenderType" = "TransparentCutout" "Queue" = "Geometry+0" "IsEmissive" = "true" }
+ Cull Back
+ CGPROGRAM
+ #include "UnityShaderVariables.cginc"
+ #pragma target 3.0
+ #pragma surface surf Standard keepalpha addshadow fullforwardshadows noshadow
+ struct Input
+ {
+ float2 uv2_texcoord2;
+ float3 worldPos;
+ float2 uv_texcoord;
+ };
+
+ uniform sampler2D _BumpMap;
+ uniform float4 _BumpMap_ST;
+ uniform sampler2D _BumpMap2;
+ uniform float4 _BumpMap2_ST;
+ uniform float _EdgeSize;
+ uniform float _PositionType;
+ uniform float3 _Axis;
+ uniform float3 _WorldPos;
+ uniform float _MaskOffset;
+ uniform sampler2D _EdgeMap;
+ uniform float2 _EdgeMap_Scroll;
+ uniform float4 _EdgeMap_ST;
+ uniform float4 _Color;
+ uniform sampler2D _MainTex;
+ uniform float4 _MainTex_ST;
+ uniform float4 _Color2;
+ uniform sampler2D _MainTex2;
+ uniform float4 _MainTex2_ST;
+ uniform float _DissolveSize;
+ uniform sampler2D _DissolveMap1;
+ uniform float2 _DissolveMap1_Scroll;
+ uniform float4 _DissolveMap1_ST;
+ uniform float _DissolveEdgeSize;
+ uniform float4 _DissolveEdgeColor;
+ uniform float4 _EmissionColor;
+ uniform sampler2D _EmissionMap;
+ uniform float4 _EmissionMap_ST;
+ uniform float4 _EmissionColor2;
+ uniform sampler2D _EmissionMap2;
+ uniform float2 _EmissionMap2_Scroll;
+ uniform float4 _EmissionMap2_ST;
+ uniform float _Emission2Size;
+ uniform float _EdgeStrength;
+ uniform float4 _EdgeColor;
+ uniform sampler2D _MetallicGlossMap;
+ uniform float4 _MetallicGlossMap_ST;
+ uniform float _Metallic;
+ uniform float _Glossiness;
+ uniform sampler2D _OcclusionMap;
+ uniform float4 _OcclusionMap_ST;
+ uniform float _OcclusionStrength;
+ uniform float _Cutoff = 0.5;
+
+ void surf( Input i , inout SurfaceOutputStandard o )
+ {
+ float2 uv2_BumpMap = i.uv2_texcoord2 * _BumpMap_ST.xy + _BumpMap_ST.zw;
+ float2 uv2_BumpMap2 = i.uv2_texcoord2 * _BumpMap2_ST.xy + _BumpMap2_ST.zw;
+ float3 ase_vertex3Pos = mul( unity_WorldToObject, float4( i.worldPos , 1 ) );
+ float local_direction173 = ( ( _Axis.x * ase_vertex3Pos.x ) + ( _Axis.y * ase_vertex3Pos.y ) + ( _Axis.z * ase_vertex3Pos.z ) );
+ float3 ase_worldPos = i.worldPos;
+ float world_position175 = length( ( _WorldPos - ase_worldPos ) );
+ float pos181 = lerp(local_direction173,world_position175,_PositionType);
+ float mask_pos206 = ( pos181 - _MaskOffset );
+ float2 uv_EdgeMap = i.uv_texcoord * _EdgeMap_ST.xy + _EdgeMap_ST.zw;
+ float2 panner112 = ( uv_EdgeMap + 1.0 * _Time.y * _EdgeMap_Scroll);
+ float2 uv_TexCoord111 = i.uv_texcoord * float2( 1,1 ) + panner112;
+ float edge_pos109 = ( mask_pos206 - ( _MaskOffset - tex2D( _EdgeMap, uv_TexCoord111 ).r ) );
+ float temp_output_22_0 = ( (50.0 + (_EdgeSize - 0.0) * (0.0 - 50.0) / (1.0 - 0.0)) * edge_pos109 );
+ float clampResult38 = clamp( temp_output_22_0 , 0.0 , 1.0 );
+ float clampResult34 = clamp( ( 1.0 - abs( temp_output_22_0 ) ) , 0.0 , 1.0 );
+ float edge_threshold42 = ( ( 1.0 - clampResult38 ) - clampResult34 );
+ float3 lerpResult134 = lerp( UnpackNormal( tex2D( _BumpMap, uv2_BumpMap ) ) , UnpackNormal( tex2D( _BumpMap2, uv2_BumpMap2 ) ) , edge_threshold42);
+ float3 normal136 = lerpResult134;
+ o.Normal = normal136;
+ float2 uv_MainTex = i.uv_texcoord * _MainTex_ST.xy + _MainTex_ST.zw;
+ float2 uv_MainTex2 = i.uv_texcoord * _MainTex2_ST.xy + _MainTex2_ST.zw;
+ float4 lerpResult33 = lerp( ( _Color * tex2D( _MainTex, uv_MainTex ) ) , ( _Color2 * tex2D( _MainTex2, uv_MainTex2 ) ) , edge_threshold42);
+ float4 albedo51 = lerpResult33;
+ o.Albedo = albedo51.rgb;
+ float2 uv_DissolveMap1 = i.uv_texcoord * _DissolveMap1_ST.xy + _DissolveMap1_ST.zw;
+ float2 panner91 = ( uv_DissolveMap1 + 1.0 * _Time.y * _DissolveMap1_Scroll);
+ float2 uv_TexCoord90 = i.uv_texcoord * float2( 1,1 ) + panner91;
+ float alpha48 = ( _DissolveSize + ( mask_pos206 - ( _MaskOffset - tex2D( _DissolveMap1, uv_TexCoord90 ).r ) ) );
+ float2 uv_EmissionMap = i.uv_texcoord * _EmissionMap_ST.xy + _EmissionMap_ST.zw;
+ float4 base_emission147 = ( _EmissionColor * tex2D( _EmissionMap, uv_EmissionMap ) );
+ float2 uv_EmissionMap2 = i.uv_texcoord * _EmissionMap2_ST.xy + _EmissionMap2_ST.zw;
+ float2 panner198 = ( uv_EmissionMap2 + 1.0 * _Time.y * _EmissionMap2_Scroll);
+ float2 uv_TexCoord199 = i.uv_texcoord * float2( 1,1 ) + panner198;
+ float clampResult74 = clamp( ( ( ( 1.0 - tex2D( _EmissionMap2, uv_TexCoord199 ).r ) - 0.5 ) * 3.0 ) , 0.0 , 1.0 );
+ float offset303 = _MaskOffset;
+ float4 Emission2142 = ( _EmissionColor2 * ( pow( clampResult74 , 3.0 ) * saturate( ( ( mask_pos206 - offset303 ) + (0.0 + (_Emission2Size - 0.0) * (3.0 - 0.0) / (1.0 - 0.0)) ) ) ) );
+ float4 lerpResult62 = lerp( base_emission147 , Emission2142 , edge_threshold42);
+ float4 emission64 = lerpResult62;
+ float smoothstepResult281 = smoothstep( ( 1.0 - _EdgeSize ) , 1.0 , clampResult34);
+ float edge72 = smoothstepResult281;
+ float4 final_emission67 = (( alpha48 <= _DissolveEdgeSize ) ? _DissolveEdgeColor : ( emission64 + (( (1.0 + (_EdgeStrength - 0.0) * (0.1 - 1.0) / (1.0 - 0.0)) <= edge72 ) ? _EdgeColor : ( _EdgeColor * edge72 ) ) ) );
+ o.Emission = final_emission67.rgb;
+ float2 uv_MetallicGlossMap = i.uv_texcoord * _MetallicGlossMap_ST.xy + _MetallicGlossMap_ST.zw;
+ float4 tex2DNode117 = tex2D( _MetallicGlossMap, uv_MetallicGlossMap );
+ float Metallic122 = ( tex2DNode117.r * _Metallic );
+ o.Metallic = Metallic122;
+ float Smothness121 = ( tex2DNode117.a * _Glossiness );
+ o.Smoothness = Smothness121;
+ float2 uv_OcclusionMap = i.uv_texcoord * _OcclusionMap_ST.xy + _OcclusionMap_ST.zw;
+ float lerpResult128 = lerp( 1.0 , tex2D( _OcclusionMap, uv_OcclusionMap ).r , _OcclusionStrength);
+ float occlusion129 = lerpResult128;
+ o.Occlusion = occlusion129;
+ o.Alpha = 1;
+ clip( alpha48 - _Cutoff );
+ }
+
+ ENDCG
+ }
+ Fallback "Diffuse"
+ CustomEditor "ASEMaterialInspector"
+}
+/*ASEBEGIN
+Version=14401
+22;525;1906;519;1070.194;-1951.017;1.533927;True;False
+Node;AmplifyShaderEditor.CommentaryNode;183;-423.7378,2827.129;Float;False;1603.808;768.7366;;15;181;180;173;175;171;167;170;166;177;169;168;176;174;179;216;Pos;0.3123919,0.3585208,0.3970588,1;0;0
+Node;AmplifyShaderEditor.Vector3Node;174;-391.5699,2900.668;Float;False;Property;_Axis;Axis;29;0;Create;True;1,0,0;0,1,0;0;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3
+Node;AmplifyShaderEditor.PosVertexDataNode;168;-156.1713,3043.024;Float;False;0;0;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.Vector3Node;176;-295.2139,3254.524;Float;False;Property;_WorldPos;World Pos;31;0;Create;True;0,0,0;2,1,0;0;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3
+Node;AmplifyShaderEditor.BreakToComponentsNode;169;-209.9588,2902.661;Float;False;FLOAT3;1;0;FLOAT3;0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15
+Node;AmplifyShaderEditor.WorldPosInputsNode;179;-307.109,3418.417;Float;False;0;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;167;120.6452,2903.742;Float;False;2;2;0;FLOAT;0.0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;170;120.8962,3107.681;Float;False;2;2;0;FLOAT;0.0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleSubtractOpNode;177;-4.818245,3344.156;Float;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT3;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;166;119.6452,3008.429;Float;False;2;2;0;FLOAT;0.0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.LengthOpNode;216;180.4497,3343.867;Float;False;1;0;FLOAT3;0,0,0,0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.CommentaryNode;141;-428.8928,1487.719;Float;False;2117.487;1266.031;;24;109;107;207;106;206;48;46;8;10;7;5;90;91;96;92;204;104;182;111;6;112;113;114;303;Dissolve & Edge Ramp;0,0.5034485,1,1;0;0
+Node;AmplifyShaderEditor.SimpleAddOpNode;171;323.5943,2905.431;Float;True;3;3;0;FLOAT;0.0;False;1;FLOAT;0.0;False;2;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;173;541.9683,3009.987;Float;False;local_direction;-1;True;1;0;FLOAT;0,0,0,0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.Vector2Node;114;-374.6469,2578.943;Float;False;Property;_EdgeMap_Scroll;Edge Map Scroll;20;0;Create;False;0,0;0,-0.2;0;3;FLOAT2;0;FLOAT;1;FLOAT;2
+Node;AmplifyShaderEditor.TextureCoordinatesNode;113;-366.2211,2451.937;Float;False;0;104;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.CommentaryNode;145;-970.837,-838.501;Float;False;3019.917;1248.701;;21;239;79;142;60;252;56;78;74;77;76;75;57;199;198;196;197;297;301;305;304;283;Emission 2;0,0.08965492,1,1;0;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;175;401.0738,3337.532;Float;False;world_position;-1;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.TextureCoordinatesNode;197;-943.1509,-635.3818;Float;False;0;57;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.Vector2Node;196;-932.1509,-472.3817;Float;False;Property;_EmissionMap2_Scroll;Emission Texture 2 Scroll;16;0;Create;False;0,0;0,-0.01;0;3;FLOAT2;0;FLOAT;1;FLOAT;2
+Node;AmplifyShaderEditor.PannerNode;112;-121.993,2512.987;Float;False;3;0;FLOAT2;0,0;False;2;FLOAT2;0,0;False;1;FLOAT;1.0;False;1;FLOAT2;0
+Node;AmplifyShaderEditor.ToggleSwitchNode;180;746.1513,3263.352;Float;False;Property;_PositionType;Position Type;30;0;Create;True;0;2;0;FLOAT;0.0;False;1;FLOAT;0,0,0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;6;35.1797,1979.412;Float;False;Property;_MaskOffset;Mask Offset;28;0;Create;True;-1.253842;0.82;-5;5;0;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;182;-11.59232,1555.031;Float;True;181;0;1;FLOAT;0
+Node;AmplifyShaderEditor.TextureCoordinatesNode;111;137.9767,2416.424;Float;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.PannerNode;198;-628.1505,-536.3818;Float;False;3;0;FLOAT2;0,0;False;2;FLOAT2;0,0;False;1;FLOAT;1.0;False;1;FLOAT2;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;181;966.1733,3263.43;Float;False;pos;-1;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;104;430.0266,2302.004;Float;True;Property;_EdgeMap;Edge Map;19;0;Create;True;7a632f967e8ad42f5bd275898151ab6a;5f4153e8858407a4997b2b5b3cf502fa;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0.0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1.0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleSubtractOpNode;204;327.484,1560.018;Float;True;2;0;FLOAT;0.0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.TextureCoordinatesNode;199;-452.0786,-560.2536;Float;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleSubtractOpNode;106;759.2487,2255.553;Float;False;2;0;FLOAT;0.0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;57;-670.9076,-770.4292;Float;True;Property;_EmissionMap2;Emission Texture 2;15;0;Create;False;72e8a18a778af834a815921e55b0b5e7;7af3ece29374c234f9406a3bb35df76c;True;0;False;white;Auto;False;Object;-1;Auto;ProceduralTexture;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0.0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1.0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.CommentaryNode;140;-437.5188,515.5353;Float;False;1921.035;901.1141;;14;72;41;34;71;24;38;23;22;110;25;19;42;281;282;Edge;0,0.213793,1,1;0;0
+Node;AmplifyShaderEditor.GetLocalVarNode;207;765.0082,2110.022;Float;False;206;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;206;566.8958,1556.455;Float;False;mask_pos;-1;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.OneMinusNode;75;-380.5573,-743.0378;Float;False;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;19;-379.9276,765.2415;Float;False;Property;_EdgeSize;Edge Size;21;0;Create;True;0;0.851;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleSubtractOpNode;107;994.4472,2197.942;Float;True;2;0;FLOAT;0.0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;109;1270.668,2193.064;Float;True;edge_pos;-1;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;239;-503.3015,-346.6836;Float;True;206;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleSubtractOpNode;76;-225.6996,-742.9838;Float;False;2;0;FLOAT;0.0;False;1;FLOAT;0.5;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;79;-513.4498,82.7339;Float;True;Property;_Emission2Size;Emission 2 Size;17;0;Create;True;3.008756;0.263;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;305;-502.8893,-145.7305;Float;True;303;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;303;378.8377,1842.513;Float;False;offset;-1;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.TFHCRemapNode;25;-81.74005,769.9133;Float;False;5;0;FLOAT;0.0;False;1;FLOAT;0.0;False;2;FLOAT;1.0;False;3;FLOAT;50.0;False;4;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;110;-105.1539,967.375;Float;True;109;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;77;-70.61085,-743.0193;Float;False;2;2;0;FLOAT;0.0;False;1;FLOAT;3.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleSubtractOpNode;304;-275.8893,-217.7305;Float;False;2;0;FLOAT;0.0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.TFHCRemapNode;283;-134.5966,87.75113;Float;False;5;0;FLOAT;0.0;False;1;FLOAT;0.0;False;2;FLOAT;1.0;False;3;FLOAT;0.0;False;4;FLOAT;3.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;22;138.5464,828.3665;Float;True;2;2;0;FLOAT;0.0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.TextureCoordinatesNode;96;-401.3016,2110.514;Float;False;0;5;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.Vector2Node;92;-388.6284,2244.166;Float;False;Property;_DissolveMap1_Scroll;Dissolve Map Scroll;24;0;Create;False;0,0;0,0.1;0;3;FLOAT2;0;FLOAT;1;FLOAT;2
+Node;AmplifyShaderEditor.AbsOpNode;23;386.1413,827.3668;Float;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.ClampOpNode;74;89.20213,-743.6144;Float;True;3;0;FLOAT;0.0;False;1;FLOAT;0.0;False;2;FLOAT;1.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleAddOpNode;297;116.3568,68.21609;Float;True;2;2;0;FLOAT;0.0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.PowerNode;78;333.0464,-745.1406;Float;True;2;0;FLOAT;0.0;False;1;FLOAT;3.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SaturateNode;301;389.6049,68.76625;Float;False;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.CommentaryNode;144;-2367.079,2454.067;Float;False;1215.546;888.8182;;9;64;62;143;147;63;148;59;55;58;Emission;0,0,0,1;0;0
+Node;AmplifyShaderEditor.ClampOpNode;38;478.4857,581.9752;Float;True;3;0;FLOAT;0.0;False;1;FLOAT;0.0;False;2;FLOAT;1.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.OneMinusNode;24;572.4553,826.874;Float;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.PannerNode;91;-109.6854,2178.051;Float;False;3;0;FLOAT2;0,0;False;2;FLOAT2;0,0;False;1;FLOAT;1.0;False;1;FLOAT2;0
+Node;AmplifyShaderEditor.SamplerNode;58;-2330.748,2694.311;Float;True;Property;_EmissionMap;Emission Texture;10;0;Create;False;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0.0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1.0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.OneMinusNode;282;585.6412,1159.689;Float;False;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.ColorNode;55;-2243.104,2510.947;Float;False;Property;_EmissionColor;Emission Color;9;1;[HDR];Create;False;1,1,1,1;0,0,0,1;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.TextureCoordinatesNode;90;75.08936,2126.214;Float;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.OneMinusNode;71;746.7791,583.2764;Float;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.ColorNode;56;621.2866,-717.6028;Float;False;Property;_EmissionColor2;Emission Color 2;14;1;[HDR];Create;False;1,1,1,1;10,2.265721,0.9558833,1;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;252;681.2194,-403.0577;Float;True;2;2;0;FLOAT;0.0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.ClampOpNode;34;776.375,827.1055;Float;True;3;0;FLOAT;0.0;False;1;FLOAT;0.0;False;2;FLOAT;1.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleSubtractOpNode;41;1076.77,681.533;Float;False;2;0;FLOAT;0.0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;5;421.9146,2041.334;Float;True;Property;_DissolveMap1;Dissolve Map;23;0;Create;False;357928dd8c8088440b4662373bd09d7a;7af3ece29374c234f9406a3bb35df76c;True;0;False;white;Auto;False;Object;-1;Auto;ProceduralTexture;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0.0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1.0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;59;-2027.555,2638.392;Float;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;60;895.6096,-603.8718;Float;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.CommentaryNode;138;-2921.519,1727.413;Float;False;1892.359;679.8414;;13;270;267;66;268;65;67;261;266;191;263;21;73;20;Edge Emission;0,0,0,1;0;0
+Node;AmplifyShaderEditor.SmoothstepOpNode;281;1004.857,1142.609;Float;True;3;0;FLOAT;0.0;False;1;FLOAT;1.0;False;2;FLOAT;1.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;142;1105.067,-606.756;Float;True;Emission2;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;63;-2190.285,3077.846;Float;True;42;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;147;-1847.064,2632.806;Float;False;base_emission;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;42;1239.524,677.5984;Float;True;edge_threshold;-1;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;72;1263.493,1138.567;Float;True;edge;-1;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;148;-2220.577,2927.869;Float;False;147;0;1;COLOR;0
+Node;AmplifyShaderEditor.ColorNode;20;-2450.645,2106.615;Float;False;Property;_EdgeColor;Edge Color;18;1;[HDR];Create;True;1,1,1,1;1.014199,4,0.6176476,1;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleSubtractOpNode;7;752.5357,1989.934;Float;False;2;0;FLOAT;0.0;False;1;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;73;-2854.303,2161.33;Float;True;72;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;268;-2759.505,1976.508;Float;False;Property;_EdgeStrength;Edge Strength;22;0;Create;True;0.1;0.264;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;143;-2190.527,3001.836;Float;False;142;0;1;COLOR;0
+Node;AmplifyShaderEditor.LerpOp;62;-1942.219,2933.19;Float;False;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.TFHCRemapNode;270;-2405.99,1886.316;Float;False;5;0;FLOAT;0.0;False;1;FLOAT;0.0;False;2;FLOAT;1.0;False;3;FLOAT;1.0;False;4;FLOAT;0.1;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleSubtractOpNode;8;932.5671,1795.862;Float;True;2;0;FLOAT;0.0;False;1;FLOAT;0,0,0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;10;824.5463,1668.213;Float;False;Property;_DissolveSize;Dissolve Size;25;0;Create;True;0;1.13;0;3;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;21;-2175.788,2229.598;Float;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.CommentaryNode;139;-2363.308,924.239;Float;False;1157.36;791.994;Diffuse;9;54;51;33;32;29;27;28;30;31;;0,0,0,1;0;0
+Node;AmplifyShaderEditor.CommentaryNode;131;-2366.09,401.7381;Float;False;752.2058;441.1062;Normal;5;136;135;134;133;132;;0,0,0,1;0;0
+Node;AmplifyShaderEditor.SimpleAddOpNode;46;1163.299,1672.349;Float;True;2;2;0;FLOAT;0.0;False;1;FLOAT;0.15;False;1;FLOAT;0
+Node;AmplifyShaderEditor.TFHCCompareLowerEqual;267;-1999.937,1868.927;Float;False;4;0;FLOAT;0.0;False;1;FLOAT;0.0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;65;-2894.496,1769.581;Float;True;64;0;1;COLOR;0
+Node;AmplifyShaderEditor.CommentaryNode;125;-2364.525,-100.9189;Float;False;775.5983;398.703;Ambient Occlusion;4;129;128;127;126;;0,0,0,1;0;0
+Node;AmplifyShaderEditor.SamplerNode;31;-2198.205,1507.454;Float;True;Property;_MainTex2;Albedo 2;12;0;Create;False;None;7af3ece29374c234f9406a3bb35df76c;True;0;False;white;Auto;False;Object;-1;Auto;ProceduralTexture;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0.0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1.0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.ColorNode;30;-2110.562,1326.09;Float;False;Property;_Color2;Albedo Color 2;11;1;[HDR];Create;False;1,1,1,1;1.696588,1.696588,1.696588,1;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.ColorNode;27;-2233.972,965.9473;Float;False;Property;_Color;Albedo Color;1;1;[HDR];Create;False;1,1,1,1;1,1,1,1;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.CommentaryNode;115;-2360.427,-636.3569;Float;False;803.3513;419.69;Metallic & Smoothness;7;122;121;120;119;118;117;116;;0,0,0,1;0;0
+Node;AmplifyShaderEditor.SamplerNode;28;-2315.616,1132.712;Float;True;Property;_MainTex;Albedo;2;0;Create;False;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0.0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1.0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.RegisterLocalVarNode;64;-1732.511,2929.326;Float;True;emission;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;263;-1884.084,2050.768;Float;False;48;0;1;FLOAT;0
+Node;AmplifyShaderEditor.ColorNode;266;-1833.756,2228.011;Float;False;Property;_DissolveEdgeColor;Dissolve Edge Color;26;1;[HDR];Create;True;0,0,0,0;0,2.517242,5,1;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.RegisterLocalVarNode;48;1404.641,1544.734;Float;True;alpha;-1;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;29;-2018.423,1093.392;Float;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;54;-1731.499,1485.125;Float;False;42;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;127;-2325.607,159.1787;Float;False;Property;_OcclusionStrength;Occlusion;8;0;Create;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;135;-2041.038,725.6877;Float;False;42;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleAddOpNode;66;-1830.751,1784.17;Float;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;191;-1976.316,2150.18;Float;False;Property;_DissolveEdgeSize;Dissolve Edge Size;27;0;Create;True;0.1;0.615;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;117;-2335.049,-591.3156;Float;True;Property;_MetallicGlossMap;Metallic Texture;6;0;Create;False;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0.0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1.0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SamplerNode;133;-2341.837,643.4477;Float;True;Property;_BumpMap2;Normal Map 2;13;0;Create;False;None;ca02b40705c7a9a41bd0355840d6aa1b;True;1;True;bump;Auto;True;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;0,0;False;1;FLOAT2;0,0;False;2;FLOAT;1.0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1.0;False;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;32;-1895.012,1451.535;Float;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;118;-2332.794,-319.4345;Float;False;Property;_Glossiness;Smoothness;4;0;Create;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;126;-2325.607,-48.821;Float;True;Property;_OcclusionMap;Occlusion;7;0;Create;False;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0.0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1.0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SamplerNode;132;-2337.39,455.3405;Float;True;Property;_BumpMap;Normal Map;3;0;Create;False;None;None;True;1;True;bump;Auto;True;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;0,0;False;1;FLOAT2;0,0;False;2;FLOAT;1.0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1.0;False;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.RangedFloatNode;116;-2331.299,-395.7352;Float;False;Property;_Metallic;Metallic;5;0;Create;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;120;-1984.865,-507.0139;Float;False;2;2;0;FLOAT;0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.LerpOp;33;-1731.833,1284.201;Float;False;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.TFHCCompareLowerEqual;261;-1577.201,1999.727;Float;False;4;0;FLOAT;0.0;False;1;FLOAT;0.0;False;2;COLOR;0,0,0,0;False;3;COLOR;0.0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;119;-1977.549,-376.1849;Float;False;2;2;0;FLOAT;0,0,0,0;False;1;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.LerpOp;128;-1986.477,27.58154;Float;False;3;0;FLOAT;1.0;False;1;FLOAT;0.0;False;2;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.LerpOp;134;-1992.136,572.4476;Float;False;3;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT;0,0,0;False;1;FLOAT3;0
+Node;AmplifyShaderEditor.GetLocalVarNode;68;1900.775,814.4269;Float;False;67;0;1;COLOR;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;67;-1301.85,1996.763;Float;False;final_emission;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;124;1901.03,958.9058;Float;False;121;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;121;-1819.582,-379.2387;Float;False;Smothness;-1;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;52;1924.548,603.3089;Float;False;51;0;1;COLOR;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;136;-1822.036,567.6877;Float;False;normal;-1;True;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0
+Node;AmplifyShaderEditor.GetLocalVarNode;49;1916.192,1115.315;Float;False;48;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;129;-1802.378,24.15844;Float;False;occlusion;-1;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;51;-1439.285,1225.089;Float;False;albedo;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;122;-1823.127,-511.2867;Float;False;Metallic;-1;True;1;0;FLOAT;0.0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;137;1908.081,692.4705;Float;False;136;0;1;FLOAT3;0
+Node;AmplifyShaderEditor.GetLocalVarNode;123;1917.03,884.9058;Float;False;122;0;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;130;1901.373,1032.003;Float;False;129;0;1;FLOAT;0
+Node;AmplifyShaderEditor.StandardSurfaceOutputNode;0;2160.694,767.8633;Float;False;True;2;Float;ASEMaterialInspector;0;0;Standard;QFX/MFX/ASE/Uber/Standart;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;Back;0;0;False;0;0;False;0;Custom;0.5;True;True;0;True;TransparentCutout;;Geometry;All;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;False;0;255;255;0;0;0;0;0;0;0;0;False;2;15;10;25;False;0.5;False;0;Zero;Zero;0;Zero;Zero;OFF;OFF;0;False;0;0,0,0,0;VertexOffset;True;False;Cylindrical;False;Relative;0;;0;-1;-1;-1;0;0;0;False;0;0;16;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT;0.0;False;4;FLOAT;0.0;False;5;FLOAT;0.0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT;0.0;False;9;FLOAT;0.0;False;10;FLOAT;0.0;False;13;FLOAT3;0,0,0;False;11;FLOAT3;0,0,0;False;12;FLOAT3;0,0,0;False;14;FLOAT4;0,0,0,0;False;15;FLOAT3;0,0,0;False;0
+WireConnection;169;0;174;0
+WireConnection;167;0;169;0
+WireConnection;167;1;168;1
+WireConnection;170;0;169;2
+WireConnection;170;1;168;3
+WireConnection;177;0;176;0
+WireConnection;177;1;179;0
+WireConnection;166;0;169;1
+WireConnection;166;1;168;2
+WireConnection;216;0;177;0
+WireConnection;171;0;167;0
+WireConnection;171;1;166;0
+WireConnection;171;2;170;0
+WireConnection;173;0;171;0
+WireConnection;175;0;216;0
+WireConnection;112;0;113;0
+WireConnection;112;2;114;0
+WireConnection;180;0;173;0
+WireConnection;180;1;175;0
+WireConnection;111;1;112;0
+WireConnection;198;0;197;0
+WireConnection;198;2;196;0
+WireConnection;181;0;180;0
+WireConnection;104;1;111;0
+WireConnection;204;0;182;0
+WireConnection;204;1;6;0
+WireConnection;199;1;198;0
+WireConnection;106;0;6;0
+WireConnection;106;1;104;1
+WireConnection;57;1;199;0
+WireConnection;206;0;204;0
+WireConnection;75;0;57;1
+WireConnection;107;0;207;0
+WireConnection;107;1;106;0
+WireConnection;109;0;107;0
+WireConnection;76;0;75;0
+WireConnection;303;0;6;0
+WireConnection;25;0;19;0
+WireConnection;77;0;76;0
+WireConnection;304;0;239;0
+WireConnection;304;1;305;0
+WireConnection;283;0;79;0
+WireConnection;22;0;25;0
+WireConnection;22;1;110;0
+WireConnection;23;0;22;0
+WireConnection;74;0;77;0
+WireConnection;297;0;304;0
+WireConnection;297;1;283;0
+WireConnection;78;0;74;0
+WireConnection;301;0;297;0
+WireConnection;38;0;22;0
+WireConnection;24;0;23;0
+WireConnection;91;0;96;0
+WireConnection;91;2;92;0
+WireConnection;282;0;19;0
+WireConnection;90;1;91;0
+WireConnection;71;0;38;0
+WireConnection;252;0;78;0
+WireConnection;252;1;301;0
+WireConnection;34;0;24;0
+WireConnection;41;0;71;0
+WireConnection;41;1;34;0
+WireConnection;5;1;90;0
+WireConnection;59;0;55;0
+WireConnection;59;1;58;0
+WireConnection;60;0;56;0
+WireConnection;60;1;252;0
+WireConnection;281;0;34;0
+WireConnection;281;1;282;0
+WireConnection;142;0;60;0
+WireConnection;147;0;59;0
+WireConnection;42;0;41;0
+WireConnection;72;0;281;0
+WireConnection;7;0;6;0
+WireConnection;7;1;5;1
+WireConnection;62;0;148;0
+WireConnection;62;1;143;0
+WireConnection;62;2;63;0
+WireConnection;270;0;268;0
+WireConnection;8;0;206;0
+WireConnection;8;1;7;0
+WireConnection;21;0;20;0
+WireConnection;21;1;73;0
+WireConnection;46;0;10;0
+WireConnection;46;1;8;0
+WireConnection;267;0;270;0
+WireConnection;267;1;73;0
+WireConnection;267;2;20;0
+WireConnection;267;3;21;0
+WireConnection;64;0;62;0
+WireConnection;48;0;46;0
+WireConnection;29;0;27;0
+WireConnection;29;1;28;0
+WireConnection;66;0;65;0
+WireConnection;66;1;267;0
+WireConnection;32;0;30;0
+WireConnection;32;1;31;0
+WireConnection;120;0;117;1
+WireConnection;120;1;116;0
+WireConnection;33;0;29;0
+WireConnection;33;1;32;0
+WireConnection;33;2;54;0
+WireConnection;261;0;263;0
+WireConnection;261;1;191;0
+WireConnection;261;2;266;0
+WireConnection;261;3;66;0
+WireConnection;119;0;117;4
+WireConnection;119;1;118;0
+WireConnection;128;1;126;1
+WireConnection;128;2;127;0
+WireConnection;134;0;132;0
+WireConnection;134;1;133;0
+WireConnection;134;2;135;0
+WireConnection;67;0;261;0
+WireConnection;121;0;119;0
+WireConnection;136;0;134;0
+WireConnection;129;0;128;0
+WireConnection;51;0;33;0
+WireConnection;122;0;120;0
+WireConnection;0;0;52;0
+WireConnection;0;1;137;0
+WireConnection;0;2;68;0
+WireConnection;0;3;123;0
+WireConnection;0;4;124;0
+WireConnection;0;5;130;0
+WireConnection;0;10;49;0
+ASEEND*/
+//CHKSM=E9C122A7BA462D121BE8ED02DA3EE8A13D6B8617 \ No newline at end of file
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/ASE/MFX_ASE_Uber_Standart.shader.meta b/Assets/ThirdParty/MaterializeFX/Shaders/ASE/MFX_ASE_Uber_Standart.shader.meta
new file mode 100644
index 00000000..39ceeb04
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/ASE/MFX_ASE_Uber_Standart.shader.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: c1fb3def9a81d5046885ce3d4113cb14
+timeCreated: 1523786859
+licenseType: Store
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures:
+ - _EdgeMap: {fileID: 2800000, guid: 7a632f967e8ad42f5bd275898151ab6a, type: 3}
+ - _DissolveMap1: {fileID: 2800000, guid: 357928dd8c8088440b4662373bd09d7a, type: 3}
+ - _EmissionMap2: {fileID: 2800000, guid: 72e8a18a778af834a815921e55b0b5e7, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart.meta b/Assets/ThirdParty/MaterializeFX/Shaders/Standart.meta
new file mode 100644
index 00000000..b94f6183
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 28009e27ccac98a4cadabcd3e840393e
+folderAsset: yes
+timeCreated: 1522477067
+licenseType: Store
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/MFX_Uber_Standard.shader b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/MFX_Uber_Standard.shader
new file mode 100644
index 00000000..d0e35318
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/MFX_Uber_Standard.shader
@@ -0,0 +1,396 @@
+// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
+
+Shader "QFX/MFX/Uber/Standart"
+{
+ Properties
+ {
+ _Color("Color", Color) = (1,1,1,1)
+ _MainTex("Albedo", 2D) = "white" {}
+
+ _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
+
+ _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5
+ _GlossMapScale("Smoothness Scale", Range(0.0, 1.0)) = 1.0
+ [Enum(Metallic Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel ("Smoothness texture channel", Float) = 0
+
+ [Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0
+ _MetallicGlossMap("Metallic", 2D) = "white" {}
+
+ [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
+ [ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0
+
+ _BumpScale("Scale", Float) = 1.0
+ _BumpMap("Normal Map", 2D) = "bump" {}
+
+ _Parallax ("Height Scale", Range (0.005, 0.08)) = 0.02
+ _ParallaxMap ("Height Map", 2D) = "black" {}
+
+ _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0
+ _OcclusionMap("Occlusion", 2D) = "white" {}
+
+ _EmissionColor("Color", Color) = (0,0,0)
+ _EmissionMap("Emission", 2D) = "white" {}
+
+ _DetailMask("Detail Mask", 2D) = "white" {}
+
+ _DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {}
+ _DetailNormalMapScale("Scale", Float) = 1.0
+ _DetailNormalMap("Normal Map", 2D) = "bump" {}
+
+ [Enum(UV0,0,UV1,1)] _UVSec ("UV Set for secondary textures", Float) = 0
+
+ // Blending state
+ [HideInInspector] _Mode ("__mode", Float) = 0.0
+ [HideInInspector] _SrcBlend ("__src", Float) = 1.0
+ [HideInInspector] _DstBlend ("__dst", Float) = 0.0
+ [HideInInspector] _ZWrite ("__zw", Float) = 1.0
+
+ //MFX
+ [HDR]_Color2("Color 2", Color) = (1,1,1,1)
+ _MainTex2("Albedo 2", 2D) = "white" {}
+
+ _BumpMap2("Normal Map 2", 2D) = "bump" {}
+
+ [HDR]_EmissionColor2("Color 2", Color) = (0,0,0)
+ _EmissionMap2("Emission 2", 2D) = "white" {}
+ _EmissionSize2("Emission 2 Size", Range(0.0, 1)) = 0
+
+ [HDR] _EdgeColor("Edge Color", Color) = (1,1,1,1)
+ _EdgeSize("Edge Size", Range(0.0, 1)) = 0.0
+ _EdgeStrength("Edge Strength", Range( 0 , 1)) = 0.1
+
+ _EdgeRampMap1("Edge RampMap", 2D) = "white"{}
+ _EdgeRampMap1_Scroll("Edge RampMap Scroll", Vector) = (0,0,0,0)
+
+ _DissolveMap1("Dissolve Map", 2D) = "white"{}
+ _DissolveMap1_Scroll("Dissolve Map Scroll", Vector) = (0,0,0,0)
+
+ _DissolveSize("Dissolve Size", Range(0.0, 3.0)) = 1
+ [HDR]_DissolveEdgeColor("Dissolve Edge Color", Color) = (0,0,0,0)
+ _DissolveEdgeSize("Dissolve Edge Size", Range( 0 , 1)) = 0.1
+
+ [KeywordEnum(None, Axis Local, Axis Global, Global)] _MaskType("Mask Type", Float) = 0
+ [Enum(X,0,Y,1,Z,2)] _CutoffAxis("Axis", int) = 0
+ _MaskOffset("Mask Offset", Float) = 0.5
+ //if MaskType is Global
+ _MaskWorldPosition("Mask World Position", Vector) = (0,0,0,0)
+ }
+
+ CGINCLUDE
+ #define UNITY_SETUP_BRDF_INPUT MetallicSetup
+ ENDCG
+
+ SubShader
+ {
+ Tags { "RenderType"="TransparentCutout" "Queue" = "Geometry+0" "IsEmissive" = "true" "PerformanceChecks"="False" "DisableBatching"="True"}
+ LOD 300
+
+ // ------------------------------------------------------------------
+ // Base forward pass (directional light, emission, lightmaps, ...)
+ Pass
+ {
+ Name "FORWARD"
+ Tags { "LightMode" = "ForwardBase" }
+
+ Blend [_SrcBlend] [_DstBlend]
+ ZWrite [_ZWrite]
+
+ CGPROGRAM
+ #pragma target 3.0
+
+ // -------------------------------------
+
+ //MFX
+ #pragma shader_feature _MASKTYPE_NONE _MASKTYPE_AXIS_LOCAL _MASKTYPE_AXIS_GLOBAL _MASKTYPE_GLOBAL
+
+ #pragma shader_feature _NORMALMAP
+ #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #pragma shader_feature _EMISSION
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature ___ _DETAIL_MULX2
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
+ #pragma shader_feature _PARALLAXMAP
+
+ #pragma multi_compile_fwdbase
+ #pragma multi_compile_fog
+ #pragma multi_compile_instancing
+ // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
+ //#pragma multi_compile _ LOD_FADE_CROSSFADE
+
+ #pragma vertex vertBase
+ #pragma fragment fragBase
+ #include "UnityStandardCoreForward.cginc"
+
+ ENDCG
+ }
+ // ------------------------------------------------------------------
+ // Additive forward pass (one light per pass)
+ Pass
+ {
+ Name "FORWARD_DELTA"
+ Tags { "LightMode" = "ForwardAdd" }
+ Blend [_SrcBlend] One
+ Fog { Color (0,0,0,0) } // in additive pass fog should be black
+ ZWrite Off
+ ZTest LEqual
+
+ CGPROGRAM
+ #pragma target 3.0
+
+ // -------------------------------------
+
+ //MFX
+ #pragma shader_feature _MASKTYPE_NONE _MASKTYPE_AXIS_LOCAL _MASKTYPE_AXIS_GLOBAL _MASKTYPE_GLOBAL
+
+ #pragma shader_feature _NORMALMAP
+ #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature ___ _DETAIL_MULX2
+ #pragma shader_feature _PARALLAXMAP
+
+ #pragma multi_compile_fwdadd_fullshadows
+ #pragma multi_compile_fog
+ // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
+ //#pragma multi_compile _ LOD_FADE_CROSSFADE
+
+ #pragma vertex vertAdd
+ #pragma fragment fragAdd
+ #include "UnityStandardCoreForward.cginc"
+
+ ENDCG
+ }
+ // ------------------------------------------------------------------
+ // Shadow rendering pass
+ Pass {
+ Name "ShadowCaster"
+ Tags { "LightMode" = "ShadowCaster" }
+
+ ZWrite On ZTest LEqual
+
+ CGPROGRAM
+ #pragma target 3.0
+
+ // -------------------------------------
+
+ //MFX
+ #pragma shader_feature _MASKTYPE_NONE _MASKTYPE_AXIS_LOCAL _MASKTYPE_AXIS_GLOBAL _MASKTYPE_GLOBAL
+ //#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #define _ALPHATEST_ON
+
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _PARALLAXMAP
+ #pragma multi_compile_shadowcaster
+ #pragma multi_compile_instancing
+ // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
+ //#pragma multi_compile _ LOD_FADE_CROSSFADE
+
+ #pragma vertex vertShadowCaster
+ #pragma fragment fragShadowCaster
+
+ #include "UnityStandardShadow.cginc"
+
+ ENDCG
+ }
+ // ------------------------------------------------------------------
+ // Deferred pass
+ Pass
+ {
+ Name "DEFERRED"
+ Tags { "LightMode" = "Deferred" }
+
+ CGPROGRAM
+ #pragma target 3.0
+ #pragma exclude_renderers nomrt
+
+
+ // -------------------------------------
+
+ //MFX
+ #pragma shader_feature _MASKTYPE_NONE _MASKTYPE_AXIS_LOCAL _MASKTYPE_AXIS_GLOBAL _MASKTYPE_GLOBAL
+
+ #pragma shader_feature _NORMALMAP
+ #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #pragma shader_feature _EMISSION
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature ___ _DETAIL_MULX2
+ #pragma shader_feature _PARALLAXMAP
+
+ #pragma multi_compile_prepassfinal
+ #pragma multi_compile_instancing
+ // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
+ //#pragma multi_compile _ LOD_FADE_CROSSFADE
+
+ #pragma vertex vertDeferred
+ #pragma fragment fragDeferred
+
+ #include "UnityStandardCore.cginc"
+
+ ENDCG
+ }
+
+ // ------------------------------------------------------------------
+ // Extracts information for lightmapping, GI (emission, albedo, ...)
+ // This pass it not used during regular rendering.
+ Pass
+ {
+ Name "META"
+ Tags { "LightMode"="Meta" }
+
+ Cull Off
+
+ CGPROGRAM
+ #pragma vertex vert_meta
+ #pragma fragment frag_meta
+
+ #pragma shader_feature _EMISSION
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature ___ _DETAIL_MULX2
+ #pragma shader_feature EDITOR_VISUALIZATION
+
+ #include "UnityStandardMeta.cginc"
+ ENDCG
+ }
+ }
+
+ SubShader
+ {
+ Tags { "RenderType"="Opaque" "PerformanceChecks"="False" }
+ LOD 150
+
+ // ------------------------------------------------------------------
+ // Base forward pass (directional light, emission, lightmaps, ...)
+ Pass
+ {
+ Name "FORWARD"
+ Tags { "LightMode" = "ForwardBase" }
+
+ Blend [_SrcBlend] [_DstBlend]
+ ZWrite [_ZWrite]
+
+ CGPROGRAM
+ #pragma target 3.0
+
+ //MFX
+ #pragma shader_feature _MASKTYPE_NONE _MASKTYPE_AXIS_LOCAL _MASKTYPE_AXIS_GLOBAL _MASKTYPE_GLOBAL
+ //#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #define _ALPHATEST_ON
+
+ #pragma shader_feature _NORMALMAP
+ #pragma shader_feature _EMISSION
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
+ // SM2.0: NOT SUPPORTED shader_feature ___ _DETAIL_MULX2
+ // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP
+
+ #pragma skip_variants SHADOWS_SOFT DIRLIGHTMAP_COMBINED
+
+ #pragma multi_compile_fwdbase
+ #pragma multi_compile_fog
+
+ #pragma vertex vertBase
+ #pragma fragment fragBase
+ #include "UnityStandardCoreForward.cginc"
+
+ ENDCG
+ }
+ // ------------------------------------------------------------------
+ // Additive forward pass (one light per pass)
+ Pass
+ {
+ Name "FORWARD_DELTA"
+ Tags { "LightMode" = "ForwardAdd" }
+ Blend [_SrcBlend] One
+ Fog { Color (0,0,0,0) } // in additive pass fog should be black
+ ZWrite Off
+ ZTest LEqual
+
+ CGPROGRAM
+ #pragma target 3.0
+
+ //MFX
+ #pragma shader_feature _MASKTYPE_NONE _MASKTYPE_AXIS_LOCAL _MASKTYPE_AXIS_GLOBAL _MASKTYPE_GLOBAL
+ //#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #define _ALPHATEST_ON
+
+ #pragma shader_feature _NORMALMAP
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature ___ _DETAIL_MULX2
+ // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP
+ #pragma skip_variants SHADOWS_SOFT
+
+ #pragma multi_compile_fwdadd_fullshadows
+ #pragma multi_compile_fog
+
+ #pragma vertex vertAdd
+ #pragma fragment fragAdd
+ #include "UnityStandardCoreForward.cginc"
+
+ ENDCG
+ }
+ // ------------------------------------------------------------------
+ // Shadow rendering pass
+ Pass {
+ Name "ShadowCaster"
+ Tags { "LightMode" = "ShadowCaster" }
+
+ ZWrite On ZTest LEqual
+
+ CGPROGRAM
+ #pragma target 3.0
+
+ //MFX
+ #pragma shader_feature _MASKTYPE_NONE _MASKTYPE_AXIS_LOCAL _MASKTYPE_AXIS_GLOBAL _MASKTYPE_GLOBAL
+ //#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #define _ALPHATEST_ON
+
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma skip_variants SHADOWS_SOFT
+ #pragma multi_compile_shadowcaster
+
+ #pragma vertex vertShadowCaster
+ #pragma fragment fragShadowCaster
+
+ #include "UnityStandardShadow.cginc"
+
+ ENDCG
+ }
+
+ // ------------------------------------------------------------------
+ // Extracts information for lightmapping, GI (emission, albedo, ...)
+ // This pass it not used during regular rendering.
+ Pass
+ {
+ Name "META"
+ Tags { "LightMode"="Meta" }
+
+ Cull Off
+
+ CGPROGRAM
+ #pragma vertex vert_meta
+ #pragma fragment frag_meta
+
+ #pragma shader_feature _EMISSION
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature ___ _DETAIL_MULX2
+ #pragma shader_feature EDITOR_VISUALIZATION
+
+ #include "UnityStandardMeta.cginc"
+ ENDCG
+ }
+ }
+
+ FallBack "VertexLit"
+ //CustomEditor "StandardShaderGUI"
+}
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/MFX_Uber_Standard.shader.meta b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/MFX_Uber_Standard.shader.meta
new file mode 100644
index 00000000..40bd2df3
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/MFX_Uber_Standard.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 9e35c66820c9df547a3b14aafe70ae96
+timeCreated: 1522477183
+licenseType: Store
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCore.cginc b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCore.cginc
new file mode 100644
index 00000000..1db6fa6c
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCore.cginc
@@ -0,0 +1,780 @@
+// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
+
+#ifndef UNITY_STANDARD_CORE_INCLUDED
+#define UNITY_STANDARD_CORE_INCLUDED
+
+#include "UnityCG.cginc"
+#include "UnityShaderVariables.cginc"
+#include "UnityInstancing.cginc"
+#include "UnityStandardConfig.cginc"
+#include "UnityStandardInput.cginc"
+#include "UnityPBSLighting.cginc"
+#include "UnityStandardUtils.cginc"
+#include "UnityGBuffer.cginc"
+#include "UnityStandardBRDF.cginc"
+#include "AutoLight.cginc"
+
+//MFX
+#include "Assets/MaterializeFX/Shaders/cginc/MFX.cginc"
+
+//-------------------------------------------------------------------------------------
+// counterpart for NormalizePerPixelNormal
+// skips normalization per-vertex and expects normalization to happen per-pixel
+half3 NormalizePerVertexNormal (float3 n) // takes float to avoid overflow
+{
+ #if (SHADER_TARGET < 30) || UNITY_STANDARD_SIMPLE
+ return normalize(n);
+ #else
+ return n; // will normalize per-pixel instead
+ #endif
+}
+
+half3 NormalizePerPixelNormal (half3 n)
+{
+ #if (SHADER_TARGET < 30) || UNITY_STANDARD_SIMPLE
+ return n;
+ #else
+ return normalize(n);
+ #endif
+}
+
+//-------------------------------------------------------------------------------------
+UnityLight MainLight ()
+{
+ UnityLight l;
+
+ l.color = _LightColor0.rgb;
+ l.dir = _WorldSpaceLightPos0.xyz;
+ return l;
+}
+
+UnityLight AdditiveLight (half3 lightDir, half atten)
+{
+ UnityLight l;
+
+ l.color = _LightColor0.rgb;
+ l.dir = lightDir;
+ #ifndef USING_DIRECTIONAL_LIGHT
+ l.dir = NormalizePerPixelNormal(l.dir);
+ #endif
+
+ // shadow the light
+ l.color *= atten;
+ return l;
+}
+
+UnityLight DummyLight ()
+{
+ UnityLight l;
+ l.color = 0;
+ l.dir = half3 (0,1,0);
+ return l;
+}
+
+UnityIndirect ZeroIndirect ()
+{
+ UnityIndirect ind;
+ ind.diffuse = 0;
+ ind.specular = 0;
+ return ind;
+}
+
+//-------------------------------------------------------------------------------------
+// Common fragment setup
+
+// deprecated
+half3 WorldNormal(half4 tan2world[3])
+{
+ return normalize(tan2world[2].xyz);
+}
+
+// deprecated
+#ifdef _TANGENT_TO_WORLD
+ half3x3 ExtractTangentToWorldPerPixel(half4 tan2world[3])
+ {
+ half3 t = tan2world[0].xyz;
+ half3 b = tan2world[1].xyz;
+ half3 n = tan2world[2].xyz;
+
+ #if UNITY_TANGENT_ORTHONORMALIZE
+ n = NormalizePerPixelNormal(n);
+
+ // ortho-normalize Tangent
+ t = normalize (t - n * dot(t, n));
+
+ // recalculate Binormal
+ half3 newB = cross(n, t);
+ b = newB * sign (dot (newB, b));
+ #endif
+
+ return half3x3(t, b, n);
+ }
+#else
+ half3x3 ExtractTangentToWorldPerPixel(half4 tan2world[3])
+ {
+ return half3x3(0,0,0,0,0,0,0,0,0);
+ }
+#endif
+
+half3 PerPixelWorldNormal(float4 i_tex, float4 mfxUv, half4 tangentToWorld[3], float3 mfxVertexPos)
+{
+#ifdef _NORMALMAP
+ half3 tangent = tangentToWorld[0].xyz;
+ half3 binormal = tangentToWorld[1].xyz;
+ half3 normal = tangentToWorld[2].xyz;
+
+ #if UNITY_TANGENT_ORTHONORMALIZE
+ normal = NormalizePerPixelNormal(normal);
+
+ // ortho-normalize Tangent
+ tangent = normalize (tangent - normal * dot(tangent, normal));
+
+ // recalculate Binormal
+ half3 newB = cross(normal, tangent);
+ binormal = newB * sign (dot (newB, binormal));
+ #endif
+
+ half3 normalTangent = NormalInTangentSpace(i_tex);
+ normalTangent = GetMfxNormal(i_tex.xy, mfxUv, mfxVertexPos, normalTangent);
+ half3 normalWorld = NormalizePerPixelNormal(tangent * normalTangent.x + binormal * normalTangent.y + normal * normalTangent.z); // @TODO: see if we can squeeze this normalize on SM2.0 as well
+#else
+ half3 normalWorld = normalize(tangentToWorld[2].xyz);
+#endif
+ return normalWorld;
+}
+
+#ifdef _PARALLAXMAP
+ #define IN_VIEWDIR4PARALLAX(i) NormalizePerPixelNormal(half3(i.tangentToWorldAndPackedData[0].w,i.tangentToWorldAndPackedData[1].w,i.tangentToWorldAndPackedData[2].w))
+ #define IN_VIEWDIR4PARALLAX_FWDADD(i) NormalizePerPixelNormal(i.viewDirForParallax.xyz)
+#else
+ #define IN_VIEWDIR4PARALLAX(i) half3(0,0,0)
+ #define IN_VIEWDIR4PARALLAX_FWDADD(i) half3(0,0,0)
+#endif
+
+#if UNITY_REQUIRE_FRAG_WORLDPOS
+ #if UNITY_PACK_WORLDPOS_WITH_TANGENT
+ #define IN_WORLDPOS(i) half3(i.tangentToWorldAndPackedData[0].w,i.tangentToWorldAndPackedData[1].w,i.tangentToWorldAndPackedData[2].w)
+ #else
+ #define IN_WORLDPOS(i) i.posWorld
+ #endif
+ #define IN_WORLDPOS_FWDADD(i) i.posWorld
+#else
+ #define IN_WORLDPOS(i) half3(0,0,0)
+ #define IN_WORLDPOS_FWDADD(i) half3(0,0,0)
+#endif
+
+#define IN_LIGHTDIR_FWDADD(i) half3(i.tangentToWorldAndLightDir[0].w, i.tangentToWorldAndLightDir[1].w, i.tangentToWorldAndLightDir[2].w)
+
+#define FRAGMENT_SETUP(x, worldPos) FragmentCommonData x = \
+ FragmentSetup(i.tex, i.eyeVec, IN_VIEWDIR4PARALLAX(i), i.tangentToWorldAndPackedData, IN_WORLDPOS(i), i.mfxUv, worldPos);
+
+#define FRAGMENT_SETUP_FWDADD(x, worldPos) FragmentCommonData x = \
+ FragmentSetup(i.tex, i.eyeVec, IN_VIEWDIR4PARALLAX_FWDADD(i), i.tangentToWorldAndLightDir, IN_WORLDPOS_FWDADD(i), i.mfxUv, worldPos);
+
+struct FragmentCommonData
+{
+ half3 diffColor, specColor;
+ // Note: smoothness & oneMinusReflectivity for optimization purposes, mostly for DX9 SM2.0 level.
+ // Most of the math is being done on these (1-x) values, and that saves a few precious ALU slots.
+ half oneMinusReflectivity, smoothness;
+ half3 normalWorld, eyeVec;
+ half alpha;
+ float3 posWorld;
+
+#if UNITY_STANDARD_SIMPLE
+ half3 reflUVW;
+#endif
+
+#if UNITY_STANDARD_SIMPLE
+ half3 tangentSpaceNormal;
+#endif
+};
+
+#ifndef UNITY_SETUP_BRDF_INPUT
+ #define UNITY_SETUP_BRDF_INPUT SpecularSetup
+#endif
+
+inline FragmentCommonData SpecularSetup (float4 i_tex, float4 mfxUv, float3 mfxVertexPos)
+{
+ half4 specGloss = SpecularGloss(i_tex.xy);
+ half3 specColor = specGloss.rgb;
+ half smoothness = specGloss.a;
+
+ half oneMinusReflectivity;
+ half3 diffColor = EnergyConservationBetweenDiffuseAndSpecular (Albedo(i_tex), specColor, /*out*/ oneMinusReflectivity);
+
+ FragmentCommonData o = (FragmentCommonData)0;
+ //MFX
+ o.diffColor = GetMfxAlbedo(i_tex.xy, mfxUv, mfxVertexPos, diffColor);
+ o.specColor = specColor;
+ o.oneMinusReflectivity = oneMinusReflectivity;
+ o.smoothness = smoothness;
+
+ //MFX
+ o.alpha = GetMfxDissolve(mfxUv, mfxVertexPos);
+
+ return o;
+}
+
+
+inline FragmentCommonData RoughnessSetup(float4 i_tex, float4 mfxUv, float3 mfxVertexPos)
+{
+ half2 metallicGloss = MetallicRough(i_tex.xy);
+ half metallic = metallicGloss.x;
+ half smoothness = metallicGloss.y; // this is 1 minus the square root of real roughness m.
+
+ half oneMinusReflectivity;
+ half3 specColor;
+ half3 diffColor = DiffuseAndSpecularFromMetallic(Albedo(i_tex), metallic, /*out*/ specColor, /*out*/ oneMinusReflectivity);
+
+ FragmentCommonData o = (FragmentCommonData)0;
+ //MFX
+ o.diffColor = GetMfxAlbedo(i_tex.xy, mfxUv, mfxVertexPos, diffColor);
+ o.specColor = specColor;
+ o.oneMinusReflectivity = oneMinusReflectivity;
+ o.smoothness = smoothness;
+
+ //MFX
+ o.alpha = GetMfxDissolve(mfxUv, mfxVertexPos);
+
+ return o;
+}
+
+inline FragmentCommonData MetallicSetup (float4 i_tex, float4 mfxUv, float3 mfxVertexPos)
+{
+ half2 metallicGloss = MetallicGloss(i_tex.xy);
+ half metallic = metallicGloss.x;
+ half smoothness = metallicGloss.y; // this is 1 minus the square root of real roughness m.
+
+ half oneMinusReflectivity;
+ half3 specColor;
+ half3 diffColor = DiffuseAndSpecularFromMetallic (Albedo(i_tex), metallic, /*out*/ specColor, /*out*/ oneMinusReflectivity);
+
+ FragmentCommonData o = (FragmentCommonData)0;
+ //MFX
+ o.diffColor = GetMfxAlbedo(i_tex.xy, mfxUv, mfxVertexPos, diffColor);
+ o.specColor = specColor;
+ o.oneMinusReflectivity = oneMinusReflectivity;
+ o.smoothness = smoothness;
+
+ //MFX
+ o.alpha = GetMfxDissolve(mfxUv, mfxVertexPos);
+
+ return o;
+}
+
+// parallax transformed texcoord is used to sample occlusion
+inline FragmentCommonData FragmentSetup (inout float4 i_tex, half3 i_eyeVec, half3 i_viewDirForParallax, half4 tangentToWorld[3], float3 i_posWorld, float4 mfxUv, float3 mfxVertexPos)
+{
+ i_tex = Parallax(i_tex, i_viewDirForParallax);
+
+ //MFX
+ half alpha = GetMfxDissolve(mfxUv, mfxVertexPos);
+ MfxClip(alpha);
+
+ //half alpha = Alpha(i_tex.xy);
+ //#if defined(_ALPHATEST_ON)
+ // clip (alpha - _Cutoff);
+ //#endif
+
+ FragmentCommonData o = UNITY_SETUP_BRDF_INPUT (i_tex, mfxUv, mfxVertexPos);
+ o.normalWorld = PerPixelWorldNormal(i_tex, mfxUv, tangentToWorld, mfxVertexPos);
+ o.eyeVec = NormalizePerPixelNormal(i_eyeVec);
+ o.posWorld = i_posWorld;
+
+ // NOTE: shader relies on pre-multiply alpha-blend (_SrcBlend = One, _DstBlend = OneMinusSrcAlpha)
+ //MFX
+ half3 diffColor = PreMultiplyAlpha (o.diffColor, alpha, o.oneMinusReflectivity, /*out*/ o.alpha);
+ o.diffColor = GetMfxAlbedo(i_tex.xy, mfxUv, mfxVertexPos, diffColor);
+
+ o.alpha = alpha;
+
+ return o;
+}
+
+inline UnityGI FragmentGI (FragmentCommonData s, half occlusion, half4 i_ambientOrLightmapUV, half atten, UnityLight light, bool reflections)
+{
+ UnityGIInput d;
+ d.light = light;
+ d.worldPos = s.posWorld;
+ d.worldViewDir = -s.eyeVec;
+ d.atten = atten;
+ #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON)
+ d.ambient = 0;
+ d.lightmapUV = i_ambientOrLightmapUV;
+ #else
+ d.ambient = i_ambientOrLightmapUV.rgb;
+ d.lightmapUV = 0;
+ #endif
+
+ d.probeHDR[0] = unity_SpecCube0_HDR;
+ d.probeHDR[1] = unity_SpecCube1_HDR;
+ #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION)
+ d.boxMin[0] = unity_SpecCube0_BoxMin; // .w holds lerp value for blending
+ #endif
+ #ifdef UNITY_SPECCUBE_BOX_PROJECTION
+ d.boxMax[0] = unity_SpecCube0_BoxMax;
+ d.probePosition[0] = unity_SpecCube0_ProbePosition;
+ d.boxMax[1] = unity_SpecCube1_BoxMax;
+ d.boxMin[1] = unity_SpecCube1_BoxMin;
+ d.probePosition[1] = unity_SpecCube1_ProbePosition;
+ #endif
+
+ if(reflections)
+ {
+ Unity_GlossyEnvironmentData g = UnityGlossyEnvironmentSetup(s.smoothness, -s.eyeVec, s.normalWorld, s.specColor);
+ // Replace the reflUVW if it has been compute in Vertex shader. Note: the compiler will optimize the calcul in UnityGlossyEnvironmentSetup itself
+ #if UNITY_STANDARD_SIMPLE
+ g.reflUVW = s.reflUVW;
+ #endif
+
+ return UnityGlobalIllumination (d, occlusion, s.normalWorld, g);
+ }
+ else
+ {
+ return UnityGlobalIllumination (d, occlusion, s.normalWorld);
+ }
+}
+
+inline UnityGI FragmentGI (FragmentCommonData s, half occlusion, half4 i_ambientOrLightmapUV, half atten, UnityLight light)
+{
+ return FragmentGI(s, occlusion, i_ambientOrLightmapUV, atten, light, true);
+}
+
+
+//-------------------------------------------------------------------------------------
+half4 OutputForward (half4 output, half alphaFromSurface)
+{
+ #if defined(_ALPHABLEND_ON) || defined(_ALPHAPREMULTIPLY_ON)
+ output.a = alphaFromSurface;
+ #else
+ UNITY_OPAQUE_ALPHA(output.a);
+ #endif
+ return output;
+}
+
+inline half4 VertexGIForward(VertexInput v, float3 posWorld, half3 normalWorld)
+{
+ half4 ambientOrLightmapUV = 0;
+ // Static lightmaps
+ #ifdef LIGHTMAP_ON
+ ambientOrLightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
+ ambientOrLightmapUV.zw = 0;
+ // Sample light probe for Dynamic objects only (no static or dynamic lightmaps)
+ #elif UNITY_SHOULD_SAMPLE_SH
+ #ifdef VERTEXLIGHT_ON
+ // Approximated illumination from non-important point lights
+ ambientOrLightmapUV.rgb = Shade4PointLights (
+ unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0,
+ unity_LightColor[0].rgb, unity_LightColor[1].rgb, unity_LightColor[2].rgb, unity_LightColor[3].rgb,
+ unity_4LightAtten0, posWorld, normalWorld);
+ #endif
+
+ ambientOrLightmapUV.rgb = ShadeSHPerVertex (normalWorld, ambientOrLightmapUV.rgb);
+ #endif
+
+ #ifdef DYNAMICLIGHTMAP_ON
+ ambientOrLightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
+ #endif
+
+ return ambientOrLightmapUV;
+}
+
+// ------------------------------------------------------------------
+// Base forward pass (directional light, emission, lightmaps, ...)
+
+struct VertexOutputForwardBase
+{
+ UNITY_POSITION(pos);
+ float4 tex : TEXCOORD0;
+ half3 eyeVec : TEXCOORD1;
+ half4 tangentToWorldAndPackedData[3] : TEXCOORD2; // [3x3:tangentToWorld | 1x3:viewDirForParallax or worldPos]
+ half4 ambientOrLightmapUV : TEXCOORD5; // SH or Lightmap UV
+ UNITY_SHADOW_COORDS(6)
+ UNITY_FOG_COORDS(7)
+
+ // next ones would not fit into SM2.0 limits, but they are always for SM3.0+
+ //#if UNITY_REQUIRE_FRAG_WORLDPOS && !UNITY_PACK_WORLDPOS_WITH_TANGENT
+ float3 posWorld : TEXCOORD8;
+ //#endif
+
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ UNITY_VERTEX_OUTPUT_STEREO
+
+ //MFX
+ float4 mfxUv : TEXCOORD9;
+};
+
+VertexOutputForwardBase vertForwardBase (VertexInput v)
+{
+ UNITY_SETUP_INSTANCE_ID(v);
+ VertexOutputForwardBase o;
+ UNITY_INITIALIZE_OUTPUT(VertexOutputForwardBase, o);
+ UNITY_TRANSFER_INSTANCE_ID(v, o);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+
+ float4 posWorld = mul(unity_ObjectToWorld, v.vertex);
+ //#if UNITY_REQUIRE_FRAG_WORLDPOS
+ #if UNITY_PACK_WORLDPOS_WITH_TANGENT
+ o.tangentToWorldAndPackedData[0].w = posWorld.x;
+ o.tangentToWorldAndPackedData[1].w = posWorld.y;
+ o.tangentToWorldAndPackedData[2].w = posWorld.z;
+ #else
+ o.posWorld = posWorld.xyz;
+ #endif
+ //#endif
+ o.pos = UnityObjectToClipPos(v.vertex);
+
+ o.tex = TexCoords(v);
+ o.eyeVec = NormalizePerVertexNormal(posWorld.xyz - _WorldSpaceCameraPos);
+ float3 normalWorld = UnityObjectToWorldNormal(v.normal);
+ #ifdef _TANGENT_TO_WORLD
+ float4 tangentWorld = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w);
+
+ float3x3 tangentToWorld = CreateTangentToWorldPerVertex(normalWorld, tangentWorld.xyz, tangentWorld.w);
+ o.tangentToWorldAndPackedData[0].xyz = tangentToWorld[0];
+ o.tangentToWorldAndPackedData[1].xyz = tangentToWorld[1];
+ o.tangentToWorldAndPackedData[2].xyz = tangentToWorld[2];
+ #else
+ o.tangentToWorldAndPackedData[0].xyz = 0;
+ o.tangentToWorldAndPackedData[1].xyz = 0;
+ o.tangentToWorldAndPackedData[2].xyz = normalWorld;
+ #endif
+
+ //We need this for shadow receving
+ UNITY_TRANSFER_SHADOW(o, v.uv1);
+
+ o.ambientOrLightmapUV = VertexGIForward(v, posWorld, normalWorld);
+
+ #ifdef _PARALLAXMAP
+ TANGENT_SPACE_ROTATION;
+ half3 viewDirForParallax = mul (rotation, ObjSpaceViewDir(v.vertex));
+ o.tangentToWorldAndPackedData[0].w = viewDirForParallax.x;
+ o.tangentToWorldAndPackedData[1].w = viewDirForParallax.y;
+ o.tangentToWorldAndPackedData[2].w = viewDirForParallax.z;
+ #endif
+
+ //MFX
+ PassMfxVertex2Fragment(v.uv0.xy, o.mfxUv);
+
+ UNITY_TRANSFER_FOG(o,o.pos);
+ return o;
+}
+
+half4 fragForwardBaseInternal (VertexOutputForwardBase i)
+{
+ UNITY_APPLY_DITHER_CROSSFADE(i.pos.xy);
+
+#if UNITY_PACK_WORLDPOS_WITH_TANGENT
+ float3 posWorld = float3(i.tangentToWorldAndPackedData[0].w, i.tangentToWorldAndPackedData[1].w, i.tangentToWorldAndPackedData[2].w);
+#else
+ float3 posWorld = i.posWorld;
+#endif
+
+ FRAGMENT_SETUP(s, posWorld)
+
+ UNITY_SETUP_INSTANCE_ID(i);
+ UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
+
+ UnityLight mainLight = MainLight ();
+ UNITY_LIGHT_ATTENUATION(atten, i, s.posWorld);
+
+ half occlusion = Occlusion(i.tex.xy);
+ UnityGI gi = FragmentGI (s, occlusion, i.ambientOrLightmapUV, atten, mainLight);
+
+ half4 c = UNITY_BRDF_PBS (s.diffColor, s.specColor, s.oneMinusReflectivity, s.smoothness, s.normalWorld, -s.eyeVec, gi.light, gi.indirect);
+ //c.rgb += Emission(i.tex.xy);
+
+ //MFX
+ c.rgb += GetMfxEmission(i.tex.xy, i.mfxUv, posWorld, Emission(i.tex.xy), s.alpha);
+
+ UNITY_APPLY_FOG(i.fogCoord, c.rgb);
+ return OutputForward (c, s.alpha);
+}
+
+half4 fragForwardBase (VertexOutputForwardBase i) : SV_Target // backward compatibility (this used to be the fragment entry function)
+{
+ return fragForwardBaseInternal(i);
+}
+
+// ------------------------------------------------------------------
+// Additive forward pass (one light per pass)
+
+struct VertexOutputForwardAdd
+{
+ UNITY_POSITION(pos);
+ float4 tex : TEXCOORD0;
+ half3 eyeVec : TEXCOORD1;
+ half4 tangentToWorldAndLightDir[3] : TEXCOORD2; // [3x3:tangentToWorld | 1x3:lightDir]
+ float3 posWorld : TEXCOORD5;
+ UNITY_SHADOW_COORDS(6)
+ UNITY_FOG_COORDS(7)
+
+ // next ones would not fit into SM2.0 limits, but they are always for SM3.0+
+#if defined(_PARALLAXMAP)
+ half3 viewDirForParallax : TEXCOORD8;
+#endif
+
+ UNITY_VERTEX_OUTPUT_STEREO
+
+ //MFX
+ float4 mfxUv : TEXCOORD9;
+};
+
+VertexOutputForwardAdd vertForwardAdd (VertexInput v)
+{
+ UNITY_SETUP_INSTANCE_ID(v);
+ VertexOutputForwardAdd o;
+ UNITY_INITIALIZE_OUTPUT(VertexOutputForwardAdd, o);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+
+ float4 posWorld = mul(unity_ObjectToWorld, v.vertex);
+ o.pos = UnityObjectToClipPos(v.vertex);
+
+ o.tex = TexCoords(v);
+ o.eyeVec = NormalizePerVertexNormal(posWorld.xyz - _WorldSpaceCameraPos);
+ o.posWorld = posWorld.xyz;
+ float3 normalWorld = UnityObjectToWorldNormal(v.normal);
+ #ifdef _TANGENT_TO_WORLD
+ float4 tangentWorld = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w);
+
+ float3x3 tangentToWorld = CreateTangentToWorldPerVertex(normalWorld, tangentWorld.xyz, tangentWorld.w);
+ o.tangentToWorldAndLightDir[0].xyz = tangentToWorld[0];
+ o.tangentToWorldAndLightDir[1].xyz = tangentToWorld[1];
+ o.tangentToWorldAndLightDir[2].xyz = tangentToWorld[2];
+ #else
+ o.tangentToWorldAndLightDir[0].xyz = 0;
+ o.tangentToWorldAndLightDir[1].xyz = 0;
+ o.tangentToWorldAndLightDir[2].xyz = normalWorld;
+ #endif
+ //We need this for shadow receiving
+ UNITY_TRANSFER_SHADOW(o, v.uv1);
+
+ float3 lightDir = _WorldSpaceLightPos0.xyz - posWorld.xyz * _WorldSpaceLightPos0.w;
+ #ifndef USING_DIRECTIONAL_LIGHT
+ lightDir = NormalizePerVertexNormal(lightDir);
+ #endif
+ o.tangentToWorldAndLightDir[0].w = lightDir.x;
+ o.tangentToWorldAndLightDir[1].w = lightDir.y;
+ o.tangentToWorldAndLightDir[2].w = lightDir.z;
+
+ #ifdef _PARALLAXMAP
+ TANGENT_SPACE_ROTATION;
+ o.viewDirForParallax = mul (rotation, ObjSpaceViewDir(v.vertex));
+ #endif
+
+ //MFX
+ PassMfxVertex2Fragment(v.uv0.xy, o.mfxUv);
+
+ UNITY_TRANSFER_FOG(o,o.pos);
+ return o;
+}
+
+half4 fragForwardAddInternal (VertexOutputForwardAdd i)
+{
+ UNITY_APPLY_DITHER_CROSSFADE(i.pos.xy);
+
+ FRAGMENT_SETUP_FWDADD(s, i.posWorld)
+
+ UNITY_LIGHT_ATTENUATION(atten, i, s.posWorld)
+ UnityLight light = AdditiveLight (IN_LIGHTDIR_FWDADD(i), atten);
+ UnityIndirect noIndirect = ZeroIndirect ();
+
+ half4 c = UNITY_BRDF_PBS (s.diffColor, s.specColor, s.oneMinusReflectivity, s.smoothness, s.normalWorld, -s.eyeVec, light, noIndirect);
+
+ UNITY_APPLY_FOG_COLOR(i.fogCoord, c.rgb, half4(0,0,0,0)); // fog towards black in additive pass
+ return OutputForward (c, s.alpha);
+}
+
+half4 fragForwardAdd (VertexOutputForwardAdd i) : SV_Target // backward compatibility (this used to be the fragment entry function)
+{
+ return fragForwardAddInternal(i);
+}
+
+// ------------------------------------------------------------------
+// Deferred pass
+
+struct VertexOutputDeferred
+{
+ UNITY_POSITION(pos);
+ float4 tex : TEXCOORD0;
+ half3 eyeVec : TEXCOORD1;
+ half4 tangentToWorldAndPackedData[3]: TEXCOORD2; // [3x3:tangentToWorld | 1x3:viewDirForParallax or worldPos]
+ half4 ambientOrLightmapUV : TEXCOORD5; // SH or Lightmap UVs
+
+ //#if UNITY_REQUIRE_FRAG_WORLDPOS && !UNITY_PACK_WORLDPOS_WITH_TANGENT
+ float3 posWorld : TEXCOORD6;
+ //#endif
+
+ UNITY_VERTEX_OUTPUT_STEREO
+
+ //MFX
+ float4 mfxUv : TEXCOORD7;
+};
+
+
+VertexOutputDeferred vertDeferred (VertexInput v)
+{
+ UNITY_SETUP_INSTANCE_ID(v);
+ VertexOutputDeferred o;
+ UNITY_INITIALIZE_OUTPUT(VertexOutputDeferred, o);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+
+ float4 posWorld = mul(unity_ObjectToWorld, v.vertex);
+ //#if UNITY_REQUIRE_FRAG_WORLDPOS
+ #if UNITY_PACK_WORLDPOS_WITH_TANGENT
+ o.tangentToWorldAndPackedData[0].w = posWorld.x;
+ o.tangentToWorldAndPackedData[1].w = posWorld.y;
+ o.tangentToWorldAndPackedData[2].w = posWorld.z;
+ #else
+ o.posWorld = posWorld.xyz;
+ #endif
+ //#endif
+ o.pos = UnityObjectToClipPos(v.vertex);
+
+ o.tex = TexCoords(v);
+ o.eyeVec = NormalizePerVertexNormal(posWorld.xyz - _WorldSpaceCameraPos);
+ float3 normalWorld = UnityObjectToWorldNormal(v.normal);
+ #ifdef _TANGENT_TO_WORLD
+ float4 tangentWorld = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w);
+
+ float3x3 tangentToWorld = CreateTangentToWorldPerVertex(normalWorld, tangentWorld.xyz, tangentWorld.w);
+ o.tangentToWorldAndPackedData[0].xyz = tangentToWorld[0];
+ o.tangentToWorldAndPackedData[1].xyz = tangentToWorld[1];
+ o.tangentToWorldAndPackedData[2].xyz = tangentToWorld[2];
+ #else
+ o.tangentToWorldAndPackedData[0].xyz = 0;
+ o.tangentToWorldAndPackedData[1].xyz = 0;
+ o.tangentToWorldAndPackedData[2].xyz = normalWorld;
+ #endif
+
+ o.ambientOrLightmapUV = 0;
+ #ifdef LIGHTMAP_ON
+ o.ambientOrLightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
+ #elif UNITY_SHOULD_SAMPLE_SH
+ o.ambientOrLightmapUV.rgb = ShadeSHPerVertex (normalWorld, o.ambientOrLightmapUV.rgb);
+ #endif
+ #ifdef DYNAMICLIGHTMAP_ON
+ o.ambientOrLightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
+ #endif
+
+ #ifdef _PARALLAXMAP
+ TANGENT_SPACE_ROTATION;
+ half3 viewDirForParallax = mul (rotation, ObjSpaceViewDir(v.vertex));
+ o.tangentToWorldAndPackedData[0].w = viewDirForParallax.x;
+ o.tangentToWorldAndPackedData[1].w = viewDirForParallax.y;
+ o.tangentToWorldAndPackedData[2].w = viewDirForParallax.z;
+ #endif
+
+ //MFX
+ PassMfxVertex2Fragment(v.uv0.xy, o.mfxUv);
+
+ return o;
+}
+
+void fragDeferred (
+ VertexOutputDeferred i,
+ out half4 outGBuffer0 : SV_Target0,
+ out half4 outGBuffer1 : SV_Target1,
+ out half4 outGBuffer2 : SV_Target2,
+ out half4 outEmission : SV_Target3 // RT3: emission (rgb), --unused-- (a)
+#if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4)
+ ,out half4 outShadowMask : SV_Target4 // RT4: shadowmask (rgba)
+#endif
+)
+{
+ #if (SHADER_TARGET < 30)
+ outGBuffer0 = 1;
+ outGBuffer1 = 1;
+ outGBuffer2 = 0;
+ outEmission = 0;
+ #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4)
+ outShadowMask = 1;
+ #endif
+ return;
+ #endif
+
+ UNITY_APPLY_DITHER_CROSSFADE(i.pos.xy);
+
+#if UNITY_PACK_WORLDPOS_WITH_TANGENT
+ float3 posWorld = float3(i.tangentToWorldAndPackedData[0].w, i.tangentToWorldAndPackedData[1].w, i.tangentToWorldAndPackedData[2].w);
+#else
+ float3 posWorld = i.posWorld;
+#endif
+
+ //MFX
+ FRAGMENT_SETUP(s, posWorld)
+
+ // no analytic lights in this pass
+ UnityLight dummyLight = DummyLight ();
+ half atten = 1;
+
+ // only GI
+ half occlusion = Occlusion(i.tex.xy);
+#if UNITY_ENABLE_REFLECTION_BUFFERS
+ bool sampleReflectionsInDeferred = false;
+#else
+ bool sampleReflectionsInDeferred = true;
+#endif
+
+ UnityGI gi = FragmentGI (s, occlusion, i.ambientOrLightmapUV, atten, dummyLight, sampleReflectionsInDeferred);
+
+ half3 emissiveColor = UNITY_BRDF_PBS (s.diffColor, s.specColor, s.oneMinusReflectivity, s.smoothness, s.normalWorld, -s.eyeVec, gi.light, gi.indirect).rgb;
+
+ #ifdef _EMISSION
+ //emissiveColor += Emission (i.tex.xy);
+
+ //MFX
+ emissiveColor += GetMfxEmission(i.tex.xy, i.mfxUv, posWorld, Emission(i.tex.xy), s.alpha);
+ #endif
+
+ #ifndef UNITY_HDR_ON
+ emissiveColor.rgb = exp2(-emissiveColor.rgb);
+ #endif
+
+ UnityStandardData data;
+ data.diffuseColor = s.diffColor;
+ data.occlusion = occlusion;
+ data.specularColor = s.specColor;
+ data.smoothness = s.smoothness;
+ data.normalWorld = s.normalWorld;
+
+ UnityStandardDataToGbuffer(data, outGBuffer0, outGBuffer1, outGBuffer2);
+
+ // Emissive lighting buffer
+ outEmission = half4(emissiveColor, 1);
+
+ // Baked direct lighting occlusion if any
+ #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4)
+ outShadowMask = UnityGetRawBakedOcclusions(i.ambientOrLightmapUV.xy, IN_WORLDPOS(i));
+ #endif
+}
+
+
+//
+// Old FragmentGI signature. Kept only for backward compatibility and will be removed soon
+//
+
+inline UnityGI FragmentGI(
+ float3 posWorld,
+ half occlusion, half4 i_ambientOrLightmapUV, half atten, half smoothness, half3 normalWorld, half3 eyeVec,
+ UnityLight light,
+ bool reflections)
+{
+ // we init only fields actually used
+ FragmentCommonData s = (FragmentCommonData)0;
+ s.smoothness = smoothness;
+ s.normalWorld = normalWorld;
+ s.eyeVec = eyeVec;
+ s.posWorld = posWorld;
+ return FragmentGI(s, occlusion, i_ambientOrLightmapUV, atten, light, reflections);
+}
+inline UnityGI FragmentGI (
+ float3 posWorld,
+ half occlusion, half4 i_ambientOrLightmapUV, half atten, half smoothness, half3 normalWorld, half3 eyeVec,
+ UnityLight light)
+{
+ return FragmentGI (posWorld, occlusion, i_ambientOrLightmapUV, atten, smoothness, normalWorld, eyeVec, light, true);
+}
+
+#endif // UNITY_STANDARD_CORE_INCLUDED
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCore.cginc.meta b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCore.cginc.meta
new file mode 100644
index 00000000..bbc1fb55
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCore.cginc.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 6f77e6a5b35179a4ca0efe7b05e0cef1
+timeCreated: 1522477140
+licenseType: Store
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForward.cginc b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForward.cginc
new file mode 100644
index 00000000..23af035c
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForward.cginc
@@ -0,0 +1,26 @@
+// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
+
+#ifndef UNITY_STANDARD_CORE_FORWARD_INCLUDED
+#define UNITY_STANDARD_CORE_FORWARD_INCLUDED
+
+#if defined(UNITY_NO_FULL_STANDARD_SHADER)
+# define UNITY_STANDARD_SIMPLE 1
+#endif
+
+#include "UnityStandardConfig.cginc"
+
+#if UNITY_STANDARD_SIMPLE
+ #include "UnityStandardCoreForwardSimple.cginc"
+ VertexOutputBaseSimple vertBase (VertexInput v) { return vertForwardBaseSimple(v); }
+ VertexOutputForwardAddSimple vertAdd (VertexInput v) { return vertForwardAddSimple(v); }
+ half4 fragBase (VertexOutputBaseSimple i) : SV_Target { return fragForwardBaseSimpleInternal(i); }
+ half4 fragAdd (VertexOutputForwardAddSimple i) : SV_Target { return fragForwardAddSimpleInternal(i); }
+#else
+ #include "UnityStandardCore.cginc"
+ VertexOutputForwardBase vertBase (VertexInput v) { return vertForwardBase(v); }
+ VertexOutputForwardAdd vertAdd (VertexInput v) { return vertForwardAdd(v); }
+ half4 fragBase (VertexOutputForwardBase i) : SV_Target { return fragForwardBaseInternal(i); }
+ half4 fragAdd (VertexOutputForwardAdd i) : SV_Target { return fragForwardAddInternal(i); }
+#endif
+
+#endif // UNITY_STANDARD_CORE_FORWARD_INCLUDED
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForward.cginc.meta b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForward.cginc.meta
new file mode 100644
index 00000000..f8ede908
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForward.cginc.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 36a2c581e9fc42f418df7c3257a57ba3
+timeCreated: 1522477140
+licenseType: Store
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc
new file mode 100644
index 00000000..66751d27
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc
@@ -0,0 +1,376 @@
+// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
+
+#ifndef UNITY_STANDARD_CORE_FORWARD_SIMPLE_INCLUDED
+#define UNITY_STANDARD_CORE_FORWARD_SIMPLE_INCLUDED
+
+#include "UnityStandardCore.cginc"
+
+// Does not support: _PARALLAXMAP, DIRLIGHTMAP_COMBINED
+#define GLOSSMAP (defined(_SPECGLOSSMAP) || defined(_METALLICGLOSSMAP))
+
+#ifndef SPECULAR_HIGHLIGHTS
+ #define SPECULAR_HIGHLIGHTS (!defined(_SPECULAR_HIGHLIGHTS_OFF))
+#endif
+
+struct VertexOutputBaseSimple
+{
+ UNITY_POSITION(pos);
+ float4 tex : TEXCOORD0;
+ half4 eyeVec : TEXCOORD1; // w: grazingTerm
+
+ half4 ambientOrLightmapUV : TEXCOORD2; // SH or Lightmap UV
+ SHADOW_COORDS(3)
+ UNITY_FOG_COORDS_PACKED(4, half4) // x: fogCoord, yzw: reflectVec
+
+ half4 normalWorld : TEXCOORD5; // w: fresnelTerm
+
+#ifdef _NORMALMAP
+ half3 tangentSpaceLightDir : TEXCOORD6;
+ #if SPECULAR_HIGHLIGHTS
+ half3 tangentSpaceEyeVec : TEXCOORD7;
+ #endif
+#endif
+#if UNITY_REQUIRE_FRAG_WORLDPOS
+ float3 posWorld : TEXCOORD8;
+#endif
+
+ UNITY_VERTEX_OUTPUT_STEREO
+};
+
+// UNIFORM_REFLECTIVITY(): workaround to get (uniform) reflecivity based on UNITY_SETUP_BRDF_INPUT
+half MetallicSetup_Reflectivity()
+{
+ return 1.0h - OneMinusReflectivityFromMetallic(_Metallic);
+}
+
+half SpecularSetup_Reflectivity()
+{
+ return SpecularStrength(_SpecColor.rgb);
+}
+
+#define JOIN2(a, b) a##b
+#define JOIN(a, b) JOIN2(a,b)
+#define UNIFORM_REFLECTIVITY JOIN(UNITY_SETUP_BRDF_INPUT, _Reflectivity)
+
+
+#ifdef _NORMALMAP
+
+half3 TransformToTangentSpace(half3 tangent, half3 binormal, half3 normal, half3 v)
+{
+ // Mali400 shader compiler prefers explicit dot product over using a half3x3 matrix
+ return half3(dot(tangent, v), dot(binormal, v), dot(normal, v));
+}
+
+void TangentSpaceLightingInput(half3 normalWorld, half4 vTangent, half3 lightDirWorld, half3 eyeVecWorld, out half3 tangentSpaceLightDir, out half3 tangentSpaceEyeVec)
+{
+ half3 tangentWorld = UnityObjectToWorldDir(vTangent.xyz);
+ half sign = half(vTangent.w) * half(unity_WorldTransformParams.w);
+ half3 binormalWorld = cross(normalWorld, tangentWorld) * sign;
+ tangentSpaceLightDir = TransformToTangentSpace(tangentWorld, binormalWorld, normalWorld, lightDirWorld);
+ #if SPECULAR_HIGHLIGHTS
+ tangentSpaceEyeVec = normalize(TransformToTangentSpace(tangentWorld, binormalWorld, normalWorld, eyeVecWorld));
+ #else
+ tangentSpaceEyeVec = 0;
+ #endif
+}
+
+#endif // _NORMALMAP
+
+VertexOutputBaseSimple vertForwardBaseSimple (VertexInput v)
+{
+ UNITY_SETUP_INSTANCE_ID(v);
+ VertexOutputBaseSimple o;
+ UNITY_INITIALIZE_OUTPUT(VertexOutputBaseSimple, o);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+
+ float4 posWorld = mul(unity_ObjectToWorld, v.vertex);
+ o.pos = UnityObjectToClipPos(v.vertex);
+ o.tex = TexCoords(v);
+
+ half3 eyeVec = normalize(posWorld.xyz - _WorldSpaceCameraPos);
+ half3 normalWorld = UnityObjectToWorldNormal(v.normal);
+
+ o.normalWorld.xyz = normalWorld;
+ o.eyeVec.xyz = eyeVec;
+
+ #ifdef _NORMALMAP
+ half3 tangentSpaceEyeVec;
+ TangentSpaceLightingInput(normalWorld, v.tangent, _WorldSpaceLightPos0.xyz, eyeVec, o.tangentSpaceLightDir, tangentSpaceEyeVec);
+ #if SPECULAR_HIGHLIGHTS
+ o.tangentSpaceEyeVec = tangentSpaceEyeVec;
+ #endif
+ #endif
+
+ //We need this for shadow receiving
+ TRANSFER_SHADOW(o);
+
+ o.ambientOrLightmapUV = VertexGIForward(v, posWorld, normalWorld);
+
+ o.fogCoord.yzw = reflect(eyeVec, normalWorld);
+
+ o.normalWorld.w = Pow4(1 - saturate(dot(normalWorld, -eyeVec))); // fresnel term
+ #if !GLOSSMAP
+ o.eyeVec.w = saturate(_Glossiness + UNIFORM_REFLECTIVITY()); // grazing term
+ #endif
+
+ UNITY_TRANSFER_FOG(o, o.pos);
+ return o;
+}
+
+
+FragmentCommonData FragmentSetupSimple(VertexOutputBaseSimple i, float4 mfxUv, float3 mfxVertexPos)
+{
+ //half alpha = Alpha(i.tex.xy);
+ //#if defined(_ALPHATEST_ON)
+ // clip (alpha - _Cutoff);
+ //#endif
+
+ //MFX
+ half alpha = GetMfxDissolve(i.mfxUv, i.worldPos);
+ MfxClip(alpha);
+
+ FragmentCommonData s = UNITY_SETUP_BRDF_INPUT (i.tex);
+
+ // NOTE: shader relies on pre-multiply alpha-blend (_SrcBlend = One, _DstBlend = OneMinusSrcAlpha)
+ s.diffColor = PreMultiplyAlpha (s.diffColor, alpha, s.oneMinusReflectivity, /*out*/ s.alpha);
+ s.alpha = alpha;
+ s.normalWorld = i.normalWorld.xyz;
+ s.eyeVec = i.eyeVec.xyz;
+ s.posWorld = IN_WORLDPOS(i);
+ s.reflUVW = i.fogCoord.yzw;
+
+ #ifdef _NORMALMAP
+ s.tangentSpaceNormal = NormalInTangentSpace(i.tex);
+ #else
+ s.tangentSpaceNormal = 0;
+ #endif
+
+ return s;
+}
+
+UnityLight MainLightSimple(VertexOutputBaseSimple i, FragmentCommonData s)
+{
+ UnityLight mainLight = MainLight();
+ return mainLight;
+}
+
+half PerVertexGrazingTerm(VertexOutputBaseSimple i, FragmentCommonData s)
+{
+ #if GLOSSMAP
+ return saturate(s.smoothness + (1-s.oneMinusReflectivity));
+ #else
+ return i.eyeVec.w;
+ #endif
+}
+
+half PerVertexFresnelTerm(VertexOutputBaseSimple i)
+{
+ return i.normalWorld.w;
+}
+
+#if !SPECULAR_HIGHLIGHTS
+# define REFLECTVEC_FOR_SPECULAR(i, s) half3(0, 0, 0)
+#elif defined(_NORMALMAP)
+# define REFLECTVEC_FOR_SPECULAR(i, s) reflect(i.tangentSpaceEyeVec, s.tangentSpaceNormal)
+#else
+# define REFLECTVEC_FOR_SPECULAR(i, s) s.reflUVW
+#endif
+
+half3 LightDirForSpecular(VertexOutputBaseSimple i, UnityLight mainLight)
+{
+ #if SPECULAR_HIGHLIGHTS && defined(_NORMALMAP)
+ return i.tangentSpaceLightDir;
+ #else
+ return mainLight.dir;
+ #endif
+}
+
+half3 BRDF3DirectSimple(half3 diffColor, half3 specColor, half smoothness, half rl)
+{
+ #if SPECULAR_HIGHLIGHTS
+ return BRDF3_Direct(diffColor, specColor, Pow4(rl), smoothness);
+ #else
+ return diffColor;
+ #endif
+}
+
+half4 fragForwardBaseSimpleInternal (VertexOutputBaseSimple i)
+{
+ UNITY_APPLY_DITHER_CROSSFADE(i.pos.xy);
+
+ FragmentCommonData s = FragmentSetupSimple(i);
+
+ UnityLight mainLight = MainLightSimple(i, s);
+
+ #if !defined(LIGHTMAP_ON) && defined(_NORMALMAP)
+ half ndotl = saturate(dot(s.tangentSpaceNormal, i.tangentSpaceLightDir));
+ #else
+ half ndotl = saturate(dot(s.normalWorld, mainLight.dir));
+ #endif
+
+ //we can't have worldpos here (not enough interpolator on SM 2.0) so no shadow fade in that case.
+ half shadowMaskAttenuation = UnitySampleBakedOcclusion(i.ambientOrLightmapUV, 0);
+ half realtimeShadowAttenuation = SHADOW_ATTENUATION(i);
+ half atten = UnityMixRealtimeAndBakedShadows(realtimeShadowAttenuation, shadowMaskAttenuation, 0);
+
+ half occlusion = Occlusion(i.tex.xy);
+ half rl = dot(REFLECTVEC_FOR_SPECULAR(i, s), LightDirForSpecular(i, mainLight));
+
+ UnityGI gi = FragmentGI (s, occlusion, i.ambientOrLightmapUV, atten, mainLight);
+ half3 attenuatedLightColor = gi.light.color * ndotl;
+
+ half3 c = BRDF3_Indirect(s.diffColor, s.specColor, gi.indirect, PerVertexGrazingTerm(i, s), PerVertexFresnelTerm(i));
+ c += BRDF3DirectSimple(s.diffColor, s.specColor, s.smoothness, rl) * attenuatedLightColor;
+ c += Emission(i.tex.xy);
+
+ UNITY_APPLY_FOG(i.fogCoord, c);
+
+ return OutputForward (half4(c, 1), s.alpha);
+}
+
+half4 fragForwardBaseSimple (VertexOutputBaseSimple i) : SV_Target // backward compatibility (this used to be the fragment entry function)
+{
+ return fragForwardBaseSimpleInternal(i);
+}
+
+struct VertexOutputForwardAddSimple
+{
+ UNITY_POSITION(pos);
+ float4 tex : TEXCOORD0;
+ float3 posWorld : TEXCOORD1;
+
+ UNITY_SHADOW_COORDS(2)
+
+#if !defined(_NORMALMAP) && SPECULAR_HIGHLIGHTS
+ UNITY_FOG_COORDS_PACKED(3, half4) // x: fogCoord, yzw: reflectVec
+#else
+ UNITY_FOG_COORDS_PACKED(3, half1)
+#endif
+
+ half3 lightDir : TEXCOORD4;
+
+#if defined(_NORMALMAP)
+ #if SPECULAR_HIGHLIGHTS
+ half3 tangentSpaceEyeVec : TEXCOORD5;
+ #endif
+#else
+ half3 normalWorld : TEXCOORD5;
+#endif
+
+ UNITY_VERTEX_OUTPUT_STEREO
+};
+
+VertexOutputForwardAddSimple vertForwardAddSimple (VertexInput v)
+{
+ VertexOutputForwardAddSimple o;
+ UNITY_SETUP_INSTANCE_ID(v);
+ UNITY_INITIALIZE_OUTPUT(VertexOutputForwardAddSimple, o);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+
+ float4 posWorld = mul(unity_ObjectToWorld, v.vertex);
+ o.pos = UnityObjectToClipPos(v.vertex);
+ o.tex = TexCoords(v);
+ o.posWorld = posWorld.xyz;
+
+ //We need this for shadow receiving
+ UNITY_TRANSFER_SHADOW(o, v.uv1);
+
+ half3 lightDir = _WorldSpaceLightPos0.xyz - posWorld.xyz * _WorldSpaceLightPos0.w;
+ #ifndef USING_DIRECTIONAL_LIGHT
+ lightDir = NormalizePerVertexNormal(lightDir);
+ #endif
+
+ #if SPECULAR_HIGHLIGHTS
+ half3 eyeVec = normalize(posWorld.xyz - _WorldSpaceCameraPos);
+ #endif
+
+ half3 normalWorld = UnityObjectToWorldNormal(v.normal);
+
+ #ifdef _NORMALMAP
+ #if SPECULAR_HIGHLIGHTS
+ TangentSpaceLightingInput(normalWorld, v.tangent, lightDir, eyeVec, o.lightDir, o.tangentSpaceEyeVec);
+ #else
+ half3 ignore;
+ TangentSpaceLightingInput(normalWorld, v.tangent, lightDir, 0, o.lightDir, ignore);
+ #endif
+ #else
+ o.lightDir = lightDir;
+ o.normalWorld = normalWorld;
+ #if SPECULAR_HIGHLIGHTS
+ o.fogCoord.yzw = reflect(eyeVec, normalWorld);
+ #endif
+ #endif
+
+ UNITY_TRANSFER_FOG(o,o.pos);
+ return o;
+}
+
+FragmentCommonData FragmentSetupSimpleAdd(VertexOutputForwardAddSimple i, float4 mfxUv, float3 mfxVertexPos)
+{
+ //half alpha = Alpha(i.tex.xy);
+ //#if defined(_ALPHATEST_ON)
+ // clip (alpha - _Cutoff);
+ //#endif
+
+ half alpha = GetMfxDissolve(i.mfxUv, i.worldPos);
+ MfxClip(alpha);
+
+ FragmentCommonData s = UNITY_SETUP_BRDF_INPUT (i.tex);
+
+ // NOTE: shader relies on pre-multiply alpha-blend (_SrcBlend = One, _DstBlend = OneMinusSrcAlpha)
+ s.diffColor = PreMultiplyAlpha (s.diffColor, alpha, s.oneMinusReflectivity, /*out*/ s.alpha);
+ s.alpha = alpha;
+ s.eyeVec = 0;
+ s.posWorld = i.posWorld;
+
+ #ifdef _NORMALMAP
+ s.tangentSpaceNormal = NormalInTangentSpace(i.tex);
+ s.normalWorld = 0;
+ #else
+ s.tangentSpaceNormal = 0;
+ s.normalWorld = i.normalWorld;
+ #endif
+
+ #if SPECULAR_HIGHLIGHTS && !defined(_NORMALMAP)
+ s.reflUVW = i.fogCoord.yzw;
+ #else
+ s.reflUVW = 0;
+ #endif
+
+ return s;
+}
+
+half3 LightSpaceNormal(VertexOutputForwardAddSimple i, FragmentCommonData s)
+{
+ #ifdef _NORMALMAP
+ return s.tangentSpaceNormal;
+ #else
+ return i.normalWorld;
+ #endif
+}
+
+half4 fragForwardAddSimpleInternal(VertexOutputForwardAddSimple i, float4 mfxUv, float3 mfxVertexPos)
+{
+ UNITY_APPLY_DITHER_CROSSFADE(i.pos.xy);
+
+ FragmentCommonData s = FragmentSetupSimpleAdd(i);
+
+ half3 c = BRDF3DirectSimple(s.diffColor, s.specColor, s.smoothness, dot(REFLECTVEC_FOR_SPECULAR(i, s), i.lightDir));
+
+ #if SPECULAR_HIGHLIGHTS // else diffColor has premultiplied light color
+ c *= _LightColor0.rgb;
+ #endif
+
+ UNITY_LIGHT_ATTENUATION(atten, i, s.posWorld)
+ c *= atten * saturate(dot(LightSpaceNormal(i, s), i.lightDir));
+
+ UNITY_APPLY_FOG_COLOR(i.fogCoord, c.rgb, half4(0,0,0,0)); // fog towards black in additive pass
+ return OutputForward (half4(c, 1), s.alpha);
+}
+
+half4 fragForwardAddSimple (VertexOutputForwardAddSimple i) : SV_Target // backward compatibility (this used to be the fragment entry function)
+{
+ return fragForwardAddSimpleInternal(i);
+}
+
+#endif // UNITY_STANDARD_CORE_FORWARD_SIMPLE_INCLUDED
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc.meta b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc.meta
new file mode 100644
index 00000000..08c3faf9
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 687eaee521d30524490beeea14de5f7e
+timeCreated: 1522477140
+licenseType: Store
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardInput.cginc b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardInput.cginc
new file mode 100644
index 00000000..3c206a64
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardInput.cginc
@@ -0,0 +1,240 @@
+// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
+
+#ifndef UNITY_STANDARD_INPUT_INCLUDED
+#define UNITY_STANDARD_INPUT_INCLUDED
+
+#include "UnityCG.cginc"
+#include "UnityStandardConfig.cginc"
+#include "UnityPBSLighting.cginc" // TBD: remove
+#include "UnityStandardUtils.cginc"
+
+//---------------------------------------
+// Directional lightmaps & Parallax require tangent space too
+#if (_NORMALMAP || DIRLIGHTMAP_COMBINED || _PARALLAXMAP)
+ #define _TANGENT_TO_WORLD 1
+#endif
+
+#if (_DETAIL_MULX2 || _DETAIL_MUL || _DETAIL_ADD || _DETAIL_LERP)
+ #define _DETAIL 1
+#endif
+
+//---------------------------------------
+half4 _Color;
+half _Cutoff;
+
+sampler2D _MainTex;
+float4 _MainTex_ST;
+
+sampler2D _DetailAlbedoMap;
+float4 _DetailAlbedoMap_ST;
+
+sampler2D _BumpMap;
+half _BumpScale;
+
+sampler2D _DetailMask;
+sampler2D _DetailNormalMap;
+half _DetailNormalMapScale;
+
+sampler2D _SpecGlossMap;
+sampler2D _MetallicGlossMap;
+half _Metallic;
+half _Glossiness;
+half _GlossMapScale;
+
+sampler2D _OcclusionMap;
+half _OcclusionStrength;
+
+sampler2D _ParallaxMap;
+half _Parallax;
+half _UVSec;
+
+half4 _EmissionColor;
+sampler2D _EmissionMap;
+
+//-------------------------------------------------------------------------------------
+// Input functions
+
+struct VertexInput
+{
+ float4 vertex : POSITION;
+ half3 normal : NORMAL;
+ float2 uv0 : TEXCOORD0;
+ float2 uv1 : TEXCOORD1;
+#if defined(DYNAMICLIGHTMAP_ON) || defined(UNITY_PASS_META)
+ float2 uv2 : TEXCOORD2;
+#endif
+#ifdef _TANGENT_TO_WORLD
+ half4 tangent : TANGENT;
+#endif
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+};
+
+float4 TexCoords(VertexInput v)
+{
+ float4 texcoord;
+ texcoord.xy = TRANSFORM_TEX(v.uv0, _MainTex); // Always source from uv0
+ texcoord.zw = TRANSFORM_TEX(((_UVSec == 0) ? v.uv0 : v.uv1), _DetailAlbedoMap);
+ return texcoord;
+}
+
+half DetailMask(float2 uv)
+{
+ return tex2D (_DetailMask, uv).a;
+}
+
+half3 Albedo(float4 texcoords)
+{
+ half3 albedo = _Color.rgb * tex2D (_MainTex, texcoords.xy).rgb;
+#if _DETAIL
+ #if (SHADER_TARGET < 30)
+ // SM20: instruction count limitation
+ // SM20: no detail mask
+ half mask = 1;
+ #else
+ half mask = DetailMask(texcoords.xy);
+ #endif
+ half3 detailAlbedo = tex2D (_DetailAlbedoMap, texcoords.zw).rgb;
+ #if _DETAIL_MULX2
+ albedo *= LerpWhiteTo (detailAlbedo * unity_ColorSpaceDouble.rgb, mask);
+ #elif _DETAIL_MUL
+ albedo *= LerpWhiteTo (detailAlbedo, mask);
+ #elif _DETAIL_ADD
+ albedo += detailAlbedo * mask;
+ #elif _DETAIL_LERP
+ albedo = lerp (albedo, detailAlbedo, mask);
+ #endif
+#endif
+ return albedo;
+}
+
+half Alpha(float2 uv)
+{
+#if defined(_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A)
+ return _Color.a;
+#else
+ return tex2D(_MainTex, uv).a * _Color.a;
+#endif
+}
+
+half Occlusion(float2 uv)
+{
+#if (SHADER_TARGET < 30)
+ // SM20: instruction count limitation
+ // SM20: simpler occlusion
+ return tex2D(_OcclusionMap, uv).g;
+#else
+ half occ = tex2D(_OcclusionMap, uv).g;
+ return LerpOneTo (occ, _OcclusionStrength);
+#endif
+}
+
+half4 SpecularGloss(float2 uv)
+{
+ half4 sg;
+#ifdef _SPECGLOSSMAP
+ #if defined(_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A)
+ sg.rgb = tex2D(_SpecGlossMap, uv).rgb;
+ sg.a = tex2D(_MainTex, uv).a;
+ #else
+ sg = tex2D(_SpecGlossMap, uv);
+ #endif
+ sg.a *= _GlossMapScale;
+#else
+ sg.rgb = _SpecColor.rgb;
+ #ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ sg.a = tex2D(_MainTex, uv).a * _GlossMapScale;
+ #else
+ sg.a = _Glossiness;
+ #endif
+#endif
+ return sg;
+}
+
+half2 MetallicGloss(float2 uv)
+{
+ half2 mg;
+
+#ifdef _METALLICGLOSSMAP
+ #ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ mg.r = tex2D(_MetallicGlossMap, uv).r;
+ mg.g = tex2D(_MainTex, uv).a;
+ #else
+ mg = tex2D(_MetallicGlossMap, uv).ra;
+ #endif
+ mg.g *= _GlossMapScale;
+#else
+ mg.r = _Metallic;
+ #ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ mg.g = tex2D(_MainTex, uv).a * _GlossMapScale;
+ #else
+ mg.g = _Glossiness;
+ #endif
+#endif
+ return mg;
+}
+
+half2 MetallicRough(float2 uv)
+{
+ half2 mg;
+#ifdef _METALLICGLOSSMAP
+ mg.r = tex2D(_MetallicGlossMap, uv).r;
+#else
+ mg.r = _Metallic;
+#endif
+
+#ifdef _SPECGLOSSMAP
+ mg.g = 1.0f - tex2D(_SpecGlossMap, uv).r;
+#else
+ mg.g = 1.0f - _Glossiness;
+#endif
+ return mg;
+}
+
+half3 Emission(float2 uv)
+{
+#ifndef _EMISSION
+ return 0;
+#else
+ return tex2D(_EmissionMap, uv).rgb * _EmissionColor.rgb;
+#endif
+}
+
+#ifdef _NORMALMAP
+half3 NormalInTangentSpace(float4 texcoords)
+{
+ half3 normalTangent = UnpackScaleNormal(tex2D (_BumpMap, texcoords.xy), _BumpScale);
+
+#if _DETAIL && defined(UNITY_ENABLE_DETAIL_NORMALMAP)
+ half mask = DetailMask(texcoords.xy);
+ half3 detailNormalTangent = UnpackScaleNormal(tex2D (_DetailNormalMap, texcoords.zw), _DetailNormalMapScale);
+ #if _DETAIL_LERP
+ normalTangent = lerp(
+ normalTangent,
+ detailNormalTangent,
+ mask);
+ #else
+ normalTangent = lerp(
+ normalTangent,
+ BlendNormals(normalTangent, detailNormalTangent),
+ mask);
+ #endif
+#endif
+
+ return normalTangent;
+}
+#endif
+
+float4 Parallax (float4 texcoords, half3 viewDir)
+{
+#if !defined(_PARALLAXMAP) || (SHADER_TARGET < 30)
+ // Disable parallax on pre-SM3.0 shader target models
+ return texcoords;
+#else
+ half h = tex2D (_ParallaxMap, texcoords.xy).g;
+ float2 offset = ParallaxOffset1Step (h, _Parallax, viewDir);
+ return float4(texcoords.xy + offset, texcoords.zw + offset);
+#endif
+
+}
+
+#endif // UNITY_STANDARD_INPUT_INCLUDED
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardInput.cginc.meta b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardInput.cginc.meta
new file mode 100644
index 00000000..54eb16f5
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardInput.cginc.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 9ad9a6ef1083a9b439514ea8a9604108
+timeCreated: 1522477140
+licenseType: Store
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardMeta.cginc b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardMeta.cginc
new file mode 100644
index 00000000..37ce2a5b
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardMeta.cginc
@@ -0,0 +1,64 @@
+// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
+
+#ifndef UNITY_STANDARD_META_INCLUDED
+#define UNITY_STANDARD_META_INCLUDED
+
+// Functionality for Standard shader "meta" pass
+// (extracts albedo/emission for lightmapper etc.)
+
+// define meta pass before including other files; they have conditions
+// on that in some places
+#define UNITY_PASS_META 1
+
+#include "UnityCG.cginc"
+#include "UnityStandardInput.cginc"
+#include "UnityMetaPass.cginc"
+#include "UnityStandardCore.cginc"
+
+struct v2f_meta
+{
+ float4 uv : TEXCOORD0;
+ float4 pos : SV_POSITION;
+};
+
+v2f_meta vert_meta (VertexInput v)
+{
+ v2f_meta o;
+ o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST);
+ o.uv = TexCoords(v);
+ return o;
+}
+
+// Albedo for lightmapping should basically be diffuse color.
+// But rough metals (black diffuse) still scatter quite a lot of light around, so
+// we want to take some of that into account too.
+half3 UnityLightmappingAlbedo (half3 diffuse, half3 specular, half smoothness)
+{
+ half roughness = SmoothnessToRoughness(smoothness);
+ half3 res = diffuse;
+ res += specular * roughness * 0.5;
+ return res;
+}
+
+float4 frag_meta (v2f_meta i) : SV_Target
+{
+ // we're interested in diffuse & specular colors,
+ // and surface roughness to produce final albedo.
+ FragmentCommonData data = UNITY_SETUP_BRDF_INPUT (i.uv, float4(0, 0, 0, 0), float3(0, 0, 0));
+
+ UnityMetaInput o;
+ UNITY_INITIALIZE_OUTPUT(UnityMetaInput, o);
+
+#if defined(EDITOR_VISUALIZATION)
+ o.Albedo = data.diffColor;
+#else
+ o.Albedo = UnityLightmappingAlbedo (data.diffColor, data.specColor, data.smoothness);
+#endif
+ o.SpecularColor = data.specColor;
+
+ o.Emission = Emission(i.uv.xy);
+
+ return UnityMetaFragment(o);
+}
+
+#endif // UNITY_STANDARD_META_INCLUDED
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardMeta.cginc.meta b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardMeta.cginc.meta
new file mode 100644
index 00000000..c0959554
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardMeta.cginc.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 521102cceb95c1445b5537c1384d2b43
+timeCreated: 1522477140
+licenseType: Store
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardShadow.cginc b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardShadow.cginc
new file mode 100644
index 00000000..0f716cc3
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardShadow.cginc
@@ -0,0 +1,233 @@
+// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
+
+#ifndef UNITY_STANDARD_SHADOW_INCLUDED
+#define UNITY_STANDARD_SHADOW_INCLUDED
+
+// NOTE: had to split shadow functions into separate file,
+// otherwise compiler gives trouble with LIGHTING_COORDS macro (in UnityStandardCore.cginc)
+
+#include "UnityCG.cginc"
+#include "UnityShaderVariables.cginc"
+#include "UnityInstancing.cginc"
+#include "UnityStandardConfig.cginc"
+#include "UnityStandardUtils.cginc"
+
+#if (defined(_ALPHABLEND_ON) || defined(_ALPHAPREMULTIPLY_ON)) && defined(UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS)
+ #define UNITY_STANDARD_USE_DITHER_MASK 1
+#endif
+
+// Need to output UVs in shadow caster, since we need to sample texture and do clip/dithering based on it
+#if defined(_ALPHATEST_ON) || defined(_ALPHABLEND_ON) || defined(_ALPHAPREMULTIPLY_ON)
+#define UNITY_STANDARD_USE_SHADOW_UVS 1
+#endif
+
+// Has a non-empty shadow caster output struct (it's an error to have empty structs on some platforms...)
+#if !defined(V2F_SHADOW_CASTER_NOPOS_IS_EMPTY) || defined(UNITY_STANDARD_USE_SHADOW_UVS)
+#define UNITY_STANDARD_USE_SHADOW_OUTPUT_STRUCT 1
+#endif
+
+#ifdef UNITY_STEREO_INSTANCING_ENABLED
+#define UNITY_STANDARD_USE_STEREO_SHADOW_OUTPUT_STRUCT 1
+#endif
+
+
+half4 _Color;
+half _Cutoff;
+sampler2D _MainTex;
+float4 _MainTex_ST;
+#ifdef UNITY_STANDARD_USE_DITHER_MASK
+sampler3D _DitherMaskLOD;
+#endif
+
+// Handle PremultipliedAlpha from Fade or Transparent shading mode
+half4 _SpecColor;
+half _Metallic;
+#ifdef _SPECGLOSSMAP
+sampler2D _SpecGlossMap;
+#endif
+#ifdef _METALLICGLOSSMAP
+sampler2D _MetallicGlossMap;
+#endif
+
+#if defined(UNITY_STANDARD_USE_SHADOW_UVS) && defined(_PARALLAXMAP)
+sampler2D _ParallaxMap;
+half _Parallax;
+#endif
+
+//MFX
+#include "Assets/MaterializeFX/Shaders/cginc/MFX.cginc"
+
+half MetallicSetup_ShadowGetOneMinusReflectivity(half2 uv)
+{
+ half metallicity = _Metallic;
+ #ifdef _METALLICGLOSSMAP
+ metallicity = tex2D(_MetallicGlossMap, uv).r;
+ #endif
+ return OneMinusReflectivityFromMetallic(metallicity);
+}
+
+half RoughnessSetup_ShadowGetOneMinusReflectivity(half2 uv)
+{
+ half metallicity = _Metallic;
+#ifdef _METALLICGLOSSMAP
+ metallicity = tex2D(_MetallicGlossMap, uv).r;
+#endif
+ return OneMinusReflectivityFromMetallic(metallicity);
+}
+
+half SpecularSetup_ShadowGetOneMinusReflectivity(half2 uv)
+{
+ half3 specColor = _SpecColor.rgb;
+ #ifdef _SPECGLOSSMAP
+ specColor = tex2D(_SpecGlossMap, uv).rgb;
+ #endif
+ return (1 - SpecularStrength(specColor));
+}
+
+// SHADOW_ONEMINUSREFLECTIVITY(): workaround to get one minus reflectivity based on UNITY_SETUP_BRDF_INPUT
+#define SHADOW_JOIN2(a, b) a##b
+#define SHADOW_JOIN(a, b) SHADOW_JOIN2(a,b)
+#define SHADOW_ONEMINUSREFLECTIVITY SHADOW_JOIN(UNITY_SETUP_BRDF_INPUT, _ShadowGetOneMinusReflectivity)
+
+struct VertexInput
+{
+ float4 vertex : POSITION;
+ float3 normal : NORMAL;
+ float2 uv0 : TEXCOORD0;
+ #if defined(UNITY_STANDARD_USE_SHADOW_UVS) && defined(_PARALLAXMAP)
+ half4 tangent : TANGENT;
+ #endif
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+};
+
+#ifdef UNITY_STANDARD_USE_SHADOW_OUTPUT_STRUCT
+struct VertexOutputShadowCaster
+{
+ V2F_SHADOW_CASTER_NOPOS
+ #if defined(UNITY_STANDARD_USE_SHADOW_UVS)
+ float2 tex : TEXCOORD1;
+
+ #if defined(_PARALLAXMAP)
+ half3 viewDirForParallax : TEXCOORD2;
+ #endif
+ #endif
+
+ //MFX
+ float4 mfxUv : TEXCOORD5;
+ float3 worldPos : TEXCOORD6;
+};
+#endif
+
+#ifdef UNITY_STANDARD_USE_STEREO_SHADOW_OUTPUT_STRUCT
+struct VertexOutputStereoShadowCaster
+{
+ UNITY_VERTEX_OUTPUT_STEREO
+
+ //MFX
+ float4 mfxUv : TEXCOORD5;
+ float3 worldPos : TEXCOORD6;
+};
+#endif
+
+// We have to do these dances of outputting SV_POSITION separately from the vertex shader,
+// and inputting VPOS in the pixel shader, since they both map to "POSITION" semantic on
+// some platforms, and then things don't go well.
+
+
+void vertShadowCaster (VertexInput v
+ , out float4 opos : SV_POSITION
+ #ifdef UNITY_STANDARD_USE_SHADOW_OUTPUT_STRUCT
+ , out VertexOutputShadowCaster o
+ #endif
+ #ifdef UNITY_STANDARD_USE_STEREO_SHADOW_OUTPUT_STRUCT
+ , out VertexOutputStereoShadowCaster os
+ #endif
+)
+{
+ UNITY_SETUP_INSTANCE_ID(v);
+
+ #ifdef UNITY_STANDARD_USE_SHADOW_OUTPUT_STRUCT
+ UNITY_INITIALIZE_OUTPUT(VertexOutputShadowCaster, o);
+ #endif
+
+ #ifdef UNITY_STANDARD_USE_STEREO_SHADOW_OUTPUT_STRUCT
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(os);
+ #endif
+ TRANSFER_SHADOW_CASTER_NOPOS(o,opos)
+ #if defined(UNITY_STANDARD_USE_SHADOW_UVS)
+ o.tex = TRANSFORM_TEX(v.uv0, _MainTex);
+
+ #ifdef _PARALLAXMAP
+ TANGENT_SPACE_ROTATION;
+ o.viewDirForParallax = mul (rotation, ObjSpaceViewDir(v.vertex));
+ #endif
+ #endif
+
+#ifdef UNITY_STANDARD_USE_SHADOW_OUTPUT_STRUCT
+ //MFX
+ PassMfxVertex2Fragment(v.uv0.xy, o.mfxUv);
+ o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
+#endif
+#ifdef UNITY_STANDARD_USE_STEREO_SHADOW_OUTPUT_STRUCT
+ //MFX
+ PassMfxVertex2Fragment(v.uv0.xy, os.mfxUv);
+ os.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
+#endif
+}
+
+
+half4 fragShadowCaster (UNITY_POSITION(vpos)
+#ifdef UNITY_STANDARD_USE_SHADOW_OUTPUT_STRUCT
+ , VertexOutputShadowCaster i
+#endif
+) : SV_Target
+{
+ #if defined(UNITY_STANDARD_USE_SHADOW_UVS)
+ #if defined(_PARALLAXMAP) && (SHADER_TARGET >= 30)
+ half3 viewDirForParallax = normalize(i.viewDirForParallax);
+ fixed h = tex2D (_ParallaxMap, i.tex.xy).g;
+ half2 offset = ParallaxOffset1Step (h, _Parallax, viewDirForParallax);
+ i.tex.xy += offset;
+ #endif
+
+ //MFX
+ half alpha = GetMfxDissolve(i.mfxUv, i.worldPos);
+ MfxClip(alpha);
+
+ // half alpha = tex2D(_MainTex, i.tesx).a * _Color.a;
+ // #if defined(_ALPHATEST_ON)
+ // clip (alpha - _Cutoff);
+ // #endif
+ // #if defined(_ALPHABLEND_ON) || defined(_ALPHAPREMULTIPLY_ON)
+ // #if defined(_ALPHAPREMULTIPLY_ON)
+ // half outModifiedAlpha;
+ // PreMultiplyAlpha(half3(0, 0, 0), alpha, SHADOW_ONEMINUSREFLECTIVITY(i.tex), outModifiedAlpha);
+ // alpha = outModifiedAlpha;
+ // #endif
+ // #if defined(UNITY_STANDARD_USE_DITHER_MASK)
+ // // Use dither mask for alpha blended shadows, based on pixel position xy
+ // // and alpha level. Our dither texture is 4x4x16.
+ // #ifdef LOD_FADE_CROSSFADE
+ // #define _LOD_FADE_ON_ALPHA
+ // alpha *= unity_LODFade.y;
+ // #endif
+ // half alphaRef = tex3D(_DitherMaskLOD, float3(vpos.xy*0.25,alpha*0.9375)).a;
+ // clip (alphaRef - 0.01);
+ // #else
+ // clip (alpha - _Cutoff);
+ // #endif
+ // #endif
+ #endif // #if defined(UNITY_STANDARD_USE_SHADOW_UVS)
+
+ #ifdef LOD_FADE_CROSSFADE
+ #ifdef _LOD_FADE_ON_ALPHA
+ #undef _LOD_FADE_ON_ALPHA
+ #else
+ UnityApplyDitherCrossFade(vpos.xy);
+ #endif
+ #endif
+
+ SHADOW_CASTER_FRAGMENT(i)
+}
+
+#endif // UNITY_STANDARD_SHADOW_INCLUDED
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardShadow.cginc.meta b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardShadow.cginc.meta
new file mode 100644
index 00000000..db93af3a
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardShadow.cginc.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: f6c98ee1cfbc55346b4d629c5de75e00
+timeCreated: 1522477140
+licenseType: Store
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/cginc.meta b/Assets/ThirdParty/MaterializeFX/Shaders/cginc.meta
new file mode 100644
index 00000000..b2c783da
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/cginc.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 46beae2a5dbe18248b8cee8a568607ff
+folderAsset: yes
+timeCreated: 1521343748
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/cginc/MFX.cginc b/Assets/ThirdParty/MaterializeFX/Shaders/cginc/MFX.cginc
new file mode 100644
index 00000000..ae62a6c7
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/cginc/MFX.cginc
@@ -0,0 +1,169 @@
+#ifndef MFX_INCLUDED
+#define MFX_INCLUDED
+
+//EMISSION 2
+uniform float3 _EmissionColor2;
+uniform float _EmissionSize2;
+sampler2D _EmissionMap2;
+uniform float4 _EmissionMap2_ST;
+uniform float2 _EmissionMap2_Scroll;
+
+//ALBEDO 2
+uniform float4 _Color2;
+sampler2D _MainTex2;
+uniform float4 _MainTex2_ST;
+
+//NORMAL
+sampler2D _BumpMap2;
+uniform float4 _BumpMap2_ST;
+
+//MASK
+uniform float _MaskType;
+uniform float _CutoffAxis;
+uniform float _MaskOffset;
+uniform float4 _MaskWorldPosition;
+
+//EDGE
+uniform float3 _EdgeColor;
+uniform sampler2D _EdgeRampMap1;
+uniform float4 _EdgeRampMap1_ST;
+uniform float2 _EdgeRampMap1_Scroll;
+uniform float _EdgeSize;
+uniform float _EdgeStrength;
+
+//DISSOLVE
+uniform float3 _DissolveEdgeColor;
+uniform float _DissolveEdgeSize;
+uniform float _DissolveSize;
+sampler2D _DissolveMap1;
+uniform float4 _DissolveMap1_ST;
+uniform float2 _DissolveMap1_Scroll;
+
+#define MFX_TRANSFORM_TEX(texUV,texName) (texUV.xy * texName##_ST.xy + texName##_ST.zw + texName##_Scroll * _Time.y)
+
+inline float Remap(float s, float a1, float a2, float b1, float b2)
+{
+ return b1 + (s - a1) * (b2 - b1) / (a2 - a1);
+}
+
+inline void MfxClip(float alpha)
+{
+ clip(alpha - _Cutoff);
+}
+
+inline void PassMfxVertex2Fragment(float2 mainUv, inout float4 mfxUv) //xy - edge, zw - dissolve
+{
+ mfxUv.xy = MFX_TRANSFORM_TEX(mainUv, _EdgeRampMap1);
+ mfxUv.zw = MFX_TRANSFORM_TEX(mainUv, _DissolveMap1);
+}
+
+//--------------
+// POSITION
+
+inline float GetMfxLocalPosition(float3 vertexPos)
+{
+ float pos = mul(unity_WorldToObject, float4(vertexPos, 1))[(int)_CutoffAxis];
+ return pos;
+}
+
+inline float GetMfxGlobalPosition(float3 vertexPos)
+{
+ float pos = (vertexPos)[(int)_CutoffAxis];
+ return pos;
+}
+
+inline float GetMfxLengthGlobalPosition(float3 vertexPos)
+{
+ return length(_MaskWorldPosition - vertexPos);
+}
+
+inline float GetMfxSinglePosition(float3 vertexPos)
+{
+#if defined(_MASKTYPE_AXIS_LOCAL)
+ return GetMfxLocalPosition(vertexPos);
+#elif defined (_MASKTYPE_AXIS_GLOBAL)
+ return GetMfxGlobalPosition(vertexPos);
+#elif defined (_MASKTYPE_GLOBAL)
+ return GetMfxLengthGlobalPosition(vertexPos);
+#endif
+ return 1;
+}
+
+ inline float GetAlpha(float2 mfxDissolveUv, float3 vertexPos)
+ {
+ float pos = GetMfxSinglePosition(vertexPos);
+ float mask_pos = (pos - _MaskOffset);
+ float alpha = (_DissolveSize + (mask_pos - (_MaskOffset - tex2D(_DissolveMap1, mfxDissolveUv).r)));
+ return alpha;
+}
+
+//--------------
+// DISSOLVE
+
+inline float GetMfxDissolve(float4 mfxUv, float3 vertexPos)
+{
+ #if defined(_MASKTYPE_AXIS_LOCAL) || defined(_MASKTYPE_AXIS_GLOBAL) || defined(_MASKTYPE_GLOBAL)
+ float alpha = GetAlpha(mfxUv.zw, vertexPos);
+ return alpha;
+ #elif defined(_MASKTYPE_NONE)
+ float alpha = tex2D(_DissolveMap1, mfxUv.zw).r;
+ return alpha;
+ #endif
+ return 1;
+}
+
+//TODO move into func
+
+//DIFFUSE
+half3 GetMfxAlbedo(float2 mainUv, float4 mfxUv, float3 vertexPos, half3 baseAlbedo)
+{
+ float pos = GetMfxSinglePosition(vertexPos);
+ float mask_pos = pos - _MaskOffset;
+ float edge_pos = ( mask_pos - ( _MaskOffset - tex2D( _EdgeRampMap1, mfxUv.xy ).r ) );
+ float scaled_edge = ( (50.0 + (_EdgeSize - 0.0) * (0.0 - 50.0) / (1.0 - 0.0)) * edge_pos );
+ float clamp_scaled_edge = clamp( scaled_edge , 0.0 , 1.0 );
+ float edge = clamp( ( 1.0 - abs( scaled_edge ) ) , 0.0 , 1.0 );
+ float edge_threshold = ( ( 1.0 - clamp_scaled_edge ) - edge );
+ half3 final_albedo = lerp(baseAlbedo , ( _Color2 * tex2D( _MainTex2, mainUv ) ) , edge_threshold);
+ return final_albedo;
+}
+
+//NORMAL
+half3 GetMfxNormal(float2 mainUv, float4 mfxUv, float3 vertexPos, half3 baseNormal)
+{
+ float pos = GetMfxSinglePosition(vertexPos);
+ float mask_pos = pos - _MaskOffset;
+ float edge_pos = ( mask_pos - ( _MaskOffset - tex2D( _EdgeRampMap1, mfxUv.xy ).r ) );
+ float scaled_edge = ( (50.0 + (_EdgeSize - 0.0) * (0.0 - 50.0) / (1.0 - 0.0)) * edge_pos );
+ float clamp_scaled_edge = clamp( scaled_edge , 0.0 , 1.0 );
+ float edge = clamp( ( 1.0 - abs( scaled_edge ) ) , 0.0 , 1.0 );
+ float edge_threshold = ( ( 1.0 - clamp_scaled_edge ) - edge );
+ half3 final_normal = lerp(baseNormal , UnpackNormal( tex2D( _BumpMap2, mainUv ) ) , edge_threshold);
+ return final_normal;
+}
+
+//EMISSION
+half3 GetMfxEmission(float2 mainUv, float4 mfxUv, float3 vertexPos, half3 baseEmission, float alpha)
+{
+ float pos = GetMfxSinglePosition(vertexPos);
+ float mask_pos = pos - _MaskOffset;
+ float edge_pos = ( mask_pos - ( _MaskOffset - tex2D( _EdgeRampMap1, mfxUv.xy ).r ) );
+ float scaled_edge = ( (50.0 + (_EdgeSize - 0.0) * (0.0 - 50.0) / (1.0 - 0.0)) * edge_pos );
+ float clamp_scaled_edge = clamp( scaled_edge , 0.0 , 1.0 );
+ float edge = clamp( ( 1.0 - abs( scaled_edge ) ) , 0.0 , 1.0 );
+ float edge_threshold = ( ( 1.0 - clamp_scaled_edge ) - edge );
+
+ float emissionMap = clamp((((1.0 - tex2D(_EmissionMap2, mfxUv.xy).r) - 0.5) * 3.0), 0.0, 1.0);
+ float3 emission2 = (_EmissionColor2 * (pow(emissionMap, 3.0) * saturate(((mask_pos - _MaskOffset) + (0.0 + (_EmissionSize2 - 0.0) * (3.0 - 0.0) / (1.0 - 0.0))))));
+ float3 emission2_base = lerp(baseEmission, emission2, edge_threshold);
+ float alpha_original = alpha + _Cutoff;
+
+ float edge_emission = smoothstep((1.0 - _EdgeSize), 1.0, edge);
+
+ float3 final_emission = ((alpha <= _DissolveEdgeSize) ? _DissolveEdgeColor : (emission2_base + (((1.0 + (_EdgeStrength - 0.0) * (0.1 - 1.0) / (1.0 - 0.0)) <= edge_emission) ? _EdgeColor : (_EdgeColor * edge_emission))));
+ return final_emission;
+}
+
+//--------------
+
+#endif // MFX_INCLUDED
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/cginc/MFX.cginc.meta b/Assets/ThirdParty/MaterializeFX/Shaders/cginc/MFX.cginc.meta
new file mode 100644
index 00000000..68fb322c
--- /dev/null
+++ b/Assets/ThirdParty/MaterializeFX/Shaders/cginc/MFX.cginc.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: e6b98f5e7d9e92344924c13caf2c838b
+timeCreated: 1521345871
+licenseType: Store
+ShaderImporter:
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant: