diff --git a/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMenuItems.cs b/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMenuItems.cs index ec2cefb..17dcf0a 100644 --- a/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMenuItems.cs +++ b/Assets/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateMenuItems.cs @@ -11,6 +11,16 @@ namespace AmplifyShaderEditor { AmplifyShaderEditorWindow.CreateConfirmationTemplateShader( "0770190933193b94aaa3065e307002fa" ); } + [MenuItem( "Assets/Create/Amplify Shader/Universal/PBR", false, 85 )] + public static void ApplyTemplateUniversalPBR() + { + AmplifyShaderEditorWindow.CreateConfirmationTemplateShader( "94348b07e5e8bab40bd6c8a1e3df54cd" ); + } + [MenuItem( "Assets/Create/Amplify Shader/Universal/Unlit", false, 85 )] + public static void ApplyTemplateUniversalUnlit() + { + AmplifyShaderEditorWindow.CreateConfirmationTemplateShader( "2992e84f91cbeb14eab234972e07ea9d" ); + } [MenuItem( "Assets/Create/Amplify Shader/Legacy/Post Process", false, 85 )] public static void ApplyTemplateLegacyPostProcess() { @@ -51,5 +61,15 @@ namespace AmplifyShaderEditor { AmplifyShaderEditorWindow.CreateConfirmationTemplateShader( "ed95fe726fd7b4644bb42f4d1ddd2bcd" ); } + [MenuItem( "Assets/Create/Amplify Shader/Universal/Experimental/2D Lit", false, 85 )] + public static void ApplyTemplateUniversalExperimental2DLit() + { + AmplifyShaderEditorWindow.CreateConfirmationTemplateShader( "199187dac283dbe4a8cb1ea611d70c58" ); + } + [MenuItem( "Assets/Create/Amplify Shader/Universal/Experimental/2D Unlit", false, 85 )] + public static void ApplyTemplateUniversalExperimental2DUnlit() + { + AmplifyShaderEditorWindow.CreateConfirmationTemplateShader( "cf964e524c8e69742b1d21fbe2ebcc4a" ); + } } } diff --git a/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal.meta b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal.meta new file mode 100644 index 0000000..ffa31b3 --- /dev/null +++ b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f076986f9dffb4f45a0b08af469b6a69 +folderAsset: yes +timeCreated: 1568133090 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DLit.shader b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DLit.shader new file mode 100644 index 0000000..6d2f2ae --- /dev/null +++ b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DLit.shader @@ -0,0 +1,398 @@ +Shader /*ase_name*/ "Hidden/Universal/Experimental/2D Lit" /*end*/ +{ + Properties + { + /*ase_props*/ + } + + SubShader + { + /*ase_subshader_options:Name=Additional Options + Option:Vertex Position:Absolute,Relative:Relative + Absolute:SetDefine:ASE_ABSOLUTE_VERTEX_POS 1 + Absolute:SetPortName:Sprite Lit:4,Vertex Position + Relative:RemoveDefine:ASE_ABSOLUTE_VERTEX_POS 1 + Relative:SetPortName:Sprite Lit:4,Vertex Offset + */ + + Tags + { + "RenderPipeline" = "UniversalPipeline" + "RenderType" = "Transparent" + "Queue" = "Transparent+0" + } + + Cull Off + HLSLINCLUDE + #pragma target 2.0 + + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + + ENDHLSL + + /*ase_pass*/ + Pass + { + Name "Sprite Lit" + Tags { "LightMode" = "Universal2D" } + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZTest LEqual + ZWrite Off + Offset 0,0 + ColorMask RGBA + /*ase_stencil*/ + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile _ ETC1_EXTERNAL_ALPHA + #pragma multi_compile _ USE_SHAPE_LIGHT_TYPE_0 + #pragma multi_compile _ USE_SHAPE_LIGHT_TYPE_1 + #pragma multi_compile _ USE_SHAPE_LIGHT_TYPE_2 + #pragma multi_compile _ USE_SHAPE_LIGHT_TYPE_3 + + #define _SURFACE_TYPE_TRANSPARENT 1 + #define SHADERPASS_SPRITELIT + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" + + #if USE_SHAPE_LIGHT_TYPE_0 + SHAPE_LIGHT(0) + #endif + + #if USE_SHAPE_LIGHT_TYPE_1 + SHAPE_LIGHT(1) + #endif + + #if USE_SHAPE_LIGHT_TYPE_2 + SHAPE_LIGHT(2) + #endif + + #if USE_SHAPE_LIGHT_TYPE_3 + SHAPE_LIGHT(3) + #endif + + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/CombinedShapeLightShared.hlsl" + + /*ase_pragma*/ + + /*ase_globals*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 uv0 : TEXCOORD0; + float4 color : COLOR; + /*ase_vdata:p=p;n=n;t=t;c=c;uv0=tc0*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + float4 texCoord0 : TEXCOORD0; + float4 color : TEXCOORD1; + float4 screenPosition : TEXCOORD2; + /*ase_interp(3,):sp=sp;uv0=tc0;*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + #if ETC1_EXTERNAL_ALPHA + TEXTURE2D(_AlphaTex); SAMPLER(sampler_AlphaTex); + float _EnableAlphaTexture; + #endif + + /*ase_funcs*/ + + VertexOutput vert ( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;4;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + v.normal = /*ase_vert_out:Vertex Normal;Float3;5;-1;_VNormal*/v.normal/*end*/; + v.tangent.xyz = /*ase_vert_out:Vertex Tangent;Float3;6;-1;_VTangent*/v.tangent.xyz/*end*/; + + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz); + + o.texCoord0 = v.uv0; + o.color = v.color; + o.clipPos = vertexInput.positionCS; + o.screenPosition = ComputeScreenPos( o.clipPos, _ProjectionParams.x ); + return o; + } + + half4 frag ( VertexOutput IN /*ase_frag_input*/ ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + /*ase_frag_code:IN=VertexOutput*/ + float4 Color = /*ase_frag_out:Color;Float4;1;-1;_Color*/float4( 1, 1, 1, 1 )/*end*/; + float Mask = /*ase_frag_out:Mask;Float;2;-1;_Mask*/1/*end*/; + float3 Normal = /*ase_frag_out:Normal;Float3;3;-1;_Normal*/float3( 0, 0, 1 )/*end*/; + + #if ETC1_EXTERNAL_ALPHA + float4 alpha = SAMPLE_TEXTURE2D(_AlphaTex, sampler_AlphaTex, IN.texCoord0.xy); + Color.a = lerp ( Color.a, alpha.r, _EnableAlphaTexture); + #endif + + Color *= IN.color; + + return CombinedShapeLightShared( Color, Mask, IN.screenPosition.xy / IN.screenPosition.w ); + } + + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_hide_pass:SyncP*/ + Name "Sprite Normal" + Tags { "LightMode" = "NormalsRendering" } + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZTest LEqual + ZWrite Off + Offset 0,0 + ColorMask RGBA + /*ase_stencil*/ + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #define _SURFACE_TYPE_TRANSPARENT 1 + #define SHADERPASS_SPRITENORMAL + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/NormalsRenderingShared.hlsl" + + /*ase_pragma*/ + + /*ase_globals*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 uv0 : TEXCOORD0; + float4 color : COLOR; + /*ase_vdata:p=p;n=n;t=t;c=c;uv0=tc0*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + float4 texCoord0 : TEXCOORD0; + float4 color : TEXCOORD1; + float3 normalWS : TEXCOORD2; + float4 tangentWS : TEXCOORD3; + float3 bitangentWS : TEXCOORD4; + /*ase_interp(5,):sp=sp;uv0=tc0;c=tc1;wn=tc2;wt=tc3;wbt=tc4*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + /*ase_funcs*/ + + VertexOutput vert ( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;3;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + v.normal = /*ase_vert_out:Vertex Normal;Float3;4;-1;_VNormal*/v.normal/*end*/; + v.tangent.xyz = /*ase_vert_out:Vertex Tangent;Float3;5;-1;_VTangent*/v.tangent.xyz/*end*/; + + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz); + + o.texCoord0 = v.uv0; + o.color = v.color; + o.clipPos = vertexInput.positionCS; + + float3 normalWS = TransformObjectToWorldNormal( v.normal ); + o.normalWS = NormalizeNormalPerVertex( normalWS ); + float4 tangentWS = float4( TransformObjectToWorldDir( v.tangent.xyz ), v.tangent.w ); + o.tangentWS = normalize( tangentWS ); + o.bitangentWS = cross( normalWS, tangentWS.xyz ) * tangentWS.w; + return o; + } + + half4 frag ( VertexOutput IN /*ase_frag_input*/ ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + /*ase_frag_code:IN=VertexOutput*/ + float4 Color = /*ase_frag_out:Color;Float4;1;-1;_Color*/float4( 1, 1, 1, 1 )/*end*/; + float3 Normal = /*ase_frag_out:Normal;Float3;2;-1;_Normal*/float3( 0, 0, 1 )/*end*/; + + Color *= IN.color; + + return NormalsRenderingShared( Color, Normal, IN.tangentWS.xyz, IN.bitangentWS, IN.normalWS); + } + + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_hide_pass:SyncP*/ + Name "Sprite Forward" + Tags { "LightMode" = "UniversalForward" } + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZTest LEqual + ZWrite Off + Offset 0,0 + ColorMask RGBA + /*ase_stencil*/ + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile _ ETC1_EXTERNAL_ALPHA + + #define _SURFACE_TYPE_TRANSPARENT 1 + #define SHADERPASS_SPRITEFORWARD + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + + /*ase_pragma*/ + + /*ase_globals*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 uv0 : TEXCOORD0; + float4 color : COLOR; + /*ase_vdata:p=p;n=n;t=t;c=c;uv0=tc0*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + float4 texCoord0 : TEXCOORD0; + float4 color : TEXCOORD1; + /*ase_interp(2,):sp=sp;uv0=tc0;c=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + #if ETC1_EXTERNAL_ALPHA + TEXTURE2D( _AlphaTex ); SAMPLER( sampler_AlphaTex ); + float _EnableAlphaTexture; + #endif + + /*ase_funcs*/ + + VertexOutput vert( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID( v ); + UNITY_TRANSFER_INSTANCE_ID( v, o ); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3( 0, 0, 0 ); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;3;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + v.normal = /*ase_vert_out:Vertex Normal;Float3;4;-1;_VNormal*/v.normal/*end*/; + + VertexPositionInputs vertexInput = GetVertexPositionInputs( v.vertex.xyz ); + + o.texCoord0 = v.uv0; + o.color = v.color; + o.clipPos = vertexInput.positionCS; + + return o; + } + + half4 frag( VertexOutput IN /*ase_frag_input*/ ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + /*ase_frag_code:IN=VertexOutput*/ + float4 Color = /*ase_frag_out:Color;Float4;1;-1;_Color*/float4( 1, 1, 1, 1 )/*end*/; + + #if ETC1_EXTERNAL_ALPHA + float4 alpha = SAMPLE_TEXTURE2D( _AlphaTex, sampler_AlphaTex, IN.texCoord0.xy ); + Color.a = lerp( Color.a, alpha.r, _EnableAlphaTexture ); + #endif + + Color *= IN.color; + + return Color; + } + + ENDHLSL + } + /*ase_pass_end*/ + } + CustomEditor "UnityEditor.ShaderGraph.PBRMasterGUI" + FallBack "Hidden/InternalErrorShader" +} diff --git a/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DLit.shader.meta b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DLit.shader.meta new file mode 100644 index 0000000..6bf2a5c --- /dev/null +++ b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DLit.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 199187dac283dbe4a8cb1ea611d70c58 +timeCreated: 1568647145 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DUnlit.shader b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DUnlit.shader new file mode 100644 index 0000000..81316a6 --- /dev/null +++ b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DUnlit.shader @@ -0,0 +1,149 @@ +Shader /*ase_name*/ "Hidden/Universal/Experimental/2D Unlit" /*end*/ +{ + Properties + { + /*ase_props*/ + } + + SubShader + { + /*ase_subshader_options:Name=Additional Options + Option:Vertex Position:Absolute,Relative:Relative + Absolute:SetDefine:ASE_ABSOLUTE_VERTEX_POS 1 + Absolute:SetPortName:Unlit:3,Vertex Position + Relative:RemoveDefine:ASE_ABSOLUTE_VERTEX_POS 1 + Relative:SetPortName:Unlit:3,Vertex Offset + */ + + Tags + { + "RenderPipeline" = "UniversalPipeline" + "RenderType" = "Transparent" + "Queue" = "Transparent+0" + } + + Cull Off + HLSLINCLUDE + #pragma target 2.0 + + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + + ENDHLSL + + /*ase_pass*/ + Pass + { + Name "Unlit" + Tags { } + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZTest LEqual + ZWrite Off + Offset 0,0 + ColorMask RGBA + /*ase_stencil*/ + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile _ ETC1_EXTERNAL_ALPHA + + #define _SURFACE_TYPE_TRANSPARENT 1 + #define SHADERPASS_SPRITEUNLIT + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + + /*ase_pragma*/ + + /*ase_globals*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 uv0 : TEXCOORD0; + float4 color : COLOR; + /*ase_vdata:p=p;n=n;t=t;c=c;uv0=tc0*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + float4 texCoord0 : TEXCOORD0; + float4 color : TEXCOORD1; + /*ase_interp(2,):sp=sp;uv0=tc0;c=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + #if ETC1_EXTERNAL_ALPHA + TEXTURE2D( _AlphaTex ); SAMPLER( sampler_AlphaTex ); + float _EnableAlphaTexture; + #endif + + float4 _RendererColor; + + /*ase_funcs*/ + + VertexOutput vert( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID( v ); + UNITY_TRANSFER_INSTANCE_ID( v, o ); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3( 0, 0, 0 ); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;3;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + v.normal = /*ase_vert_out:Vertex Normal;Float3;4;-1;_VNormal*/v.normal/*end*/; + + VertexPositionInputs vertexInput = GetVertexPositionInputs( v.vertex.xyz ); + + o.texCoord0 = v.uv0; + o.color = v.color; + o.clipPos = vertexInput.positionCS; + + return o; + } + + half4 frag( VertexOutput IN /*ase_frag_input*/ ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + /*ase_frag_code:IN=VertexOutput*/ + float4 Color = /*ase_frag_out:Color;Float4;1;-1;_Color*/float4( 1, 1, 1, 1 )/*end*/; + + #if ETC1_EXTERNAL_ALPHA + float4 alpha = SAMPLE_TEXTURE2D( _AlphaTex, sampler_AlphaTex, IN.texCoord0.xy ); + Color.a = lerp( Color.a, alpha.r, _EnableAlphaTexture ); + #endif + + Color *= IN.color; + + return Color; + } + + ENDHLSL + } + } + CustomEditor "UnityEditor.ShaderGraph.PBRMasterGUI" + FallBack "Hidden/InternalErrorShader" +} diff --git a/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DUnlit.shader.meta b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DUnlit.shader.meta new file mode 100644 index 0000000..a75a12c --- /dev/null +++ b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/2DUnlit.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cf964e524c8e69742b1d21fbe2ebcc4a +timeCreated: 1568647145 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/PBR.shader b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/PBR.shader new file mode 100644 index 0000000..b1ee37d --- /dev/null +++ b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/PBR.shader @@ -0,0 +1,2732 @@ +Shader /*ase_name*/ "Hidden/Universal/PBR" /*end*/ +{ + Properties + { + /*ase_props*/ + //_TransmissionShadow( "Transmission Shadow", Range( 0, 1 ) ) = 0.5 + //_TransStrength( "Trans Strength", Range( 0, 50 ) ) = 1 + //_TransNormal( "Trans Normal Distortion", Range( 0, 1 ) ) = 0.5 + //_TransScattering( "Trans Scattering", Range( 1, 50 ) ) = 2 + //_TransDirect( "Trans Direct", Range( 0, 1 ) ) = 0.9 + //_TransAmbient( "Trans Ambient", Range( 0, 1 ) ) = 0.1 + //_TransShadow( "Trans Shadow", Range( 0, 1 ) ) = 0.5 + //_TessPhongStrength( "Tess Phong Strength", Range( 0, 1 ) ) = 0.5 + //_TessValue( "Tess Max Tessellation", Range( 1, 32 ) ) = 16 + //_TessMin( "Tess Min Distance", Float ) = 10 + //_TessMax( "Tess Max Distance", Float ) = 25 + //_TessEdgeLength ( "Tess Edge length", Range( 2, 50 ) ) = 16 + //_TessMaxDisp( "Tess Max Displacement", Float ) = 25 + } + + SubShader + { + /*ase_subshader_options:Name=Additional Options + Option:Workflow:Specular,Metallic:Metallic + Specular:SetDefine:_SPECULAR_SETUP 1 + Specular:ShowPort:Forward:Specular + Specular:HidePort:Forward:Metallic + Metallic:RemoveDefine:_SPECULAR_SETUP 1 + Metallic:ShowPort:Forward:Metallic + Metallic:HidePort:Forward:Specular + Option:Surface:Opaque,Transparent:Opaque + Opaque:SetPropertyOnSubShader:RenderType,Opaque + Opaque:SetPropertyOnSubShader:RenderQueue,Geometry + Opaque:SetPropertyOnPass:Forward:ZWrite,On + Opaque:HideOption: Refraction Model + Opaque:HideOption: Blend + Transparent:SetPropertyOnSubShader:RenderType,Transparent + Transparent:SetPropertyOnSubShader:RenderQueue,Transparent + Transparent:SetPropertyOnPass:Forward:ZWrite,Off + Transparent:ShowOption: Refraction Model + Transparent:ShowOption: Blend + Option: Refraction Model:None,Legacy:None + None,disable:HidePort:Forward:Refraction Index + None,disable:HidePort:Forward:Refraction Color + None,disable:RemoveDefine:_REFRACTION_ASE 1 + None,disable:RemoveDefine:REQUIRE_OPAQUE_TEXTURE 1 + None,disable:RemoveDefine:ASE_NEEDS_FRAG_SCREEN_POSITION + Legacy:ShowPort:Forward:Refraction Index + Legacy:ShowPort:Forward:Refraction Color + Legacy:SetDefine:_REFRACTION_ASE 1 + Legacy:SetDefine:REQUIRE_OPAQUE_TEXTURE 1 + Legacy:SetDefine:ASE_NEEDS_FRAG_SCREEN_POSITION + Option: Blend:Alpha,Premultiply,Additive,Multiply:Alpha + Alpha:SetPropertyOnPass:Forward:BlendRGB,SrcAlpha,OneMinusSrcAlpha + Premultiply:SetPropertyOnPass:Forward:BlendRGB,One,OneMinusSrcAlpha + Additive:SetPropertyOnPass:Forward:BlendRGB,One,One + Multiply:SetPropertyOnPass:Forward:BlendRGB,DstColor,Zero + Alpha,Premultiply,Additive:SetPropertyOnPass:Forward:BlendAlpha,One,OneMinusSrcAlpha + Multiply:SetPropertyOnPass:Forward:BlendAlpha,One,Zero + Premultiply:SetDefine:_ALPHAPREMULTIPLY_ON 1 + Alpha,Additive,Multiply,disable:RemoveDefine:_ALPHAPREMULTIPLY_ON 1 + disable:SetPropertyOnPass:Forward:BlendRGB,One,Zero + disable:SetPropertyOnPass:Forward:BlendAlpha,One,Zero + Option:Two Sided:On,Cull Back,Cull Front:Cull Back + On:SetPropertyOnSubShader:CullMode,Off + Cull Back:SetPropertyOnSubShader:CullMode,Back + Cull Front:SetPropertyOnSubShader:CullMode,Front + Option:Fragment Normal Space,InvertActionOnDeselection:Tangent,Object,World:Tangent + Tangent:SetDefine:_NORMAL_DROPOFF_TS 1 + Tangent:SetPortName:Forward:1,Normal + Object:SetDefine:_NORMAL_DROPOFF_OS 1 + Object:SetPortName:Forward:1,Object Normal + World:SetDefine:_NORMAL_DROPOFF_WS 1 + World:SetPortName:Forward:1,World Normal + Option:Transmission:false,true:false + false:RemoveDefine:_TRANSMISSION_ASE 1 + false:HidePort:Forward:Transmission + false:HideOption: Transmission Shadow + true:SetDefine:_TRANSMISSION_ASE 1 + true:ShowPort:Forward:Transmission + true:ShowOption: Transmission Shadow + Field: Transmission Shadow:Float:0.5:0:1:_TransmissionShadow + Change:SetMaterialProperty:_TransmissionShadow + Change:SetShaderProperty:_TransmissionShadow,_TransmissionShadow( "Transmission Shadow", Range( 0, 1 ) ) = 0.5 + Inline,disable:SetShaderProperty:_TransmissionShadow,//_TransmissionShadow( "Transmission Shadow", Range( 0, 1 ) ) = 0.5 + Option:Translucency:false,true:false + false:RemoveDefine:_TRANSLUCENCY_ASE 1 + false:HidePort:Forward:Translucency + false:HideOption: Translucency Strength + false:HideOption: Normal Distortion + false:HideOption: Scattering + false:HideOption: Direct + false:HideOption: Ambient + false:HideOption: Shadow + true:SetDefine:_TRANSLUCENCY_ASE 1 + true:ShowPort:Forward:Translucency + true:ShowOption: Translucency Strength + true:ShowOption: Normal Distortion + true:ShowOption: Scattering + true:ShowOption: Direct + true:ShowOption: Ambient + true:ShowOption: Shadow + Field: Translucency Strength:Float:1:0:50:_TransStrength + Change:SetMaterialProperty:_TransStrength + Change:SetShaderProperty:_TransStrength,_TransStrength( "Strength", Range( 0, 50 ) ) = 1 + Inline,disable:SetShaderProperty:_TransStrength,//_TransStrength( "Strength", Range( 0, 50 ) ) = 1 + Field: Normal Distortion:Float:0.5:0:1:_TransNormal + Change:SetMaterialProperty:_TransNormal + Change:SetShaderProperty:_TransNormal,_TransNormal( "Normal Distortion", Range( 0, 1 ) ) = 0.5 + Inline,disable:SetShaderProperty:_TransNormal,//_TransNormal( "Normal Distortion", Range( 0, 1 ) ) = 0.5 + Field: Scattering:Float:2:1:50:_TransScattering + Change:SetMaterialProperty:_TransScattering + Change:SetShaderProperty:_TransScattering,_TransScattering( "Scattering", Range( 1, 50 ) ) = 2 + Inline,disable:SetShaderProperty:_TransScattering,//_TransScattering( "Scattering", Range( 1, 50 ) ) = 2 + Field: Direct:Float:0.9:0:1:_TransDirect + Change:SetMaterialProperty:_TransDirect + Change:SetShaderProperty:_TransDirect,_TransDirect( "Direct", Range( 0, 1 ) ) = 0.9 + Inline,disable:SetShaderProperty:_TransDirect,//_TransDirect( "Direct", Range( 0, 1 ) ) = 0.9 + Field: Ambient:Float:0.1:0:1:_TransAmbient + Change:SetMaterialProperty:_TransAmbient + Change:SetShaderProperty:_TransAmbient,_TransAmbient( "Ambient", Range( 0, 1 ) ) = 0.1 + Inline,disable:SetShaderProperty:_TransAmbient,//_TransAmbient( "Ambient", Range( 0, 1 ) ) = 0.1 + Field: Shadow:Float:0.5:0:1:_TransShadow + Change:SetMaterialProperty:_TransShadow + Change:SetShaderProperty:_TransShadow,_TransShadow( "Shadow", Range( 0, 1 ) ) = 0.5 + Inline,disable:SetShaderProperty:_TransShadow,//_TransShadow( "Shadow", Range( 0, 1 ) ) = 0.5 + Option:Cast Shadows:false,true:true + true:IncludePass:ShadowCaster + false,disable:ExcludePass:ShadowCaster + true:ShowOption: Use Shadow Threshold + false:HideOption: Use Shadow Threshold + Option: Use Shadow Threshold:false,true:false + true:SetDefine:_ALPHATEST_SHADOW_ON 1 + true:ShowPort:Forward:Alpha Clip Threshold Shadow + false,disable:RemoveDefine:_ALPHATEST_SHADOW_ON 1 + false,disable:HidePort:Forward:Alpha Clip Threshold Shadow + Option:Receive Shadows:false,true:true + true:RemoveDefine:_RECEIVE_SHADOWS_OFF 1 + false:SetDefine:_RECEIVE_SHADOWS_OFF 1 + Option:GPU Instancing:false,true:true + true:SetDefine:pragma multi_compile_instancing + false:RemoveDefine:pragma multi_compile_instancing + Option:LOD CrossFade:false,true:true + true:SetDefine:pragma multi_compile _ LOD_FADE_CROSSFADE + false:RemoveDefine:pragma multi_compile _ LOD_FADE_CROSSFADE + Option:Built-in Fog:false,true:true + true:SetDefine:pragma multi_compile_fog + false:RemoveDefine:pragma multi_compile_fog + true:SetDefine:ASE_FOG 1 + false:RemoveDefine:ASE_FOG 1 + Option,_FinalColorxAlpha:Final Color x Alpha:true,false:false + true:SetDefine:ASE_FINAL_COLOR_ALPHA_MULTIPLY 1 + false:RemoveDefine:ASE_FINAL_COLOR_ALPHA_MULTIPLY 1 + Option:Meta Pass:false,true:true + true:IncludePass:Meta + false,disable:ExcludePass:Meta + Option:Override Baked GI:false,true:false + true:ShowPort:Forward:Baked GI + false:HidePort:Forward:Baked GI + Option:Extra Pre Pass:false,true:false + true:IncludePass:ExtraPrePass + false,disable:ExcludePass:ExtraPrePass + Option:DOTS Instancing:false,true:false + true:SetDefine:pragma multi_compile _ DOTS_INSTANCING_ON + false:RemoveDefine:pragma multi_compile _ DOTS_INSTANCING_ON + Option:Tessellation:false,true:false + true:SetDefine:TESSELLATION_ON 1 + true:SetDefine:pragma require tessellation tessHW + true:SetDefine:pragma hull HullFunction + true:SetDefine:pragma domain DomainFunction + true:ShowOption: Phong + true:ShowOption: Type + false,disable:RemoveDefine:TESSELLATION_ON 1 + false,disable:RemoveDefine:pragma require tessellation tessHW + false,disable:RemoveDefine:pragma hull HullFunction + false,disable:RemoveDefine:pragma domain DomainFunction + false,disable:HideOption: Phong + false,disable:HideOption: Type + Option: Phong:false,true:false + true:SetDefine:ASE_PHONG_TESSELLATION + false,disable:RemoveDefine:ASE_PHONG_TESSELLATION + true:ShowOption: Strength + false,disable:HideOption: Strength + Field: Strength:Float:0.5:0:1:_TessPhongStrength + Change:SetMaterialProperty:_TessPhongStrength + Change:SetShaderProperty:_TessPhongStrength,_TessPhongStrength( "Phong Tess Strength", Range( 0, 1 ) ) = 0.5 + Inline,disable:SetShaderProperty:_TessPhongStrength,//_TessPhongStrength( "Phong Tess Strength", Range( 0, 1 ) ) = 0.5 + Option: Type:Fixed,Distance Based,Edge Length,Edge Length Cull:Fixed + Fixed:SetDefine:ASE_FIXED_TESSELLATION + Fixed,Distance Based:ShowOption: Tess + Distance Based:SetDefine:ASE_DISTANCE_TESSELLATION + Distance Based:ShowOption: Min + Distance Based:ShowOption: Max + Edge Length:SetDefine:ASE_LENGTH_TESSELLATION + Edge Length,Edge Length Cull:ShowOption: Edge Length + Edge Length Cull:SetDefine:ASE_LENGTH_CULL_TESSELLATION + Edge Length Cull:ShowOption: Max Displacement + disable,Distance Based,Edge Length,Edge Length Cull:RemoveDefine:ASE_FIXED_TESSELLATION + disable,Fixed,Edge Length,Edge Length Cull:RemoveDefine:ASE_DISTANCE_TESSELLATION + disable,Fixed,Distance Based,Edge Length Cull:RemoveDefine:ASE_LENGTH_TESSELLATION + disable,Fixed,Distance Based,Edge Length:RemoveDefine:ASE_LENGTH_CULL_TESSELLATION + disable,Edge Length,Edge Length Cull:HideOption: Tess + disable,Fixed,Edge Length,Edge Length Cull:HideOption: Min + disable,Fixed,Edge Length,Edge Length Cull:HideOption: Max + disable,Fixed,Distance Based:HideOption: Edge Length + disable,Fixed,Distance Based,Edge Length:HideOption: Max Displacement + Field: Tess:Float:16:1:32:_TessValue + Change:SetMaterialProperty:_TessValue + Change:SetShaderProperty:_TessValue,_TessValue( "Max Tessellation", Range( 1, 32 ) ) = 16 + Inline,disable:SetShaderProperty:_TessValue,//_TessValue( "Max Tessellation", Range( 1, 32 ) ) = 16 + Field: Min:Float:10:_TessMin + Change:SetMaterialProperty:_TessMin + Change:SetShaderProperty:_TessMin,_TessMin( "Tess Min Distance", Float ) = 10 + Inline,disable:SetShaderProperty:_TessMin,//_TessMin( "Tess Min Distance", Float ) = 10 + Field: Max:Float:25:_TessMax + Change:SetMaterialProperty:_TessMax + Change:SetShaderProperty:_TessMax,_TessMax( "Tess Max Distance", Float ) = 25 + Inline,disable:SetShaderProperty:_TessMax,//_TessMax( "Tess Max Distance", Float ) = 25 + Field: Edge Length:Float:16:2:50:_TessEdgeLength + Change:SetMaterialProperty:_TessEdgeLength + Change:SetShaderProperty:_TessEdgeLength,_TessEdgeLength ( "Edge length", Range( 2, 50 ) ) = 16 + Inline,disable:SetShaderProperty:_TessEdgeLength,//_TessEdgeLength ( "Edge length", Range( 2, 50 ) ) = 16 + Field: Max Displacement:Float:25:_TessMaxDisp + Change:SetMaterialProperty:_TessMaxDisp + Change:SetShaderProperty:_TessMaxDisp,_TessMaxDisp( "Max Displacement", Float ) = 25 + Inline,disable:SetShaderProperty:_TessMaxDisp,//_TessMaxDisp( "Max Displacement", Float ) = 25 + Option:Write Depth:false,true:false + true:SetDefine:ASE_DEPTH_WRITE_ON + true:ShowOption: Early Z + true:ShowPort:Forward:Depth Value + false,disable:RemoveDefine:ASE_DEPTH_WRITE_ON + false,disable:HideOption: Early Z + false,disable:HidePort:Forward:Depth Value + Option: Early Z:false,true:false + true:SetDefine:ASE_EARLY_Z_DEPTH_OPTIMIZE + false,disable:RemoveDefine:ASE_EARLY_Z_DEPTH_OPTIMIZE + Option:Vertex Position,InvertActionOnDeselection:Absolute,Relative:Relative + Absolute:SetDefine:ASE_ABSOLUTE_VERTEX_POS 1 + Absolute:SetPortName:Forward:8,Vertex Position + Relative:SetPortName:Forward:8,Vertex Offset + Absolute:SetPortName:ExtraPrePass:3,Vertex Position + Relative:SetPortName:ExtraPrePass:3,Vertex Offset + Port:Forward:Emission + On:SetDefine:_EMISSION + Port:Forward:Baked GI + On:SetDefine:_ASE_BAKEDGI 1 + Port:Forward:Alpha Clip Threshold + On:SetDefine:_ALPHATEST_ON 1 + Port:Forward:Normal + On:SetDefine:_NORMALMAP 1 + */ + + Tags + { + "RenderPipeline" = "UniversalPipeline" + "RenderType"="Opaque" + "Queue"="Geometry+0" + } + Cull Back + AlphaToMask Off + HLSLINCLUDE + #pragma target 2.0 + + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + + #ifndef ASE_TESS_FUNCS + #define ASE_TESS_FUNCS + float4 FixedTess( float tessValue ) + { + return tessValue; + } + + float CalcDistanceTessFactor (float4 vertex, float minDist, float maxDist, float tess, float4x4 o2w, float3 cameraPos ) + { + float3 wpos = mul(o2w,vertex).xyz; + float dist = distance (wpos, cameraPos); + float f = clamp(1.0 - (dist - minDist) / (maxDist - minDist), 0.01, 1.0) * tess; + return f; + } + + float4 CalcTriEdgeTessFactors (float3 triVertexFactors) + { + float4 tess; + tess.x = 0.5 * (triVertexFactors.y + triVertexFactors.z); + tess.y = 0.5 * (triVertexFactors.x + triVertexFactors.z); + tess.z = 0.5 * (triVertexFactors.x + triVertexFactors.y); + tess.w = (triVertexFactors.x + triVertexFactors.y + triVertexFactors.z) / 3.0f; + return tess; + } + + float CalcEdgeTessFactor (float3 wpos0, float3 wpos1, float edgeLen, float3 cameraPos, float4 scParams ) + { + float dist = distance (0.5 * (wpos0+wpos1), cameraPos); + float len = distance(wpos0, wpos1); + float f = max(len * scParams.y / (edgeLen * dist), 1.0); + return f; + } + + float DistanceFromPlane (float3 pos, float4 plane) + { + float d = dot (float4(pos,1.0f), plane); + return d; + } + + bool WorldViewFrustumCull (float3 wpos0, float3 wpos1, float3 wpos2, float cullEps, float4 planes[6] ) + { + float4 planeTest; + planeTest.x = (( DistanceFromPlane(wpos0, planes[0]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[0]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[0]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.y = (( DistanceFromPlane(wpos0, planes[1]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[1]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[1]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.z = (( DistanceFromPlane(wpos0, planes[2]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[2]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[2]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.w = (( DistanceFromPlane(wpos0, planes[3]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[3]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[3]) > -cullEps) ? 1.0f : 0.0f ); + return !all (planeTest); + } + + float4 DistanceBasedTess( float4 v0, float4 v1, float4 v2, float tess, float minDist, float maxDist, float4x4 o2w, float3 cameraPos ) + { + float3 f; + f.x = CalcDistanceTessFactor (v0,minDist,maxDist,tess,o2w,cameraPos); + f.y = CalcDistanceTessFactor (v1,minDist,maxDist,tess,o2w,cameraPos); + f.z = CalcDistanceTessFactor (v2,minDist,maxDist,tess,o2w,cameraPos); + + return CalcTriEdgeTessFactors (f); + } + + float4 EdgeLengthBasedTess( float4 v0, float4 v1, float4 v2, float edgeLength, float4x4 o2w, float3 cameraPos, float4 scParams ) + { + float3 pos0 = mul(o2w,v0).xyz; + float3 pos1 = mul(o2w,v1).xyz; + float3 pos2 = mul(o2w,v2).xyz; + float4 tess; + tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams); + tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams); + tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams); + tess.w = (tess.x + tess.y + tess.z) / 3.0f; + return tess; + } + + float4 EdgeLengthBasedTessCull( float4 v0, float4 v1, float4 v2, float edgeLength, float maxDisplacement, float4x4 o2w, float3 cameraPos, float4 scParams, float4 planes[6] ) + { + float3 pos0 = mul(o2w,v0).xyz; + float3 pos1 = mul(o2w,v1).xyz; + float3 pos2 = mul(o2w,v2).xyz; + float4 tess; + + if (WorldViewFrustumCull(pos0, pos1, pos2, maxDisplacement, planes)) + { + tess = 0.0f; + } + else + { + tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams); + tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams); + tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams); + tess.w = (tess.x + tess.y + tess.z) / 3.0f; + } + return tess; + } + #endif //ASE_TESS_FUNCS + + ENDHLSL + + /*ase_pass*/ + Pass + { + Name "ExtraPrePass" + Tags{ } + + Blend One Zero + Cull Back + ZWrite On + ZTest LEqual + Offset 0,0 + ColorMask RGBA + /*ase_stencil*/ + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + + #if ASE_SRP_VERSION <= 70108 + #define REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR + #endif + + /*ase_pragma*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + /*ase_vdata:p=p;n=n*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 worldPos : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + #ifdef ASE_FOG + float fogFactor : TEXCOORD2; + #endif + /*ase_interp(3,):sp=sp;wp=tc0;sc=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef _TRANSMISSION_ASE + float _TransmissionShadow; + #endif + #ifdef _TRANSLUCENCY_ASE + float _TransStrength; + float _TransNormal; + float _TransScattering; + float _TransDirect; + float _TransAmbient; + float _TransShadow; + #endif + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + VertexOutput VertexFunction ( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;3;-1;_VertexP*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;4;-1;_NormalP*/v.ase_normal/*end*/; + + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + float4 positionCS = TransformWorldToHClip( positionWS ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.worldPos = positionWS; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = positionCS; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + #ifdef ASE_FOG + o.fogFactor = ComputeFogFactor( positionCS.z ); + #endif + o.clipPos = positionCS; + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag ( VertexOutput IN /*ase_frag_input*/ ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + /*ase_local_var:wp*/float3 WorldPosition = IN.worldPos; + #endif + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + /*ase_frag_code:IN=VertexOutput*/ + float3 Color = /*ase_frag_out:Color;Float3;0;-1;_ColorP*/float3( 0, 0, 0 )/*end*/; + float Alpha = /*ase_frag_out:Alpha;Float;1;-1;_AlphaP*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;2;-1;_AlphaClipP*/0.5/*end*/; + + #ifdef _ALPHATEST_ON + clip( Alpha - AlphaClipThreshold ); + #endif + + #ifdef ASE_FOG + Color = MixFog( Color, IN.fogFactor ); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); + #endif + + return half4( Color, Alpha ); + } + + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_main_pass*/ + Name "Forward" + Tags{"LightMode" = "UniversalForward"} + + Blend One Zero + ZWrite On + ZTest LEqual + Offset 0,0 + ColorMask RGBA + /*ase_stencil*/ + + HLSLPROGRAM + + #pragma multi_compile _ _SCREEN_SPACE_OCCLUSION + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE + #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS _ADDITIONAL_OFF + #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS + #pragma multi_compile _ _SHADOWS_SOFT + #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE + + #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING + #pragma multi_compile _ SHADOWS_SHADOWMASK + + #pragma multi_compile _ DIRLIGHTMAP_COMBINED + #pragma multi_compile _ LIGHTMAP_ON + + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS_FORWARD + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + + #if ASE_SRP_VERSION <= 70108 + #define REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR + #endif + + #if defined(UNITY_INSTANCING_ENABLED) && defined(_TERRAIN_INSTANCED_PERPIXEL_NORMAL) + #define ENABLE_TERRAIN_PERPIXEL_NORMAL + #endif + + /*ase_pragma*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + float4 ase_tangent : TANGENT; + float4 texcoord1 : TEXCOORD1; + float4 texcoord : TEXCOORD0; + /*ase_vdata:p=p;n=n;t=t;uv0=tc0;uv1=tc1.xyzw*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + float4 lightmapUVOrVertexSH : TEXCOORD0; + half4 fogFactorAndVertexLight : TEXCOORD1; + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD2; + #endif + float4 tSpace0 : TEXCOORD3; + float4 tSpace1 : TEXCOORD4; + float4 tSpace2 : TEXCOORD5; + #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) + float4 screenPos : TEXCOORD6; + #endif + /*ase_interp(7,):sp=sp;sc=tc2;wn.xyz=tc3.xyz;wt.xyz=tc4.xyz;wbt.xyz=tc5.xyz;wp.x=tc3.w;wp.y=tc4.w;wp.z=tc5.w;spu=tc6*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef _TRANSMISSION_ASE + float _TransmissionShadow; + #endif + #ifdef _TRANSLUCENCY_ASE + float _TransStrength; + float _TransNormal; + float _TransScattering; + float _TransDirect; + float _TransAmbient; + float _TransShadow; + #endif + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + VertexOutput VertexFunction( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;8;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;10;-1;_Normal*/v.ase_normal/*end*/; + + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + float3 positionVS = TransformWorldToView( positionWS ); + float4 positionCS = TransformWorldToHClip( positionWS ); + + VertexNormalInputs normalInput = GetVertexNormalInputs( v.ase_normal, v.ase_tangent ); + + o.tSpace0 = float4( normalInput.normalWS, positionWS.x); + o.tSpace1 = float4( normalInput.tangentWS, positionWS.y); + o.tSpace2 = float4( normalInput.bitangentWS, positionWS.z); + + OUTPUT_LIGHTMAP_UV( v.texcoord1, unity_LightmapST, o.lightmapUVOrVertexSH.xy ); + OUTPUT_SH( normalInput.normalWS.xyz, o.lightmapUVOrVertexSH.xyz ); + + #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL) + o.lightmapUVOrVertexSH.zw = v.texcoord; + o.lightmapUVOrVertexSH.xy = v.texcoord * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + + half3 vertexLight = VertexLighting( positionWS, normalInput.normalWS ); + #ifdef ASE_FOG + half fogFactor = ComputeFogFactor( positionCS.z ); + #else + half fogFactor = 0; + #endif + o.fogFactorAndVertexLight = half4(fogFactor, vertexLight); + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = positionCS; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + + o.clipPos = positionCS; + #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) + o.screenPos = ComputeScreenPos(positionCS); + #endif + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + float4 ase_tangent : TANGENT; + float4 texcoord : TEXCOORD0; + float4 texcoord1 : TEXCOORD1; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + o.ase_tangent = v.ase_tangent; + o.texcoord = v.texcoord; + o.texcoord1 = v.texcoord1; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + o.ase_tangent = patch[0].ase_tangent * bary.x + patch[1].ase_tangent * bary.y + patch[2].ase_tangent * bary.z; + o.texcoord = patch[0].texcoord * bary.x + patch[1].texcoord * bary.y + patch[2].texcoord * bary.z; + o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) + #define ASE_SV_DEPTH SV_DepthLessEqual + #else + #define ASE_SV_DEPTH SV_Depth + #endif + + half4 frag ( VertexOutput IN + #ifdef ASE_DEPTH_WRITE_ON + ,out float outputDepth : ASE_SV_DEPTH + #endif + /*ase_frag_input*/ ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN); + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); + #endif + + #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL) + float2 sampleCoords = (IN.lightmapUVOrVertexSH.zw / _TerrainHeightmapRecipSize.zw + 0.5f) * _TerrainHeightmapRecipSize.xy; + float3 WorldNormal = TransformObjectToWorldNormal(normalize(SAMPLE_TEXTURE2D(_TerrainNormalmapTexture, sampler_TerrainNormalmapTexture, sampleCoords).rgb * 2 - 1)); + float3 WorldTangent = -cross(GetObjectToWorldMatrix()._13_23_33, WorldNormal); + float3 WorldBiTangent = cross(WorldNormal, -WorldTangent); + #else + /*ase_local_var:wn*/float3 WorldNormal = normalize( IN.tSpace0.xyz ); + /*ase_local_var:wt*/float3 WorldTangent = IN.tSpace1.xyz; + /*ase_local_var:wbt*/float3 WorldBiTangent = IN.tSpace2.xyz; + #endif + /*ase_local_var:wp*/float3 WorldPosition = float3(IN.tSpace0.w,IN.tSpace1.w,IN.tSpace2.w); + /*ase_local_var:wvd*/float3 WorldViewDirection = _WorldSpaceCameraPos.xyz - WorldPosition; + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) + /*ase_local_var:spu*/float4 ScreenPos = IN.screenPos; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + + WorldViewDirection = SafeNormalize( WorldViewDirection ); + + /*ase_frag_code:IN=VertexOutput*/ + float3 Albedo = /*ase_frag_out:Albedo;Float3;0;-1;_Albedo*/float3(0.5, 0.5, 0.5)/*end*/; + float3 Normal = /*ase_frag_out:Normal;Float3;1;-1;_FragNormal*/float3(0, 0, 1)/*end*/; + float3 Emission = /*ase_frag_out:Emission;Float3;2;-1;_Emission*/0/*end*/; + float3 Specular = /*ase_frag_out:Specular;Float3;9;-1;_Specular*/0.5/*end*/; + float Metallic = /*ase_frag_out:Metallic;Float;3;-1;_Metallic*/0/*end*/; + float Smoothness = /*ase_frag_out:Smoothness;Float;4;-1;_Smoothness*/0.5/*end*/; + float Occlusion = /*ase_frag_out:Occlusion;Float;5;-1;_Occlusion*/1/*end*/; + float Alpha = /*ase_frag_out:Alpha;Float;6;-1;_Alpha*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;7;-1;_AlphaClip*/0.5/*end*/; + float AlphaClipThresholdShadow = /*ase_frag_out:Alpha Clip Threshold Shadow;Float;16;-1;_AlphaClipShadow*/0.5/*end*/; + float3 BakedGI = /*ase_frag_out:Baked GI;Float3;11;-1;_BakedGI*/0/*end*/; + float3 RefractionColor = /*ase_frag_out:Refraction Color;Float3;12;-1;_RefractionColor*/1/*end*/; + float RefractionIndex = /*ase_frag_out:Refraction Index;Float;13;-1;_RefractionIndex*/1/*end*/; + float3 Transmission = /*ase_frag_out:Transmission;Float3;14;-1;_Transmission*/1/*end*/; + float3 Translucency = /*ase_frag_out:Translucency;Float3;15;-1;_Translucency*/1/*end*/; + #ifdef ASE_DEPTH_WRITE_ON + float DepthValue = /*ase_frag_out:Depth Value;Float;17;-1;_DepthValue*/0/*end*/; + #endif + + #ifdef _ALPHATEST_ON + clip(Alpha - AlphaClipThreshold); + #endif + + InputData inputData; + inputData.positionWS = WorldPosition; + inputData.viewDirectionWS = WorldViewDirection; + inputData.shadowCoord = ShadowCoords; + + #ifdef _NORMALMAP + #if _NORMAL_DROPOFF_TS + inputData.normalWS = TransformTangentToWorld(Normal, half3x3( WorldTangent, WorldBiTangent, WorldNormal )); + #elif _NORMAL_DROPOFF_OS + inputData.normalWS = TransformObjectToWorldNormal(Normal); + #elif _NORMAL_DROPOFF_WS + inputData.normalWS = Normal; + #endif + inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS); + #else + inputData.normalWS = WorldNormal; + #endif + + #ifdef ASE_FOG + inputData.fogCoord = IN.fogFactorAndVertexLight.x; + #endif + + inputData.vertexLighting = IN.fogFactorAndVertexLight.yzw; + #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL) + float3 SH = SampleSH(inputData.normalWS.xyz); + #else + float3 SH = IN.lightmapUVOrVertexSH.xyz; + #endif + + inputData.bakedGI = SAMPLE_GI( IN.lightmapUVOrVertexSH.xy, SH, inputData.normalWS ); + #ifdef _ASE_BAKEDGI + inputData.bakedGI = BakedGI; + #endif + + inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(IN.clipPos); + inputData.shadowMask = SAMPLE_SHADOWMASK(IN.lightmapUVOrVertexSH.xy); + + half4 color = UniversalFragmentPBR( + inputData, + Albedo, + Metallic, + Specular, + Smoothness, + Occlusion, + Emission, + Alpha); + + #ifdef _TRANSMISSION_ASE + { + float shadow = /*ase_inline_begin*/_TransmissionShadow/*ase_inline_end*/; + + Light mainLight = GetMainLight( inputData.shadowCoord ); + float3 mainAtten = mainLight.color * mainLight.distanceAttenuation; + mainAtten = lerp( mainAtten, mainAtten * mainLight.shadowAttenuation, shadow ); + half3 mainTransmission = max(0 , -dot(inputData.normalWS, mainLight.direction)) * mainAtten * Transmission; + color.rgb += Albedo * mainTransmission; + + #ifdef _ADDITIONAL_LIGHTS + int transPixelLightCount = GetAdditionalLightsCount(); + for (int i = 0; i < transPixelLightCount; ++i) + { + Light light = GetAdditionalLight(i, inputData.positionWS); + float3 atten = light.color * light.distanceAttenuation; + atten = lerp( atten, atten * light.shadowAttenuation, shadow ); + + half3 transmission = max(0 , -dot(inputData.normalWS, light.direction)) * atten * Transmission; + color.rgb += Albedo * transmission; + } + #endif + } + #endif + + #ifdef _TRANSLUCENCY_ASE + { + float shadow = /*ase_inline_begin*/_TransShadow/*ase_inline_end*/; + float normal = /*ase_inline_begin*/_TransNormal/*ase_inline_end*/; + float scattering = /*ase_inline_begin*/_TransScattering/*ase_inline_end*/; + float direct = /*ase_inline_begin*/_TransDirect/*ase_inline_end*/; + float ambient = /*ase_inline_begin*/_TransAmbient/*ase_inline_end*/; + float strength = /*ase_inline_begin*/_TransStrength/*ase_inline_end*/; + + Light mainLight = GetMainLight( inputData.shadowCoord ); + float3 mainAtten = mainLight.color * mainLight.distanceAttenuation; + mainAtten = lerp( mainAtten, mainAtten * mainLight.shadowAttenuation, shadow ); + + half3 mainLightDir = mainLight.direction + inputData.normalWS * normal; + half mainVdotL = pow( saturate( dot( inputData.viewDirectionWS, -mainLightDir ) ), scattering ); + half3 mainTranslucency = mainAtten * ( mainVdotL * direct + inputData.bakedGI * ambient ) * Translucency; + color.rgb += Albedo * mainTranslucency * strength; + + #ifdef _ADDITIONAL_LIGHTS + int transPixelLightCount = GetAdditionalLightsCount(); + for (int i = 0; i < transPixelLightCount; ++i) + { + Light light = GetAdditionalLight(i, inputData.positionWS); + float3 atten = light.color * light.distanceAttenuation; + atten = lerp( atten, atten * light.shadowAttenuation, shadow ); + + half3 lightDir = light.direction + inputData.normalWS * normal; + half VdotL = pow( saturate( dot( inputData.viewDirectionWS, -lightDir ) ), scattering ); + half3 translucency = atten * ( VdotL * direct + inputData.bakedGI * ambient ) * Translucency; + color.rgb += Albedo * translucency * strength; + } + #endif + } + #endif + + #ifdef _REFRACTION_ASE + float4 projScreenPos = ScreenPos / ScreenPos.w; + float3 refractionOffset = ( RefractionIndex - 1.0 ) * mul( UNITY_MATRIX_V, float4( WorldNormal,0 ) ).xyz * ( 1.0 - dot( WorldNormal, WorldViewDirection ) ); + projScreenPos.xy += refractionOffset.xy; + float3 refraction = SHADERGRAPH_SAMPLE_SCENE_COLOR( projScreenPos.xy ) * RefractionColor; + color.rgb = lerp( refraction, color.rgb, color.a ); + color.a = 1; + #endif + + #ifdef ASE_FINAL_COLOR_ALPHA_MULTIPLY + color.rgb *= color.a; + #endif + + #ifdef ASE_FOG + #ifdef TERRAIN_SPLAT_ADDPASS + color.rgb = MixFogColor(color.rgb, half3( 0, 0, 0 ), IN.fogFactorAndVertexLight.x ); + #else + color.rgb = MixFog(color.rgb, IN.fogFactorAndVertexLight.x); + #endif + #endif + + #ifdef ASE_DEPTH_WRITE_ON + outputDepth = DepthValue; + #endif + + return color; + } + + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_hide_pass*/ + Name "ShadowCaster" + Tags{"LightMode" = "ShadowCaster"} + + ZWrite On + ZTest LEqual + AlphaToMask Off + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS_SHADOWCASTER + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + + /*ase_pragma*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + /*ase_vdata:p=p;n=n*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 worldPos : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + /*ase_interp(2,):sp=sp;wp=tc0;sc=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef _TRANSMISSION_ASE + float _TransmissionShadow; + #endif + #ifdef _TRANSLUCENCY_ASE + float _TransStrength; + float _TransNormal; + float _TransScattering; + float _TransDirect; + float _TransAmbient; + float _TransShadow; + #endif + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + float3 _LightDirection; + + VertexOutput VertexFunction( VertexInput v/*ase_vert_input*/ ) + { + VertexOutput o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;2;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;3;-1;_Normal*/v.ase_normal/*end*/; + + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.worldPos = positionWS; + #endif + float3 normalWS = TransformObjectToWorldDir(v.ase_normal); + + float4 clipPos = TransformWorldToHClip( ApplyShadowBias( positionWS, normalWS, _LightDirection ) ); + + #if UNITY_REVERSED_Z + clipPos.z = min(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); + #else + clipPos.z = max(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = clipPos; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + o.clipPos = clipPos; + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) + #define ASE_SV_DEPTH SV_DepthLessEqual + #else + #define ASE_SV_DEPTH SV_Depth + #endif + + half4 frag( VertexOutput IN + #ifdef ASE_DEPTH_WRITE_ON + ,out float outputDepth : ASE_SV_DEPTH + #endif + /*ase_frag_input*/ ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + /*ase_local_var:wp*/float3 WorldPosition = IN.worldPos; + #endif + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + /*ase_frag_code:IN=VertexOutput*/ + float Alpha = /*ase_frag_out:Alpha;Float;0;-1;_Alpha*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;1;-1;_AlphaClip*/0.5/*end*/; + float AlphaClipThresholdShadow = /*ase_frag_out:Alpha Clip Threshold Shadow;Float;4;-1;_AlphaClipShadow*/0.5/*end*/; + #ifdef ASE_DEPTH_WRITE_ON + float DepthValue = /*ase_frag_out:Depth Value;Float;5;-1;_DepthValue*/0/*end*/; + #endif + + #ifdef _ALPHATEST_ON + #ifdef _ALPHATEST_SHADOW_ON + clip(Alpha - AlphaClipThresholdShadow); + #else + clip(Alpha - AlphaClipThreshold); + #endif + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); + #endif + #ifdef ASE_DEPTH_WRITE_ON + outputDepth = DepthValue; + #endif + return 0; + } + + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_hide_pass*/ + Name "DepthOnly" + Tags{"LightMode" = "DepthOnly"} + + ZWrite On + ColorMask 0 + AlphaToMask Off + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS_DEPTHONLY + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + + /*ase_pragma*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + /*ase_vdata:p=p;n=n*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 worldPos : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + /*ase_interp(2,):sp=sp;wp=tc0;sc=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef _TRANSMISSION_ASE + float _TransmissionShadow; + #endif + #ifdef _TRANSLUCENCY_ASE + float _TransStrength; + float _TransNormal; + float _TransScattering; + float _TransDirect; + float _TransAmbient; + float _TransShadow; + #endif + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + VertexOutput VertexFunction( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;2;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;3;-1;_Normal*/v.ase_normal/*end*/; + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + float4 positionCS = TransformWorldToHClip( positionWS ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.worldPos = positionWS; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = positionCS; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + o.clipPos = positionCS; + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) + #define ASE_SV_DEPTH SV_DepthLessEqual + #else + #define ASE_SV_DEPTH SV_Depth + #endif + half4 frag( VertexOutput IN + #ifdef ASE_DEPTH_WRITE_ON + ,out float outputDepth : ASE_SV_DEPTH + #endif + /*ase_frag_input*/ ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + /*ase_local_var:wp*/float3 WorldPosition = IN.worldPos; + #endif + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + /*ase_frag_code:IN=VertexOutput*/ + float Alpha = /*ase_frag_out:Alpha;Float;0;-1;_Alpha*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;1;-1;_AlphaClip*/0.5/*end*/; + #ifdef ASE_DEPTH_WRITE_ON + float DepthValue = /*ase_frag_out:Depth Value;Float;4;-1;_DepthValue*/0/*end*/; + #endif + + #ifdef _ALPHATEST_ON + clip(Alpha - AlphaClipThreshold); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); + #endif + #ifdef ASE_DEPTH_WRITE_ON + outputDepth = DepthValue; + #endif + + return 0; + } + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_hide_pass*/ + Name "Meta" + Tags{"LightMode" = "Meta"} + + Cull Off + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS_META + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/MetaInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + + /*ase_pragma*/ + + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + /*ase_vdata:p=p;n=n;uv1=tc1;uv2=tc2*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 worldPos : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + /*ase_interp(2,):sp=sp;wp=tc0;sc=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef _TRANSMISSION_ASE + float _TransmissionShadow; + #endif + #ifdef _TRANSLUCENCY_ASE + float _TransStrength; + float _TransNormal; + float _TransScattering; + float _TransDirect; + float _TransAmbient; + float _TransShadow; + #endif + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + VertexOutput VertexFunction( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;4;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;5;-1;_Normal*/v.ase_normal/*end*/; + + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.worldPos = positionWS; + #endif + + o.clipPos = MetaVertexPosition( v.vertex, v.texcoord1.xy, v.texcoord1.xy, unity_LightmapST, unity_DynamicLightmapST ); + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = o.clipPos; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + o.texcoord1 = v.texcoord1; + o.texcoord2 = v.texcoord2; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z; + o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN /*ase_frag_input*/ ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + /*ase_local_var:wp*/float3 WorldPosition = IN.worldPos; + #endif + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + /*ase_frag_code:IN=VertexOutput*/ + + float3 Albedo = /*ase_frag_out:Albedo;Float3;0;-1;_Albedo*/float3(0.5, 0.5, 0.5)/*end*/; + float3 Emission = /*ase_frag_out:Emission;Float3;1;-1;_Emission*/0/*end*/; + float Alpha = /*ase_frag_out:Alpha;Float;2;-1;_Alpha*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;3;-1;_AlphaClip*/0.5/*end*/; + + #ifdef _ALPHATEST_ON + clip(Alpha - AlphaClipThreshold); + #endif + + MetaInput metaInput = (MetaInput)0; + metaInput.Albedo = Albedo; + metaInput.Emission = Emission; + + return MetaFragment(metaInput); + } + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_hide_pass:SyncP*/ + Name "Universal2D" + Tags{"LightMode" = "Universal2D"} + + Blend One Zero + ZWrite On + ZTest LEqual + Offset 0,0 + ColorMask RGBA + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS_2D + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + + /*ase_pragma*/ + + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + /*ase_vdata:p=p;n=n*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 worldPos : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + /*ase_interp(2,):sp=sp;wp=tc0;sc=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef _TRANSMISSION_ASE + float _TransmissionShadow; + #endif + #ifdef _TRANSLUCENCY_ASE + float _TransStrength; + float _TransNormal; + float _TransScattering; + float _TransDirect; + float _TransAmbient; + float _TransShadow; + #endif + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + VertexOutput VertexFunction( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID( v ); + UNITY_TRANSFER_INSTANCE_ID( v, o ); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;3;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;4;-1;_Normal*/v.ase_normal/*end*/; + + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + float4 positionCS = TransformWorldToHClip( positionWS ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.worldPos = positionWS; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = positionCS; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + + o.clipPos = positionCS; + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN /*ase_frag_input*/ ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + /*ase_local_var:wp*/float3 WorldPosition = IN.worldPos; + #endif + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + /*ase_frag_code:IN=VertexOutput*/ + + float3 Albedo = /*ase_frag_out:Albedo;Float3;0;-1;_Albedo*/float3(0.5, 0.5, 0.5)/*end*/; + float Alpha = /*ase_frag_out:Alpha;Float;1;-1;_Alpha*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;2;-1;_AlphaClip*/0.5/*end*/; + + half4 color = half4( Albedo, Alpha ); + + #ifdef _ALPHATEST_ON + clip(Alpha - AlphaClipThreshold); + #endif + + return color; + } + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_hide_pass*/ + Name "DepthNormals" + Tags{"LightMode" = "DepthNormals"} + + ZWrite On + Blend One Zero + ZTest LEqual + ZWrite On + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS_DEPTHNORMALSONLY + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + + /*ase_pragma*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + /*ase_vdata:p=p;n=n*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 worldPos : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + float3 worldNormal : TEXCOORD2; + /*ase_interp(3,):sp=sp;wp=tc0;sc=tc1;wn=tc2*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef _TRANSMISSION_ASE + float _TransmissionShadow; + #endif + #ifdef _TRANSLUCENCY_ASE + float _TransStrength; + float _TransNormal; + float _TransScattering; + float _TransDirect; + float _TransAmbient; + float _TransShadow; + #endif + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + VertexOutput VertexFunction( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;2;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;3;-1;_Normal*/v.ase_normal/*end*/; + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + float3 normalWS = TransformObjectToWorldNormal( v.ase_normal ); + float4 positionCS = TransformWorldToHClip( positionWS ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.worldPos = positionWS; + #endif + + o.worldNormal = normalWS; + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = positionCS; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + o.clipPos = positionCS; + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) + #define ASE_SV_DEPTH SV_DepthLessEqual + #else + #define ASE_SV_DEPTH SV_Depth + #endif + half4 frag( VertexOutput IN + #ifdef ASE_DEPTH_WRITE_ON + ,out float outputDepth : ASE_SV_DEPTH + #endif + /*ase_frag_input*/ ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + /*ase_local_var:wp*/float3 WorldPosition = IN.worldPos; + #endif + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + /*ase_frag_code:IN=VertexOutput*/ + float Alpha = /*ase_frag_out:Alpha;Float;0;-1;_Alpha*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;1;-1;_AlphaClip*/0.5/*end*/; + #ifdef ASE_DEPTH_WRITE_ON + float DepthValue = /*ase_frag_out:Depth Value;Float;4;-1;_DepthValue*/0/*end*/; + #endif + + #ifdef _ALPHATEST_ON + clip(Alpha - AlphaClipThreshold); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); + #endif + + #ifdef ASE_DEPTH_WRITE_ON + outputDepth = DepthValue; + #endif + + return float4(PackNormalOctRectEncode(TransformWorldToViewDir(IN.worldNormal, true)), 0.0, 0.0); + } + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_hide_pass:SyncP*/ + Name "GBuffer" + Tags{"LightMode" = "UniversalGBuffer"} + + Blend One Zero + ZWrite On + ZTest LEqual + Offset 0,0 + ColorMask RGBA + /*ase_stencil*/ + + HLSLPROGRAM + + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE + #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS + #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS + #pragma multi_compile _ _SHADOWS_SOFT + #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE + #pragma multi_compile _ _GBUFFER_NORMALS_OCT + + #pragma multi_compile _ DIRLIGHTMAP_COMBINED + #pragma multi_compile _ LIGHTMAP_ON + + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS SHADERPASS_GBUFFER + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl" + + #if ASE_SRP_VERSION <= 70108 + #define REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR + #endif + + #if defined(UNITY_INSTANCING_ENABLED) && defined(_TERRAIN_INSTANCED_PERPIXEL_NORMAL) + #define ENABLE_TERRAIN_PERPIXEL_NORMAL + #endif + + /*ase_pragma*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + float4 ase_tangent : TANGENT; + float4 texcoord1 : TEXCOORD1; + float4 texcoord : TEXCOORD0; + /*ase_vdata:p=p;n=n;t=t;uv0=tc0;uv1=tc1.xyzw*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + float4 lightmapUVOrVertexSH : TEXCOORD0; + half4 fogFactorAndVertexLight : TEXCOORD1; + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD2; + #endif + float4 tSpace0 : TEXCOORD3; + float4 tSpace1 : TEXCOORD4; + float4 tSpace2 : TEXCOORD5; + #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) + float4 screenPos : TEXCOORD6; + #endif + /*ase_interp(7,):sp=sp;sc=tc2;wn.xyz=tc3.xyz;wt.xyz=tc4.xyz;wbt.xyz=tc5.xyz;wp.x=tc3.w;wp.y=tc4.w;wp.z=tc5.w;spu=tc6*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef _TRANSMISSION_ASE + float _TransmissionShadow; + #endif + #ifdef _TRANSLUCENCY_ASE + float _TransStrength; + float _TransNormal; + float _TransScattering; + float _TransDirect; + float _TransAmbient; + float _TransShadow; + #endif + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + VertexOutput VertexFunction( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;8;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;10;-1;_Normal*/v.ase_normal/*end*/; + + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + float3 positionVS = TransformWorldToView( positionWS ); + float4 positionCS = TransformWorldToHClip( positionWS ); + + VertexNormalInputs normalInput = GetVertexNormalInputs( v.ase_normal, v.ase_tangent ); + + o.tSpace0 = float4( normalInput.normalWS, positionWS.x); + o.tSpace1 = float4( normalInput.tangentWS, positionWS.y); + o.tSpace2 = float4( normalInput.bitangentWS, positionWS.z); + + OUTPUT_LIGHTMAP_UV( v.texcoord1, unity_LightmapST, o.lightmapUVOrVertexSH.xy ); + OUTPUT_SH( normalInput.normalWS.xyz, o.lightmapUVOrVertexSH.xyz ); + + #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL) + o.lightmapUVOrVertexSH.zw = v.texcoord; + o.lightmapUVOrVertexSH.xy = v.texcoord * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + + half3 vertexLight = VertexLighting( positionWS, normalInput.normalWS ); + #ifdef ASE_FOG + half fogFactor = ComputeFogFactor( positionCS.z ); + #else + half fogFactor = 0; + #endif + o.fogFactorAndVertexLight = half4(fogFactor, vertexLight); + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = positionCS; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + + o.clipPos = positionCS; + #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) + o.screenPos = ComputeScreenPos(positionCS); + #endif + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + float4 ase_tangent : TANGENT; + float4 texcoord : TEXCOORD0; + float4 texcoord1 : TEXCOORD1; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + o.ase_tangent = v.ase_tangent; + o.texcoord = v.texcoord; + o.texcoord1 = v.texcoord1; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + o.ase_tangent = patch[0].ase_tangent * bary.x + patch[1].ase_tangent * bary.y + patch[2].ase_tangent * bary.z; + o.texcoord = patch[0].texcoord * bary.x + patch[1].texcoord * bary.y + patch[2].texcoord * bary.z; + o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) + #define ASE_SV_DEPTH SV_DepthLessEqual + #else + #define ASE_SV_DEPTH SV_Depth + #endif + FragmentOutput frag ( VertexOutput IN + #ifdef ASE_DEPTH_WRITE_ON + ,out float outputDepth : ASE_SV_DEPTH + #endif + /*ase_frag_input*/ ) + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN); + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); + #endif + + #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL) + float2 sampleCoords = (IN.lightmapUVOrVertexSH.zw / _TerrainHeightmapRecipSize.zw + 0.5f) * _TerrainHeightmapRecipSize.xy; + float3 WorldNormal = TransformObjectToWorldNormal(normalize(SAMPLE_TEXTURE2D(_TerrainNormalmapTexture, sampler_TerrainNormalmapTexture, sampleCoords).rgb * 2 - 1)); + float3 WorldTangent = -cross(GetObjectToWorldMatrix()._13_23_33, WorldNormal); + float3 WorldBiTangent = cross(WorldNormal, -WorldTangent); + #else + /*ase_local_var:wn*/float3 WorldNormal = normalize( IN.tSpace0.xyz ); + /*ase_local_var:wt*/float3 WorldTangent = IN.tSpace1.xyz; + /*ase_local_var:wbt*/float3 WorldBiTangent = IN.tSpace2.xyz; + #endif + /*ase_local_var:wp*/float3 WorldPosition = float3(IN.tSpace0.w,IN.tSpace1.w,IN.tSpace2.w); + /*ase_local_var:wvd*/float3 WorldViewDirection = _WorldSpaceCameraPos.xyz - WorldPosition; + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) + /*ase_local_var:spu*/float4 ScreenPos = IN.screenPos; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + + WorldViewDirection = SafeNormalize( WorldViewDirection ); + + /*ase_frag_code:IN=VertexOutput*/ + float3 Albedo = /*ase_frag_out:Albedo;Float3;0;-1;_Albedo*/float3(0.5, 0.5, 0.5)/*end*/; + float3 Normal = /*ase_frag_out:Normal;Float3;1;-1;_FragNormal*/float3(0, 0, 1)/*end*/; + float3 Emission = /*ase_frag_out:Emission;Float3;2;-1;_Emission*/0/*end*/; + float3 Specular = /*ase_frag_out:Specular;Float3;9;-1;_Specular*/0.5/*end*/; + float Metallic = /*ase_frag_out:Metallic;Float;3;-1;_Metallic*/0/*end*/; + float Smoothness = /*ase_frag_out:Smoothness;Float;4;-1;_Smoothness*/0.5/*end*/; + float Occlusion = /*ase_frag_out:Occlusion;Float;5;-1;_Occlusion*/1/*end*/; + float Alpha = /*ase_frag_out:Alpha;Float;6;-1;_Alpha*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;7;-1;_AlphaClip*/0.5/*end*/; + float AlphaClipThresholdShadow = /*ase_frag_out:Alpha Clip Threshold Shadow;Float;16;-1;_AlphaClipShadow*/0.5/*end*/; + float3 BakedGI = /*ase_frag_out:Baked GI;Float3;11;-1;_BakedGI*/0/*end*/; + float3 RefractionColor = /*ase_frag_out:Refraction Color;Float3;12;-1;_RefractionColor*/1/*end*/; + float RefractionIndex = /*ase_frag_out:Refraction Index;Float;13;-1;_RefractionIndex*/1/*end*/; + float3 Transmission = /*ase_frag_out:Transmission;Float3;14;-1;_Transmission*/1/*end*/; + float3 Translucency = /*ase_frag_out:Translucency;Float3;15;-1;_Translucency*/1/*end*/; + #ifdef ASE_DEPTH_WRITE_ON + float DepthValue = /*ase_frag_out:Depth Value;Float;17;-1;_DepthValue*/0/*end*/; + #endif + + #ifdef _ALPHATEST_ON + clip(Alpha - AlphaClipThreshold); + #endif + + InputData inputData; + inputData.positionWS = WorldPosition; + inputData.viewDirectionWS = WorldViewDirection; + inputData.shadowCoord = ShadowCoords; + + #ifdef _NORMALMAP + #if _NORMAL_DROPOFF_TS + inputData.normalWS = TransformTangentToWorld(Normal, half3x3( WorldTangent, WorldBiTangent, WorldNormal )); + #elif _NORMAL_DROPOFF_OS + inputData.normalWS = TransformObjectToWorldNormal(Normal); + #elif _NORMAL_DROPOFF_WS + inputData.normalWS = Normal; + #endif + inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS); + #else + inputData.normalWS = WorldNormal; + #endif + + #ifdef ASE_FOG + inputData.fogCoord = IN.fogFactorAndVertexLight.x; + #endif + + inputData.vertexLighting = IN.fogFactorAndVertexLight.yzw; + #if defined(ENABLE_TERRAIN_PERPIXEL_NORMAL) + float3 SH = SampleSH(inputData.normalWS.xyz); + #else + float3 SH = IN.lightmapUVOrVertexSH.xyz; + #endif + + inputData.bakedGI = SAMPLE_GI( IN.lightmapUVOrVertexSH.xy, SH, inputData.normalWS ); + #ifdef _ASE_BAKEDGI + inputData.bakedGI = BakedGI; + #endif + + BRDFData brdfData; + InitializeBRDFData( Albedo, Metallic, Specular, Smoothness, Alpha, brdfData); + half4 color; + color.rgb = GlobalIllumination( brdfData, inputData.bakedGI, Occlusion, inputData.normalWS, inputData.viewDirectionWS); + color.a = Alpha; + + #ifdef _TRANSMISSION_ASE + { + float shadow = /*ase_inline_begin*/_TransmissionShadow/*ase_inline_end*/; + + Light mainLight = GetMainLight( inputData.shadowCoord ); + float3 mainAtten = mainLight.color * mainLight.distanceAttenuation; + mainAtten = lerp( mainAtten, mainAtten * mainLight.shadowAttenuation, shadow ); + half3 mainTransmission = max(0 , -dot(inputData.normalWS, mainLight.direction)) * mainAtten * Transmission; + color.rgb += Albedo * mainTransmission; + + #ifdef _ADDITIONAL_LIGHTS + int transPixelLightCount = GetAdditionalLightsCount(); + for (int i = 0; i < transPixelLightCount; ++i) + { + Light light = GetAdditionalLight(i, inputData.positionWS); + float3 atten = light.color * light.distanceAttenuation; + atten = lerp( atten, atten * light.shadowAttenuation, shadow ); + + half3 transmission = max(0 , -dot(inputData.normalWS, light.direction)) * atten * Transmission; + color.rgb += Albedo * transmission; + } + #endif + } + #endif + + #ifdef _TRANSLUCENCY_ASE + { + float shadow = /*ase_inline_begin*/_TransShadow/*ase_inline_end*/; + float normal = /*ase_inline_begin*/_TransNormal/*ase_inline_end*/; + float scattering = /*ase_inline_begin*/_TransScattering/*ase_inline_end*/; + float direct = /*ase_inline_begin*/_TransDirect/*ase_inline_end*/; + float ambient = /*ase_inline_begin*/_TransAmbient/*ase_inline_end*/; + float strength = /*ase_inline_begin*/_TransStrength/*ase_inline_end*/; + + Light mainLight = GetMainLight( inputData.shadowCoord ); + float3 mainAtten = mainLight.color * mainLight.distanceAttenuation; + mainAtten = lerp( mainAtten, mainAtten * mainLight.shadowAttenuation, shadow ); + + half3 mainLightDir = mainLight.direction + inputData.normalWS * normal; + half mainVdotL = pow( saturate( dot( inputData.viewDirectionWS, -mainLightDir ) ), scattering ); + half3 mainTranslucency = mainAtten * ( mainVdotL * direct + inputData.bakedGI * ambient ) * Translucency; + color.rgb += Albedo * mainTranslucency * strength; + + #ifdef _ADDITIONAL_LIGHTS + int transPixelLightCount = GetAdditionalLightsCount(); + for (int i = 0; i < transPixelLightCount; ++i) + { + Light light = GetAdditionalLight(i, inputData.positionWS); + float3 atten = light.color * light.distanceAttenuation; + atten = lerp( atten, atten * light.shadowAttenuation, shadow ); + + half3 lightDir = light.direction + inputData.normalWS * normal; + half VdotL = pow( saturate( dot( inputData.viewDirectionWS, -lightDir ) ), scattering ); + half3 translucency = atten * ( VdotL * direct + inputData.bakedGI * ambient ) * Translucency; + color.rgb += Albedo * translucency * strength; + } + #endif + } + #endif + + #ifdef _REFRACTION_ASE + float4 projScreenPos = ScreenPos / ScreenPos.w; + float3 refractionOffset = ( RefractionIndex - 1.0 ) * mul( UNITY_MATRIX_V, float4( WorldNormal, 0 ) ).xyz * ( 1.0 - dot( WorldNormal, WorldViewDirection ) ); + projScreenPos.xy += refractionOffset.xy; + float3 refraction = SHADERGRAPH_SAMPLE_SCENE_COLOR( projScreenPos.xy ) * RefractionColor; + color.rgb = lerp( refraction, color.rgb, color.a ); + color.a = 1; + #endif + + #ifdef ASE_FINAL_COLOR_ALPHA_MULTIPLY + color.rgb *= color.a; + #endif + + #ifdef ASE_FOG + #ifdef TERRAIN_SPLAT_ADDPASS + color.rgb = MixFogColor(color.rgb, half3( 0, 0, 0 ), IN.fogFactorAndVertexLight.x ); + #else + color.rgb = MixFog(color.rgb, IN.fogFactorAndVertexLight.x); + #endif + #endif + + #ifdef ASE_DEPTH_WRITE_ON + outputDepth = DepthValue; + #endif + + return BRDFDataToGbuffer(brdfData, inputData, Smoothness, Emission + color.rgb); + } + + ENDHLSL + } + /*ase_pass_end*/ + } + /*ase_lod*/ + CustomEditor "UnityEditor.ShaderGraph.PBRMasterGUI" + FallBack "Hidden/InternalErrorShader" +} diff --git a/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/PBR.shader.meta b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/PBR.shader.meta new file mode 100644 index 0000000..260874a --- /dev/null +++ b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/PBR.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 94348b07e5e8bab40bd6c8a1e3df54cd +timeCreated: 1520620337 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/Unlit.shader b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/Unlit.shader new file mode 100644 index 0000000..3f4234b --- /dev/null +++ b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/Unlit.shader @@ -0,0 +1,1383 @@ +Shader /*ase_name*/ "Hidden/Universal/Unlit" /*end*/ +{ + Properties + { + /*ase_props*/ + //_TessPhongStrength( "Tess Phong Strength", Range( 0, 1 ) ) = 0.5 + //_TessValue( "Tess Max Tessellation", Range( 1, 32 ) ) = 16 + //_TessMin( "Tess Min Distance", Float ) = 10 + //_TessMax( "Tess Max Distance", Float ) = 25 + //_TessEdgeLength ( "Tess Edge length", Range( 2, 50 ) ) = 16 + //_TessMaxDisp( "Tess Max Displacement", Float ) = 25 + } + + SubShader + { + /*ase_subshader_options:Name=Additional Options + Option:Surface:Opaque,Transparent:Opaque + Opaque:SetPropertyOnSubShader:RenderType,Opaque + Opaque:SetPropertyOnSubShader:RenderQueue,Geometry + Opaque:SetPropertyOnPass:Forward:ZWrite,On + Opaque:HideOption: Blend + Transparent:SetPropertyOnSubShader:RenderType,Transparent + Transparent:SetPropertyOnSubShader:RenderQueue,Transparent + Transparent:SetPropertyOnPass:Forward:ZWrite,Off + Transparent:ShowOption: Blend + Option: Blend:Alpha,Premultiply,Additive,Multiply:Alpha + Alpha:SetPropertyOnPass:Forward:BlendRGB,SrcAlpha,OneMinusSrcAlpha + Premultiply:SetPropertyOnPass:Forward:BlendRGB,One,OneMinusSrcAlpha + Additive:SetPropertyOnPass:Forward:BlendRGB,One,One + Multiply:SetPropertyOnPass:Forward:BlendRGB,DstColor,Zero + Alpha,Premultiply,Additive:SetPropertyOnPass:Forward:BlendAlpha,One,OneMinusSrcAlpha + Multiply:SetPropertyOnPass:Forward:BlendAlpha,One,Zero + Premultiply:SetDefine:_ALPHAPREMULTIPLY_ON 1 + Alpha,Additive,Multiply,disable:RemoveDefine:_ALPHAPREMULTIPLY_ON 1 + disable:SetPropertyOnPass:Forward:BlendRGB,One,Zero + disable:SetPropertyOnPass:Forward:BlendAlpha,One,Zero + Option:Two Sided:On,Cull Back,Cull Front:Cull Back + On:SetPropertyOnSubShader:CullMode,Off + Cull Back:SetPropertyOnSubShader:CullMode,Back + Cull Front:SetPropertyOnSubShader:CullMode,Front + Option:Cast Shadows:false,true:true + true:IncludePass:ShadowCaster + false,disable:ExcludePass:ShadowCaster + true:ShowOption: Use Shadow Threshold + false:HideOption: Use Shadow Threshold + Option: Use Shadow Threshold:false,true:false + true:SetDefine:_ALPHATEST_SHADOW_ON 1 + true:ShowPort:Forward:Alpha Clip Threshold Shadow + false,disable:RemoveDefine:_ALPHATEST_SHADOW_ON 1 + false,disable:HidePort:Forward:Alpha Clip Threshold Shadow + Option:Receive Shadows:false,true:true + true:RemoveDefine:_RECEIVE_SHADOWS_OFF 1 + false:SetDefine:_RECEIVE_SHADOWS_OFF 1 + Option:GPU Instancing:false,true:true + true:SetDefine:pragma multi_compile_instancing + false:RemoveDefine:pragma multi_compile_instancing + Option:LOD CrossFade:false,true:false + true:SetDefine:pragma multi_compile _ LOD_FADE_CROSSFADE + false:RemoveDefine:pragma multi_compile _ LOD_FADE_CROSSFADE + Option:Built-in Fog:false,true:false + true:SetDefine:pragma multi_compile_fog + false:RemoveDefine:pragma multi_compile_fog + true:SetDefine:ASE_FOG 1 + false:RemoveDefine:ASE_FOG 1 + Option:DOTS Instancing:false,true:false + true:SetDefine:pragma multi_compile _ DOTS_INSTANCING_ON + false:RemoveDefine:pragma multi_compile _ DOTS_INSTANCING_ON + Option:Meta Pass:false,true:false + true:IncludePass:Meta + true:ShowPort:Forward:Baked Albedo + true:ShowPort:Forward:Baked Emission + false,disable:ExcludePass:Meta + false:HidePort:Forward:Baked Albedo + false:HidePort:Forward:Baked Emission + Option:Extra Pre Pass:false,true:false + true:IncludePass:ExtraPrePass + false,disable:ExcludePass:ExtraPrePass + Option:Tessellation:false,true:false + true:SetDefine:TESSELLATION_ON 1 + true:SetDefine:pragma require tessellation tessHW + true:SetDefine:pragma hull HullFunction + true:SetDefine:pragma domain DomainFunction + true:ShowOption: Phong + true:ShowOption: Type + false,disable:RemoveDefine:TESSELLATION_ON 1 + false,disable:RemoveDefine:pragma require tessellation tessHW + false,disable:RemoveDefine:pragma hull HullFunction + false,disable:RemoveDefine:pragma domain DomainFunction + false,disable:HideOption: Phong + false,disable:HideOption: Type + Option: Phong:false,true:false + true:SetDefine:ASE_PHONG_TESSELLATION + false,disable:RemoveDefine:ASE_PHONG_TESSELLATION + true:ShowOption: Strength + false,disable:HideOption: Strength + Field: Strength:Float:0.5:0:1:_TessPhongStrength + Change:SetMaterialProperty:_TessPhongStrength + Change:SetShaderProperty:_TessPhongStrength,_TessPhongStrength( "Phong Tess Strength", Range( 0, 1 ) ) = 0.5 + Inline,disable:SetShaderProperty:_TessPhongStrength,//_TessPhongStrength( "Phong Tess Strength", Range( 0, 1 ) ) = 0.5 + Option: Type:Fixed,Distance Based,Edge Length,Edge Length Cull:Fixed + Fixed:SetDefine:ASE_FIXED_TESSELLATION + Fixed,Distance Based:ShowOption: Tess + Distance Based:SetDefine:ASE_DISTANCE_TESSELLATION + Distance Based:ShowOption: Min + Distance Based:ShowOption: Max + Edge Length:SetDefine:ASE_LENGTH_TESSELLATION + Edge Length,Edge Length Cull:ShowOption: Edge Length + Edge Length Cull:SetDefine:ASE_LENGTH_CULL_TESSELLATION + Edge Length Cull:ShowOption: Max Displacement + disable,Distance Based,Edge Length,Edge Length Cull:RemoveDefine:ASE_FIXED_TESSELLATION + disable,Fixed,Edge Length,Edge Length Cull:RemoveDefine:ASE_DISTANCE_TESSELLATION + disable,Fixed,Distance Based,Edge Length Cull:RemoveDefine:ASE_LENGTH_TESSELLATION + disable,Fixed,Distance Based,Edge Length:RemoveDefine:ASE_LENGTH_CULL_TESSELLATION + disable,Edge Length,Edge Length Cull:HideOption: Tess + disable,Fixed,Edge Length,Edge Length Cull:HideOption: Min + disable,Fixed,Edge Length,Edge Length Cull:HideOption: Max + disable,Fixed,Distance Based:HideOption: Edge Length + disable,Fixed,Distance Based,Edge Length:HideOption: Max Displacement + Field: Tess:Float:16:1:32:_TessValue + Change:SetMaterialProperty:_TessValue + Change:SetShaderProperty:_TessValue,_TessValue( "Max Tessellation", Range( 1, 32 ) ) = 16 + Inline,disable:SetShaderProperty:_TessValue,//_TessValue( "Max Tessellation", Range( 1, 32 ) ) = 16 + Field: Min:Float:10:_TessMin + Change:SetMaterialProperty:_TessMin + Change:SetShaderProperty:_TessMin,_TessMin( "Tess Min Distance", Float ) = 10 + Inline,disable:SetShaderProperty:_TessMin,//_TessMin( "Tess Min Distance", Float ) = 10 + Field: Max:Float:25:_TessMax + Change:SetMaterialProperty:_TessMax + Change:SetShaderProperty:_TessMax,_TessMax( "Tess Max Distance", Float ) = 25 + Inline,disable:SetShaderProperty:_TessMax,//_TessMax( "Tess Max Distance", Float ) = 25 + Field: Edge Length:Float:16:2:50:_TessEdgeLength + Change:SetMaterialProperty:_TessEdgeLength + Change:SetShaderProperty:_TessEdgeLength,_TessEdgeLength ( "Edge length", Range( 2, 50 ) ) = 16 + Inline,disable:SetShaderProperty:_TessEdgeLength,//_TessEdgeLength ( "Edge length", Range( 2, 50 ) ) = 16 + Field: Max Displacement:Float:25:_TessMaxDisp + Change:SetMaterialProperty:_TessMaxDisp + Change:SetShaderProperty:_TessMaxDisp,_TessMaxDisp( "Max Displacement", Float ) = 25 + Inline,disable:SetShaderProperty:_TessMaxDisp,//_TessMaxDisp( "Max Displacement", Float ) = 25 + Option:Vertex Position,InvertActionOnDeselection:Absolute,Relative:Relative + Absolute:SetDefine:ASE_ABSOLUTE_VERTEX_POS 1 + Absolute:SetPortName:Forward:5,Vertex Position + Relative:SetPortName:Forward:5,Vertex Offset + Absolute:SetPortName:ExtraPrePass:3,Vertex Position + Relative:SetPortName:ExtraPrePass:3,Vertex Offset + Port:Forward:Alpha Clip Threshold + On:SetDefine:_ALPHATEST_ON 1 + */ + Tags + { + "RenderPipeline" = "UniversalPipeline" + "RenderType"="Opaque" + "Queue"="Geometry+0" + } + + Cull Back + AlphaToMask Off + HLSLINCLUDE + #pragma target 2.0 + + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + + #ifndef ASE_TESS_FUNCS + #define ASE_TESS_FUNCS + float4 FixedTess( float tessValue ) + { + return tessValue; + } + + float CalcDistanceTessFactor (float4 vertex, float minDist, float maxDist, float tess, float4x4 o2w, float3 cameraPos ) + { + float3 wpos = mul(o2w,vertex).xyz; + float dist = distance (wpos, cameraPos); + float f = clamp(1.0 - (dist - minDist) / (maxDist - minDist), 0.01, 1.0) * tess; + return f; + } + + float4 CalcTriEdgeTessFactors (float3 triVertexFactors) + { + float4 tess; + tess.x = 0.5 * (triVertexFactors.y + triVertexFactors.z); + tess.y = 0.5 * (triVertexFactors.x + triVertexFactors.z); + tess.z = 0.5 * (triVertexFactors.x + triVertexFactors.y); + tess.w = (triVertexFactors.x + triVertexFactors.y + triVertexFactors.z) / 3.0f; + return tess; + } + + float CalcEdgeTessFactor (float3 wpos0, float3 wpos1, float edgeLen, float3 cameraPos, float4 scParams ) + { + float dist = distance (0.5 * (wpos0+wpos1), cameraPos); + float len = distance(wpos0, wpos1); + float f = max(len * scParams.y / (edgeLen * dist), 1.0); + return f; + } + + float DistanceFromPlane (float3 pos, float4 plane) + { + float d = dot (float4(pos,1.0f), plane); + return d; + } + + bool WorldViewFrustumCull (float3 wpos0, float3 wpos1, float3 wpos2, float cullEps, float4 planes[6] ) + { + float4 planeTest; + planeTest.x = (( DistanceFromPlane(wpos0, planes[0]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[0]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[0]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.y = (( DistanceFromPlane(wpos0, planes[1]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[1]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[1]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.z = (( DistanceFromPlane(wpos0, planes[2]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[2]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[2]) > -cullEps) ? 1.0f : 0.0f ); + planeTest.w = (( DistanceFromPlane(wpos0, planes[3]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos1, planes[3]) > -cullEps) ? 1.0f : 0.0f ) + + (( DistanceFromPlane(wpos2, planes[3]) > -cullEps) ? 1.0f : 0.0f ); + return !all (planeTest); + } + + float4 DistanceBasedTess( float4 v0, float4 v1, float4 v2, float tess, float minDist, float maxDist, float4x4 o2w, float3 cameraPos ) + { + float3 f; + f.x = CalcDistanceTessFactor (v0,minDist,maxDist,tess,o2w,cameraPos); + f.y = CalcDistanceTessFactor (v1,minDist,maxDist,tess,o2w,cameraPos); + f.z = CalcDistanceTessFactor (v2,minDist,maxDist,tess,o2w,cameraPos); + + return CalcTriEdgeTessFactors (f); + } + + float4 EdgeLengthBasedTess( float4 v0, float4 v1, float4 v2, float edgeLength, float4x4 o2w, float3 cameraPos, float4 scParams ) + { + float3 pos0 = mul(o2w,v0).xyz; + float3 pos1 = mul(o2w,v1).xyz; + float3 pos2 = mul(o2w,v2).xyz; + float4 tess; + tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams); + tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams); + tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams); + tess.w = (tess.x + tess.y + tess.z) / 3.0f; + return tess; + } + + float4 EdgeLengthBasedTessCull( float4 v0, float4 v1, float4 v2, float edgeLength, float maxDisplacement, float4x4 o2w, float3 cameraPos, float4 scParams, float4 planes[6] ) + { + float3 pos0 = mul(o2w,v0).xyz; + float3 pos1 = mul(o2w,v1).xyz; + float3 pos2 = mul(o2w,v2).xyz; + float4 tess; + + if (WorldViewFrustumCull(pos0, pos1, pos2, maxDisplacement, planes)) + { + tess = 0.0f; + } + else + { + tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams); + tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams); + tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams); + tess.w = (tess.x + tess.y + tess.z) / 3.0f; + } + return tess; + } + #endif //ASE_TESS_FUNCS + + ENDHLSL + + /*ase_pass*/ + Pass + { + Name "ExtraPrePass" + Tags{ } + + Blend One Zero + Cull Back + ZWrite On + ZTest LEqual + Offset 0,0 + ColorMask RGBA + /*ase_stencil*/ + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + + #if ASE_SRP_VERSION <= 70108 + #define REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR + #endif + + /*ase_pragma*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + /*ase_vdata:p=p;n=n*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 worldPos : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + #ifdef ASE_FOG + float fogFactor : TEXCOORD2; + #endif + /*ase_interp(3,):sp=sp;wp=tc0;sc=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + VertexOutput VertexFunction( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;3;-1;_VertexP*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;4;-1;_NormalP*/v.ase_normal/*end*/; + + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + float4 positionCS = TransformWorldToHClip( positionWS ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.worldPos = positionWS; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = positionCS; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + #ifdef ASE_FOG + o.fogFactor = ComputeFogFactor( positionCS.z ); + #endif + o.clipPos = positionCS; + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag ( VertexOutput IN /*ase_frag_input*/ ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + /*ase_local_var:wp*/float3 WorldPosition = IN.worldPos; + #endif + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + /*ase_frag_code:IN=VertexOutput*/ + float3 Color = /*ase_frag_out:Color;Float3;0;-1;_ColorP*/float3( 0, 0, 0 )/*end*/; + float Alpha = /*ase_frag_out:Alpha;Float;1;-1;_AlphaP*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;2;-1;_AlphaClipP*/0.5/*end*/; + + #ifdef _ALPHATEST_ON + clip( Alpha - AlphaClipThreshold ); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); + #endif + + #ifdef ASE_FOG + Color = MixFog( Color, IN.fogFactor ); + #endif + + return half4( Color, Alpha ); + } + + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_main_pass*/ + Name "Forward" + Tags{"LightMode" = "UniversalForward"} + + Blend One Zero + ZWrite On + ZTest LEqual + Offset 0,0 + ColorMask RGBA + /*ase_stencil*/ + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + + #if ASE_SRP_VERSION <= 70108 + #define REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR + #endif + + /*ase_pragma*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + /*ase_vdata:p=p;n=n*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 worldPos : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + #ifdef ASE_FOG + float fogFactor : TEXCOORD2; + #endif + /*ase_interp(3,):sp=sp;wp=tc0;sc=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + VertexOutput VertexFunction ( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;5;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;6;-1;_Normal*/v.ase_normal/*end*/; + + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + float4 positionCS = TransformWorldToHClip( positionWS ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.worldPos = positionWS; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = positionCS; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + #ifdef ASE_FOG + o.fogFactor = ComputeFogFactor( positionCS.z ); + #endif + o.clipPos = positionCS; + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag ( VertexOutput IN /*ase_frag_input*/ ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + /*ase_local_var:wp*/float3 WorldPosition = IN.worldPos; + #endif + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + /*ase_frag_code:IN=VertexOutput*/ + float3 BakedAlbedo = /*ase_frag_out:Baked Albedo;Float3;0;-1;_Albedo*/0/*end*/; + float3 BakedEmission = /*ase_frag_out:Baked Emission;Float3;1;-1;_Emission*/0/*end*/; + float3 Color = /*ase_frag_out:Color;Float3;2;-1;_Color*/float3( 0.5, 0.5, 0.5 )/*end*/; + float Alpha = /*ase_frag_out:Alpha;Float;3;-1;_Alpha*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;4;-1;_AlphaClip*/0.5/*end*/; + float AlphaClipThresholdShadow = /*ase_frag_out:Alpha Clip Threshold Shadow;Float;7;-1;_AlphaClipShadow*/0.5/*end*/; + + #ifdef _ALPHATEST_ON + clip( Alpha - AlphaClipThreshold ); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); + #endif + + #ifdef ASE_FOG + Color = MixFog( Color, IN.fogFactor ); + #endif + + return half4( Color, Alpha ); + } + + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_hide_pass*/ + Name "ShadowCaster" + Tags{"LightMode" = "ShadowCaster"} + + ZWrite On + ZTest LEqual + AlphaToMask Off + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + + /*ase_pragma*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + /*ase_vdata:p=p;n=n*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 worldPos : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + /*ase_interp(2,):sp=sp;wp=tc0;sc=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + float3 _LightDirection; + + VertexOutput VertexFunction( VertexInput v/*ase_vert_input*/ ) + { + VertexOutput o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;2;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;3;-1;_Normal*/v.ase_normal/*end*/; + + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.worldPos = positionWS; + #endif + + float3 normalWS = TransformObjectToWorldDir( v.ase_normal ); + + float4 clipPos = TransformWorldToHClip( ApplyShadowBias( positionWS, normalWS, _LightDirection ) ); + + #if UNITY_REVERSED_Z + clipPos.z = min(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); + #else + clipPos.z = max(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = clipPos; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + o.clipPos = clipPos; + + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN /*ase_frag_input*/ ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID( IN ); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + /*ase_local_var:wp*/float3 WorldPosition = IN.worldPos; + #endif + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + /*ase_frag_code:IN=VertexOutput*/ + float Alpha = /*ase_frag_out:Alpha;Float;0;-1;_Alpha*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;1;-1;_AlphaClip*/0.5/*end*/; + float AlphaClipThresholdShadow = /*ase_frag_out:Alpha Clip Threshold Shadow;Float;4;-1;_AlphaClipShadow*/0.5/*end*/; + + #ifdef _ALPHATEST_ON + #ifdef _ALPHATEST_SHADOW_ON + clip(Alpha - AlphaClipThresholdShadow); + #else + clip(Alpha - AlphaClipThreshold); + #endif + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); + #endif + return 0; + } + + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_hide_pass*/ + Name "DepthOnly" + Tags{"LightMode" = "DepthOnly"} + + ZWrite On + ColorMask 0 + AlphaToMask Off + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + + /*ase_pragma*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + /*ase_vdata:p=p;n=n*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 worldPos : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + /*ase_interp(2,):sp=sp;wp=tc0;sc=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + VertexOutput VertexFunction( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;2;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;3;-1;_Normal*/v.ase_normal/*end*/; + + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.worldPos = positionWS; + #endif + + o.clipPos = TransformWorldToHClip( positionWS ); + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = o.clipPos; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN /*ase_frag_input*/ ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + /*ase_local_var:wp*/float3 WorldPosition = IN.worldPos; + #endif + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + /*ase_frag_code:IN=VertexOutput*/ + float Alpha = /*ase_frag_out:Alpha;Float;0;-1;_Alpha*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;1;-1;_AlphaClip*/0.5/*end*/; + + #ifdef _ALPHATEST_ON + clip(Alpha - AlphaClipThreshold); + #endif + + #ifdef LOD_FADE_CROSSFADE + LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); + #endif + return 0; + } + ENDHLSL + } + + /*ase_pass*/ + Pass + { + /*ase_hide_pass*/ + Name "Meta" + Tags{"LightMode" = "Meta"} + + Cull Off + + HLSLPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/MetaInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + + /*ase_pragma*/ + + struct VertexInput + { + float4 vertex : POSITION; + float3 ase_normal : NORMAL; + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + /*ase_vdata:p=p;n=n;uv1=tc1;uv2=tc2*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput + { + float4 clipPos : SV_POSITION; + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + float3 worldPos : TEXCOORD0; + #endif + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + float4 shadowCoord : TEXCOORD1; + #endif + /*ase_interp(2,):sp=sp;wp=tc0;sc=tc1*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + CBUFFER_START(UnityPerMaterial) + #ifdef TESSELLATION_ON + float _TessPhongStrength; + float _TessValue; + float _TessMin; + float _TessMax; + float _TessEdgeLength; + float _TessMaxDisp; + #endif + CBUFFER_END + /*ase_globals*/ + + /*ase_funcs*/ + + VertexOutput VertexFunction( VertexInput v /*ase_vert_input*/ ) + { + VertexOutput o = (VertexOutput)0; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + /*ase_vert_code:v=VertexInput;o=VertexOutput*/ + #ifdef ASE_ABSOLUTE_VERTEX_POS + float3 defaultVertexValue = v.vertex.xyz; + #else + float3 defaultVertexValue = float3(0, 0, 0); + #endif + float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;4;-1;_Vertex*/defaultVertexValue/*end*/; + #ifdef ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + + v.ase_normal = /*ase_vert_out:Vertex Normal;Float3;5;-1;_Normal*/v.ase_normal/*end*/; + + float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + o.worldPos = positionWS; + #endif + + o.clipPos = MetaVertexPosition( v.vertex, v.texcoord1.xy, v.texcoord1.xy, unity_LightmapST, unity_DynamicLightmapST ); + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + VertexPositionInputs vertexInput = (VertexPositionInputs)0; + vertexInput.positionWS = positionWS; + vertexInput.positionCS = o.clipPos; + o.shadowCoord = GetShadowCoord( vertexInput ); + #endif + return o; + } + + #if defined(TESSELLATION_ON) + struct VertexControl + { + float4 vertex : INTERNALTESSPOS; + float3 ase_normal : NORMAL; + /*ase_vcontrol*/ + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessellationFactors + { + float edge[3] : SV_TessFactor; + float inside : SV_InsideTessFactor; + }; + + VertexControl vert ( VertexInput v ) + { + VertexControl o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + o.vertex = v.vertex; + o.ase_normal = v.ase_normal; + /*ase_control_code:v=VertexInput;o=VertexControl*/ + return o; + } + + TessellationFactors TessellationFunction (InputPatch v) + { + TessellationFactors o; + float4 tf = 1; + float tessValue = /*ase_inline_begin*/_TessValue/*ase_inline_end*/; float tessMin = /*ase_inline_begin*/_TessMin/*ase_inline_end*/; float tessMax = /*ase_inline_begin*/_TessMax/*ase_inline_end*/; + float edgeLength = /*ase_inline_begin*/_TessEdgeLength/*ase_inline_end*/; float tessMaxDisp = /*ase_inline_begin*/_TessMaxDisp/*ase_inline_end*/; + #if defined(ASE_FIXED_TESSELLATION) + tf = FixedTess( tessValue ); + #elif defined(ASE_DISTANCE_TESSELLATION) + tf = DistanceBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); + #elif defined(ASE_LENGTH_TESSELLATION) + tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); + #elif defined(ASE_LENGTH_CULL_TESSELLATION) + tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); + #endif + o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; + return o; + } + + [domain("tri")] + [partitioning("fractional_odd")] + [outputtopology("triangle_cw")] + [patchconstantfunc("TessellationFunction")] + [outputcontrolpoints(3)] + VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) + { + return patch[id]; + } + + [domain("tri")] + VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) + { + VertexInput o = (VertexInput) 0; + o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; + o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; + /*ase_domain_code:patch=VertexControl;o=VertexInput;bary=SV_DomainLocation*/ + #if defined(ASE_PHONG_TESSELLATION) + float3 pp[3]; + for (int i = 0; i < 3; ++i) + pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); + float phongStrength = /*ase_inline_begin*/_TessPhongStrength/*ase_inline_end*/; + o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; + #endif + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + return VertexFunction(o); + } + #else + VertexOutput vert ( VertexInput v ) + { + return VertexFunction( v ); + } + #endif + + half4 frag(VertexOutput IN /*ase_frag_input*/ ) : SV_TARGET + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); + + #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) + /*ase_local_var:wp*/float3 WorldPosition = IN.worldPos; + #endif + /*ase_local_var:sc*/float4 ShadowCoords = float4( 0, 0, 0, 0 ); + + #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + ShadowCoords = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); + #endif + #endif + + /*ase_frag_code:IN=VertexOutput*/ + float3 BakedAlbedo = /*ase_frag_out:Baked Albedo;Float3;0;-1;_Albedo*/0/*end*/; + float3 BakedEmission = /*ase_frag_out:Baked Emission;Float3;1;-1;_Emission*/0/*end*/; + float Alpha = /*ase_frag_out:Alpha;Float;2;-1;_Alpha*/1/*end*/; + float AlphaClipThreshold = /*ase_frag_out:Alpha Clip Threshold;Float;3;-1;_AlphaClip*/0.5/*end*/; + + #ifdef _ALPHATEST_ON + clip(Alpha - AlphaClipThreshold); + #endif + + MetaInput metaInput = (MetaInput)0; + metaInput.Albedo = BakedAlbedo; + metaInput.Emission = BakedEmission; + + return MetaFragment(metaInput); + } + ENDHLSL + } + /*ase_pass_end*/ + } + CustomEditor "UnityEditor.ShaderGraph.PBRMasterGUI" + FallBack "Hidden/InternalErrorShader" +} diff --git a/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/Unlit.shader.meta b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/Unlit.shader.meta new file mode 100644 index 0000000..588b773 --- /dev/null +++ b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/Unlit.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2992e84f91cbeb14eab234972e07ea9d +timeCreated: 1568647145 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources.meta b/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources.meta new file mode 100644 index 0000000..f9e8947 --- /dev/null +++ b/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c80bad1c55fca5e4886b1fc9c9014cd3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix.meta b/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix.meta new file mode 100644 index 0000000..367df04 --- /dev/null +++ b/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13f190035591d384ca6f0044de1d5137 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset b/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset new file mode 100644 index 0000000..0e48b68 --- /dev/null +++ b/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1549551891, guid: 74721b9f0af448f5ae2e91102a1a5edd, type: 3} + m_Name: GlobalSerializationConfig + m_EditorClassIdentifier: + HideSerializationCautionaryMessage: 0 + HidePrefabCautionaryMessage: 0 + HideOdinSerializeAttributeWarningMessages: 0 + HideNonSerializedShowInInspectorWarningMessages: 0 + buildSerializationFormat: 0 + editorSerializationFormat: 2 + loggingPolicy: 0 + errorHandlingPolicy: 0 diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset.meta b/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset.meta new file mode 100644 index 0000000..e3c3cf0 --- /dev/null +++ b/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7eefc3dba7a88da46b1c5c630f55de67 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/场景/骨骼测试场景.unity b/Assets/勍/场景/骨骼测试场景.unity index 5262e97..d4b24de 100644 --- a/Assets/勍/场景/骨骼测试场景.unity +++ b/Assets/勍/场景/骨骼测试场景.unity @@ -351,6 +351,117 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &875897228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 875897230} + - component: {fileID: 875897229} + - component: {fileID: 875897231} + m_Layer: 0 + m_Name: "\u5730\u9762" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &875897229 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 875897228} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.16, y: 0.16} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &875897230 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 875897228} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.6316276, y: -8.9, z: 0.0047016297} + m_LocalScale: {x: 1262.29, y: 54.69, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &875897231 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 875897228} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 6200000, guid: 9e9f5f349c879c743ab379aec70d005a, type: 2} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0.049999997, y: 0.049999997, z: 0.049999997, w: 0.049999997} + pivot: {x: 0.5, y: 0.5} + oldSize: {x: 0.16, y: 0.16} + newSize: {x: 0.16, y: 0.16} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.16, y: 0.16} + m_EdgeRadius: 0 --- !u!1001 &1084903714 PrefabInstance: m_ObjectHideFlags: 0 @@ -358,21 +469,77 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1555915082} m_Modifications: + - target: {fileID: 7821055, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.w + value: 0.6605224 + objectReference: {fileID: 0} + - target: {fileID: 7821055, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.z + value: 0.75080633 + objectReference: {fileID: 0} + - target: {fileID: 106631853, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Size.x + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 106631853, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Size.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 213903470, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Size.x + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 213903470, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Size.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 448642193, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Size.x + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 448642193, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Size.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 566743904, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalPosition.x + value: 2.4512196 + objectReference: {fileID: 0} + - target: {fileID: 566743904, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalPosition.y + value: 0.15380377 + objectReference: {fileID: 0} + - target: {fileID: 685472166, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.w + value: 0.98932326 + objectReference: {fileID: 0} + - target: {fileID: 685472166, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.z + value: 0.14573832 + objectReference: {fileID: 0} + - target: {fileID: 719707977, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Size.x + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 719707977, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Size.y + value: 0.1 + objectReference: {fileID: 0} - target: {fileID: 951836818, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalRotation.w - value: 0.99922603 + value: 0.70312786 objectReference: {fileID: 0} - target: {fileID: 951836818, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalRotation.z - value: 0.03933591 + value: 0.7110635 objectReference: {fileID: 0} - - target: {fileID: 2110753430, guid: c63483674e2db904197c6beaca347645, type: 3} - propertyPath: m_LocalPosition.x - value: 2.3447857 + - target: {fileID: 1084903726, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Mass + value: 1 objectReference: {fileID: 0} - - target: {fileID: 2110753430, guid: c63483674e2db904197c6beaca347645, type: 3} - propertyPath: m_LocalPosition.y - value: -0.13307858 + - target: {fileID: 1084903726, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Constraints + value: 0 objectReference: {fileID: 0} - target: {fileID: 50099845796739461, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_RootOrder @@ -380,15 +547,15 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 50099845796739461, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalPosition.x - value: -2.12 + value: 16.6 objectReference: {fileID: 0} - target: {fileID: 50099845796739461, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalPosition.y - value: -4.61 + value: 0.54 objectReference: {fileID: 0} - target: {fileID: 50099845796739461, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalPosition.z - value: -1.0228372 + value: 0 objectReference: {fileID: 0} - target: {fileID: 50099845796739461, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalRotation.w @@ -396,15 +563,15 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 50099845796739461, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalRotation.x - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 50099845796739461, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalRotation.y - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 50099845796739461, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalRotation.z - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 50099845796739461, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalEulerAnglesHint.x @@ -418,25 +585,109 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 553410378564238167, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7951422 + objectReference: {fileID: 0} + - target: {fileID: 553410378564238167, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.z + value: -0.6064231 + objectReference: {fileID: 0} + - target: {fileID: 758927187003403290, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.w + value: 0.87740093 + objectReference: {fileID: 0} + - target: {fileID: 758927187003403290, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.z + value: 0.47975802 + objectReference: {fileID: 0} + - target: {fileID: 3283039325717014954, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.w + value: 0.12258211 + objectReference: {fileID: 0} + - target: {fileID: 3283039325717014954, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.z + value: -0.99245846 + objectReference: {fileID: 0} + - target: {fileID: 3283039325717014954, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 554.08203 + objectReference: {fileID: 0} + - target: {fileID: 3613839984805260814, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9690672 + objectReference: {fileID: 0} + - target: {fileID: 3613839984805260814, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.z + value: -0.24679716 + objectReference: {fileID: 0} + - target: {fileID: 4308434985386491136, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_AutoRebind + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4308434985386491136, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Bounds.m_Center.x + value: -0.61232305 + objectReference: {fileID: 0} + - target: {fileID: 4308434985386491136, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_Bounds.m_Center.y + value: -1.36059 + objectReference: {fileID: 0} - target: {fileID: 5709595267743773255, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalRotation.w - value: 0.7260015 + value: 0.6955986 objectReference: {fileID: 0} - target: {fileID: 5709595267743773255, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalRotation.z - value: -0.6876931 + value: -0.7184307 + objectReference: {fileID: 0} + - target: {fileID: 7553923325119000229, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8226019 + objectReference: {fileID: 0} + - target: {fileID: 7553923325119000229, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: m_LocalRotation.z + value: -0.56861776 objectReference: {fileID: 0} - target: {fileID: 8522599996288171628, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalRotation.w - value: 0.99998426 + value: 0.9999842 objectReference: {fileID: 0} - target: {fileID: 8522599996288171628, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_LocalRotation.z - value: 0.0056176935 + value: 0.0056177806 + objectReference: {fileID: 0} + - target: {fileID: 8721403442329396673, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: strength + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 8721403442329396673, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: footForce + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 8721403442329396673, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: effectiveDistance + value: 0.25 + objectReference: {fileID: 0} + - target: {fileID: 8721403442329396673, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: footOffestOfInput.Array.data[2].x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8721403442329396673, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: footOffestOfInput.Array.data[2].y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8721403442329396673, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: footOffestOfInput.Array.data[3].x + value: -2 + objectReference: {fileID: 0} + - target: {fileID: 8721403442329396673, guid: c63483674e2db904197c6beaca347645, type: 3} + propertyPath: footOffestOfInput.Array.data[3].y + value: -2 objectReference: {fileID: 0} - target: {fileID: 8765724049729688277, guid: c63483674e2db904197c6beaca347645, type: 3} propertyPath: m_Name - value: "\u9A6C\u554A" + value: "\u9A6C" objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c63483674e2db904197c6beaca347645, type: 3} @@ -454,8 +705,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1555915082} + - component: {fileID: 1555915083} m_Layer: 0 - m_Name: "\u9A6C" + m_Name: "\u73A9\u5BB6" m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -469,7 +721,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1555915081} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.7172437, y: 0.7393208, z: 1.0228372} + m_LocalPosition: {x: -11.3, y: -3.79, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: @@ -477,3 +729,15 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1555915083 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555915081} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 433c80cc795427f43a06e42eab98aa3f, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/勍/物理材质.meta b/Assets/勍/物理材质.meta new file mode 100644 index 0000000..ec52366 --- /dev/null +++ b/Assets/勍/物理材质.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8c3ccbef397bc514b9026ada2d5a53af +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/物理材质/光滑.physicsMaterial2D b/Assets/勍/物理材质/光滑.physicsMaterial2D new file mode 100644 index 0000000..febc2ed --- /dev/null +++ b/Assets/勍/物理材质/光滑.physicsMaterial2D @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!62 &6200000 +PhysicsMaterial2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: "\u5149\u6ED1" + friction: 0 + bounciness: 0 diff --git a/Assets/勍/物理材质/光滑.physicsMaterial2D.meta b/Assets/勍/物理材质/光滑.physicsMaterial2D.meta new file mode 100644 index 0000000..c722096 --- /dev/null +++ b/Assets/勍/物理材质/光滑.physicsMaterial2D.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 898bb8b2626abeb439e92a76657bd050 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 6200000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/物理材质/地面.physicsMaterial2D b/Assets/勍/物理材质/地面.physicsMaterial2D new file mode 100644 index 0000000..fdf5ee7 --- /dev/null +++ b/Assets/勍/物理材质/地面.physicsMaterial2D @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!62 &6200000 +PhysicsMaterial2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: "\u5730\u9762" + friction: 1 + bounciness: 0 diff --git a/Assets/勍/物理材质/地面.physicsMaterial2D.meta b/Assets/勍/物理材质/地面.physicsMaterial2D.meta new file mode 100644 index 0000000..34dd78e --- /dev/null +++ b/Assets/勍/物理材质/地面.physicsMaterial2D.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e9f5f349c879c743ab379aec70d005a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 6200000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/物理材质/马脚.physicsMaterial2D b/Assets/勍/物理材质/马脚.physicsMaterial2D new file mode 100644 index 0000000..a2b16f1 --- /dev/null +++ b/Assets/勍/物理材质/马脚.physicsMaterial2D @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!62 &6200000 +PhysicsMaterial2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: "\u9A6C\u811A" + friction: 1 + bounciness: 0 diff --git a/Assets/勍/物理材质/马脚.physicsMaterial2D.meta b/Assets/勍/物理材质/马脚.physicsMaterial2D.meta new file mode 100644 index 0000000..679c8a8 --- /dev/null +++ b/Assets/勍/物理材质/马脚.physicsMaterial2D.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f96fa1f269cf674da614b8d6fd206a8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 6200000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/脚本.meta b/Assets/勍/脚本.meta new file mode 100644 index 0000000..9a15588 --- /dev/null +++ b/Assets/勍/脚本.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16345ec0638ddad45b0df413388823d6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/脚本/Horse.cs b/Assets/勍/脚本/Horse.cs new file mode 100644 index 0000000..cd94533 --- /dev/null +++ b/Assets/勍/脚本/Horse.cs @@ -0,0 +1,396 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Sirenix.OdinInspector; + +/// +/// 马类,用于接受来自玩家的指令、进行物理模拟 +/// +public class Horse : MonoBehaviour +{ + // _____ _ _ _ + // | __ \ | | | (_) + // | |__) | _| |__ | |_ ___ + // | ___/ | | | '_ \| | |/ __| + // | | | |_| | |_) | | | (__ + // |_| \__,_|_.__/|_|_|\___| + + /// + /// 马的前腿根部 + /// + [BoxGroup("必须绑定的物体")][Header("马的前腿根部")] + public Transform frontLegRoot; + + /// + /// 马的后腿根部 + /// + [BoxGroup("必须绑定的物体")][Header("马的后腿根部")] + public Transform backLegRoot; + + /// + /// 马伸直腿后前脚底部 + /// + [BoxGroup("必须绑定的物体")][Header("马前脚伸直后的最深位置")] + public Transform frontFoot; + + /// + /// 马伸直腿后后脚底部 + /// + [BoxGroup("必须绑定的物体")][Header("马后脚伸直后的最深位置")] + public Transform backFoot; + + /// + /// 马脚Transform + /// + [BoxGroup("必须绑定的物体")][Header("马脚Transform,必须按照左前、右前、左后、右后的顺序绑定")] + public Transform[] footsTransform; + + /// + /// 腿做圆周运动的半径 + /// + [BoxGroup("马的基本运动信息")][Header("马脚圆周运动半径")] + public float footMoveRadius; + + /// + /// 四条腿分别对输入偏差多少 + /// + [ListDrawerSettings] [BoxGroup("马的基本运动信息")][Header("四条腿分别对输入偏差多少")] + public Vector2[] footOffestOfInput; + + /// + /// 马足力量 + /// + [BoxGroup("马的基本运动信息")][Header("马足力量")] + public float footForce; + + /// + /// 马蹄推动马身的力度调整值 + /// + [BoxGroup("马的基本运动信息")][Header("马前进的力度")] + public float strength; + + /// + /// 马蹄供力有效范围 + /// + [BoxGroup("马的基本运动信息")][Header("马蹄供力有效范围")] + public float effectiveDistance; + + + + + + // _____ _ _ + // | __ \ (_) | | + // | |__) | __ ___ ____ _| |_ ___ + // | ___/ '__| \ \ / / _` | __/ _ \ + // | | | | | |\ V / (_| | || __/ + // |_| |_| |_| \_/ \__,_|\__\___| + + struct foot + { + /// + /// 腿对输入偏差多少 + /// + public Vector2 footOffestOfInput; + + /// + /// 马脚控制点,通过transform找到 + /// + public Transform footControlPoint; + + /// + /// 真实的马脚的Transform + /// + public Transform footRealTransform; + + /// + /// 马脚此时目标位置,每帧计算 + /// + public Vector3 footTargetPosition; + + /// + /// 马蹄刚体组件 + /// + public Rigidbody2D footRigidbody2D; + + /// + /// 马蹄的碰撞体,但是不绑在马蹄上,而是为了物理计算绑在马身上 + /// + public BoxCollider2D footBoxCollider2D; + + /// + /// 马蹄前一帧的位置 + /// + public Vector3 footPreviousPosition; + } + + private foot[] foots; + + /// + /// 马前腿长度 + /// + private float frontLegLength; + + /// + /// 马后腿长度 + /// + private float backLegLength; + + /// + /// 从前腿根骨骼到马脚运动圆心的距离,用来推算最终马脚位置 + /// + private float frontRootDistanceToCenterOfCircle; + + /// + /// 从后腿根骨骼到马脚运动圆心的距离,用来推算最终马脚位置 + /// + private float backRootDistanceToCenterOfCircle; + + /// + /// 输入的马前脚信息 + /// + private Vector2 inputFrontVector; + + /// + /// 输入的马后脚信息 + /// + private Vector2 inputBackVector; + + + /// + /// 原重力尺度,在Start中通过随意一条腿的刚体获取 + /// + private float oriGravityScale; + + /// + /// 马蹄碰撞体数组 + /// + private BoxCollider2D[] footBoxColliders; + + /// + /// 马的刚体组件 + /// + private Rigidbody2D horseRig; + + + void Start() + { + //初始化 + Init(); + //找到必要的物体和组件 + FindSth(); + //计算必要的量 + CaculateSth(); + } + + void Update() + { + //计算马脚目标位置 + CaculateTargetPosition(); + //让马脚朝着目标移动 + MoveFoot(); + //让马整体运动 + MoveHorse(); + //更新一些数据 + UpdateData(); + } + + /// + /// 移动马身体 + /// + private void MoveHorse() + { + Vector2 v = new Vector2(); + + for(int i = 0; i < 4; i++) + { + //仅在有输入的情况下,会考虑给速度 + //看此时该脚是否有输入 + bool hasInput = i < 2 ? inputFrontVector.magnitude > 0.1f : inputBackVector.magnitude > 0.1f; + if(!hasInput) continue; + //从足底向正下方发射射线,获取碰撞到的物体 + RaycastHit2D hit = Physics2D.Raycast( + foots[i].footRealTransform.position, + Vector2.down, + 1000f, + LayerMask.NameToLayer("foot") + ); + //如果击中物体的距离已经超过了有效范围,则不贡献速度 + if(hit.distance > effectiveDistance) continue; + //判断本帧中,马足位置是否低于圆心+调整值,仅低于时,需要计算影响 + //根位置 + Vector3 rootPosition = i < 2 ? frontLegRoot.position : backLegRoot.position; + //L + float L = i < 2 ? frontLegLength : backLegLength; + //圆心y坐标 + float centerY = L - footMoveRadius; + centerY += effectiveDistance; + //仅低于时,需要计算影响 + if(foots[i].footRealTransform.position.y >= centerY) continue; + //本帧位置减上帧位置 + Vector3 trans = foots[i].footRealTransform.position - foots[i].footPreviousPosition; + Vector2 v_ = trans; + //把本足的影响加到速度中 + v += v_; + } + + //给速度乘以力量,得到最终理论速度 + v *= strength; + //取反,因为是模拟反作用力 + v*=-1; + //减弱y轴的影响,不要让马在平地上起飞 + v *= new Vector2(1,0.2f); + + Debug.Log(v); + + //如果模长超过5,那必是触发了什么逆天Bug,会导致马起飞,需要避免这些错误 + if(v.magnitude > 10f) v = Vector2.zero; + + //把速度加给马的刚体 + horseRig.velocity += v; + } + + private void UpdateData() + { + //更新四足的上帧位置 + for(int i = 0; i < 4; i++) + foots[i].footPreviousPosition = foots[i].footRealTransform.position; + } + + void Init() + { + foots = new foot[4]; + footBoxColliders = new BoxCollider2D[4]; + for(int i = 0; i < 4; i++) foots[i].footPreviousPosition = transform.position; + } + + + void FindSth() + { + //把四只脚的目标点找到,0:左前 1:右前 2:左后 3:右后 + foots[0].footControlPoint = transform.Find("左前脚").GetChild(0); + foots[1].footControlPoint = transform.Find("右前脚").GetChild(0); + foots[2].footControlPoint = transform.Find("左后脚").GetChild(0); + foots[3].footControlPoint = transform.Find("右后脚").GetChild(0); + + //同步四只脚的输入偏差 + for (int i = 0; i < 4; i++) foots[i].footOffestOfInput = footOffestOfInput[i]; + + //找到马蹄刚体组件 + for(int i = 0; i < 4; i++) foots[i].footRigidbody2D = foots[i].footControlPoint.GetComponent(); + + //找到马蹄的真实Transform + for(int i = 0; i < 4; i++) foots[i].footRealTransform = footsTransform[i]; + + //找到马蹄的碰撞体 + footBoxColliders = GetComponents(); + + //给foots的碰撞体赋值 + for (int i = 0; i < 4; i++) + { + foots[i].footBoxCollider2D = footBoxColliders[i]; + footBoxColliders[i].offset = foots[i].footControlPoint.localPosition ; + } + + //找到马的刚体 + horseRig = GetComponent(); + + } + + /// + /// 计算一些不会变的必要的量 + /// + void CaculateSth() + { + //计算前后腿马腿长度 + frontLegLength = Vector3.Distance(frontLegRoot.position, frontFoot.position); + backLegLength = Vector3.Distance(backLegRoot.position, backFoot.position); + //计算从腿根骨骼到马脚运动圆心的距离 + frontRootDistanceToCenterOfCircle = frontLegLength - footMoveRadius; + backRootDistanceToCenterOfCircle = backLegLength - footMoveRadius; + //取得原始重力尺度 + oriGravityScale = foots[0].footRigidbody2D.gravityScale; + } + + /// + /// 根据记录的输入向量计算马脚本帧的目标位置,保存到footTargetPoints数组中 + /// + private void CaculateTargetPosition() + { + //循环4次 + for(int i = 0; i < 4; i++) + { + //整体公式为:Target = 根位置 - V(0,L - r) + inputdir * offest * r + //根位置 + Vector3 rootPosition = i < 2 ? frontLegRoot.position : backLegRoot.position; + //L + float L = i < 2 ? frontLegLength : backLegLength; + //中间向量 + Vector3 middleVector = new Vector3(0,L - footMoveRadius,0); + //inputdir + Vector2 inputVector = i < 2 ? inputFrontVector : inputBackVector; + //inputTrans + Vector3 inputTrans = new Vector3 + ( + inputVector.x * ( footOffestOfInput[i].x + 1), + inputVector.y * ( footOffestOfInput[i].y + 1), + 0 + ) + * footMoveRadius; + //最终计算 + //footTargetPoints[i] = rootPosition - middleVector + inputTrans; + foots[i].footTargetPosition = rootPosition - middleVector + inputTrans; + } + } + + /// + /// 把马脚朝着算好的目标点移动 + /// + private void MoveFoot() + { + //循环4次 + for(int i = 0; i < 4; i++) + { + //看此时该脚是否有输入 + bool hasInput = i < 2 ? inputFrontVector.magnitude > 0.1f : inputBackVector.magnitude > 0.1f; + //如果有输入,则把马脚朝着目标移动 + // if(hasInput) + if(true) + { + //若无输入,则把目标定在可以使马腿伸直的地方 + Vector3 targetPosition = hasInput ? + foots[i].footTargetPosition : + foots[i].footTargetPosition - new Vector3(0,footMoveRadius + 0.5f,0); + //给刚体以target位置-自身位置作为力的方向 + Vector2 Dir = targetPosition - foots[i].footControlPoint.position; + //如果已经很接近目标点了,则不再给速度,同时解除重力,防止出现抖动问题 + if(Dir.magnitude < 0.1f) + { + foots[i].footRigidbody2D.gravityScale = 0; + foots[i].footRigidbody2D.velocity = Vector2.zero; + continue; + } + //标准化马脚移动方向 + Dir.Normalize(); + //最终计算应有的速度 + Vector2 force = Dir * footForce * (horseRig.velocity.magnitude * 0.5f + 1); + //赋予脚的刚体以速度 + foots[i].footRigidbody2D.velocity = foots[i].footRigidbody2D.velocity * 0.8f + force * 0.2f; + //foots[i].footRigidbody2D.velocity = force; + //foots[i].footRigidbody2D.AddForce(force); + } + // // 强制把马脚移到目标点 + //foots[i].footControlPoint.position = foots[i].footTargetPosition; + // 恢复重力 + foots[i].footRigidbody2D.gravityScale = oriGravityScale; + // 刷新碰撞体位置 + footBoxColliders[i].offset = foots[i].footRealTransform.position - transform.position; + } + } + + public void SetInputFrontVector(Vector2 input) => inputFrontVector = input; + + public void SetInputBackVector(Vector2 input) => inputBackVector = input; + + +} diff --git a/Assets/勍/脚本/Horse.cs.meta b/Assets/勍/脚本/Horse.cs.meta new file mode 100644 index 0000000..86a49fa --- /dev/null +++ b/Assets/勍/脚本/Horse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de38a93f55344b04f94daf7d0def7050 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/脚本/Player.cs b/Assets/勍/脚本/Player.cs new file mode 100644 index 0000000..d953b63 --- /dev/null +++ b/Assets/勍/脚本/Player.cs @@ -0,0 +1,41 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + +/// +/// 玩家类,代表屏幕外的玩家,用来处理输入、传达信息、记录状态 +/// +public class Player : MonoBehaviour +{ + private PlayerC playerC; + private Horse horse; + + void Start() + { + //找到必要的物体和组件 + FindSth(); + //绑定输入 + InputBinding(); + } + + private void FindSth() + { + try{ + horse = transform.Find("马").GetComponent(); + }catch(System.Exception) {Debug.LogError("要么子物体中没有马、要么马的名字不是马、要么马身上没有Horse组件");} + + } + + private void InputBinding() + { + playerC = new PlayerC(); + playerC.GamePlay.MoveFrontFoot.performed += ctx => horse.SetInputFrontVector(ctx.ReadValue()); + playerC.GamePlay.MoveBackFoot.performed += ctx => horse.SetInputBackVector(ctx.ReadValue()); + playerC.GamePlay.MoveFrontFoot.canceled += ctx => horse.SetInputFrontVector(Vector2.zero); + playerC.GamePlay.MoveBackFoot.canceled += ctx => horse.SetInputBackVector(Vector2.zero); + + playerC.GamePlay.Enable(); + } + +} diff --git a/Assets/勍/脚本/Player.cs.meta b/Assets/勍/脚本/Player.cs.meta new file mode 100644 index 0000000..315c13f --- /dev/null +++ b/Assets/勍/脚本/Player.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 433c80cc795427f43a06e42eab98aa3f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/脚本/工具类.meta b/Assets/勍/脚本/工具类.meta new file mode 100644 index 0000000..6d12163 --- /dev/null +++ b/Assets/勍/脚本/工具类.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f08f937ed5854b4bbdbbadfcf8bf471 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/脚本/工具类/UnitySingleton.cs b/Assets/勍/脚本/工具类/UnitySingleton.cs new file mode 100644 index 0000000..49f9505 --- /dev/null +++ b/Assets/勍/脚本/工具类/UnitySingleton.cs @@ -0,0 +1,40 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 单例模式类模板 +/// +public class UnitySingleton : MonoBehaviour + where T : Component +{ + private static T m_instance; + + public static T Instance + { + get + { + if (m_instance == null) + { + m_instance = FindObjectOfType(); + if (m_instance == null) + { + Debug.LogError("缺少 " + typeof(T) + " 这个单例,没法在场景中找到"); + } + } + return m_instance; + } + } + + protected virtual void Awake() + { + if (m_instance == null) + { + m_instance = this as T; + } + else + { + Destroy(gameObject); + } + } +} diff --git a/Assets/勍/脚本/工具类/UnitySingleton.cs.meta b/Assets/勍/脚本/工具类/UnitySingleton.cs.meta new file mode 100644 index 0000000..c927dd6 --- /dev/null +++ b/Assets/勍/脚本/工具类/UnitySingleton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce98a0e5283940c4cb6badf0c03b10e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/输入映射.meta b/Assets/勍/输入映射.meta new file mode 100644 index 0000000..2121d18 --- /dev/null +++ b/Assets/勍/输入映射.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8d5bbf922ad2c4944b23b02ae58dfbee +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/输入映射/PlayerC.cs b/Assets/勍/输入映射/PlayerC.cs new file mode 100644 index 0000000..6439837 --- /dev/null +++ b/Assets/勍/输入映射/PlayerC.cs @@ -0,0 +1,406 @@ +//------------------------------------------------------------------------------ +// +// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator +// version 1.3.0 +// from Assets/勍/输入映射/PlayerC.inputactions +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.Utilities; + +public partial class @PlayerC : IInputActionCollection2, IDisposable +{ + public InputActionAsset asset { get; } + public @PlayerC() + { + asset = InputActionAsset.FromJson(@"{ + ""name"": ""PlayerC"", + ""maps"": [ + { + ""name"": ""GamePlay"", + ""id"": ""d066c560-5817-4703-aecc-a975f13f7093"", + ""actions"": [ + { + ""name"": ""MoveBackFoot"", + ""type"": ""Value"", + ""id"": ""1e173331-d5ad-4f9b-a307-56bf2eda0151"", + ""expectedControlType"": ""Vector2"", + ""processors"": """", + ""interactions"": """", + ""initialStateCheck"": true + }, + { + ""name"": ""MoveFrontFoot"", + ""type"": ""Value"", + ""id"": ""d198c764-78f7-416a-a6b6-611e7f6fe52e"", + ""expectedControlType"": ""Vector2"", + ""processors"": """", + ""interactions"": """", + ""initialStateCheck"": true + } + ], + ""bindings"": [ + { + ""name"": ""Keyboard"", + ""id"": ""2f29b289-9196-49f9-879f-6e48c0fd135e"", + ""path"": ""2DVector"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""MoveBackFoot"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""up"", + ""id"": ""070f9c54-d3c3-4f9a-909b-c86b36554086"", + ""path"": ""/w"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveBackFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""down"", + ""id"": ""044805b5-ecef-4476-9a64-00f88f141f3f"", + ""path"": ""/s"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveBackFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""left"", + ""id"": ""2a896e80-041c-4c01-968a-793d2a741a6c"", + ""path"": ""/a"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveBackFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""right"", + ""id"": ""177e26dd-3a72-47e3-951a-3f9b3a942d40"", + ""path"": ""/d"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveBackFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""GamePad"", + ""id"": ""8e7cc629-4a8a-46f1-914b-46d7fd8da422"", + ""path"": ""2DVector(mode=2)"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""MoveBackFoot"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""up"", + ""id"": ""aee182e3-5f55-494e-9293-cd5810f4a2dd"", + ""path"": ""/leftStick/up"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveBackFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""down"", + ""id"": ""6d7d49a7-f87d-45cb-81bb-a8139654b64b"", + ""path"": ""/leftStick/down"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveBackFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""left"", + ""id"": ""dbbc6bdf-e7d3-4a8b-8156-44b49947fb21"", + ""path"": ""/leftStick/left"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveBackFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""right"", + ""id"": ""bd9d31fa-3750-42db-a37a-fd6b24b35e29"", + ""path"": ""/leftStick/right"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveBackFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""Keyboard"", + ""id"": ""847b8737-4b1b-4699-aca1-9ac3de703a77"", + ""path"": ""2DVector"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""MoveFrontFoot"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""up"", + ""id"": ""8b9631ca-0fa6-4272-ab7d-5bee70d9d367"", + ""path"": ""/upArrow"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveFrontFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""down"", + ""id"": ""bff77e64-88d3-41a3-9600-b07b5940fe0d"", + ""path"": ""/downArrow"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveFrontFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""left"", + ""id"": ""3d72b984-a8e0-432a-84fa-2501e1f0bf90"", + ""path"": ""/leftArrow"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveFrontFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""right"", + ""id"": ""94fd6f98-3a9d-4ca6-9934-f9ffb5ac487f"", + ""path"": ""/rightArrow"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveFrontFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""GamePad"", + ""id"": ""6e216e7e-d474-4342-af09-0f1936433ad9"", + ""path"": ""2DVector(mode=2)"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""MoveFrontFoot"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""up"", + ""id"": ""51d7e337-7cdf-4c2e-9c93-7da2ace9f1e5"", + ""path"": ""/rightStick/up"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveFrontFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""down"", + ""id"": ""36eb00e0-f26f-4fd4-a154-364f09ec4244"", + ""path"": ""/rightStick/down"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveFrontFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""left"", + ""id"": ""4163f149-fe0e-43ce-ab08-95fbb2854cf6"", + ""path"": ""/rightStick/left"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveFrontFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""right"", + ""id"": ""2a85b7b4-027a-4d5b-abf6-977ed6338453"", + ""path"": ""/rightStick/right"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""GamePlay"", + ""action"": ""MoveFrontFoot"", + ""isComposite"": false, + ""isPartOfComposite"": true + } + ] + } + ], + ""controlSchemes"": [ + { + ""name"": ""GamePlay"", + ""bindingGroup"": ""GamePlay"", + ""devices"": [ + { + ""devicePath"": """", + ""isOptional"": true, + ""isOR"": false + }, + { + ""devicePath"": """", + ""isOptional"": false, + ""isOR"": false + } + ] + } + ] +}"); + // GamePlay + m_GamePlay = asset.FindActionMap("GamePlay", throwIfNotFound: true); + m_GamePlay_MoveBackFoot = m_GamePlay.FindAction("MoveBackFoot", throwIfNotFound: true); + m_GamePlay_MoveFrontFoot = m_GamePlay.FindAction("MoveFrontFoot", throwIfNotFound: true); + } + + public void Dispose() + { + UnityEngine.Object.Destroy(asset); + } + + public InputBinding? bindingMask + { + get => asset.bindingMask; + set => asset.bindingMask = value; + } + + public ReadOnlyArray? devices + { + get => asset.devices; + set => asset.devices = value; + } + + public ReadOnlyArray controlSchemes => asset.controlSchemes; + + public bool Contains(InputAction action) + { + return asset.Contains(action); + } + + public IEnumerator GetEnumerator() + { + return asset.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public void Enable() + { + asset.Enable(); + } + + public void Disable() + { + asset.Disable(); + } + public IEnumerable bindings => asset.bindings; + + public InputAction FindAction(string actionNameOrId, bool throwIfNotFound = false) + { + return asset.FindAction(actionNameOrId, throwIfNotFound); + } + public int FindBinding(InputBinding bindingMask, out InputAction action) + { + return asset.FindBinding(bindingMask, out action); + } + + // GamePlay + private readonly InputActionMap m_GamePlay; + private IGamePlayActions m_GamePlayActionsCallbackInterface; + private readonly InputAction m_GamePlay_MoveBackFoot; + private readonly InputAction m_GamePlay_MoveFrontFoot; + public struct GamePlayActions + { + private @PlayerC m_Wrapper; + public GamePlayActions(@PlayerC wrapper) { m_Wrapper = wrapper; } + public InputAction @MoveBackFoot => m_Wrapper.m_GamePlay_MoveBackFoot; + public InputAction @MoveFrontFoot => m_Wrapper.m_GamePlay_MoveFrontFoot; + public InputActionMap Get() { return m_Wrapper.m_GamePlay; } + public void Enable() { Get().Enable(); } + public void Disable() { Get().Disable(); } + public bool enabled => Get().enabled; + public static implicit operator InputActionMap(GamePlayActions set) { return set.Get(); } + public void SetCallbacks(IGamePlayActions instance) + { + if (m_Wrapper.m_GamePlayActionsCallbackInterface != null) + { + @MoveBackFoot.started -= m_Wrapper.m_GamePlayActionsCallbackInterface.OnMoveBackFoot; + @MoveBackFoot.performed -= m_Wrapper.m_GamePlayActionsCallbackInterface.OnMoveBackFoot; + @MoveBackFoot.canceled -= m_Wrapper.m_GamePlayActionsCallbackInterface.OnMoveBackFoot; + @MoveFrontFoot.started -= m_Wrapper.m_GamePlayActionsCallbackInterface.OnMoveFrontFoot; + @MoveFrontFoot.performed -= m_Wrapper.m_GamePlayActionsCallbackInterface.OnMoveFrontFoot; + @MoveFrontFoot.canceled -= m_Wrapper.m_GamePlayActionsCallbackInterface.OnMoveFrontFoot; + } + m_Wrapper.m_GamePlayActionsCallbackInterface = instance; + if (instance != null) + { + @MoveBackFoot.started += instance.OnMoveBackFoot; + @MoveBackFoot.performed += instance.OnMoveBackFoot; + @MoveBackFoot.canceled += instance.OnMoveBackFoot; + @MoveFrontFoot.started += instance.OnMoveFrontFoot; + @MoveFrontFoot.performed += instance.OnMoveFrontFoot; + @MoveFrontFoot.canceled += instance.OnMoveFrontFoot; + } + } + } + public GamePlayActions @GamePlay => new GamePlayActions(this); + private int m_GamePlaySchemeIndex = -1; + public InputControlScheme GamePlayScheme + { + get + { + if (m_GamePlaySchemeIndex == -1) m_GamePlaySchemeIndex = asset.FindControlSchemeIndex("GamePlay"); + return asset.controlSchemes[m_GamePlaySchemeIndex]; + } + } + public interface IGamePlayActions + { + void OnMoveBackFoot(InputAction.CallbackContext context); + void OnMoveFrontFoot(InputAction.CallbackContext context); + } +} diff --git a/Assets/勍/输入映射/PlayerC.cs.meta b/Assets/勍/输入映射/PlayerC.cs.meta new file mode 100644 index 0000000..de1529b --- /dev/null +++ b/Assets/勍/输入映射/PlayerC.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebe4d8e09d1ed0040a03c17cad660543 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/勍/输入映射/PlayerC.inputactions b/Assets/勍/输入映射/PlayerC.inputactions new file mode 100644 index 0000000..9df0d65 --- /dev/null +++ b/Assets/勍/输入映射/PlayerC.inputactions @@ -0,0 +1,269 @@ +{ + "name": "PlayerC", + "maps": [ + { + "name": "GamePlay", + "id": "d066c560-5817-4703-aecc-a975f13f7093", + "actions": [ + { + "name": "MoveBackFoot", + "type": "Value", + "id": "1e173331-d5ad-4f9b-a307-56bf2eda0151", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "MoveFrontFoot", + "type": "Value", + "id": "d198c764-78f7-416a-a6b6-611e7f6fe52e", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + } + ], + "bindings": [ + { + "name": "Keyboard", + "id": "2f29b289-9196-49f9-879f-6e48c0fd135e", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "MoveBackFoot", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "070f9c54-d3c3-4f9a-909b-c86b36554086", + "path": "/w", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveBackFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "044805b5-ecef-4476-9a64-00f88f141f3f", + "path": "/s", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveBackFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "2a896e80-041c-4c01-968a-793d2a741a6c", + "path": "/a", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveBackFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "177e26dd-3a72-47e3-951a-3f9b3a942d40", + "path": "/d", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveBackFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "GamePad", + "id": "8e7cc629-4a8a-46f1-914b-46d7fd8da422", + "path": "2DVector(mode=2)", + "interactions": "", + "processors": "", + "groups": "", + "action": "MoveBackFoot", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "aee182e3-5f55-494e-9293-cd5810f4a2dd", + "path": "/leftStick/up", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveBackFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "6d7d49a7-f87d-45cb-81bb-a8139654b64b", + "path": "/leftStick/down", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveBackFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "dbbc6bdf-e7d3-4a8b-8156-44b49947fb21", + "path": "/leftStick/left", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveBackFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "bd9d31fa-3750-42db-a37a-fd6b24b35e29", + "path": "/leftStick/right", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveBackFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "Keyboard", + "id": "847b8737-4b1b-4699-aca1-9ac3de703a77", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "MoveFrontFoot", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "8b9631ca-0fa6-4272-ab7d-5bee70d9d367", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveFrontFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "bff77e64-88d3-41a3-9600-b07b5940fe0d", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveFrontFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "3d72b984-a8e0-432a-84fa-2501e1f0bf90", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveFrontFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "94fd6f98-3a9d-4ca6-9934-f9ffb5ac487f", + "path": "/rightArrow", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveFrontFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "GamePad", + "id": "6e216e7e-d474-4342-af09-0f1936433ad9", + "path": "2DVector(mode=2)", + "interactions": "", + "processors": "", + "groups": "", + "action": "MoveFrontFoot", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "51d7e337-7cdf-4c2e-9c93-7da2ace9f1e5", + "path": "/rightStick/up", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveFrontFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "36eb00e0-f26f-4fd4-a154-364f09ec4244", + "path": "/rightStick/down", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveFrontFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "4163f149-fe0e-43ce-ab08-95fbb2854cf6", + "path": "/rightStick/left", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveFrontFoot", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "2a85b7b4-027a-4d5b-abf6-977ed6338453", + "path": "/rightStick/right", + "interactions": "", + "processors": "", + "groups": "GamePlay", + "action": "MoveFrontFoot", + "isComposite": false, + "isPartOfComposite": true + } + ] + } + ], + "controlSchemes": [ + { + "name": "GamePlay", + "bindingGroup": "GamePlay", + "devices": [ + { + "devicePath": "", + "isOptional": true, + "isOR": false + }, + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + } + ] +} \ No newline at end of file diff --git a/Assets/勍/输入映射/PlayerC.inputactions.meta b/Assets/勍/输入映射/PlayerC.inputactions.meta new file mode 100644 index 0000000..0e65ae4 --- /dev/null +++ b/Assets/勍/输入映射/PlayerC.inputactions.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: b9bfe6d24765dbc4f9fdefb8e062c53d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3} + generateWrapperCode: 1 + wrapperCodePath: + wrapperClassName: + wrapperCodeNamespace: diff --git a/Assets/勍/预制体/马骨骼.prefab b/Assets/勍/预制体/马骨骼.prefab index 0121b00..f7dd7aa 100644 --- a/Assets/勍/预制体/马骨骼.prefab +++ b/Assets/勍/预制体/马骨骼.prefab @@ -23,7 +23,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7821054} - m_LocalRotation: {x: -0, y: -0, z: 0.48011786, w: 0.877204} + m_LocalRotation: {x: -0, y: -0, z: 0.70307267, w: 0.711118} m_LocalPosition: {x: 2.63, y: -0.03, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -31,6 +31,37 @@ Transform: m_Father: {fileID: 3613839984805260814} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &29448274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 29448275} + m_Layer: 0 + m_Name: "\u540E\u817F\u811A\u5E95" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &29448275 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 29448274} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -2.33, y: -0.13, z: -0.04031739} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 50099845796739461} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &173297168 GameObject: m_ObjectHideFlags: 0 @@ -41,7 +72,7 @@ GameObject: m_Component: - component: {fileID: 173297169} - component: {fileID: 173297170} - m_Layer: 0 + m_Layer: 3 m_Name: "\u53F3\u524D\u811A" m_TagString: Untagged m_Icon: {fileID: 0} @@ -106,7 +137,7 @@ GameObject: m_Component: - component: {fileID: 427451462} - component: {fileID: 427451463} - m_Layer: 0 + m_Layer: 3 m_Name: "\u53F3\u540E\u811A" m_TagString: Untagged m_Icon: {fileID: 0} @@ -160,7 +191,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - m_Flip: 0 + m_Flip: 1 --- !u!1 &439821176 GameObject: m_ObjectHideFlags: 0 @@ -171,7 +202,7 @@ GameObject: m_Component: - component: {fileID: 439821177} - component: {fileID: 439821178} - m_Layer: 0 + m_Layer: 3 m_Name: "\u5DE6\u540E\u811A" m_TagString: Untagged m_Icon: {fileID: 0} @@ -185,7 +216,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 439821176} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -225,7 +256,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - m_Flip: 0 + m_Flip: 1 --- !u!1 &566743903 GameObject: m_ObjectHideFlags: 0 @@ -235,7 +266,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 566743904} - m_Layer: 0 + - component: {fileID: 719707980} + - component: {fileID: 719707977} + m_Layer: 3 m_Name: New LimbSolver2D (1)_Target m_TagString: Untagged m_Icon: {fileID: 0} @@ -249,14 +282,61 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 566743903} - m_LocalRotation: {x: -0, y: -0, z: -0.6548563, w: 0.75575346} - m_LocalPosition: {x: 1.4883441, y: 1.4884486, z: 0} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.1667233, y: 1.7712791, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 173297169} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!50 &719707980 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566743903} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 4 +--- !u!61 &719707977 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566743903} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 6200000, guid: 3f96fa1f269cf674da614b8d6fd206a8, type: 2} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0.37} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.5, y: 0.5} + m_EdgeRadius: 0 --- !u!1 &685472165 GameObject: m_ObjectHideFlags: 0 @@ -280,7 +360,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 685472165} - m_LocalRotation: {x: -0, y: -0, z: -0.43980214, w: -0.89809465} + m_LocalRotation: {x: -0, y: -0, z: 0.14573838, w: 0.98932326} m_LocalPosition: {x: 2.89, y: -0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -297,7 +377,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 905566467} - m_Layer: 0 + - component: {fileID: 448642196} + - component: {fileID: 448642193} + m_Layer: 3 m_Name: New LimbSolver2D_Target m_TagString: Untagged m_Icon: {fileID: 0} @@ -311,14 +393,61 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 905566466} - m_LocalRotation: {x: -0, y: -0, z: -0.6576925, w: 0.7532865} - m_LocalPosition: {x: -1.617593, y: 1.9891539, z: 0} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.3844213, y: 1.9082389, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 427451462} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!50 &448642196 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 905566466} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 4 +--- !u!61 &448642193 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 905566466} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 6200000, guid: 3f96fa1f269cf674da614b8d6fd206a8, type: 2} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0.37} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.5, y: 0.5} + m_EdgeRadius: 0 --- !u!1 &951836817 GameObject: m_ObjectHideFlags: 0 @@ -342,7 +471,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 951836817} - m_LocalRotation: {x: -0, y: -0, z: 0.36415687, w: 0.9313377} + m_LocalRotation: {x: -0, y: -0, z: 0.7110635, w: 0.70312786} m_LocalPosition: {x: 2.67, y: -0.03, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -373,7 +502,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1219316748} - m_LocalRotation: {x: -0, y: -0, z: 0.13617262, w: 0.9906851} + m_LocalRotation: {x: -0, y: -0, z: 0.7107234, w: 0.7034716} m_LocalPosition: {x: 2.89, y: -0.01, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -390,7 +519,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1804133629} - m_Layer: 0 + - component: {fileID: 106631856} + - component: {fileID: 106631853} + m_Layer: 3 m_Name: New LimbSolver2D (1)_Target m_TagString: Untagged m_Icon: {fileID: 0} @@ -404,14 +535,92 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1804133628} - m_LocalRotation: {x: -0, y: -0, z: -0.6535307, w: 0.7569001} - m_LocalPosition: {x: -0.24605179, y: 0.8020568, z: 0} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2.313099, y: -0.36832428, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 439821177} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!50 &106631856 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804133628} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 4 +--- !u!61 &106631853 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804133628} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 6200000, guid: 3f96fa1f269cf674da614b8d6fd206a8, type: 2} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0.37} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.5, y: 0.5} + m_EdgeRadius: 0 +--- !u!1 &1861204019 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1861204020} + m_Layer: 0 + m_Name: "\u524D\u817F\u811A\u5E95" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1861204020 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1861204019} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.95, y: -0.04, z: -0.04031739} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 50099845796739461} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2110753429 GameObject: m_ObjectHideFlags: 0 @@ -421,7 +630,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 2110753430} - m_Layer: 0 + - component: {fileID: 213903473} + - component: {fileID: 213903470} + m_Layer: 3 m_Name: New LimbSolver2D_Target m_TagString: Untagged m_Icon: {fileID: 0} @@ -435,14 +646,61 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2110753429} - m_LocalRotation: {x: -0, y: -0, z: -0.65063983, w: 0.75938654} - m_LocalPosition: {x: 1.32, y: 0.55, z: 0} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.9177513, y: -0.107476234, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2114915568} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!50 &213903473 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2110753429} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 4 +--- !u!61 &213903470 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2110753429} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 6200000, guid: 3f96fa1f269cf674da614b8d6fd206a8, type: 2} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0.37} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.5, y: 0.5} + m_EdgeRadius: 0 --- !u!1 &2114915567 GameObject: m_ObjectHideFlags: 0 @@ -453,7 +711,7 @@ GameObject: m_Component: - component: {fileID: 2114915568} - component: {fileID: 2114915569} - m_Layer: 0 + m_Layer: 3 m_Name: "\u5DE6\u524D\u811A" m_TagString: Untagged m_Icon: {fileID: 0} @@ -609,8 +867,8 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 447594391148734010} m_Bounds: - m_Center: {x: 0.10990229, y: 1.1215049, z: 0} - m_Extent: {x: 0.4843654, y: 1.5325127, z: 0} + m_Center: {x: -2.1130419, y: 0.114145875, z: 0} + m_Extent: {x: 0.4399668, y: 1.5207393, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 m_AutoRebind: 0 @@ -715,7 +973,7 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 4548555739299381851} m_Bounds: - m_Center: {x: 0.04663968, y: 0.00054490566, z: 0} + m_Center: {x: 0.046640396, y: 0.00054466724, z: 0} m_Extent: {x: 2.9833598, y: 1.529455, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 @@ -774,7 +1032,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1824128395887921376} - m_LocalRotation: {x: 0, y: 0, z: -0.46477637, w: 0.8854282} + m_LocalRotation: {x: 0, y: 0, z: 0.0017300934, w: 0.9999985} m_LocalPosition: {x: 3.1855989, y: 0.00000048540335, z: 0} m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} m_ConstrainProportionsScale: 0 @@ -782,7 +1040,7 @@ Transform: - {fileID: 1219316749} m_Father: {fileID: 4491597922211250125} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -1.023} --- !u!1 &1918938200114478082 GameObject: m_ObjectHideFlags: 0 @@ -884,8 +1142,8 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 8522599996288171628} m_Bounds: - m_Center: {x: -0.63334984, y: 0.19928885, z: 0} - m_Extent: {x: 0.8191065, y: 1.3227417, z: 0} + m_Center: {x: -0.7402922, y: -0.032966852, z: 0} + m_Extent: {x: 0.51820207, y: 1.3867431, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 m_AutoRebind: 0 @@ -912,8 +1170,8 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2586161855259237125} - m_LocalRotation: {x: 0, y: 0, z: -0.36196133, w: 0.9321931} - m_LocalPosition: {x: -0.026302116, y: 0.18291369, z: 0} + m_LocalRotation: {x: 0, y: 0, z: -0.71538323, w: 0.6987324} + m_LocalPosition: {x: -0.011623869, y: 0.221685, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: @@ -1022,7 +1280,7 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 7712677489453891730} m_Bounds: - m_Center: {x: 0.004005432, y: 0.0019345284, z: 0} + m_Center: {x: 0.0040051937, y: 0.0019350052, z: 0} m_Extent: {x: 1.730995, y: 2.237885, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 @@ -1159,8 +1417,8 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 758927187003403290} m_Bounds: - m_Center: {x: 2.3203797, y: 2.1284359, z: 0} - m_Extent: {x: 1.1634619, y: 1.2677419, z: 0} + m_Center: {x: 2.8834577, y: 1.5164056, z: 0} + m_Extent: {x: 1.5171115, y: 0.62594986, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 m_AutoRebind: 0 @@ -1265,7 +1523,7 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 3283039325717014954} m_Bounds: - m_Center: {x: -0.61232376, y: -1.3605902, z: 0} + m_Center: {x: -0.61232376, y: -1.3605895, z: 0} m_Extent: {x: 1.8811502, y: 0.63218814, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 @@ -1293,7 +1551,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3939901558948737848} - m_LocalRotation: {x: 0, y: 0, z: -0.46452096, w: 0.88556206} + m_LocalRotation: {x: 0, y: 0, z: 0.0056177806, w: 0.9999842} m_LocalPosition: {x: 2.199519, y: 0.00000009788684, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -1325,7 +1583,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4223829576435502571} - m_LocalRotation: {x: 0, y: 0, z: -0.4063894, w: 0.9137} + m_LocalRotation: {x: 0, y: 0, z: -0.09297238, w: 0.9956687} m_LocalPosition: {x: 4.234662, y: -0.8706172, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -1333,7 +1591,7 @@ Transform: - {fileID: 3613839984805260814} m_Father: {fileID: 4548555739299381851} m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -72.845} --- !u!1 &4354509052754836139 GameObject: m_ObjectHideFlags: 0 @@ -1435,8 +1693,8 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 5709595267743773255} m_Bounds: - m_Center: {x: 0.18034178, y: 0.055391908, z: 0} - m_Extent: {x: 0.7437249, y: 1.4409373, z: 0} + m_Center: {x: -0.030106127, y: 0.025359988, z: 0} + m_Extent: {x: 0.57709247, y: 1.5073501, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 m_AutoRebind: 0 @@ -1500,7 +1758,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4785949961849431770} - m_LocalRotation: {x: 0, y: 0, z: -0.71819085, w: 0.6958462} + m_LocalRotation: {x: 0, y: 0, z: -0.6377077, w: 0.7702784} m_LocalPosition: {x: 2.1717074, y: 0.00000029267994, z: 0} m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} m_ConstrainProportionsScale: 0 @@ -1508,7 +1766,7 @@ Transform: - {fileID: 7821055} m_Father: {fileID: 7553923325119000229} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -40.066} --- !u!1 &4844367161775248575 GameObject: m_ObjectHideFlags: 0 @@ -1532,8 +1790,8 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4844367161775248575} - m_LocalRotation: {x: 0, y: 0, z: -0.5670967, w: 0.82365125} - m_LocalPosition: {x: 4.234796, y: -0.8565663, z: 0} + m_LocalRotation: {x: 0, y: 0, z: -0.7184307, w: 0.6955986} + m_LocalPosition: {x: 4.2351785, y: -0.81765443, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: @@ -1567,7 +1825,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5266883265818701397} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 2.7150002, y: 1.325, z: 0} + m_LocalPosition: {x: 4.45, y: 1.94, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -1642,8 +1900,8 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 3613839984805260814} m_Bounds: - m_Center: {x: -0.23456705, y: 0.8122387, z: 0} - m_Extent: {x: 1.0557585, y: 1.1580331, z: 0} + m_Center: {x: -0.21104848, y: 1.1106416, z: 0} + m_Extent: {x: 0.53063285, y: 1.3755945, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 m_AutoRebind: 0 @@ -1748,8 +2006,8 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 553410378564238167} m_Bounds: - m_Center: {x: -0.17382455, y: -0.099614024, z: 0} - m_Extent: {x: 1.9793634, y: 1.5096724, z: 0} + m_Center: {x: -0.8926394, y: -0.66431546, z: 0} + m_Extent: {x: 1.1780448, y: 2.2737556, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 m_AutoRebind: 0 @@ -1854,7 +2112,7 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 222644695571005584} m_Bounds: - m_Center: {x: 0.09295505, y: -0.016916037, z: 0} + m_Center: {x: 0.09295505, y: -0.016916513, z: 0} m_Extent: {x: 0.7851751, y: 1.0730853, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 @@ -1960,8 +2218,8 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 4491597922211250125} m_Bounds: - m_Center: {x: 1.1610749, y: 0.41806042, z: 0} - m_Extent: {x: 1.8311799, y: 1.7199361, z: 0} + m_Center: {x: 0.42617273, y: -0.030556917, z: 0} + m_Extent: {x: 1.0636271, y: 2.3464012, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 m_AutoRebind: 0 @@ -1988,7 +2246,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6623324084869713201} - m_LocalRotation: {x: 0, y: 0, z: 0.7717921, w: -0.635875} + m_LocalRotation: {x: 0, y: 0, z: 0.4797578, w: 0.87740105} m_LocalPosition: {x: 3.1885386, y: -0.00000020127122, z: 0} m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} m_ConstrainProportionsScale: 0 @@ -1996,7 +2254,7 @@ Transform: - {fileID: 685472166} m_Father: {fileID: 553410378564238167} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: -0.241} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0.387} --- !u!1 &6633603778721056374 GameObject: m_ObjectHideFlags: 0 @@ -2098,8 +2356,8 @@ MonoBehaviour: m_BoneTransforms: - {fileID: 7553923325119000229} m_Bounds: - m_Center: {x: 0.5041566, y: 0.25244474, z: 0} - m_Extent: {x: 1.1035596, y: 1.2199924, z: 0} + m_Center: {x: 0.8403853, y: 0.93576217, z: 0} + m_Extent: {x: 1.4916611, y: 0.64488125, z: 0} m_UseBatching: 1 m_AlwaysUpdate: 1 m_AutoRebind: 0 @@ -2126,7 +2384,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7445106116714581447} - m_LocalRotation: {x: 0, y: 0, z: -0.2920709, w: 0.9563967} + m_LocalRotation: {x: 0, y: 0, z: -0.6064229, w: 0.79514235} m_LocalPosition: {x: -0.040212978, y: 0.19710083, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -2145,7 +2403,13 @@ GameObject: m_Component: - component: {fileID: 50099845796739461} - component: {fileID: 1084903717} - m_Layer: 0 + - component: {fileID: 1084903726} + - component: {fileID: 1084903722} + - component: {fileID: 1084903723} + - component: {fileID: 1084903724} + - component: {fileID: 1084903725} + - component: {fileID: 8721403442329396673} + m_Layer: 3 m_Name: "\u9A6C\u9AA8\u9ABC" m_TagString: Untagged m_Icon: {fileID: 0} @@ -2181,6 +2445,8 @@ Transform: - {fileID: 173297169} - {fileID: 427451462} - {fileID: 439821177} + - {fileID: 1861204020} + - {fileID: 29448275} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2211,6 +2477,161 @@ MonoBehaviour: showGizmo: 1 - color: {r: 0, g: 1, b: 0, a: 1} showGizmo: 1 +--- !u!50 &1084903726 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8765724049729688277} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!61 &1084903722 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8765724049729688277} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.5, y: 0.5} + m_EdgeRadius: 0 +--- !u!61 &1084903723 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8765724049729688277} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.5, y: 0.5} + m_EdgeRadius: 0 +--- !u!61 &1084903724 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8765724049729688277} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.5, y: 0.5} + m_EdgeRadius: 0 +--- !u!61 &1084903725 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8765724049729688277} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 1 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.5, y: 0.5} + m_EdgeRadius: 0 +--- !u!114 &8721403442329396673 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8765724049729688277} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de38a93f55344b04f94daf7d0def7050, type: 3} + m_Name: + m_EditorClassIdentifier: + frontLegRoot: {fileID: 5709595267743773255} + backLegRoot: {fileID: 4491597922211250125} + frontFoot: {fileID: 1861204020} + backFoot: {fileID: 29448275} + footsTransform: + - {fileID: 951836818} + - {fileID: 7821055} + - {fileID: 1219316749} + - {fileID: 685472166} + footMoveRadius: 1 + footOffestOfInput: + - {x: 0, y: 0} + - {x: -2, y: -2} + - {x: -2, y: -2} + - {x: 0, y: 0} + footForce: 7.5 + strength: 5 + effectiveDistance: -5 --- !u!1 &8864241425196728455 GameObject: m_ObjectHideFlags: 0 diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset index fc90ab9..6a9a95e 100644 --- a/ProjectSettings/DynamicsManager.asset +++ b/ProjectSettings/DynamicsManager.asset @@ -7,6 +7,7 @@ PhysicsManager: m_Gravity: {x: 0, y: -9.81, z: 0} m_DefaultMaterial: {fileID: 0} m_BounceThreshold: 2 + m_DefaultMaxDepenetrationVelocity: 10 m_SleepThreshold: 0.005 m_DefaultContactOffset: 0.01 m_DefaultSolverIterations: 6 @@ -17,7 +18,7 @@ PhysicsManager: m_ClothInterCollisionDistance: 0.1 m_ClothInterCollisionStiffness: 0.2 m_ContactsGeneration: 1 - m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_LayerCollisionMatrix: fffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff m_AutoSimulation: 1 m_AutoSyncTransforms: 0 m_ReuseCollisionCallbacks: 1 @@ -32,5 +33,6 @@ PhysicsManager: m_FrictionType: 0 m_EnableEnhancedDeterminism: 0 m_EnableUnifiedHeightmaps: 1 + m_ImprovedPatchFriction: 0 m_SolverType: 0 m_DefaultMaxAngularSpeed: 50 diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset index 6cfcdda..b7e9aea 100644 --- a/ProjectSettings/Physics2DSettings.asset +++ b/ProjectSettings/Physics2DSettings.asset @@ -53,4 +53,4 @@ Physics2DSettings: m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} - m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_LayerCollisionMatrix: fffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 1c92a78..7c426cd 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -8,10 +8,10 @@ TagManager: - Default - TransparentFX - Ignore Raycast - - + - foot - Water - UI - - + - Ground - - - diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index d3cea84..5373bd4 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -9,17 +9,17 @@ EditorUserSettings: value: 515250075c0c595e5f5a5e71122159444e4e4a2f7a7d7f602f284d66b4b76661 flags: 0 RecentlyUsedSceneGuid-1: - value: 5b520d0503545b0d0c0c0a2715770748154f4d2c7d7d7e627a7d4a35b4e1646a - flags: 0 - RecentlyUsedSceneGuid-2: value: 5550060701065c085e5c5924162609444f4f4b297e70226674284564b1b8326d flags: 0 - RecentlyUsedSceneGuid-3: + RecentlyUsedSceneGuid-2: value: 0204525104005f5f5e5d5526117b0b44424e4073752d2536747c1b31e7b3673c flags: 0 - RecentlyUsedSceneGuid-4: + RecentlyUsedSceneGuid-3: value: 02020157070050580c5b582340215c44464f4b297f7d7e64792d1c62b1e16269 flags: 0 + RecentlyUsedSceneGuid-4: + value: 5b520d0503545b0d0c0c0a2715770748154f4d2c7d7d7e627a7d4a35b4e1646a + flags: 0 vcSharedLogLevel: value: 0d5e400f0650 flags: 0 diff --git a/UserSettings/Layouts/default-2021.dwlt b/UserSettings/Layouts/default-2021.dwlt index bf65704..2a9ae18 100644 --- a/UserSettings/Layouts/default-2021.dwlt +++ b/UserSettings/Layouts/default-2021.dwlt @@ -19,7 +19,7 @@ MonoBehaviour: width: 1536 height: 772.8 m_ShowMode: 4 - m_Title: "\u5C42\u7EA7" + m_Title: "\u6E38\u620F" m_RootView: {fileID: 2} m_MinSize: {x: 875, y: 300} m_MaxSize: {x: 10000, y: 10000} @@ -100,7 +100,7 @@ MonoBehaviour: m_MinSize: {x: 400, y: 200} m_MaxSize: {x: 32384, y: 16192} vertical: 0 - controlID: 79 + controlID: 111 --- !u!114 &5 MonoBehaviour: m_ObjectHideFlags: 52 @@ -141,12 +141,12 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 697.6 + width: 635.2 height: 722.8 m_MinSize: {x: 100, y: 200} m_MaxSize: {x: 8096, y: 16192} vertical: 1 - controlID: 119 + controlID: 112 --- !u!114 &7 MonoBehaviour: m_ObjectHideFlags: 52 @@ -162,9 +162,9 @@ MonoBehaviour: m_Children: [] m_Position: serializedVersion: 2 - x: 697.6 + x: 635.2 y: 0 - width: 194.40002 + width: 249.59998 height: 722.8 m_MinSize: {x: 202, y: 221} m_MaxSize: {x: 4002, y: 4021} @@ -188,9 +188,9 @@ MonoBehaviour: m_Children: [] m_Position: serializedVersion: 2 - x: 892 + x: 884.8 y: 0 - width: 300.80005 + width: 308.00006 height: 722.8 m_MinSize: {x: 232, y: 271} m_MaxSize: {x: 10002, y: 10021} @@ -242,8 +242,8 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 697.6 - height: 622.4 + width: 635.2 + height: 300.8 m_MinSize: {x: 201, y: 221} m_MaxSize: {x: 4001, y: 4021} m_ActualView: {fileID: 16} @@ -267,11 +267,11 @@ MonoBehaviour: m_Position: serializedVersion: 2 x: 0 - y: 622.4 - width: 697.6 - height: 100.39996 - m_MinSize: {x: 200, y: 200} - m_MaxSize: {x: 4000, y: 4000} + y: 300.8 + width: 635.2 + height: 422 + m_MinSize: {x: 201, y: 221} + m_MaxSize: {x: 4001, y: 4021} m_ActualView: {fileID: 15} m_Panes: - {fileID: 15} @@ -297,9 +297,9 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 697.60004 + x: 635.2 y: 73.6 - width: 192.40002 + width: 247.59998 height: 701.8 m_ViewDataDictionary: {fileID: 0} m_OverlayCanvas: @@ -308,9 +308,9 @@ MonoBehaviour: m_SceneHierarchy: m_TreeViewState: scrollPos: {x: 0, y: 0} - m_SelectedIDs: - m_LastClickedID: 0 - m_ExpandedIDs: 76ecffff82ecffff88ecffff78f0ffff0efbffff + m_SelectedIDs: 60760000 + m_LastClickedID: 30304 + m_ExpandedIDs: 5efaffff66faffff6efaffff76faffff92faffff0efbffff6e7600007e760000 m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -395,9 +395,9 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 892 + x: 884.8 y: 73.6 - width: 298.80005 + width: 306.00006 height: 701.8 m_ViewDataDictionary: {fileID: 0} m_OverlayCanvas: @@ -416,22 +416,22 @@ MonoBehaviour: m_SkipHidden: 0 m_SearchArea: 1 m_Folders: - - Assets/AmplifyShaderEditor + - "Assets/\u52CD/\u7269\u7406\u6750\u8D28" m_Globs: [] m_OriginalText: m_ViewMode: 1 m_StartGridSize: 64 m_LastFolders: - - Assets/AmplifyShaderEditor + - "Assets/\u52CD/\u7269\u7406\u6750\u8D28" m_LastFoldersGridSize: -1 m_LastProjectPath: "C:\\Users\\13259\\Desktop\\\u8D5B\u9A6C" m_LockTracker: m_IsLocked: 0 m_FolderTreeState: scrollPos: {x: 0, y: 0} - m_SelectedIDs: ea7e0000 - m_LastClickedID: 32490 - m_ExpandedIDs: 000000008a6e00008c6e00008e6e0000906e0000 + m_SelectedIDs: d8770000 + m_LastClickedID: 30680 + m_ExpandedIDs: 00000000a4770000a6770000a8770000aa770000 m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -459,7 +459,7 @@ MonoBehaviour: scrollPos: {x: 0, y: 0} m_SelectedIDs: m_LastClickedID: 0 - m_ExpandedIDs: 000000008a6e00008c6e00008e6e0000906e0000 + m_ExpandedIDs: 00000000a4770000a6770000a8770000aa770000 m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -486,7 +486,7 @@ MonoBehaviour: m_ListAreaState: m_SelectedInstanceIDs: m_LastClickedInstanceID: 0 - m_HadKeyboardFocusLastEvent: 0 + m_HadKeyboardFocusLastEvent: 1 m_ExpandedInstanceIDs: m_RenameOverlay: m_UserAcceptedRename: 0 @@ -514,7 +514,7 @@ MonoBehaviour: m_ScrollPosition: {x: 0, y: 0} m_GridSize: 64 m_SkipHiddenPackages: 0 - m_DirectoriesAreaWidth: 105 + m_DirectoriesAreaWidth: 133 --- !u!114 &15 MonoBehaviour: m_ObjectHideFlags: 52 @@ -536,9 +536,9 @@ MonoBehaviour: m_Pos: serializedVersion: 2 x: 0 - y: 696 - width: 696.6 - height: 79.39996 + y: 374.4 + width: 634.2 + height: 401 m_ViewDataDictionary: {fileID: 0} m_OverlayCanvas: m_LastAppliedPresetName: Default @@ -549,7 +549,7 @@ MonoBehaviour: m_ShowGizmos: 0 m_TargetDisplay: 0 m_ClearColor: {r: 0, g: 0, b: 0, a: 0} - m_TargetSize: {x: 870.75, y: 72.999954} + m_TargetSize: {x: 792.75, y: 446} m_TextureFilterMode: 0 m_TextureHideFlags: 61 m_RenderIMGUI: 1 @@ -558,16 +558,16 @@ MonoBehaviour: m_VSyncEnabled: 0 m_Gizmos: 0 m_Stats: 0 - m_SelectedSizes: 00000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_SelectedSizes: 01000000000000000000000000000000000000000000000000000000000000000000000000000000 m_ZoomArea: m_HRangeLocked: 0 m_VRangeLocked: 0 hZoomLockedByDefault: 0 vZoomLockedByDefault: 0 - m_HBaseRangeMin: -348.30002 - m_HBaseRangeMax: 348.30002 - m_VBaseRangeMin: -29.199982 - m_VBaseRangeMax: 29.199982 + m_HBaseRangeMin: -317.1 + m_HBaseRangeMax: 317.1 + m_VBaseRangeMin: -178.40001 + m_VBaseRangeMax: 178.40001 m_HAllowExceedBaseRangeMin: 1 m_HAllowExceedBaseRangeMax: 1 m_VAllowExceedBaseRangeMin: 1 @@ -585,23 +585,23 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 21 - width: 696.6 - height: 58.399963 - m_Scale: {x: 0.99999994, y: 0.99999994} - m_Translation: {x: 348.3, y: 29.199982} + width: 634.2 + height: 380 + m_Scale: {x: 1, y: 1} + m_Translation: {x: 317.1, y: 190} m_MarginLeft: 0 m_MarginRight: 0 m_MarginTop: 0 m_MarginBottom: 0 m_LastShownAreaInsideMargins: serializedVersion: 2 - x: -348.30002 - y: -29.199984 - width: 696.60004 - height: 58.399967 + x: -317.1 + y: -190 + width: 634.2 + height: 380 m_MinimalGUI: 1 - m_defaultScale: 0.99999994 - m_LastWindowPixelSize: {x: 870.75, y: 99.249954} + m_defaultScale: 1 + m_LastWindowPixelSize: {x: 792.75, y: 501.25} m_ClearInEditMode: 1 m_NoCameraWarning: 1 m_LowResolutionForAspectRatios: 00000000000000000000 @@ -629,8 +629,8 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 73.6 - width: 696.6 - height: 601.4 + width: 634.2 + height: 279.8 m_ViewDataDictionary: {fileID: 0} m_OverlayCanvas: m_LastAppliedPresetName: Default @@ -641,7 +641,7 @@ MonoBehaviour: collapsed: 0 displayed: 1 snapOffset: {x: 0, y: 0} - snapOffsetDelta: {x: -100, y: -25.599976} + snapOffsetDelta: {x: -100, y: -25.600006} snapCorner: 3 id: Tool Settings index: 0 @@ -854,9 +854,9 @@ MonoBehaviour: m_PlayAudio: 0 m_AudioPlay: 0 m_Position: - m_Target: {x: -2.27013, y: -0.4219437, z: 1.007452} + m_Target: {x: 8.581671, y: 1.2368927, z: 0.09554357} speed: 2 - m_Value: {x: -2.27013, y: -0.4219437, z: 1.007452} + m_Value: {x: 8.581671, y: 1.2368927, z: 0.09554357} m_RenderMode: 0 m_CameraMode: drawMode: 0 @@ -907,9 +907,9 @@ MonoBehaviour: speed: 2 m_Value: {x: 0, y: 0, z: 0, w: 1} m_Size: - m_Target: 6.943548 + m_Target: 9.847269 speed: 2 - m_Value: 6.943548 + m_Value: 9.847269 m_Ortho: m_Target: 1 speed: 2 diff --git a/UserSettings/Search.settings b/UserSettings/Search.settings new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/UserSettings/Search.settings @@ -0,0 +1 @@ +{} \ No newline at end of file