4641 lines
214 KiB
Plaintext
4641 lines
214 KiB
Plaintext
|
|
// Made with Amplify Shader Editor v1.9.9.3
|
||
|
|
// Available at the Unity Asset Store - http://u3d.as/y3X
|
||
|
|
Shader "ASE/ASE_StandartBlend"
|
||
|
|
{
|
||
|
|
Properties
|
||
|
|
{
|
||
|
|
[HideInInspector] _AlphaCutoff("Alpha Cutoff ", Range(0, 1)) = 0.5
|
||
|
|
_BlendContrast( "BlendContrast", Float ) = 1
|
||
|
|
_AlbedoMapArray( "AlbedoMapArray", 2DArray ) = "white" {}
|
||
|
|
_MetallicMapArray( "MetallicMapArray", 2DArray ) = "white" {}
|
||
|
|
_HeightMapBase( "HeightMapBase", 2D ) = "white" {}
|
||
|
|
_ParalaxOffsetBase( "ParalaxOffsetBase", Float ) = 0.001
|
||
|
|
_PrlxRefPlaneBase( "PrlxRefPlaneBase", Range( 0, 1 ) ) = 0.001
|
||
|
|
_NormalMapBase( "NormalMapBase", 2D ) = "bump" {}
|
||
|
|
_NormalMapDepthBase( "NormalMapDepthBase", Float ) = 1
|
||
|
|
_TillingBase( "TillingBase", Float ) = 1
|
||
|
|
_AlbedoColorBase( "AlbedoColorBase", Color ) = ( 1, 1, 1, 1 )
|
||
|
|
_SmoothnessBase( "SmoothnessBase", Float ) = 1
|
||
|
|
_MetallicBase( "MetallicBase", Float ) = 1
|
||
|
|
_MetalicBrightnesBase( "MetalicBrightnesBase", Range( 0, 1 ) ) = 0
|
||
|
|
_HeightMap1( "HeightMap1", 2D ) = "white" {}
|
||
|
|
_ParalaxOffset1( "ParalaxOffset1", Float ) = 0.001
|
||
|
|
_PrlxRefPlane1( "PrlxRefPlane1", Range( 0, 1 ) ) = 0.001
|
||
|
|
_Height1( "Height1", Float ) = 2
|
||
|
|
_NormalMap1( "NormalMap1", 2D ) = "bump" {}
|
||
|
|
_NormalMapDepth1( "NormalMapDepth1", Float ) = 1
|
||
|
|
_Tilling1( "Tilling1", Float ) = 1
|
||
|
|
_AlbedoColor1( "AlbedoColor1", Color ) = ( 1, 1, 1, 1 )
|
||
|
|
_Smoothness1( "Smoothness1", Float ) = 1
|
||
|
|
_Metallic1( "Metallic1", Float ) = 1
|
||
|
|
_MetalicBrightnes1( "MetalicBrightnes1", Range( 0, 1 ) ) = 0
|
||
|
|
_HeightMap2( "HeightMap2", 2D ) = "white" {}
|
||
|
|
_ParalaxOffset2( "ParalaxOffset2", Float ) = 0.001
|
||
|
|
_PrlxRefPlane2( "PrlxRefPlane2", Range( 0, 1 ) ) = 0.001
|
||
|
|
_Height2( "Height2", Float ) = 2
|
||
|
|
_NormalMap2( "NormalMap2", 2D ) = "bump" {}
|
||
|
|
_NormalMapDepth2( "NormalMapDepth2", Float ) = 1
|
||
|
|
_Tilling2( "Tilling2", Float ) = 1
|
||
|
|
_AlbedoColor2( "AlbedoColor2", Color ) = ( 1, 1, 1, 1 )
|
||
|
|
_Smoothness2( "Smoothness2", Float ) = 1
|
||
|
|
_Metallic2( "Metallic2", Float ) = 1
|
||
|
|
_MetalicBrightnes2( "MetalicBrightnes2", Range( 0, 1 ) ) = 0
|
||
|
|
_HeightMap3( "HeightMap3", 2D ) = "white" {}
|
||
|
|
_ParalaxOffset3( "ParalaxOffset3", Float ) = 0.001
|
||
|
|
_PrlxRefPlane3( "PrlxRefPlane3", Range( 0, 1 ) ) = 0.001
|
||
|
|
_Height3( "Height3", Float ) = 2
|
||
|
|
_NormalMap3( "NormalMap3", 2D ) = "bump" {}
|
||
|
|
_NormalMapDepth3( "NormalMapDepth3", Float ) = 1
|
||
|
|
_Tilling3( "Tilling3", Float ) = 1
|
||
|
|
_AlbedoColor3( "AlbedoColor3", Color ) = ( 1, 1, 1, 1 )
|
||
|
|
_Smoothness3( "Smoothness3", Float ) = 1
|
||
|
|
_Metallic3( "Metallic3", Float ) = 1
|
||
|
|
_MetalicBrightnes3( "MetalicBrightnes3", Range( 0, 1 ) ) = 0
|
||
|
|
_EmissionColor( "EmissionColor", Color ) = ( 0, 0, 0, 0 )
|
||
|
|
_EmissionMultiplayer( "EmissionMultiplayer", Float ) = 0
|
||
|
|
|
||
|
|
|
||
|
|
//_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
|
||
|
|
|
||
|
|
//_InstancedTerrainNormals("Instanced Terrain Normals", Float) = 1.0
|
||
|
|
|
||
|
|
[ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
|
||
|
|
[ToggleOff] _EnvironmentReflections("Environment Reflections", Float) = 1.0
|
||
|
|
[ToggleUI] _ReceiveShadows("Receive Shadows", Float) = 1.0
|
||
|
|
|
||
|
|
[HideInInspector] _QueueOffset("_QueueOffset", Float) = 0
|
||
|
|
[HideInInspector] _QueueControl("_QueueControl", Float) = -1
|
||
|
|
|
||
|
|
[HideInInspector][NoScaleOffset] unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {}
|
||
|
|
[HideInInspector][NoScaleOffset] unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {}
|
||
|
|
[HideInInspector][NoScaleOffset] unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {}
|
||
|
|
}
|
||
|
|
|
||
|
|
SubShader
|
||
|
|
{
|
||
|
|
LOD 0
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
Tags { "RenderPipeline"="UniversalPipeline" "RenderType"="Opaque" "Queue"="Geometry" "UniversalMaterialType"="Lit" }
|
||
|
|
|
||
|
|
Cull Back
|
||
|
|
ZWrite On
|
||
|
|
ZTest LEqual
|
||
|
|
Offset 0 , 0
|
||
|
|
AlphaToMask Off
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
HLSLINCLUDE
|
||
|
|
#pragma target 4.5
|
||
|
|
#pragma prefer_hlslcc gles
|
||
|
|
// ensure rendering platforms toggle list is visible
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Filtering.hlsl"
|
||
|
|
|
||
|
|
#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
|
||
|
|
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
|
||
|
|
Name "Forward"
|
||
|
|
Tags { "LightMode"="UniversalForward" }
|
||
|
|
|
||
|
|
Blend One Zero, One Zero
|
||
|
|
ZWrite On
|
||
|
|
ZTest LEqual
|
||
|
|
Offset 0 , 0
|
||
|
|
ColorMask RGBA
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
#define ASE_GEOMETRY 1
|
||
|
|
#pragma multi_compile_local_fragment _ALPHATEST_ON
|
||
|
|
#define _NORMAL_DROPOFF_TS 1
|
||
|
|
#pragma shader_feature_local_fragment _RECEIVE_SHADOWS_OFF
|
||
|
|
#pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
|
||
|
|
#pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
|
||
|
|
#pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
|
||
|
|
#pragma multi_compile_instancing
|
||
|
|
#pragma instancing_options renderinglayer
|
||
|
|
#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE
|
||
|
|
#pragma multi_compile_fog
|
||
|
|
#define ASE_FOG 1
|
||
|
|
#pragma multi_compile_fragment _ DEBUG_DISPLAY
|
||
|
|
#define _EMISSION
|
||
|
|
#define _NORMALMAP 1
|
||
|
|
#define ASE_VERSION 19903
|
||
|
|
#define ASE_SRP_VERSION 120115
|
||
|
|
|
||
|
|
#pragma multi_compile _ DOTS_INSTANCING_ON
|
||
|
|
|
||
|
|
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
|
||
|
|
#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
|
||
|
|
#pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
|
||
|
|
#pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING
|
||
|
|
#pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION
|
||
|
|
#pragma multi_compile_fragment _ _SHADOWS_SOFT
|
||
|
|
#pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3
|
||
|
|
#pragma multi_compile_fragment _ _LIGHT_LAYERS
|
||
|
|
#pragma multi_compile_fragment _ _LIGHT_COOKIES
|
||
|
|
#pragma multi_compile _ _CLUSTERED_RENDERING
|
||
|
|
|
||
|
|
#pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
|
||
|
|
#pragma multi_compile _ SHADOWS_SHADOWMASK
|
||
|
|
#pragma multi_compile _ DIRLIGHTMAP_COMBINED
|
||
|
|
#pragma multi_compile _ LIGHTMAP_ON
|
||
|
|
#pragma multi_compile _ DYNAMICLIGHTMAP_ON
|
||
|
|
|
||
|
|
#pragma vertex vert
|
||
|
|
#pragma fragment frag
|
||
|
|
|
||
|
|
#if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE)
|
||
|
|
#define _SPECULAR_COLOR 1
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define SHADERPASS SHADERPASS_FORWARD
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.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/Input.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
||
|
|
|
||
|
|
#if defined(UNITY_INSTANCING_ENABLED) && ( defined(_TERRAIN_INSTANCED_PERPIXEL_NORMAL) || defined(_INSTANCEDTERRAINNORMALS_PIXEL) )
|
||
|
|
#define ENABLE_TERRAIN_PERPIXEL_NORMAL
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define ASE_NEEDS_FRAG_COLOR
|
||
|
|
#define ASE_NEEDS_TEXTURE_COORDINATES0
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_VIEW_DIR
|
||
|
|
#define ASE_NEEDS_WORLD_NORMAL
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_NORMAL
|
||
|
|
#define ASE_NEEDS_WORLD_POSITION
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_POSITION
|
||
|
|
#define ASE_NEEDS_WORLD_TANGENT
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_TANGENT
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_BITANGENT
|
||
|
|
|
||
|
|
|
||
|
|
#if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45)
|
||
|
|
#define ASE_SV_DEPTH SV_DepthLessEqual
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid
|
||
|
|
#else
|
||
|
|
#define ASE_SV_DEPTH SV_Depth
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS
|
||
|
|
#endif
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float4 positionOS : POSITION;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
float4 texcoord : TEXCOORD0;
|
||
|
|
#if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1)
|
||
|
|
float4 texcoord1 : TEXCOORD1;
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2)
|
||
|
|
float4 texcoord2 : TEXCOORD2;
|
||
|
|
#endif
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct PackedVaryings
|
||
|
|
{
|
||
|
|
ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION;
|
||
|
|
float3 positionWS : TEXCOORD0;
|
||
|
|
half3 normalWS : TEXCOORD1;
|
||
|
|
float4 tangentWS : TEXCOORD2; // holds terrainUV ifdef ENABLE_TERRAIN_PERPIXEL_NORMAL
|
||
|
|
float4 lightmapUVOrVertexSH : TEXCOORD3;
|
||
|
|
#if defined(ASE_FOG) || defined(_ADDITIONAL_LIGHTS_VERTEX)
|
||
|
|
half4 fogFactorAndVertexLight : TEXCOORD4;
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
||
|
|
float2 dynamicLightmapUV : TEXCOORD5;
|
||
|
|
#endif
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
float4 ase_texcoord6 : TEXCOORD6;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
CBUFFER_START(UnityPerMaterial)
|
||
|
|
float4 _AlbedoColorBase;
|
||
|
|
float4 _AlbedoColor1;
|
||
|
|
float4 _EmissionColor;
|
||
|
|
float4 _HeightMapBase_ST;
|
||
|
|
float4 _HeightMap3_ST;
|
||
|
|
float4 _AlbedoColor2;
|
||
|
|
float4 _HeightMap2_ST;
|
||
|
|
float4 _AlbedoColor3;
|
||
|
|
float4 _HeightMap1_ST;
|
||
|
|
float _MetalicBrightnes2;
|
||
|
|
float _Metallic2;
|
||
|
|
float _MetalicBrightnes3;
|
||
|
|
float _Metallic1;
|
||
|
|
float _MetalicBrightnesBase;
|
||
|
|
float _MetallicBase;
|
||
|
|
float _SmoothnessBase;
|
||
|
|
float _NormalMapDepth3;
|
||
|
|
float _NormalMapDepth2;
|
||
|
|
float _NormalMapDepth1;
|
||
|
|
float _Smoothness1;
|
||
|
|
float _Smoothness2;
|
||
|
|
float _Smoothness3;
|
||
|
|
float _Metallic3;
|
||
|
|
float _MetalicBrightnes1;
|
||
|
|
float _BlendContrast;
|
||
|
|
float _PrlxRefPlaneBase;
|
||
|
|
float _Height1;
|
||
|
|
float _Tilling1;
|
||
|
|
float _ParalaxOffset1;
|
||
|
|
float _PrlxRefPlane1;
|
||
|
|
float _Height2;
|
||
|
|
float _Tilling2;
|
||
|
|
float _NormalMapDepthBase;
|
||
|
|
float _ParalaxOffset2;
|
||
|
|
float _Height3;
|
||
|
|
float _Tilling3;
|
||
|
|
float _ParalaxOffset3;
|
||
|
|
float _PrlxRefPlane3;
|
||
|
|
float _TillingBase;
|
||
|
|
float _ParalaxOffsetBase;
|
||
|
|
float _PrlxRefPlane2;
|
||
|
|
float _EmissionMultiplayer;
|
||
|
|
#ifdef ASE_TRANSMISSION
|
||
|
|
float _TransmissionShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TRANSLUCENCY
|
||
|
|
float _TransStrength;
|
||
|
|
float _TransNormal;
|
||
|
|
float _TransScattering;
|
||
|
|
float _TransDirect;
|
||
|
|
float _TransAmbient;
|
||
|
|
float _TransShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TESSELLATION
|
||
|
|
float _TessPhongStrength;
|
||
|
|
float _TessValue;
|
||
|
|
float _TessMin;
|
||
|
|
float _TessMax;
|
||
|
|
float _TessEdgeLength;
|
||
|
|
float _TessMaxDisp;
|
||
|
|
#endif
|
||
|
|
CBUFFER_END
|
||
|
|
|
||
|
|
#ifdef SCENEPICKINGPASS
|
||
|
|
float4 _SelectionID;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef SCENESELECTIONPASS
|
||
|
|
int _ObjectId;
|
||
|
|
int _PassValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
sampler2D _HeightMap1;
|
||
|
|
sampler2D _HeightMap2;
|
||
|
|
sampler2D _HeightMap3;
|
||
|
|
TEXTURE2D_ARRAY(_AlbedoMapArray);
|
||
|
|
sampler2D _HeightMapBase;
|
||
|
|
SAMPLER(sampler_AlbedoMapArray);
|
||
|
|
sampler2D _NormalMapBase;
|
||
|
|
sampler2D _NormalMap1;
|
||
|
|
sampler2D _NormalMap2;
|
||
|
|
sampler2D _NormalMap3;
|
||
|
|
TEXTURE2D_ARRAY(_MetallicMapArray);
|
||
|
|
SAMPLER(sampler_MetallicMapArray);
|
||
|
|
|
||
|
|
|
||
|
|
inline float2 POM( sampler2D heightMap, float2 uvs, float2 dx, float2 dy, float3 normalWorld, float3 viewWorld, float3 viewDirTan, int minSamples, int maxSamples, int sidewallSteps, float parallax, float refPlane, float2 tilling, float2 curv, int index )
|
||
|
|
{
|
||
|
|
float3 result = 0;
|
||
|
|
float stepIndex = 0;
|
||
|
|
float numSteps = floor( lerp( (float)maxSamples, (float)minSamples, saturate( dot( normalWorld, viewWorld ) ) ) );
|
||
|
|
float layerHeight = 1.0 / numSteps;
|
||
|
|
float2 plane = parallax * ( viewDirTan.xy / viewDirTan.z );
|
||
|
|
uvs.xy += refPlane * plane;
|
||
|
|
float2 deltaTex = -plane * layerHeight;
|
||
|
|
float2 prevTexOffset = 0;
|
||
|
|
float prevRayZ = 1.0f;
|
||
|
|
float prevHeight = 0.0f;
|
||
|
|
float2 currTexOffset = deltaTex;
|
||
|
|
float currRayZ = 1.0f - layerHeight;
|
||
|
|
float currHeight = 0.0f;
|
||
|
|
float intersection = 0;
|
||
|
|
float2 finalTexOffset = 0;
|
||
|
|
while ( stepIndex < numSteps + 1 )
|
||
|
|
{
|
||
|
|
currHeight = tex2Dgrad( heightMap, uvs + currTexOffset, dx, dy ).r;
|
||
|
|
if ( currHeight > currRayZ )
|
||
|
|
{
|
||
|
|
stepIndex = numSteps + 1;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
stepIndex++;
|
||
|
|
prevTexOffset = currTexOffset;
|
||
|
|
prevRayZ = currRayZ;
|
||
|
|
prevHeight = currHeight;
|
||
|
|
currTexOffset += deltaTex;
|
||
|
|
currRayZ -= layerHeight;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
float sectionSteps = sidewallSteps;
|
||
|
|
float sectionIndex = 0;
|
||
|
|
float newZ = 0;
|
||
|
|
float newHeight = 0;
|
||
|
|
while ( sectionIndex < sectionSteps )
|
||
|
|
{
|
||
|
|
intersection = ( prevHeight - prevRayZ ) / ( prevHeight - currHeight + currRayZ - prevRayZ );
|
||
|
|
finalTexOffset = prevTexOffset + intersection * deltaTex;
|
||
|
|
newZ = prevRayZ - intersection * layerHeight;
|
||
|
|
newHeight = tex2Dgrad( heightMap, uvs + finalTexOffset, dx, dy ).r;
|
||
|
|
if ( newHeight > newZ )
|
||
|
|
{
|
||
|
|
currTexOffset = finalTexOffset;
|
||
|
|
currHeight = newHeight;
|
||
|
|
currRayZ = newZ;
|
||
|
|
deltaTex = intersection * deltaTex;
|
||
|
|
layerHeight = intersection * layerHeight;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
prevTexOffset = finalTexOffset;
|
||
|
|
prevHeight = newHeight;
|
||
|
|
prevRayZ = newZ;
|
||
|
|
deltaTex = ( 1 - intersection ) * deltaTex;
|
||
|
|
layerHeight = ( 1 - intersection ) * layerHeight;
|
||
|
|
}
|
||
|
|
sectionIndex++;
|
||
|
|
}
|
||
|
|
return uvs.xy + finalTexOffset;
|
||
|
|
}
|
||
|
|
|
||
|
|
float4 CalculateContrast( float contrastValue, float4 colorTarget )
|
||
|
|
{
|
||
|
|
float t = 0.5 * ( 1.0 - contrastValue );
|
||
|
|
return mul( float4x4( contrastValue,0,0,t, 0,contrastValue,0,t, 0,0,contrastValue,t, 0,0,0,1 ), colorTarget );
|
||
|
|
}
|
||
|
|
|
||
|
|
PackedVaryings VertexFunction( Attributes input )
|
||
|
|
{
|
||
|
|
PackedVaryings output = (PackedVaryings)0;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||
|
|
|
||
|
|
output.ase_color = input.ase_color;
|
||
|
|
output.ase_texcoord6.xy = input.texcoord.xy;
|
||
|
|
|
||
|
|
//setting value to unused interpolator channels and avoid initialization warnings
|
||
|
|
output.ase_texcoord6.zw = 0;
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
float3 defaultVertexValue = input.positionOS.xyz;
|
||
|
|
#else
|
||
|
|
float3 defaultVertexValue = float3(0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 vertexValue = defaultVertexValue;
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
input.positionOS.xyz = vertexValue;
|
||
|
|
#else
|
||
|
|
input.positionOS.xyz += vertexValue;
|
||
|
|
#endif
|
||
|
|
input.normalOS = input.normalOS;
|
||
|
|
input.tangentOS = input.tangentOS;
|
||
|
|
|
||
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz );
|
||
|
|
VertexNormalInputs normalInput = GetVertexNormalInputs( input.normalOS, input.tangentOS );
|
||
|
|
|
||
|
|
#if defined(LIGHTMAP_ON)
|
||
|
|
OUTPUT_LIGHTMAP_UV(input.texcoord1, unity_LightmapST, output.lightmapUVOrVertexSH.xy);
|
||
|
|
#else
|
||
|
|
OUTPUT_SH(normalInput.normalWS.xyz, output.lightmapUVOrVertexSH.xyz);
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
||
|
|
output.dynamicLightmapUV.xy = input.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(ASE_FOG) || defined(_ADDITIONAL_LIGHTS_VERTEX)
|
||
|
|
output.fogFactorAndVertexLight = 0;
|
||
|
|
#if defined(ASE_FOG) && !defined(_FOG_FRAGMENT)
|
||
|
|
output.fogFactorAndVertexLight.x = ComputeFogFactor(vertexInput.positionCS.z);
|
||
|
|
#endif
|
||
|
|
#ifdef _ADDITIONAL_LIGHTS_VERTEX
|
||
|
|
half3 vertexLight = VertexLighting( vertexInput.positionWS, normalInput.normalWS );
|
||
|
|
output.fogFactorAndVertexLight.yzw = vertexLight;
|
||
|
|
#endif
|
||
|
|
#endif
|
||
|
|
|
||
|
|
output.positionCS = vertexInput.positionCS;
|
||
|
|
output.positionWS = vertexInput.positionWS;
|
||
|
|
output.normalWS = normalInput.normalWS;
|
||
|
|
output.tangentWS = float4( normalInput.tangentWS, ( input.tangentOS.w > 0.0 ? 1.0 : -1.0 ) * GetOddNegativeScale() );
|
||
|
|
|
||
|
|
#if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL )
|
||
|
|
output.tangentWS.zw = input.texcoord.xy;
|
||
|
|
output.tangentWS.xy = input.texcoord.xy * unity_LightmapST.xy + unity_LightmapST.zw;
|
||
|
|
#endif
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if defined(ASE_TESSELLATION)
|
||
|
|
struct VertexControl
|
||
|
|
{
|
||
|
|
float4 positionOS : INTERNALTESSPOS;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
float4 texcoord : TEXCOORD0;
|
||
|
|
#if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1)
|
||
|
|
float4 texcoord1 : TEXCOORD1;
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2)
|
||
|
|
float4 texcoord2 : TEXCOORD2;
|
||
|
|
#endif
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct TessellationFactors
|
||
|
|
{
|
||
|
|
float edge[3] : SV_TessFactor;
|
||
|
|
float inside : SV_InsideTessFactor;
|
||
|
|
};
|
||
|
|
|
||
|
|
VertexControl vert ( Attributes input )
|
||
|
|
{
|
||
|
|
VertexControl output;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
output.positionOS = input.positionOS;
|
||
|
|
output.normalOS = input.normalOS;
|
||
|
|
output.tangentOS = input.tangentOS;
|
||
|
|
output.texcoord = input.texcoord;
|
||
|
|
#if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1)
|
||
|
|
output.texcoord1 = input.texcoord1;
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2)
|
||
|
|
output.texcoord2 = input.texcoord2;
|
||
|
|
#endif
|
||
|
|
output.ase_color = input.ase_color;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> input)
|
||
|
|
{
|
||
|
|
TessellationFactors output;
|
||
|
|
float4 tf = 1;
|
||
|
|
float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
|
||
|
|
float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
|
||
|
|
#if defined(ASE_FIXED_TESSELLATION)
|
||
|
|
tf = FixedTess( tessValue );
|
||
|
|
#elif defined(ASE_DISTANCE_TESSELLATION)
|
||
|
|
tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
|
||
|
|
#elif defined(ASE_LENGTH_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
|
||
|
|
#elif defined(ASE_LENGTH_CULL_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
|
||
|
|
#endif
|
||
|
|
output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
[partitioning("fractional_odd")]
|
||
|
|
[outputtopology("triangle_cw")]
|
||
|
|
[patchconstantfunc("TessellationFunction")]
|
||
|
|
[outputcontrolpoints(3)]
|
||
|
|
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
|
||
|
|
{
|
||
|
|
return patch[id];
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
|
||
|
|
{
|
||
|
|
Attributes output = (Attributes) 0;
|
||
|
|
output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z;
|
||
|
|
output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z;
|
||
|
|
output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z;
|
||
|
|
output.texcoord = patch[0].texcoord * bary.x + patch[1].texcoord * bary.y + patch[2].texcoord * bary.z;
|
||
|
|
#if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1)
|
||
|
|
output.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z;
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2)
|
||
|
|
output.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z;
|
||
|
|
#endif
|
||
|
|
output.ase_color = patch[0].ase_color * bary.x + patch[1].ase_color * bary.y + patch[2].ase_color * bary.z;
|
||
|
|
#if defined(ASE_PHONG_TESSELLATION)
|
||
|
|
float3 pp[3];
|
||
|
|
for (int i = 0; i < 3; ++i)
|
||
|
|
pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS));
|
||
|
|
float phongStrength = _TessPhongStrength;
|
||
|
|
output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz;
|
||
|
|
#endif
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(patch[0], output);
|
||
|
|
return VertexFunction(output);
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
PackedVaryings vert ( Attributes input )
|
||
|
|
{
|
||
|
|
return VertexFunction( input );
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
half4 frag ( PackedVaryings input
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
,out float outputDepth : ASE_SV_DEPTH
|
||
|
|
#endif
|
||
|
|
) : SV_Target
|
||
|
|
{
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
|
||
|
|
|
||
|
|
#if defined( _SURFACE_TYPE_TRANSPARENT )
|
||
|
|
const bool isTransparent = true;
|
||
|
|
#else
|
||
|
|
const bool isTransparent = false;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(LOD_FADE_CROSSFADE)
|
||
|
|
LODDitheringTransition( input.positionCS.xyz, unity_LODFade.x );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(MAIN_LIGHT_CALCULATE_SHADOWS)
|
||
|
|
float4 shadowCoord = TransformWorldToShadowCoord( input.positionWS );
|
||
|
|
#else
|
||
|
|
float4 shadowCoord = float4(0, 0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
// @diogo: mikktspace compliant
|
||
|
|
float renormFactor = 1.0 / max( FLT_MIN, length( input.normalWS ) );
|
||
|
|
|
||
|
|
float3 PositionWS = input.positionWS;
|
||
|
|
float3 PositionRWS = GetCameraRelativePositionWS( PositionWS );
|
||
|
|
float3 ViewDirWS = GetWorldSpaceNormalizeViewDir( PositionWS );
|
||
|
|
float4 ShadowCoord = shadowCoord;
|
||
|
|
float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw );
|
||
|
|
float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w;
|
||
|
|
float4 ScreenPos = ComputeScreenPos( ClipPos );
|
||
|
|
float3 TangentWS = input.tangentWS.xyz * renormFactor;
|
||
|
|
float3 BitangentWS = cross( input.normalWS, input.tangentWS.xyz ) * input.tangentWS.w * renormFactor;
|
||
|
|
float3 NormalWS = input.normalWS * renormFactor;
|
||
|
|
|
||
|
|
#if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL )
|
||
|
|
float2 sampleCoords = (input.tangentWS.zw / _TerrainHeightmapRecipSize.zw + 0.5f) * _TerrainHeightmapRecipSize.xy;
|
||
|
|
NormalWS = TransformObjectToWorldNormal(normalize(SAMPLE_TEXTURE2D(_TerrainNormalmapTexture, sampler_TerrainNormalmapTexture, sampleCoords).rgb * 2 - 1));
|
||
|
|
TangentWS = -cross(GetObjectToWorldMatrix()._13_23_33, NormalWS);
|
||
|
|
BitangentWS = cross(NormalWS, -TangentWS);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float4 clampResult178 = clamp( input.ase_color , float4( 0,0,0,0 ) , float4( 1,1,1,0 ) );
|
||
|
|
float4 break170 = clampResult178;
|
||
|
|
float3 appendResult169 = (float3(break170.r , break170.g , break170.b));
|
||
|
|
float4 break166 = ( 2.0 * ( ( 1.0 - input.ase_color ) * input.ase_color ) );
|
||
|
|
float2 texCoord17 = input.ase_texcoord6.xy * float2( 1,1 ) + float2( 0,0 );
|
||
|
|
float fresnelNdotV288 = dot( NormalWS, ViewDirWS );
|
||
|
|
float fresnelNode288 = ( 0.0 + 1.0 * pow( 1.0 - fresnelNdotV288, 10.17 ) );
|
||
|
|
float clampResult296 = clamp( fresnelNode288 , 0.0 , 1.0 );
|
||
|
|
float temp_output_291_0 = ( 1.0 - clampResult296 );
|
||
|
|
float3 tanToWorld0 = float3( TangentWS.x, BitangentWS.x, NormalWS.x );
|
||
|
|
float3 tanToWorld1 = float3( TangentWS.y, BitangentWS.y, NormalWS.y );
|
||
|
|
float3 tanToWorld2 = float3( TangentWS.z, BitangentWS.z, NormalWS.z );
|
||
|
|
float3 ase_viewVectorTS = tanToWorld0 * ( _WorldSpaceCameraPos.xyz - PositionWS ).x + tanToWorld1 * ( _WorldSpaceCameraPos.xyz - PositionWS ).y + tanToWorld2 * ( _WorldSpaceCameraPos.xyz - PositionWS ).z;
|
||
|
|
float3 ase_viewDirTS = normalize( ase_viewVectorTS );
|
||
|
|
float2 OffsetPOM98 = POM( _HeightMap1, ( texCoord17 * _Tilling1 ), ddx( ( texCoord17 * _Tilling1 ) ), ddy( ( texCoord17 * _Tilling1 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset1 ) * temp_output_291_0 ), _PrlxRefPlane1, _HeightMap1_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult134 = lerp( 0.0 , break166.r , CalculateContrast(_BlendContrast,( _Height1 + tex2D( _HeightMap1, OffsetPOM98 ) )).r);
|
||
|
|
float2 OffsetPOM115 = POM( _HeightMap2, ( texCoord17 * _Tilling2 ), ddx( ( texCoord17 * _Tilling2 ) ), ddy( ( texCoord17 * _Tilling2 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset2 ) * temp_output_291_0 ), _PrlxRefPlane2, _HeightMap2_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult135 = lerp( 0.0 , break166.g , CalculateContrast(_BlendContrast,( _Height2 + tex2D( _HeightMap2, OffsetPOM115 ) )).r);
|
||
|
|
float2 OffsetPOM257 = POM( _HeightMap3, ( texCoord17 * _Tilling3 ), ddx( ( texCoord17 * _Tilling3 ) ), ddy( ( texCoord17 * _Tilling3 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset3 ) * temp_output_291_0 ), _PrlxRefPlane3, _HeightMap3_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult151 = lerp( 0.0 , break166.b , CalculateContrast(_BlendContrast,( _Height3 + tex2D( _HeightMap3, OffsetPOM257 ) )).r);
|
||
|
|
float3 appendResult129 = (float3(lerpResult134 , lerpResult135 , lerpResult151));
|
||
|
|
float3 clampResult182 = clamp( appendResult129 , float3( 0,0,0 ) , float3( 1,1,1 ) );
|
||
|
|
float3 temp_output_167_0 = ( appendResult169 + clampResult182 );
|
||
|
|
float3 clampResult190 = clamp( temp_output_167_0 , float3( 0,0,0 ) , float3( 1,1,1 ) );
|
||
|
|
float2 OffsetPOM261 = POM( _HeightMapBase, ( texCoord17 * _TillingBase ), ddx( ( texCoord17 * _TillingBase ) ), ddy( ( texCoord17 * _TillingBase ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffsetBase ) * temp_output_291_0 ), _PrlxRefPlaneBase, _HeightMapBase_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float2 temp_output_262_0 = ( OffsetPOM261 * 1.0 );
|
||
|
|
float2 temp_output_239_0 = ( OffsetPOM98 * 1.0 );
|
||
|
|
float2 temp_output_243_0 = ( OffsetPOM115 * 1.0 );
|
||
|
|
float2 temp_output_246_0 = ( OffsetPOM257 * 1.0 );
|
||
|
|
float3 layeredBlendVar132 = clampResult190;
|
||
|
|
float4 layeredBlend132 = ( lerp( lerp( lerp( ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_262_0,0.0 ) * _AlbedoColorBase ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_239_0,1.0 ) * _AlbedoColor1 ) , layeredBlendVar132.x ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_243_0,2.0 ) * _AlbedoColor2 ) , layeredBlendVar132.y ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_246_0,3.0 ) * _AlbedoColor3 ) , layeredBlendVar132.z ) );
|
||
|
|
|
||
|
|
float3 unpack13 = UnpackNormalScale( tex2D( _NormalMapBase, temp_output_262_0 ), _NormalMapDepthBase );
|
||
|
|
unpack13.z = lerp( 1, unpack13.z, saturate(_NormalMapDepthBase) );
|
||
|
|
float3 unpack111 = UnpackNormalScale( tex2D( _NormalMap1, temp_output_239_0 ), _NormalMapDepth1 );
|
||
|
|
unpack111.z = lerp( 1, unpack111.z, saturate(_NormalMapDepth1) );
|
||
|
|
float3 unpack171 = UnpackNormalScale( tex2D( _NormalMap2, temp_output_243_0 ), _NormalMapDepth2 );
|
||
|
|
unpack171.z = lerp( 1, unpack171.z, saturate(_NormalMapDepth2) );
|
||
|
|
float3 unpack172 = UnpackNormalScale( tex2D( _NormalMap3, temp_output_246_0 ), _NormalMapDepth3 );
|
||
|
|
unpack172.z = lerp( 1, unpack172.z, saturate(_NormalMapDepth3) );
|
||
|
|
float3 layeredBlendVar173 = temp_output_167_0;
|
||
|
|
float3 layeredBlend173 = ( lerp( lerp( lerp( unpack13 , unpack111 , layeredBlendVar173.x ) , unpack171 , layeredBlendVar173.y ) , unpack172 , layeredBlendVar173.z ) );
|
||
|
|
|
||
|
|
float4 tex2DArrayNode253 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_262_0,0.0 );
|
||
|
|
float lerpResult223 = lerp( tex2DArrayNode253.r , 1.0 , _MetalicBrightnesBase);
|
||
|
|
float4 tex2DArrayNode254 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_239_0,0.0 );
|
||
|
|
float lerpResult93 = lerp( tex2DArrayNode254.r , 1.0 , _MetalicBrightnes1);
|
||
|
|
float4 tex2DArrayNode255 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_243_0,0.0 );
|
||
|
|
float lerpResult206 = lerp( tex2DArrayNode255.r , 1.0 , _MetalicBrightnes2);
|
||
|
|
float4 tex2DArrayNode256 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_246_0,0.0 );
|
||
|
|
float lerpResult214 = lerp( tex2DArrayNode256.r , 1.0 , _MetalicBrightnes3);
|
||
|
|
float3 layeredBlendVar220 = temp_output_167_0;
|
||
|
|
float layeredBlend220 = ( lerp( lerp( lerp( ( _MetallicBase * lerpResult223 ) , ( _Metallic1 * lerpResult93 ) , layeredBlendVar220.x ) , ( _Metallic2 * lerpResult206 ) , layeredBlendVar220.y ) , ( _Metallic3 * lerpResult214 ) , layeredBlendVar220.z ) );
|
||
|
|
|
||
|
|
float3 layeredBlendVar229 = temp_output_167_0;
|
||
|
|
float layeredBlend229 = ( lerp( lerp( lerp( ( tex2DArrayNode253.a * _SmoothnessBase ) , ( tex2DArrayNode254.a * _Smoothness1 ) , layeredBlendVar229.x ) , ( tex2DArrayNode255.a * _Smoothness2 ) , layeredBlendVar229.y ) , ( tex2DArrayNode256.a * _Smoothness3 ) , layeredBlendVar229.z ) );
|
||
|
|
float clampResult251 = clamp( ( layeredBlend229 + 0.0 ) , 0.0 , 1.0 );
|
||
|
|
|
||
|
|
|
||
|
|
float3 BaseColor = layeredBlend132.rgb;
|
||
|
|
float3 Normal = layeredBlend173;
|
||
|
|
float3 Specular = 0.5;
|
||
|
|
float Metallic = layeredBlend220;
|
||
|
|
float Smoothness = clampResult251;
|
||
|
|
float Occlusion = 1;
|
||
|
|
float3 Emission = ( _EmissionColor * ( _EmissionMultiplayer * layeredBlend132 ) ).rgb;
|
||
|
|
float Alpha = 1;
|
||
|
|
float AlphaClipThreshold = 0.5;
|
||
|
|
float AlphaClipThresholdShadow = 0.5;
|
||
|
|
float3 BakedGI = 0;
|
||
|
|
float3 RefractionColor = 1;
|
||
|
|
float RefractionIndex = 1;
|
||
|
|
float3 Transmission = 1;
|
||
|
|
float3 Translucency = 1;
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
float DeviceDepth = ClipPos.z;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef _CLEARCOAT
|
||
|
|
float CoatMask = 0;
|
||
|
|
float CoatSmoothness = 0;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( _ALPHATEST_ON )
|
||
|
|
AlphaDiscard( Alpha, AlphaClipThreshold );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_CHANGES_WORLD_POS)
|
||
|
|
ShadowCoord = TransformWorldToShadowCoord( PositionWS );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
InputData inputData = (InputData)0;
|
||
|
|
inputData.positionWS = PositionWS;
|
||
|
|
inputData.positionCS = float4( input.positionCS.xy, ClipPos.zw / ClipPos.w );
|
||
|
|
inputData.normalizedScreenSpaceUV = ScreenPosNorm.xy;
|
||
|
|
inputData.viewDirectionWS = ViewDirWS;
|
||
|
|
inputData.shadowCoord = ShadowCoord;
|
||
|
|
|
||
|
|
#ifdef _NORMALMAP
|
||
|
|
#if _NORMAL_DROPOFF_TS
|
||
|
|
inputData.normalWS = TransformTangentToWorld(Normal, half3x3(TangentWS, BitangentWS, NormalWS));
|
||
|
|
#elif _NORMAL_DROPOFF_OS
|
||
|
|
inputData.normalWS = TransformObjectToWorldNormal(Normal);
|
||
|
|
#elif _NORMAL_DROPOFF_WS
|
||
|
|
inputData.normalWS = Normal;
|
||
|
|
#endif
|
||
|
|
inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS);
|
||
|
|
#else
|
||
|
|
inputData.normalWS = NormalWS;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef ASE_FOG
|
||
|
|
inputData.fogCoord = InitializeInputDataFog(float4(inputData.positionWS, 1.0), input.fogFactorAndVertexLight.x);
|
||
|
|
#endif
|
||
|
|
#ifdef _ADDITIONAL_LIGHTS_VERTEX
|
||
|
|
inputData.vertexLighting = input.fogFactorAndVertexLight.yzw;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL )
|
||
|
|
float3 SH = SampleSH(inputData.normalWS.xyz);
|
||
|
|
#else
|
||
|
|
float3 SH = input.lightmapUVOrVertexSH.xyz;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
||
|
|
inputData.bakedGI = SAMPLE_GI(input.lightmapUVOrVertexSH.xy, input.dynamicLightmapUV.xy, SH, inputData.normalWS);
|
||
|
|
#else
|
||
|
|
inputData.bakedGI = SAMPLE_GI(input.lightmapUVOrVertexSH.xy, SH, inputData.normalWS);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef ASE_BAKEDGI
|
||
|
|
inputData.bakedGI = BakedGI;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
inputData.shadowMask = SAMPLE_SHADOWMASK(input.lightmapUVOrVertexSH.xy);
|
||
|
|
|
||
|
|
#if defined(DEBUG_DISPLAY)
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
||
|
|
inputData.dynamicLightmapUV = input.dynamicLightmapUV.xy;
|
||
|
|
#endif
|
||
|
|
#if defined(LIGHTMAP_ON)
|
||
|
|
inputData.staticLightmapUV = input.lightmapUVOrVertexSH.xy;
|
||
|
|
#else
|
||
|
|
inputData.vertexSH = SH;
|
||
|
|
#endif
|
||
|
|
#endif
|
||
|
|
|
||
|
|
SurfaceData surfaceData;
|
||
|
|
surfaceData.albedo = BaseColor;
|
||
|
|
surfaceData.metallic = saturate(Metallic);
|
||
|
|
surfaceData.specular = Specular;
|
||
|
|
surfaceData.smoothness = saturate(Smoothness),
|
||
|
|
surfaceData.occlusion = Occlusion,
|
||
|
|
surfaceData.emission = Emission,
|
||
|
|
surfaceData.alpha = saturate(Alpha);
|
||
|
|
surfaceData.normalTS = Normal;
|
||
|
|
surfaceData.clearCoatMask = 0;
|
||
|
|
surfaceData.clearCoatSmoothness = 1;
|
||
|
|
|
||
|
|
#ifdef _CLEARCOAT
|
||
|
|
surfaceData.clearCoatMask = saturate(CoatMask);
|
||
|
|
surfaceData.clearCoatSmoothness = saturate(CoatSmoothness);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(_DBUFFER)
|
||
|
|
ApplyDecalToSurfaceData(input.positionCS, surfaceData, inputData);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef ASE_LIGHTING_SIMPLE
|
||
|
|
half4 color = UniversalFragmentBlinnPhong( inputData, surfaceData);
|
||
|
|
#else
|
||
|
|
half4 color = UniversalFragmentPBR( inputData, surfaceData);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef ASE_TRANSMISSION
|
||
|
|
{
|
||
|
|
float shadow = _TransmissionShadow;
|
||
|
|
|
||
|
|
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 += BaseColor * mainTransmission;
|
||
|
|
|
||
|
|
#ifdef _ADDITIONAL_LIGHTS
|
||
|
|
int transPixelLightCount = GetAdditionalLightsCount();
|
||
|
|
for (int i = 0; i < transPixelLightCount; ++i)
|
||
|
|
{
|
||
|
|
Light light = GetAdditionalLight(i, inputData.positionWS, inputData.shadowMask);
|
||
|
|
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 += BaseColor * transmission;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef ASE_TRANSLUCENCY
|
||
|
|
{
|
||
|
|
float shadow = _TransShadow;
|
||
|
|
float normal = _TransNormal;
|
||
|
|
float scattering = _TransScattering;
|
||
|
|
float direct = _TransDirect;
|
||
|
|
float ambient = _TransAmbient;
|
||
|
|
float strength = _TransStrength;
|
||
|
|
|
||
|
|
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 += BaseColor * mainTranslucency * strength;
|
||
|
|
|
||
|
|
#ifdef _ADDITIONAL_LIGHTS
|
||
|
|
int transPixelLightCount = GetAdditionalLightsCount();
|
||
|
|
for (int i = 0; i < transPixelLightCount; ++i)
|
||
|
|
{
|
||
|
|
Light light = GetAdditionalLight(i, inputData.positionWS, inputData.shadowMask);
|
||
|
|
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 += BaseColor * translucency * strength;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef ASE_REFRACTION
|
||
|
|
float4 projScreenPos = ScreenPos / ScreenPos.w;
|
||
|
|
float3 refractionOffset = ( RefractionIndex - 1.0 ) * mul( UNITY_MATRIX_V, float4( NormalWS,0 ) ).xyz * ( 1.0 - dot( NormalWS, ViewDirWS ) );
|
||
|
|
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), inputData.fogCoord);
|
||
|
|
#else
|
||
|
|
color.rgb = MixFog(color.rgb, inputData.fogCoord);
|
||
|
|
#endif
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
outputDepth = DeviceDepth;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
return half4( color.rgb, OutputAlpha( color.a, isTransparent ) );
|
||
|
|
}
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
|
||
|
|
Name "ShadowCaster"
|
||
|
|
Tags { "LightMode"="ShadowCaster" }
|
||
|
|
|
||
|
|
ZWrite On
|
||
|
|
ZTest LEqual
|
||
|
|
AlphaToMask Off
|
||
|
|
ColorMask 0
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
#define ASE_GEOMETRY 1
|
||
|
|
#pragma multi_compile_local_fragment _ALPHATEST_ON
|
||
|
|
#define _NORMAL_DROPOFF_TS 1
|
||
|
|
#pragma multi_compile_instancing
|
||
|
|
#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE
|
||
|
|
#define ASE_FOG 1
|
||
|
|
#pragma multi_compile_fragment _ DEBUG_DISPLAY
|
||
|
|
#define _EMISSION
|
||
|
|
#define _NORMALMAP 1
|
||
|
|
#define ASE_VERSION 19903
|
||
|
|
#define ASE_SRP_VERSION 120115
|
||
|
|
|
||
|
|
#pragma multi_compile _ DOTS_INSTANCING_ON
|
||
|
|
|
||
|
|
#pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW
|
||
|
|
|
||
|
|
#pragma vertex vert
|
||
|
|
#pragma fragment frag
|
||
|
|
|
||
|
|
#if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE)
|
||
|
|
#define _SPECULAR_COLOR 1
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define SHADERPASS SHADERPASS_SHADOWCASTER
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.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/Input.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45)
|
||
|
|
#define ASE_SV_DEPTH SV_DepthLessEqual
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid
|
||
|
|
#else
|
||
|
|
#define ASE_SV_DEPTH SV_Depth
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS
|
||
|
|
#endif
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float4 positionOS : POSITION;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct PackedVaryings
|
||
|
|
{
|
||
|
|
ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION;
|
||
|
|
float3 positionWS : TEXCOORD0;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
CBUFFER_START(UnityPerMaterial)
|
||
|
|
float4 _AlbedoColorBase;
|
||
|
|
float4 _AlbedoColor1;
|
||
|
|
float4 _EmissionColor;
|
||
|
|
float4 _HeightMapBase_ST;
|
||
|
|
float4 _HeightMap3_ST;
|
||
|
|
float4 _AlbedoColor2;
|
||
|
|
float4 _HeightMap2_ST;
|
||
|
|
float4 _AlbedoColor3;
|
||
|
|
float4 _HeightMap1_ST;
|
||
|
|
float _MetalicBrightnes2;
|
||
|
|
float _Metallic2;
|
||
|
|
float _MetalicBrightnes3;
|
||
|
|
float _Metallic1;
|
||
|
|
float _MetalicBrightnesBase;
|
||
|
|
float _MetallicBase;
|
||
|
|
float _SmoothnessBase;
|
||
|
|
float _NormalMapDepth3;
|
||
|
|
float _NormalMapDepth2;
|
||
|
|
float _NormalMapDepth1;
|
||
|
|
float _Smoothness1;
|
||
|
|
float _Smoothness2;
|
||
|
|
float _Smoothness3;
|
||
|
|
float _Metallic3;
|
||
|
|
float _MetalicBrightnes1;
|
||
|
|
float _BlendContrast;
|
||
|
|
float _PrlxRefPlaneBase;
|
||
|
|
float _Height1;
|
||
|
|
float _Tilling1;
|
||
|
|
float _ParalaxOffset1;
|
||
|
|
float _PrlxRefPlane1;
|
||
|
|
float _Height2;
|
||
|
|
float _Tilling2;
|
||
|
|
float _NormalMapDepthBase;
|
||
|
|
float _ParalaxOffset2;
|
||
|
|
float _Height3;
|
||
|
|
float _Tilling3;
|
||
|
|
float _ParalaxOffset3;
|
||
|
|
float _PrlxRefPlane3;
|
||
|
|
float _TillingBase;
|
||
|
|
float _ParalaxOffsetBase;
|
||
|
|
float _PrlxRefPlane2;
|
||
|
|
float _EmissionMultiplayer;
|
||
|
|
#ifdef ASE_TRANSMISSION
|
||
|
|
float _TransmissionShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TRANSLUCENCY
|
||
|
|
float _TransStrength;
|
||
|
|
float _TransNormal;
|
||
|
|
float _TransScattering;
|
||
|
|
float _TransDirect;
|
||
|
|
float _TransAmbient;
|
||
|
|
float _TransShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TESSELLATION
|
||
|
|
float _TessPhongStrength;
|
||
|
|
float _TessValue;
|
||
|
|
float _TessMin;
|
||
|
|
float _TessMax;
|
||
|
|
float _TessEdgeLength;
|
||
|
|
float _TessMaxDisp;
|
||
|
|
#endif
|
||
|
|
CBUFFER_END
|
||
|
|
|
||
|
|
#ifdef SCENEPICKINGPASS
|
||
|
|
float4 _SelectionID;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef SCENESELECTIONPASS
|
||
|
|
int _ObjectId;
|
||
|
|
int _PassValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
float3 _LightDirection;
|
||
|
|
float3 _LightPosition;
|
||
|
|
|
||
|
|
|
||
|
|
PackedVaryings VertexFunction( Attributes input )
|
||
|
|
{
|
||
|
|
PackedVaryings output;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( output );
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
float3 defaultVertexValue = input.positionOS.xyz;
|
||
|
|
#else
|
||
|
|
float3 defaultVertexValue = float3(0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 vertexValue = defaultVertexValue;
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
input.positionOS.xyz = vertexValue;
|
||
|
|
#else
|
||
|
|
input.positionOS.xyz += vertexValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
input.normalOS = input.normalOS;
|
||
|
|
input.tangentOS = input.tangentOS;
|
||
|
|
|
||
|
|
float3 positionWS = TransformObjectToWorld( input.positionOS.xyz );
|
||
|
|
float3 normalWS = TransformObjectToWorldDir(input.normalOS);
|
||
|
|
|
||
|
|
#if _CASTING_PUNCTUAL_LIGHT_SHADOW
|
||
|
|
float3 lightDirectionWS = normalize(_LightPosition - positionWS);
|
||
|
|
#else
|
||
|
|
float3 lightDirectionWS = _LightDirection;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float4 positionCS = TransformWorldToHClip(ApplyShadowBias(positionWS, normalWS, lightDirectionWS));
|
||
|
|
|
||
|
|
#if UNITY_REVERSED_Z
|
||
|
|
positionCS.z = min(positionCS.z, UNITY_NEAR_CLIP_VALUE);
|
||
|
|
#else
|
||
|
|
positionCS.z = max(positionCS.z, UNITY_NEAR_CLIP_VALUE);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
output.positionCS = positionCS;
|
||
|
|
output.positionWS = positionWS;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if defined(ASE_TESSELLATION)
|
||
|
|
struct VertexControl
|
||
|
|
{
|
||
|
|
float4 positionOS : INTERNALTESSPOS;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct TessellationFactors
|
||
|
|
{
|
||
|
|
float edge[3] : SV_TessFactor;
|
||
|
|
float inside : SV_InsideTessFactor;
|
||
|
|
};
|
||
|
|
|
||
|
|
VertexControl vert ( Attributes input )
|
||
|
|
{
|
||
|
|
VertexControl output;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
output.positionOS = input.positionOS;
|
||
|
|
output.normalOS = input.normalOS;
|
||
|
|
output.tangentOS = input.tangentOS;
|
||
|
|
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> input)
|
||
|
|
{
|
||
|
|
TessellationFactors output;
|
||
|
|
float4 tf = 1;
|
||
|
|
float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
|
||
|
|
float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
|
||
|
|
#if defined(ASE_FIXED_TESSELLATION)
|
||
|
|
tf = FixedTess( tessValue );
|
||
|
|
#elif defined(ASE_DISTANCE_TESSELLATION)
|
||
|
|
tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
|
||
|
|
#elif defined(ASE_LENGTH_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
|
||
|
|
#elif defined(ASE_LENGTH_CULL_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
|
||
|
|
#endif
|
||
|
|
output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
[partitioning("fractional_odd")]
|
||
|
|
[outputtopology("triangle_cw")]
|
||
|
|
[patchconstantfunc("TessellationFunction")]
|
||
|
|
[outputcontrolpoints(3)]
|
||
|
|
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
|
||
|
|
{
|
||
|
|
return patch[id];
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
|
||
|
|
{
|
||
|
|
Attributes output = (Attributes) 0;
|
||
|
|
output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z;
|
||
|
|
output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z;
|
||
|
|
output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z;
|
||
|
|
|
||
|
|
#if defined(ASE_PHONG_TESSELLATION)
|
||
|
|
float3 pp[3];
|
||
|
|
for (int i = 0; i < 3; ++i)
|
||
|
|
pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS));
|
||
|
|
float phongStrength = _TessPhongStrength;
|
||
|
|
output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz;
|
||
|
|
#endif
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(patch[0], output);
|
||
|
|
return VertexFunction(output);
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
PackedVaryings vert ( Attributes input )
|
||
|
|
{
|
||
|
|
return VertexFunction( input );
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
half4 frag( PackedVaryings input
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
,out float outputDepth : ASE_SV_DEPTH
|
||
|
|
#endif
|
||
|
|
) : SV_Target
|
||
|
|
{
|
||
|
|
UNITY_SETUP_INSTANCE_ID( input );
|
||
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( input );
|
||
|
|
|
||
|
|
#if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
|
||
|
|
float4 shadowCoord = TransformWorldToShadowCoord(input.positionWS);
|
||
|
|
#else
|
||
|
|
float4 shadowCoord = float4(0, 0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 PositionWS = input.positionWS;
|
||
|
|
float3 PositionRWS = GetCameraRelativePositionWS( input.positionWS );
|
||
|
|
float4 ShadowCoord = shadowCoord;
|
||
|
|
float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw );
|
||
|
|
float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w;
|
||
|
|
float4 ScreenPos = ComputeScreenPos( ClipPos );
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
float Alpha = 1;
|
||
|
|
float AlphaClipThreshold = 0.5;
|
||
|
|
float AlphaClipThresholdShadow = 0.5;
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
float DeviceDepth = input.positionCS.z;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( _ALPHATEST_ON )
|
||
|
|
#if defined( _ALPHATEST_SHADOW_ON )
|
||
|
|
AlphaDiscard( Alpha, AlphaClipThresholdShadow );
|
||
|
|
#else
|
||
|
|
AlphaDiscard( Alpha, AlphaClipThreshold );
|
||
|
|
#endif
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(LOD_FADE_CROSSFADE)
|
||
|
|
LODDitheringTransition( input.positionCS.xyz, unity_LODFade.x );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
outputDepth = DeviceDepth;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
|
||
|
|
Name "DepthOnly"
|
||
|
|
Tags { "LightMode"="DepthOnly" }
|
||
|
|
|
||
|
|
ZWrite On
|
||
|
|
ColorMask 0
|
||
|
|
AlphaToMask Off
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
#define ASE_GEOMETRY 1
|
||
|
|
#pragma multi_compile_local_fragment _ALPHATEST_ON
|
||
|
|
#define _NORMAL_DROPOFF_TS 1
|
||
|
|
#pragma multi_compile_instancing
|
||
|
|
#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE
|
||
|
|
#define ASE_FOG 1
|
||
|
|
#pragma multi_compile_fragment _ DEBUG_DISPLAY
|
||
|
|
#define _EMISSION
|
||
|
|
#define _NORMALMAP 1
|
||
|
|
#define ASE_VERSION 19903
|
||
|
|
#define ASE_SRP_VERSION 120115
|
||
|
|
|
||
|
|
#pragma multi_compile _ DOTS_INSTANCING_ON
|
||
|
|
|
||
|
|
#pragma vertex vert
|
||
|
|
#pragma fragment frag
|
||
|
|
|
||
|
|
#if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE)
|
||
|
|
#define _SPECULAR_COLOR 1
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define SHADERPASS SHADERPASS_DEPTHONLY
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.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/Input.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45)
|
||
|
|
#define ASE_SV_DEPTH SV_DepthLessEqual
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid
|
||
|
|
#else
|
||
|
|
#define ASE_SV_DEPTH SV_Depth
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS
|
||
|
|
#endif
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float4 positionOS : POSITION;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct PackedVaryings
|
||
|
|
{
|
||
|
|
ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION;
|
||
|
|
float3 positionWS : TEXCOORD0;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
CBUFFER_START(UnityPerMaterial)
|
||
|
|
float4 _AlbedoColorBase;
|
||
|
|
float4 _AlbedoColor1;
|
||
|
|
float4 _EmissionColor;
|
||
|
|
float4 _HeightMapBase_ST;
|
||
|
|
float4 _HeightMap3_ST;
|
||
|
|
float4 _AlbedoColor2;
|
||
|
|
float4 _HeightMap2_ST;
|
||
|
|
float4 _AlbedoColor3;
|
||
|
|
float4 _HeightMap1_ST;
|
||
|
|
float _MetalicBrightnes2;
|
||
|
|
float _Metallic2;
|
||
|
|
float _MetalicBrightnes3;
|
||
|
|
float _Metallic1;
|
||
|
|
float _MetalicBrightnesBase;
|
||
|
|
float _MetallicBase;
|
||
|
|
float _SmoothnessBase;
|
||
|
|
float _NormalMapDepth3;
|
||
|
|
float _NormalMapDepth2;
|
||
|
|
float _NormalMapDepth1;
|
||
|
|
float _Smoothness1;
|
||
|
|
float _Smoothness2;
|
||
|
|
float _Smoothness3;
|
||
|
|
float _Metallic3;
|
||
|
|
float _MetalicBrightnes1;
|
||
|
|
float _BlendContrast;
|
||
|
|
float _PrlxRefPlaneBase;
|
||
|
|
float _Height1;
|
||
|
|
float _Tilling1;
|
||
|
|
float _ParalaxOffset1;
|
||
|
|
float _PrlxRefPlane1;
|
||
|
|
float _Height2;
|
||
|
|
float _Tilling2;
|
||
|
|
float _NormalMapDepthBase;
|
||
|
|
float _ParalaxOffset2;
|
||
|
|
float _Height3;
|
||
|
|
float _Tilling3;
|
||
|
|
float _ParalaxOffset3;
|
||
|
|
float _PrlxRefPlane3;
|
||
|
|
float _TillingBase;
|
||
|
|
float _ParalaxOffsetBase;
|
||
|
|
float _PrlxRefPlane2;
|
||
|
|
float _EmissionMultiplayer;
|
||
|
|
#ifdef ASE_TRANSMISSION
|
||
|
|
float _TransmissionShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TRANSLUCENCY
|
||
|
|
float _TransStrength;
|
||
|
|
float _TransNormal;
|
||
|
|
float _TransScattering;
|
||
|
|
float _TransDirect;
|
||
|
|
float _TransAmbient;
|
||
|
|
float _TransShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TESSELLATION
|
||
|
|
float _TessPhongStrength;
|
||
|
|
float _TessValue;
|
||
|
|
float _TessMin;
|
||
|
|
float _TessMax;
|
||
|
|
float _TessEdgeLength;
|
||
|
|
float _TessMaxDisp;
|
||
|
|
#endif
|
||
|
|
CBUFFER_END
|
||
|
|
|
||
|
|
#ifdef SCENEPICKINGPASS
|
||
|
|
float4 _SelectionID;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef SCENESELECTIONPASS
|
||
|
|
int _ObjectId;
|
||
|
|
int _PassValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
PackedVaryings VertexFunction( Attributes input )
|
||
|
|
{
|
||
|
|
PackedVaryings output = (PackedVaryings)0;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
float3 defaultVertexValue = input.positionOS.xyz;
|
||
|
|
#else
|
||
|
|
float3 defaultVertexValue = float3(0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 vertexValue = defaultVertexValue;
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
input.positionOS.xyz = vertexValue;
|
||
|
|
#else
|
||
|
|
input.positionOS.xyz += vertexValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
input.normalOS = input.normalOS;
|
||
|
|
input.tangentOS = input.tangentOS;
|
||
|
|
|
||
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz );
|
||
|
|
|
||
|
|
output.positionCS = vertexInput.positionCS;
|
||
|
|
output.positionWS = vertexInput.positionWS;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if defined(ASE_TESSELLATION)
|
||
|
|
struct VertexControl
|
||
|
|
{
|
||
|
|
float4 positionOS : INTERNALTESSPOS;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct TessellationFactors
|
||
|
|
{
|
||
|
|
float edge[3] : SV_TessFactor;
|
||
|
|
float inside : SV_InsideTessFactor;
|
||
|
|
};
|
||
|
|
|
||
|
|
VertexControl vert ( Attributes input )
|
||
|
|
{
|
||
|
|
VertexControl output;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
output.positionOS = input.positionOS;
|
||
|
|
output.normalOS = input.normalOS;
|
||
|
|
output.tangentOS = input.tangentOS;
|
||
|
|
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> input)
|
||
|
|
{
|
||
|
|
TessellationFactors output;
|
||
|
|
float4 tf = 1;
|
||
|
|
float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
|
||
|
|
float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
|
||
|
|
#if defined(ASE_FIXED_TESSELLATION)
|
||
|
|
tf = FixedTess( tessValue );
|
||
|
|
#elif defined(ASE_DISTANCE_TESSELLATION)
|
||
|
|
tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
|
||
|
|
#elif defined(ASE_LENGTH_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
|
||
|
|
#elif defined(ASE_LENGTH_CULL_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
|
||
|
|
#endif
|
||
|
|
output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
[partitioning("fractional_odd")]
|
||
|
|
[outputtopology("triangle_cw")]
|
||
|
|
[patchconstantfunc("TessellationFunction")]
|
||
|
|
[outputcontrolpoints(3)]
|
||
|
|
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
|
||
|
|
{
|
||
|
|
return patch[id];
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
|
||
|
|
{
|
||
|
|
Attributes output = (Attributes) 0;
|
||
|
|
output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z;
|
||
|
|
output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z;
|
||
|
|
output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z;
|
||
|
|
|
||
|
|
#if defined(ASE_PHONG_TESSELLATION)
|
||
|
|
float3 pp[3];
|
||
|
|
for (int i = 0; i < 3; ++i)
|
||
|
|
pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS));
|
||
|
|
float phongStrength = _TessPhongStrength;
|
||
|
|
output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz;
|
||
|
|
#endif
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(patch[0], output);
|
||
|
|
return VertexFunction(output);
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
PackedVaryings vert ( Attributes input )
|
||
|
|
{
|
||
|
|
return VertexFunction( input );
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
half4 frag( PackedVaryings input
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
,out float outputDepth : ASE_SV_DEPTH
|
||
|
|
#endif
|
||
|
|
) : SV_Target
|
||
|
|
{
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( input );
|
||
|
|
|
||
|
|
#if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
|
||
|
|
float4 shadowCoord = TransformWorldToShadowCoord(input.positionWS);
|
||
|
|
#else
|
||
|
|
float4 shadowCoord = float4(0, 0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 PositionWS = input.positionWS;
|
||
|
|
float3 PositionRWS = GetCameraRelativePositionWS( input.positionWS );
|
||
|
|
float4 ShadowCoord = shadowCoord;
|
||
|
|
float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw );
|
||
|
|
float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w;
|
||
|
|
float4 ScreenPos = ComputeScreenPos( ClipPos );
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
float Alpha = 1;
|
||
|
|
float AlphaClipThreshold = 0.5;
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
float DeviceDepth = input.positionCS.z;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( _ALPHATEST_ON )
|
||
|
|
AlphaDiscard( Alpha, AlphaClipThreshold );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(LOD_FADE_CROSSFADE)
|
||
|
|
LODDitheringTransition( input.positionCS.xyz, unity_LODFade.x );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
outputDepth = DeviceDepth;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
|
||
|
|
Name "Meta"
|
||
|
|
Tags { "LightMode"="Meta" }
|
||
|
|
|
||
|
|
Cull Off
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
#define ASE_GEOMETRY 1
|
||
|
|
#pragma multi_compile_local_fragment _ALPHATEST_ON
|
||
|
|
#define _NORMAL_DROPOFF_TS 1
|
||
|
|
#define ASE_FOG 1
|
||
|
|
#pragma multi_compile_fragment _ DEBUG_DISPLAY
|
||
|
|
#define _EMISSION
|
||
|
|
#define _NORMALMAP 1
|
||
|
|
#define ASE_VERSION 19903
|
||
|
|
#define ASE_SRP_VERSION 120115
|
||
|
|
|
||
|
|
#pragma shader_feature EDITOR_VISUALIZATION
|
||
|
|
|
||
|
|
#pragma vertex vert
|
||
|
|
#pragma fragment frag
|
||
|
|
|
||
|
|
#if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE)
|
||
|
|
#define _SPECULAR_COLOR 1
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define SHADERPASS SHADERPASS_META
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.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/Input.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/MetaInput.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
||
|
|
|
||
|
|
#define ASE_NEEDS_FRAG_COLOR
|
||
|
|
#define ASE_NEEDS_TEXTURE_COORDINATES0
|
||
|
|
#define ASE_NEEDS_WORLD_POSITION
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_POSITION
|
||
|
|
#define ASE_NEEDS_VERT_NORMAL
|
||
|
|
#define ASE_NEEDS_VERT_TANGENT
|
||
|
|
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float4 positionOS : POSITION;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
float4 texcoord0 : TEXCOORD0;
|
||
|
|
float4 texcoord1 : TEXCOORD1;
|
||
|
|
float4 texcoord2 : TEXCOORD2;
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct PackedVaryings
|
||
|
|
{
|
||
|
|
float4 positionCS : SV_POSITION;
|
||
|
|
float3 positionWS : TEXCOORD0;
|
||
|
|
#ifdef EDITOR_VISUALIZATION
|
||
|
|
float4 VizUV : TEXCOORD1;
|
||
|
|
float4 LightCoord : TEXCOORD2;
|
||
|
|
#endif
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
float4 ase_texcoord3 : TEXCOORD3;
|
||
|
|
float4 ase_texcoord4 : TEXCOORD4;
|
||
|
|
float4 ase_texcoord5 : TEXCOORD5;
|
||
|
|
float4 ase_texcoord6 : TEXCOORD6;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
CBUFFER_START(UnityPerMaterial)
|
||
|
|
float4 _AlbedoColorBase;
|
||
|
|
float4 _AlbedoColor1;
|
||
|
|
float4 _EmissionColor;
|
||
|
|
float4 _HeightMapBase_ST;
|
||
|
|
float4 _HeightMap3_ST;
|
||
|
|
float4 _AlbedoColor2;
|
||
|
|
float4 _HeightMap2_ST;
|
||
|
|
float4 _AlbedoColor3;
|
||
|
|
float4 _HeightMap1_ST;
|
||
|
|
float _MetalicBrightnes2;
|
||
|
|
float _Metallic2;
|
||
|
|
float _MetalicBrightnes3;
|
||
|
|
float _Metallic1;
|
||
|
|
float _MetalicBrightnesBase;
|
||
|
|
float _MetallicBase;
|
||
|
|
float _SmoothnessBase;
|
||
|
|
float _NormalMapDepth3;
|
||
|
|
float _NormalMapDepth2;
|
||
|
|
float _NormalMapDepth1;
|
||
|
|
float _Smoothness1;
|
||
|
|
float _Smoothness2;
|
||
|
|
float _Smoothness3;
|
||
|
|
float _Metallic3;
|
||
|
|
float _MetalicBrightnes1;
|
||
|
|
float _BlendContrast;
|
||
|
|
float _PrlxRefPlaneBase;
|
||
|
|
float _Height1;
|
||
|
|
float _Tilling1;
|
||
|
|
float _ParalaxOffset1;
|
||
|
|
float _PrlxRefPlane1;
|
||
|
|
float _Height2;
|
||
|
|
float _Tilling2;
|
||
|
|
float _NormalMapDepthBase;
|
||
|
|
float _ParalaxOffset2;
|
||
|
|
float _Height3;
|
||
|
|
float _Tilling3;
|
||
|
|
float _ParalaxOffset3;
|
||
|
|
float _PrlxRefPlane3;
|
||
|
|
float _TillingBase;
|
||
|
|
float _ParalaxOffsetBase;
|
||
|
|
float _PrlxRefPlane2;
|
||
|
|
float _EmissionMultiplayer;
|
||
|
|
#ifdef ASE_TRANSMISSION
|
||
|
|
float _TransmissionShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TRANSLUCENCY
|
||
|
|
float _TransStrength;
|
||
|
|
float _TransNormal;
|
||
|
|
float _TransScattering;
|
||
|
|
float _TransDirect;
|
||
|
|
float _TransAmbient;
|
||
|
|
float _TransShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TESSELLATION
|
||
|
|
float _TessPhongStrength;
|
||
|
|
float _TessValue;
|
||
|
|
float _TessMin;
|
||
|
|
float _TessMax;
|
||
|
|
float _TessEdgeLength;
|
||
|
|
float _TessMaxDisp;
|
||
|
|
#endif
|
||
|
|
CBUFFER_END
|
||
|
|
|
||
|
|
#ifdef SCENEPICKINGPASS
|
||
|
|
float4 _SelectionID;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef SCENESELECTIONPASS
|
||
|
|
int _ObjectId;
|
||
|
|
int _PassValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
sampler2D _HeightMap1;
|
||
|
|
sampler2D _HeightMap2;
|
||
|
|
sampler2D _HeightMap3;
|
||
|
|
TEXTURE2D_ARRAY(_AlbedoMapArray);
|
||
|
|
sampler2D _HeightMapBase;
|
||
|
|
SAMPLER(sampler_AlbedoMapArray);
|
||
|
|
|
||
|
|
|
||
|
|
inline float2 POM( sampler2D heightMap, float2 uvs, float2 dx, float2 dy, float3 normalWorld, float3 viewWorld, float3 viewDirTan, int minSamples, int maxSamples, int sidewallSteps, float parallax, float refPlane, float2 tilling, float2 curv, int index )
|
||
|
|
{
|
||
|
|
float3 result = 0;
|
||
|
|
float stepIndex = 0;
|
||
|
|
float numSteps = floor( lerp( (float)maxSamples, (float)minSamples, saturate( dot( normalWorld, viewWorld ) ) ) );
|
||
|
|
float layerHeight = 1.0 / numSteps;
|
||
|
|
float2 plane = parallax * ( viewDirTan.xy / viewDirTan.z );
|
||
|
|
uvs.xy += refPlane * plane;
|
||
|
|
float2 deltaTex = -plane * layerHeight;
|
||
|
|
float2 prevTexOffset = 0;
|
||
|
|
float prevRayZ = 1.0f;
|
||
|
|
float prevHeight = 0.0f;
|
||
|
|
float2 currTexOffset = deltaTex;
|
||
|
|
float currRayZ = 1.0f - layerHeight;
|
||
|
|
float currHeight = 0.0f;
|
||
|
|
float intersection = 0;
|
||
|
|
float2 finalTexOffset = 0;
|
||
|
|
while ( stepIndex < numSteps + 1 )
|
||
|
|
{
|
||
|
|
currHeight = tex2Dgrad( heightMap, uvs + currTexOffset, dx, dy ).r;
|
||
|
|
if ( currHeight > currRayZ )
|
||
|
|
{
|
||
|
|
stepIndex = numSteps + 1;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
stepIndex++;
|
||
|
|
prevTexOffset = currTexOffset;
|
||
|
|
prevRayZ = currRayZ;
|
||
|
|
prevHeight = currHeight;
|
||
|
|
currTexOffset += deltaTex;
|
||
|
|
currRayZ -= layerHeight;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
float sectionSteps = sidewallSteps;
|
||
|
|
float sectionIndex = 0;
|
||
|
|
float newZ = 0;
|
||
|
|
float newHeight = 0;
|
||
|
|
while ( sectionIndex < sectionSteps )
|
||
|
|
{
|
||
|
|
intersection = ( prevHeight - prevRayZ ) / ( prevHeight - currHeight + currRayZ - prevRayZ );
|
||
|
|
finalTexOffset = prevTexOffset + intersection * deltaTex;
|
||
|
|
newZ = prevRayZ - intersection * layerHeight;
|
||
|
|
newHeight = tex2Dgrad( heightMap, uvs + finalTexOffset, dx, dy ).r;
|
||
|
|
if ( newHeight > newZ )
|
||
|
|
{
|
||
|
|
currTexOffset = finalTexOffset;
|
||
|
|
currHeight = newHeight;
|
||
|
|
currRayZ = newZ;
|
||
|
|
deltaTex = intersection * deltaTex;
|
||
|
|
layerHeight = intersection * layerHeight;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
prevTexOffset = finalTexOffset;
|
||
|
|
prevHeight = newHeight;
|
||
|
|
prevRayZ = newZ;
|
||
|
|
deltaTex = ( 1 - intersection ) * deltaTex;
|
||
|
|
layerHeight = ( 1 - intersection ) * layerHeight;
|
||
|
|
}
|
||
|
|
sectionIndex++;
|
||
|
|
}
|
||
|
|
return uvs.xy + finalTexOffset;
|
||
|
|
}
|
||
|
|
|
||
|
|
float4 CalculateContrast( float contrastValue, float4 colorTarget )
|
||
|
|
{
|
||
|
|
float t = 0.5 * ( 1.0 - contrastValue );
|
||
|
|
return mul( float4x4( contrastValue,0,0,t, 0,contrastValue,0,t, 0,0,contrastValue,t, 0,0,0,1 ), colorTarget );
|
||
|
|
}
|
||
|
|
|
||
|
|
PackedVaryings VertexFunction( Attributes input )
|
||
|
|
{
|
||
|
|
PackedVaryings output = (PackedVaryings)0;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||
|
|
|
||
|
|
float3 ase_normalWS = TransformObjectToWorldNormal( input.normalOS );
|
||
|
|
output.ase_texcoord4.xyz = ase_normalWS;
|
||
|
|
float3 ase_tangentWS = TransformObjectToWorldDir( input.tangentOS.xyz );
|
||
|
|
output.ase_texcoord5.xyz = ase_tangentWS;
|
||
|
|
float ase_tangentSign = input.tangentOS.w * ( unity_WorldTransformParams.w >= 0.0 ? 1.0 : -1.0 );
|
||
|
|
float3 ase_bitangentWS = cross( ase_normalWS, ase_tangentWS ) * ase_tangentSign;
|
||
|
|
output.ase_texcoord6.xyz = ase_bitangentWS;
|
||
|
|
|
||
|
|
output.ase_color = input.ase_color;
|
||
|
|
output.ase_texcoord3.xy = input.texcoord0.xy;
|
||
|
|
|
||
|
|
//setting value to unused interpolator channels and avoid initialization warnings
|
||
|
|
output.ase_texcoord3.zw = 0;
|
||
|
|
output.ase_texcoord4.w = 0;
|
||
|
|
output.ase_texcoord5.w = 0;
|
||
|
|
output.ase_texcoord6.w = 0;
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
float3 defaultVertexValue = input.positionOS.xyz;
|
||
|
|
#else
|
||
|
|
float3 defaultVertexValue = float3(0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 vertexValue = defaultVertexValue;
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
input.positionOS.xyz = vertexValue;
|
||
|
|
#else
|
||
|
|
input.positionOS.xyz += vertexValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
input.normalOS = input.normalOS;
|
||
|
|
input.tangentOS = input.tangentOS;
|
||
|
|
|
||
|
|
#ifdef EDITOR_VISUALIZATION
|
||
|
|
float2 VizUV = 0;
|
||
|
|
float4 LightCoord = 0;
|
||
|
|
UnityEditorVizData(input.positionOS.xyz, input.texcoord0.xy, input.texcoord1.xy, input.texcoord2.xy, VizUV, LightCoord);
|
||
|
|
output.VizUV = float4(VizUV, 0, 0);
|
||
|
|
output.LightCoord = LightCoord;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
output.positionCS = MetaVertexPosition( input.positionOS, input.texcoord1.xy, input.texcoord1.xy, unity_LightmapST, unity_DynamicLightmapST );
|
||
|
|
output.positionWS = TransformObjectToWorld( input.positionOS.xyz );
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if defined(ASE_TESSELLATION)
|
||
|
|
struct VertexControl
|
||
|
|
{
|
||
|
|
float4 positionOS : INTERNALTESSPOS;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct TessellationFactors
|
||
|
|
{
|
||
|
|
float edge[3] : SV_TessFactor;
|
||
|
|
float inside : SV_InsideTessFactor;
|
||
|
|
};
|
||
|
|
|
||
|
|
VertexControl vert ( Attributes input )
|
||
|
|
{
|
||
|
|
VertexControl output;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
output.positionOS = input.positionOS;
|
||
|
|
output.normalOS = input.normalOS;
|
||
|
|
output.tangentOS = input.tangentOS;
|
||
|
|
output.ase_color = input.ase_color;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> input)
|
||
|
|
{
|
||
|
|
TessellationFactors output;
|
||
|
|
float4 tf = 1;
|
||
|
|
float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
|
||
|
|
float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
|
||
|
|
#if defined(ASE_FIXED_TESSELLATION)
|
||
|
|
tf = FixedTess( tessValue );
|
||
|
|
#elif defined(ASE_DISTANCE_TESSELLATION)
|
||
|
|
tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
|
||
|
|
#elif defined(ASE_LENGTH_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
|
||
|
|
#elif defined(ASE_LENGTH_CULL_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
|
||
|
|
#endif
|
||
|
|
output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
[partitioning("fractional_odd")]
|
||
|
|
[outputtopology("triangle_cw")]
|
||
|
|
[patchconstantfunc("TessellationFunction")]
|
||
|
|
[outputcontrolpoints(3)]
|
||
|
|
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
|
||
|
|
{
|
||
|
|
return patch[id];
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
|
||
|
|
{
|
||
|
|
Attributes output = (Attributes) 0;
|
||
|
|
output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z;
|
||
|
|
output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z;
|
||
|
|
output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z;
|
||
|
|
output.ase_color = patch[0].ase_color * bary.x + patch[1].ase_color * bary.y + patch[2].ase_color * bary.z;
|
||
|
|
#if defined(ASE_PHONG_TESSELLATION)
|
||
|
|
float3 pp[3];
|
||
|
|
for (int i = 0; i < 3; ++i)
|
||
|
|
pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS));
|
||
|
|
float phongStrength = _TessPhongStrength;
|
||
|
|
output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz;
|
||
|
|
#endif
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(patch[0], output);
|
||
|
|
return VertexFunction(output);
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
PackedVaryings vert ( Attributes input )
|
||
|
|
{
|
||
|
|
return VertexFunction( input );
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
half4 frag(PackedVaryings input ) : SV_Target
|
||
|
|
{
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( input );
|
||
|
|
|
||
|
|
#if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
|
||
|
|
float4 shadowCoord = TransformWorldToShadowCoord(input.positionWS);
|
||
|
|
#else
|
||
|
|
float4 shadowCoord = float4(0, 0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 PositionWS = input.positionWS;
|
||
|
|
float3 PositionRWS = GetCameraRelativePositionWS( input.positionWS );
|
||
|
|
float4 ShadowCoord = shadowCoord;
|
||
|
|
|
||
|
|
float4 clampResult178 = clamp( input.ase_color , float4( 0,0,0,0 ) , float4( 1,1,1,0 ) );
|
||
|
|
float4 break170 = clampResult178;
|
||
|
|
float3 appendResult169 = (float3(break170.r , break170.g , break170.b));
|
||
|
|
float4 break166 = ( 2.0 * ( ( 1.0 - input.ase_color ) * input.ase_color ) );
|
||
|
|
float2 texCoord17 = input.ase_texcoord3.xy * float2( 1,1 ) + float2( 0,0 );
|
||
|
|
float3 ase_viewVectorWS = ( _WorldSpaceCameraPos.xyz - PositionWS );
|
||
|
|
float3 ase_viewDirWS = normalize( ase_viewVectorWS );
|
||
|
|
float3 ase_normalWS = input.ase_texcoord4.xyz;
|
||
|
|
float fresnelNdotV288 = dot( ase_normalWS, ase_viewDirWS );
|
||
|
|
float fresnelNode288 = ( 0.0 + 1.0 * pow( 1.0 - fresnelNdotV288, 10.17 ) );
|
||
|
|
float clampResult296 = clamp( fresnelNode288 , 0.0 , 1.0 );
|
||
|
|
float temp_output_291_0 = ( 1.0 - clampResult296 );
|
||
|
|
float3 ase_tangentWS = input.ase_texcoord5.xyz;
|
||
|
|
float3 ase_bitangentWS = input.ase_texcoord6.xyz;
|
||
|
|
float3 tanToWorld0 = float3( ase_tangentWS.x, ase_bitangentWS.x, ase_normalWS.x );
|
||
|
|
float3 tanToWorld1 = float3( ase_tangentWS.y, ase_bitangentWS.y, ase_normalWS.y );
|
||
|
|
float3 tanToWorld2 = float3( ase_tangentWS.z, ase_bitangentWS.z, ase_normalWS.z );
|
||
|
|
float3 ase_viewVectorTS = tanToWorld0 * ( _WorldSpaceCameraPos.xyz - PositionWS ).x + tanToWorld1 * ( _WorldSpaceCameraPos.xyz - PositionWS ).y + tanToWorld2 * ( _WorldSpaceCameraPos.xyz - PositionWS ).z;
|
||
|
|
float3 ase_viewDirTS = normalize( ase_viewVectorTS );
|
||
|
|
float2 OffsetPOM98 = POM( _HeightMap1, ( texCoord17 * _Tilling1 ), ddx( ( texCoord17 * _Tilling1 ) ), ddy( ( texCoord17 * _Tilling1 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset1 ) * temp_output_291_0 ), _PrlxRefPlane1, _HeightMap1_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult134 = lerp( 0.0 , break166.r , CalculateContrast(_BlendContrast,( _Height1 + tex2D( _HeightMap1, OffsetPOM98 ) )).r);
|
||
|
|
float2 OffsetPOM115 = POM( _HeightMap2, ( texCoord17 * _Tilling2 ), ddx( ( texCoord17 * _Tilling2 ) ), ddy( ( texCoord17 * _Tilling2 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset2 ) * temp_output_291_0 ), _PrlxRefPlane2, _HeightMap2_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult135 = lerp( 0.0 , break166.g , CalculateContrast(_BlendContrast,( _Height2 + tex2D( _HeightMap2, OffsetPOM115 ) )).r);
|
||
|
|
float2 OffsetPOM257 = POM( _HeightMap3, ( texCoord17 * _Tilling3 ), ddx( ( texCoord17 * _Tilling3 ) ), ddy( ( texCoord17 * _Tilling3 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset3 ) * temp_output_291_0 ), _PrlxRefPlane3, _HeightMap3_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult151 = lerp( 0.0 , break166.b , CalculateContrast(_BlendContrast,( _Height3 + tex2D( _HeightMap3, OffsetPOM257 ) )).r);
|
||
|
|
float3 appendResult129 = (float3(lerpResult134 , lerpResult135 , lerpResult151));
|
||
|
|
float3 clampResult182 = clamp( appendResult129 , float3( 0,0,0 ) , float3( 1,1,1 ) );
|
||
|
|
float3 temp_output_167_0 = ( appendResult169 + clampResult182 );
|
||
|
|
float3 clampResult190 = clamp( temp_output_167_0 , float3( 0,0,0 ) , float3( 1,1,1 ) );
|
||
|
|
float2 OffsetPOM261 = POM( _HeightMapBase, ( texCoord17 * _TillingBase ), ddx( ( texCoord17 * _TillingBase ) ), ddy( ( texCoord17 * _TillingBase ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffsetBase ) * temp_output_291_0 ), _PrlxRefPlaneBase, _HeightMapBase_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float2 temp_output_262_0 = ( OffsetPOM261 * 1.0 );
|
||
|
|
float2 temp_output_239_0 = ( OffsetPOM98 * 1.0 );
|
||
|
|
float2 temp_output_243_0 = ( OffsetPOM115 * 1.0 );
|
||
|
|
float2 temp_output_246_0 = ( OffsetPOM257 * 1.0 );
|
||
|
|
float3 layeredBlendVar132 = clampResult190;
|
||
|
|
float4 layeredBlend132 = ( lerp( lerp( lerp( ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_262_0,0.0 ) * _AlbedoColorBase ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_239_0,1.0 ) * _AlbedoColor1 ) , layeredBlendVar132.x ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_243_0,2.0 ) * _AlbedoColor2 ) , layeredBlendVar132.y ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_246_0,3.0 ) * _AlbedoColor3 ) , layeredBlendVar132.z ) );
|
||
|
|
|
||
|
|
|
||
|
|
float3 BaseColor = layeredBlend132.rgb;
|
||
|
|
float3 Emission = ( _EmissionColor * ( _EmissionMultiplayer * layeredBlend132 ) ).rgb;
|
||
|
|
float Alpha = 1;
|
||
|
|
float AlphaClipThreshold = 0.5;
|
||
|
|
|
||
|
|
#if defined( _ALPHATEST_ON )
|
||
|
|
AlphaDiscard( Alpha, AlphaClipThreshold );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
MetaInput metaInput = (MetaInput)0;
|
||
|
|
metaInput.Albedo = BaseColor;
|
||
|
|
metaInput.Emission = Emission;
|
||
|
|
#ifdef EDITOR_VISUALIZATION
|
||
|
|
metaInput.VizUV = input.VizUV.xy;
|
||
|
|
metaInput.LightCoord = input.LightCoord;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
return UnityMetaFragment(metaInput);
|
||
|
|
}
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
|
||
|
|
Name "Universal2D"
|
||
|
|
Tags { "LightMode"="Universal2D" }
|
||
|
|
|
||
|
|
Blend One Zero, One Zero
|
||
|
|
ZWrite On
|
||
|
|
ZTest LEqual
|
||
|
|
Offset 0 , 0
|
||
|
|
ColorMask RGBA
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
|
||
|
|
#define ASE_GEOMETRY 1
|
||
|
|
#pragma multi_compile_local_fragment _ALPHATEST_ON
|
||
|
|
#define _NORMAL_DROPOFF_TS 1
|
||
|
|
#define ASE_FOG 1
|
||
|
|
#pragma multi_compile_fragment _ DEBUG_DISPLAY
|
||
|
|
#define _EMISSION
|
||
|
|
#define _NORMALMAP 1
|
||
|
|
#define ASE_VERSION 19903
|
||
|
|
#define ASE_SRP_VERSION 120115
|
||
|
|
|
||
|
|
|
||
|
|
#pragma vertex vert
|
||
|
|
#pragma fragment frag
|
||
|
|
|
||
|
|
#if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE)
|
||
|
|
#define _SPECULAR_COLOR 1
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define SHADERPASS SHADERPASS_2D
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.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/Input.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
||
|
|
|
||
|
|
#define ASE_NEEDS_FRAG_COLOR
|
||
|
|
#define ASE_NEEDS_TEXTURE_COORDINATES0
|
||
|
|
#define ASE_NEEDS_WORLD_POSITION
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_POSITION
|
||
|
|
#define ASE_NEEDS_VERT_NORMAL
|
||
|
|
#define ASE_NEEDS_VERT_TANGENT
|
||
|
|
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float4 positionOS : POSITION;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
float4 ase_texcoord : TEXCOORD0;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct PackedVaryings
|
||
|
|
{
|
||
|
|
float4 positionCS : SV_POSITION;
|
||
|
|
float3 positionWS : TEXCOORD0;
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
float4 ase_texcoord1 : TEXCOORD1;
|
||
|
|
float4 ase_texcoord2 : TEXCOORD2;
|
||
|
|
float4 ase_texcoord3 : TEXCOORD3;
|
||
|
|
float4 ase_texcoord4 : TEXCOORD4;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
CBUFFER_START(UnityPerMaterial)
|
||
|
|
float4 _AlbedoColorBase;
|
||
|
|
float4 _AlbedoColor1;
|
||
|
|
float4 _EmissionColor;
|
||
|
|
float4 _HeightMapBase_ST;
|
||
|
|
float4 _HeightMap3_ST;
|
||
|
|
float4 _AlbedoColor2;
|
||
|
|
float4 _HeightMap2_ST;
|
||
|
|
float4 _AlbedoColor3;
|
||
|
|
float4 _HeightMap1_ST;
|
||
|
|
float _MetalicBrightnes2;
|
||
|
|
float _Metallic2;
|
||
|
|
float _MetalicBrightnes3;
|
||
|
|
float _Metallic1;
|
||
|
|
float _MetalicBrightnesBase;
|
||
|
|
float _MetallicBase;
|
||
|
|
float _SmoothnessBase;
|
||
|
|
float _NormalMapDepth3;
|
||
|
|
float _NormalMapDepth2;
|
||
|
|
float _NormalMapDepth1;
|
||
|
|
float _Smoothness1;
|
||
|
|
float _Smoothness2;
|
||
|
|
float _Smoothness3;
|
||
|
|
float _Metallic3;
|
||
|
|
float _MetalicBrightnes1;
|
||
|
|
float _BlendContrast;
|
||
|
|
float _PrlxRefPlaneBase;
|
||
|
|
float _Height1;
|
||
|
|
float _Tilling1;
|
||
|
|
float _ParalaxOffset1;
|
||
|
|
float _PrlxRefPlane1;
|
||
|
|
float _Height2;
|
||
|
|
float _Tilling2;
|
||
|
|
float _NormalMapDepthBase;
|
||
|
|
float _ParalaxOffset2;
|
||
|
|
float _Height3;
|
||
|
|
float _Tilling3;
|
||
|
|
float _ParalaxOffset3;
|
||
|
|
float _PrlxRefPlane3;
|
||
|
|
float _TillingBase;
|
||
|
|
float _ParalaxOffsetBase;
|
||
|
|
float _PrlxRefPlane2;
|
||
|
|
float _EmissionMultiplayer;
|
||
|
|
#ifdef ASE_TRANSMISSION
|
||
|
|
float _TransmissionShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TRANSLUCENCY
|
||
|
|
float _TransStrength;
|
||
|
|
float _TransNormal;
|
||
|
|
float _TransScattering;
|
||
|
|
float _TransDirect;
|
||
|
|
float _TransAmbient;
|
||
|
|
float _TransShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TESSELLATION
|
||
|
|
float _TessPhongStrength;
|
||
|
|
float _TessValue;
|
||
|
|
float _TessMin;
|
||
|
|
float _TessMax;
|
||
|
|
float _TessEdgeLength;
|
||
|
|
float _TessMaxDisp;
|
||
|
|
#endif
|
||
|
|
CBUFFER_END
|
||
|
|
|
||
|
|
#ifdef SCENEPICKINGPASS
|
||
|
|
float4 _SelectionID;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef SCENESELECTIONPASS
|
||
|
|
int _ObjectId;
|
||
|
|
int _PassValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
sampler2D _HeightMap1;
|
||
|
|
sampler2D _HeightMap2;
|
||
|
|
sampler2D _HeightMap3;
|
||
|
|
TEXTURE2D_ARRAY(_AlbedoMapArray);
|
||
|
|
sampler2D _HeightMapBase;
|
||
|
|
SAMPLER(sampler_AlbedoMapArray);
|
||
|
|
|
||
|
|
|
||
|
|
inline float2 POM( sampler2D heightMap, float2 uvs, float2 dx, float2 dy, float3 normalWorld, float3 viewWorld, float3 viewDirTan, int minSamples, int maxSamples, int sidewallSteps, float parallax, float refPlane, float2 tilling, float2 curv, int index )
|
||
|
|
{
|
||
|
|
float3 result = 0;
|
||
|
|
float stepIndex = 0;
|
||
|
|
float numSteps = floor( lerp( (float)maxSamples, (float)minSamples, saturate( dot( normalWorld, viewWorld ) ) ) );
|
||
|
|
float layerHeight = 1.0 / numSteps;
|
||
|
|
float2 plane = parallax * ( viewDirTan.xy / viewDirTan.z );
|
||
|
|
uvs.xy += refPlane * plane;
|
||
|
|
float2 deltaTex = -plane * layerHeight;
|
||
|
|
float2 prevTexOffset = 0;
|
||
|
|
float prevRayZ = 1.0f;
|
||
|
|
float prevHeight = 0.0f;
|
||
|
|
float2 currTexOffset = deltaTex;
|
||
|
|
float currRayZ = 1.0f - layerHeight;
|
||
|
|
float currHeight = 0.0f;
|
||
|
|
float intersection = 0;
|
||
|
|
float2 finalTexOffset = 0;
|
||
|
|
while ( stepIndex < numSteps + 1 )
|
||
|
|
{
|
||
|
|
currHeight = tex2Dgrad( heightMap, uvs + currTexOffset, dx, dy ).r;
|
||
|
|
if ( currHeight > currRayZ )
|
||
|
|
{
|
||
|
|
stepIndex = numSteps + 1;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
stepIndex++;
|
||
|
|
prevTexOffset = currTexOffset;
|
||
|
|
prevRayZ = currRayZ;
|
||
|
|
prevHeight = currHeight;
|
||
|
|
currTexOffset += deltaTex;
|
||
|
|
currRayZ -= layerHeight;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
float sectionSteps = sidewallSteps;
|
||
|
|
float sectionIndex = 0;
|
||
|
|
float newZ = 0;
|
||
|
|
float newHeight = 0;
|
||
|
|
while ( sectionIndex < sectionSteps )
|
||
|
|
{
|
||
|
|
intersection = ( prevHeight - prevRayZ ) / ( prevHeight - currHeight + currRayZ - prevRayZ );
|
||
|
|
finalTexOffset = prevTexOffset + intersection * deltaTex;
|
||
|
|
newZ = prevRayZ - intersection * layerHeight;
|
||
|
|
newHeight = tex2Dgrad( heightMap, uvs + finalTexOffset, dx, dy ).r;
|
||
|
|
if ( newHeight > newZ )
|
||
|
|
{
|
||
|
|
currTexOffset = finalTexOffset;
|
||
|
|
currHeight = newHeight;
|
||
|
|
currRayZ = newZ;
|
||
|
|
deltaTex = intersection * deltaTex;
|
||
|
|
layerHeight = intersection * layerHeight;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
prevTexOffset = finalTexOffset;
|
||
|
|
prevHeight = newHeight;
|
||
|
|
prevRayZ = newZ;
|
||
|
|
deltaTex = ( 1 - intersection ) * deltaTex;
|
||
|
|
layerHeight = ( 1 - intersection ) * layerHeight;
|
||
|
|
}
|
||
|
|
sectionIndex++;
|
||
|
|
}
|
||
|
|
return uvs.xy + finalTexOffset;
|
||
|
|
}
|
||
|
|
|
||
|
|
float4 CalculateContrast( float contrastValue, float4 colorTarget )
|
||
|
|
{
|
||
|
|
float t = 0.5 * ( 1.0 - contrastValue );
|
||
|
|
return mul( float4x4( contrastValue,0,0,t, 0,contrastValue,0,t, 0,0,contrastValue,t, 0,0,0,1 ), colorTarget );
|
||
|
|
}
|
||
|
|
|
||
|
|
PackedVaryings VertexFunction( Attributes input )
|
||
|
|
{
|
||
|
|
PackedVaryings output = (PackedVaryings)0;
|
||
|
|
UNITY_SETUP_INSTANCE_ID( input );
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID( input, output );
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( output );
|
||
|
|
|
||
|
|
float3 ase_normalWS = TransformObjectToWorldNormal( input.normalOS );
|
||
|
|
output.ase_texcoord2.xyz = ase_normalWS;
|
||
|
|
float3 ase_tangentWS = TransformObjectToWorldDir( input.tangentOS.xyz );
|
||
|
|
output.ase_texcoord3.xyz = ase_tangentWS;
|
||
|
|
float ase_tangentSign = input.tangentOS.w * ( unity_WorldTransformParams.w >= 0.0 ? 1.0 : -1.0 );
|
||
|
|
float3 ase_bitangentWS = cross( ase_normalWS, ase_tangentWS ) * ase_tangentSign;
|
||
|
|
output.ase_texcoord4.xyz = ase_bitangentWS;
|
||
|
|
|
||
|
|
output.ase_color = input.ase_color;
|
||
|
|
output.ase_texcoord1.xy = input.ase_texcoord.xy;
|
||
|
|
|
||
|
|
//setting value to unused interpolator channels and avoid initialization warnings
|
||
|
|
output.ase_texcoord1.zw = 0;
|
||
|
|
output.ase_texcoord2.w = 0;
|
||
|
|
output.ase_texcoord3.w = 0;
|
||
|
|
output.ase_texcoord4.w = 0;
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
float3 defaultVertexValue = input.positionOS.xyz;
|
||
|
|
#else
|
||
|
|
float3 defaultVertexValue = float3(0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 vertexValue = defaultVertexValue;
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
input.positionOS.xyz = vertexValue;
|
||
|
|
#else
|
||
|
|
input.positionOS.xyz += vertexValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
input.normalOS = input.normalOS;
|
||
|
|
input.tangentOS = input.tangentOS;
|
||
|
|
|
||
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz );
|
||
|
|
|
||
|
|
output.positionCS = vertexInput.positionCS;
|
||
|
|
output.positionWS = vertexInput.positionWS;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if defined(ASE_TESSELLATION)
|
||
|
|
struct VertexControl
|
||
|
|
{
|
||
|
|
float4 positionOS : INTERNALTESSPOS;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
float4 ase_texcoord : TEXCOORD0;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct TessellationFactors
|
||
|
|
{
|
||
|
|
float edge[3] : SV_TessFactor;
|
||
|
|
float inside : SV_InsideTessFactor;
|
||
|
|
};
|
||
|
|
|
||
|
|
VertexControl vert ( Attributes input )
|
||
|
|
{
|
||
|
|
VertexControl output;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
output.positionOS = input.positionOS;
|
||
|
|
output.normalOS = input.normalOS;
|
||
|
|
output.tangentOS = input.tangentOS;
|
||
|
|
output.ase_color = input.ase_color;
|
||
|
|
output.ase_texcoord = input.ase_texcoord;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> input)
|
||
|
|
{
|
||
|
|
TessellationFactors output;
|
||
|
|
float4 tf = 1;
|
||
|
|
float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
|
||
|
|
float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
|
||
|
|
#if defined(ASE_FIXED_TESSELLATION)
|
||
|
|
tf = FixedTess( tessValue );
|
||
|
|
#elif defined(ASE_DISTANCE_TESSELLATION)
|
||
|
|
tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
|
||
|
|
#elif defined(ASE_LENGTH_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
|
||
|
|
#elif defined(ASE_LENGTH_CULL_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
|
||
|
|
#endif
|
||
|
|
output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
[partitioning("fractional_odd")]
|
||
|
|
[outputtopology("triangle_cw")]
|
||
|
|
[patchconstantfunc("TessellationFunction")]
|
||
|
|
[outputcontrolpoints(3)]
|
||
|
|
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
|
||
|
|
{
|
||
|
|
return patch[id];
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
|
||
|
|
{
|
||
|
|
Attributes output = (Attributes) 0;
|
||
|
|
output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z;
|
||
|
|
output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z;
|
||
|
|
output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z;
|
||
|
|
output.ase_color = patch[0].ase_color * bary.x + patch[1].ase_color * bary.y + patch[2].ase_color * bary.z;
|
||
|
|
output.ase_texcoord = patch[0].ase_texcoord * bary.x + patch[1].ase_texcoord * bary.y + patch[2].ase_texcoord * bary.z;
|
||
|
|
#if defined(ASE_PHONG_TESSELLATION)
|
||
|
|
float3 pp[3];
|
||
|
|
for (int i = 0; i < 3; ++i)
|
||
|
|
pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS));
|
||
|
|
float phongStrength = _TessPhongStrength;
|
||
|
|
output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz;
|
||
|
|
#endif
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(patch[0], output);
|
||
|
|
return VertexFunction(output);
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
PackedVaryings vert ( Attributes input )
|
||
|
|
{
|
||
|
|
return VertexFunction( input );
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
half4 frag(PackedVaryings input ) : SV_Target
|
||
|
|
{
|
||
|
|
UNITY_SETUP_INSTANCE_ID( input );
|
||
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( input );
|
||
|
|
|
||
|
|
#if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
|
||
|
|
float4 shadowCoord = TransformWorldToShadowCoord(input.positionWS);
|
||
|
|
#else
|
||
|
|
float4 shadowCoord = float4(0, 0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 PositionWS = input.positionWS;
|
||
|
|
float3 PositionRWS = GetCameraRelativePositionWS( input.positionWS );
|
||
|
|
float4 ShadowCoord = shadowCoord;
|
||
|
|
|
||
|
|
float4 clampResult178 = clamp( input.ase_color , float4( 0,0,0,0 ) , float4( 1,1,1,0 ) );
|
||
|
|
float4 break170 = clampResult178;
|
||
|
|
float3 appendResult169 = (float3(break170.r , break170.g , break170.b));
|
||
|
|
float4 break166 = ( 2.0 * ( ( 1.0 - input.ase_color ) * input.ase_color ) );
|
||
|
|
float2 texCoord17 = input.ase_texcoord1.xy * float2( 1,1 ) + float2( 0,0 );
|
||
|
|
float3 ase_viewVectorWS = ( _WorldSpaceCameraPos.xyz - PositionWS );
|
||
|
|
float3 ase_viewDirWS = normalize( ase_viewVectorWS );
|
||
|
|
float3 ase_normalWS = input.ase_texcoord2.xyz;
|
||
|
|
float fresnelNdotV288 = dot( ase_normalWS, ase_viewDirWS );
|
||
|
|
float fresnelNode288 = ( 0.0 + 1.0 * pow( 1.0 - fresnelNdotV288, 10.17 ) );
|
||
|
|
float clampResult296 = clamp( fresnelNode288 , 0.0 , 1.0 );
|
||
|
|
float temp_output_291_0 = ( 1.0 - clampResult296 );
|
||
|
|
float3 ase_tangentWS = input.ase_texcoord3.xyz;
|
||
|
|
float3 ase_bitangentWS = input.ase_texcoord4.xyz;
|
||
|
|
float3 tanToWorld0 = float3( ase_tangentWS.x, ase_bitangentWS.x, ase_normalWS.x );
|
||
|
|
float3 tanToWorld1 = float3( ase_tangentWS.y, ase_bitangentWS.y, ase_normalWS.y );
|
||
|
|
float3 tanToWorld2 = float3( ase_tangentWS.z, ase_bitangentWS.z, ase_normalWS.z );
|
||
|
|
float3 ase_viewVectorTS = tanToWorld0 * ( _WorldSpaceCameraPos.xyz - PositionWS ).x + tanToWorld1 * ( _WorldSpaceCameraPos.xyz - PositionWS ).y + tanToWorld2 * ( _WorldSpaceCameraPos.xyz - PositionWS ).z;
|
||
|
|
float3 ase_viewDirTS = normalize( ase_viewVectorTS );
|
||
|
|
float2 OffsetPOM98 = POM( _HeightMap1, ( texCoord17 * _Tilling1 ), ddx( ( texCoord17 * _Tilling1 ) ), ddy( ( texCoord17 * _Tilling1 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset1 ) * temp_output_291_0 ), _PrlxRefPlane1, _HeightMap1_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult134 = lerp( 0.0 , break166.r , CalculateContrast(_BlendContrast,( _Height1 + tex2D( _HeightMap1, OffsetPOM98 ) )).r);
|
||
|
|
float2 OffsetPOM115 = POM( _HeightMap2, ( texCoord17 * _Tilling2 ), ddx( ( texCoord17 * _Tilling2 ) ), ddy( ( texCoord17 * _Tilling2 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset2 ) * temp_output_291_0 ), _PrlxRefPlane2, _HeightMap2_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult135 = lerp( 0.0 , break166.g , CalculateContrast(_BlendContrast,( _Height2 + tex2D( _HeightMap2, OffsetPOM115 ) )).r);
|
||
|
|
float2 OffsetPOM257 = POM( _HeightMap3, ( texCoord17 * _Tilling3 ), ddx( ( texCoord17 * _Tilling3 ) ), ddy( ( texCoord17 * _Tilling3 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset3 ) * temp_output_291_0 ), _PrlxRefPlane3, _HeightMap3_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult151 = lerp( 0.0 , break166.b , CalculateContrast(_BlendContrast,( _Height3 + tex2D( _HeightMap3, OffsetPOM257 ) )).r);
|
||
|
|
float3 appendResult129 = (float3(lerpResult134 , lerpResult135 , lerpResult151));
|
||
|
|
float3 clampResult182 = clamp( appendResult129 , float3( 0,0,0 ) , float3( 1,1,1 ) );
|
||
|
|
float3 temp_output_167_0 = ( appendResult169 + clampResult182 );
|
||
|
|
float3 clampResult190 = clamp( temp_output_167_0 , float3( 0,0,0 ) , float3( 1,1,1 ) );
|
||
|
|
float2 OffsetPOM261 = POM( _HeightMapBase, ( texCoord17 * _TillingBase ), ddx( ( texCoord17 * _TillingBase ) ), ddy( ( texCoord17 * _TillingBase ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffsetBase ) * temp_output_291_0 ), _PrlxRefPlaneBase, _HeightMapBase_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float2 temp_output_262_0 = ( OffsetPOM261 * 1.0 );
|
||
|
|
float2 temp_output_239_0 = ( OffsetPOM98 * 1.0 );
|
||
|
|
float2 temp_output_243_0 = ( OffsetPOM115 * 1.0 );
|
||
|
|
float2 temp_output_246_0 = ( OffsetPOM257 * 1.0 );
|
||
|
|
float3 layeredBlendVar132 = clampResult190;
|
||
|
|
float4 layeredBlend132 = ( lerp( lerp( lerp( ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_262_0,0.0 ) * _AlbedoColorBase ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_239_0,1.0 ) * _AlbedoColor1 ) , layeredBlendVar132.x ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_243_0,2.0 ) * _AlbedoColor2 ) , layeredBlendVar132.y ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_246_0,3.0 ) * _AlbedoColor3 ) , layeredBlendVar132.z ) );
|
||
|
|
|
||
|
|
|
||
|
|
float3 BaseColor = layeredBlend132.rgb;
|
||
|
|
float Alpha = 1;
|
||
|
|
float AlphaClipThreshold = 0.5;
|
||
|
|
|
||
|
|
half4 color = half4(BaseColor, Alpha );
|
||
|
|
|
||
|
|
#if defined( _ALPHATEST_ON )
|
||
|
|
AlphaDiscard( Alpha, AlphaClipThreshold );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
return color;
|
||
|
|
}
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
|
||
|
|
Name "DepthNormals"
|
||
|
|
Tags { "LightMode"="DepthNormals" }
|
||
|
|
|
||
|
|
ZWrite On
|
||
|
|
Blend One Zero
|
||
|
|
ZTest LEqual
|
||
|
|
ZWrite On
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
#define ASE_GEOMETRY 1
|
||
|
|
#pragma multi_compile_local_fragment _ALPHATEST_ON
|
||
|
|
#define _NORMAL_DROPOFF_TS 1
|
||
|
|
#pragma multi_compile_instancing
|
||
|
|
#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE
|
||
|
|
#define ASE_FOG 1
|
||
|
|
#pragma multi_compile_fragment _ DEBUG_DISPLAY
|
||
|
|
#define _EMISSION
|
||
|
|
#define _NORMALMAP 1
|
||
|
|
#define ASE_VERSION 19903
|
||
|
|
#define ASE_SRP_VERSION 120115
|
||
|
|
|
||
|
|
#pragma multi_compile _ DOTS_INSTANCING_ON
|
||
|
|
|
||
|
|
#pragma vertex vert
|
||
|
|
#pragma fragment frag
|
||
|
|
|
||
|
|
#if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE)
|
||
|
|
#define _SPECULAR_COLOR 1
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define SHADERPASS SHADERPASS_DEPTHNORMALSONLY
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.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/Input.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
||
|
|
|
||
|
|
#if defined(UNITY_INSTANCING_ENABLED) && ( defined(_TERRAIN_INSTANCED_PERPIXEL_NORMAL) || defined(_INSTANCEDTERRAINNORMALS_PIXEL) )
|
||
|
|
#define ENABLE_TERRAIN_PERPIXEL_NORMAL
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define ASE_NEEDS_FRAG_COLOR
|
||
|
|
#define ASE_NEEDS_TEXTURE_COORDINATES0
|
||
|
|
#define ASE_NEEDS_WORLD_POSITION
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_POSITION
|
||
|
|
#define ASE_NEEDS_WORLD_NORMAL
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_NORMAL
|
||
|
|
#define ASE_NEEDS_WORLD_TANGENT
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_TANGENT
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_BITANGENT
|
||
|
|
|
||
|
|
|
||
|
|
#if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45)
|
||
|
|
#define ASE_SV_DEPTH SV_DepthLessEqual
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid
|
||
|
|
#else
|
||
|
|
#define ASE_SV_DEPTH SV_Depth
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS
|
||
|
|
#endif
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float4 positionOS : POSITION;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
half4 texcoord : TEXCOORD0;
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct PackedVaryings
|
||
|
|
{
|
||
|
|
ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION;
|
||
|
|
float3 positionWS : TEXCOORD0;
|
||
|
|
half3 normalWS : TEXCOORD1;
|
||
|
|
float4 tangentWS : TEXCOORD2; // holds terrainUV ifdef ENABLE_TERRAIN_PERPIXEL_NORMAL
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
float4 ase_texcoord3 : TEXCOORD3;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
CBUFFER_START(UnityPerMaterial)
|
||
|
|
float4 _AlbedoColorBase;
|
||
|
|
float4 _AlbedoColor1;
|
||
|
|
float4 _EmissionColor;
|
||
|
|
float4 _HeightMapBase_ST;
|
||
|
|
float4 _HeightMap3_ST;
|
||
|
|
float4 _AlbedoColor2;
|
||
|
|
float4 _HeightMap2_ST;
|
||
|
|
float4 _AlbedoColor3;
|
||
|
|
float4 _HeightMap1_ST;
|
||
|
|
float _MetalicBrightnes2;
|
||
|
|
float _Metallic2;
|
||
|
|
float _MetalicBrightnes3;
|
||
|
|
float _Metallic1;
|
||
|
|
float _MetalicBrightnesBase;
|
||
|
|
float _MetallicBase;
|
||
|
|
float _SmoothnessBase;
|
||
|
|
float _NormalMapDepth3;
|
||
|
|
float _NormalMapDepth2;
|
||
|
|
float _NormalMapDepth1;
|
||
|
|
float _Smoothness1;
|
||
|
|
float _Smoothness2;
|
||
|
|
float _Smoothness3;
|
||
|
|
float _Metallic3;
|
||
|
|
float _MetalicBrightnes1;
|
||
|
|
float _BlendContrast;
|
||
|
|
float _PrlxRefPlaneBase;
|
||
|
|
float _Height1;
|
||
|
|
float _Tilling1;
|
||
|
|
float _ParalaxOffset1;
|
||
|
|
float _PrlxRefPlane1;
|
||
|
|
float _Height2;
|
||
|
|
float _Tilling2;
|
||
|
|
float _NormalMapDepthBase;
|
||
|
|
float _ParalaxOffset2;
|
||
|
|
float _Height3;
|
||
|
|
float _Tilling3;
|
||
|
|
float _ParalaxOffset3;
|
||
|
|
float _PrlxRefPlane3;
|
||
|
|
float _TillingBase;
|
||
|
|
float _ParalaxOffsetBase;
|
||
|
|
float _PrlxRefPlane2;
|
||
|
|
float _EmissionMultiplayer;
|
||
|
|
#ifdef ASE_TRANSMISSION
|
||
|
|
float _TransmissionShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TRANSLUCENCY
|
||
|
|
float _TransStrength;
|
||
|
|
float _TransNormal;
|
||
|
|
float _TransScattering;
|
||
|
|
float _TransDirect;
|
||
|
|
float _TransAmbient;
|
||
|
|
float _TransShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TESSELLATION
|
||
|
|
float _TessPhongStrength;
|
||
|
|
float _TessValue;
|
||
|
|
float _TessMin;
|
||
|
|
float _TessMax;
|
||
|
|
float _TessEdgeLength;
|
||
|
|
float _TessMaxDisp;
|
||
|
|
#endif
|
||
|
|
CBUFFER_END
|
||
|
|
|
||
|
|
#ifdef SCENEPICKINGPASS
|
||
|
|
float4 _SelectionID;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef SCENESELECTIONPASS
|
||
|
|
int _ObjectId;
|
||
|
|
int _PassValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
sampler2D _HeightMap1;
|
||
|
|
sampler2D _HeightMap2;
|
||
|
|
sampler2D _HeightMap3;
|
||
|
|
sampler2D _NormalMapBase;
|
||
|
|
sampler2D _HeightMapBase;
|
||
|
|
sampler2D _NormalMap1;
|
||
|
|
sampler2D _NormalMap2;
|
||
|
|
sampler2D _NormalMap3;
|
||
|
|
|
||
|
|
|
||
|
|
inline float2 POM( sampler2D heightMap, float2 uvs, float2 dx, float2 dy, float3 normalWorld, float3 viewWorld, float3 viewDirTan, int minSamples, int maxSamples, int sidewallSteps, float parallax, float refPlane, float2 tilling, float2 curv, int index )
|
||
|
|
{
|
||
|
|
float3 result = 0;
|
||
|
|
float stepIndex = 0;
|
||
|
|
float numSteps = floor( lerp( (float)maxSamples, (float)minSamples, saturate( dot( normalWorld, viewWorld ) ) ) );
|
||
|
|
float layerHeight = 1.0 / numSteps;
|
||
|
|
float2 plane = parallax * ( viewDirTan.xy / viewDirTan.z );
|
||
|
|
uvs.xy += refPlane * plane;
|
||
|
|
float2 deltaTex = -plane * layerHeight;
|
||
|
|
float2 prevTexOffset = 0;
|
||
|
|
float prevRayZ = 1.0f;
|
||
|
|
float prevHeight = 0.0f;
|
||
|
|
float2 currTexOffset = deltaTex;
|
||
|
|
float currRayZ = 1.0f - layerHeight;
|
||
|
|
float currHeight = 0.0f;
|
||
|
|
float intersection = 0;
|
||
|
|
float2 finalTexOffset = 0;
|
||
|
|
while ( stepIndex < numSteps + 1 )
|
||
|
|
{
|
||
|
|
currHeight = tex2Dgrad( heightMap, uvs + currTexOffset, dx, dy ).r;
|
||
|
|
if ( currHeight > currRayZ )
|
||
|
|
{
|
||
|
|
stepIndex = numSteps + 1;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
stepIndex++;
|
||
|
|
prevTexOffset = currTexOffset;
|
||
|
|
prevRayZ = currRayZ;
|
||
|
|
prevHeight = currHeight;
|
||
|
|
currTexOffset += deltaTex;
|
||
|
|
currRayZ -= layerHeight;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
float sectionSteps = sidewallSteps;
|
||
|
|
float sectionIndex = 0;
|
||
|
|
float newZ = 0;
|
||
|
|
float newHeight = 0;
|
||
|
|
while ( sectionIndex < sectionSteps )
|
||
|
|
{
|
||
|
|
intersection = ( prevHeight - prevRayZ ) / ( prevHeight - currHeight + currRayZ - prevRayZ );
|
||
|
|
finalTexOffset = prevTexOffset + intersection * deltaTex;
|
||
|
|
newZ = prevRayZ - intersection * layerHeight;
|
||
|
|
newHeight = tex2Dgrad( heightMap, uvs + finalTexOffset, dx, dy ).r;
|
||
|
|
if ( newHeight > newZ )
|
||
|
|
{
|
||
|
|
currTexOffset = finalTexOffset;
|
||
|
|
currHeight = newHeight;
|
||
|
|
currRayZ = newZ;
|
||
|
|
deltaTex = intersection * deltaTex;
|
||
|
|
layerHeight = intersection * layerHeight;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
prevTexOffset = finalTexOffset;
|
||
|
|
prevHeight = newHeight;
|
||
|
|
prevRayZ = newZ;
|
||
|
|
deltaTex = ( 1 - intersection ) * deltaTex;
|
||
|
|
layerHeight = ( 1 - intersection ) * layerHeight;
|
||
|
|
}
|
||
|
|
sectionIndex++;
|
||
|
|
}
|
||
|
|
return uvs.xy + finalTexOffset;
|
||
|
|
}
|
||
|
|
|
||
|
|
float4 CalculateContrast( float contrastValue, float4 colorTarget )
|
||
|
|
{
|
||
|
|
float t = 0.5 * ( 1.0 - contrastValue );
|
||
|
|
return mul( float4x4( contrastValue,0,0,t, 0,contrastValue,0,t, 0,0,contrastValue,t, 0,0,0,1 ), colorTarget );
|
||
|
|
}
|
||
|
|
|
||
|
|
PackedVaryings VertexFunction( Attributes input )
|
||
|
|
{
|
||
|
|
PackedVaryings output = (PackedVaryings)0;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||
|
|
|
||
|
|
output.ase_color = input.ase_color;
|
||
|
|
output.ase_texcoord3.xy = input.texcoord.xy;
|
||
|
|
|
||
|
|
//setting value to unused interpolator channels and avoid initialization warnings
|
||
|
|
output.ase_texcoord3.zw = 0;
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
float3 defaultVertexValue = input.positionOS.xyz;
|
||
|
|
#else
|
||
|
|
float3 defaultVertexValue = float3(0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 vertexValue = defaultVertexValue;
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
input.positionOS.xyz = vertexValue;
|
||
|
|
#else
|
||
|
|
input.positionOS.xyz += vertexValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
input.normalOS = input.normalOS;
|
||
|
|
input.tangentOS = input.tangentOS;
|
||
|
|
|
||
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz );
|
||
|
|
VertexNormalInputs normalInput = GetVertexNormalInputs( input.normalOS, input.tangentOS );
|
||
|
|
|
||
|
|
output.positionCS = vertexInput.positionCS;
|
||
|
|
output.positionWS = vertexInput.positionWS;
|
||
|
|
output.normalWS = normalInput.normalWS;
|
||
|
|
output.tangentWS = float4( normalInput.tangentWS, ( input.tangentOS.w > 0.0 ? 1.0 : -1.0 ) * GetOddNegativeScale() );
|
||
|
|
|
||
|
|
#if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL )
|
||
|
|
output.tangentWS.zw = input.texcoord.xy;
|
||
|
|
output.tangentWS.xy = input.texcoord.xy * unity_LightmapST.xy + unity_LightmapST.zw;
|
||
|
|
#endif
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if defined(ASE_TESSELLATION)
|
||
|
|
struct VertexControl
|
||
|
|
{
|
||
|
|
float4 positionOS : INTERNALTESSPOS;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
float4 texcoord : TEXCOORD0;
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct TessellationFactors
|
||
|
|
{
|
||
|
|
float edge[3] : SV_TessFactor;
|
||
|
|
float inside : SV_InsideTessFactor;
|
||
|
|
};
|
||
|
|
|
||
|
|
VertexControl vert ( Attributes input )
|
||
|
|
{
|
||
|
|
VertexControl output;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
output.positionOS = input.positionOS;
|
||
|
|
output.normalOS = input.normalOS;
|
||
|
|
output.tangentOS = input.tangentOS;
|
||
|
|
output.texcoord = input.texcoord;
|
||
|
|
output.ase_color = input.ase_color;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> input)
|
||
|
|
{
|
||
|
|
TessellationFactors output;
|
||
|
|
float4 tf = 1;
|
||
|
|
float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
|
||
|
|
float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
|
||
|
|
#if defined(ASE_FIXED_TESSELLATION)
|
||
|
|
tf = FixedTess( tessValue );
|
||
|
|
#elif defined(ASE_DISTANCE_TESSELLATION)
|
||
|
|
tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
|
||
|
|
#elif defined(ASE_LENGTH_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
|
||
|
|
#elif defined(ASE_LENGTH_CULL_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
|
||
|
|
#endif
|
||
|
|
output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
[partitioning("fractional_odd")]
|
||
|
|
[outputtopology("triangle_cw")]
|
||
|
|
[patchconstantfunc("TessellationFunction")]
|
||
|
|
[outputcontrolpoints(3)]
|
||
|
|
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
|
||
|
|
{
|
||
|
|
return patch[id];
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
|
||
|
|
{
|
||
|
|
Attributes output = (Attributes) 0;
|
||
|
|
output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z;
|
||
|
|
output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z;
|
||
|
|
output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z;
|
||
|
|
output.texcoord = patch[0].texcoord * bary.x + patch[1].texcoord * bary.y + patch[2].texcoord * bary.z;
|
||
|
|
output.ase_color = patch[0].ase_color * bary.x + patch[1].ase_color * bary.y + patch[2].ase_color * bary.z;
|
||
|
|
#if defined(ASE_PHONG_TESSELLATION)
|
||
|
|
float3 pp[3];
|
||
|
|
for (int i = 0; i < 3; ++i)
|
||
|
|
pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS));
|
||
|
|
float phongStrength = _TessPhongStrength;
|
||
|
|
output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz;
|
||
|
|
#endif
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(patch[0], output);
|
||
|
|
return VertexFunction(output);
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
PackedVaryings vert ( Attributes input )
|
||
|
|
{
|
||
|
|
return VertexFunction( input );
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
half4 frag( PackedVaryings input
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
,out float outputDepth : ASE_SV_DEPTH
|
||
|
|
#endif
|
||
|
|
) : SV_Target
|
||
|
|
{
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( input );
|
||
|
|
|
||
|
|
#if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS)
|
||
|
|
float4 shadowCoord = TransformWorldToShadowCoord(input.positionWS);
|
||
|
|
#else
|
||
|
|
float4 shadowCoord = float4(0, 0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
// @diogo: mikktspace compliant
|
||
|
|
float renormFactor = 1.0 / max( FLT_MIN, length( input.normalWS ) );
|
||
|
|
|
||
|
|
float3 PositionWS = input.positionWS;
|
||
|
|
float3 PositionRWS = GetCameraRelativePositionWS( input.positionWS );
|
||
|
|
float4 ShadowCoord = shadowCoord;
|
||
|
|
float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw );
|
||
|
|
float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w;
|
||
|
|
float4 ScreenPos = ComputeScreenPos( ClipPos );
|
||
|
|
float3 TangentWS = input.tangentWS.xyz * renormFactor;
|
||
|
|
float3 BitangentWS = cross( input.normalWS, input.tangentWS.xyz ) * input.tangentWS.w * renormFactor;
|
||
|
|
float3 NormalWS = input.normalWS * renormFactor;
|
||
|
|
|
||
|
|
#if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL )
|
||
|
|
float2 sampleCoords = (input.tangentWS.zw / _TerrainHeightmapRecipSize.zw + 0.5f) * _TerrainHeightmapRecipSize.xy;
|
||
|
|
NormalWS = TransformObjectToWorldNormal(normalize(SAMPLE_TEXTURE2D(_TerrainNormalmapTexture, sampler_TerrainNormalmapTexture, sampleCoords).rgb * 2 - 1));
|
||
|
|
TangentWS = -cross(GetObjectToWorldMatrix()._13_23_33, NormalWS);
|
||
|
|
BitangentWS = cross(NormalWS, -TangentWS);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float4 clampResult178 = clamp( input.ase_color , float4( 0,0,0,0 ) , float4( 1,1,1,0 ) );
|
||
|
|
float4 break170 = clampResult178;
|
||
|
|
float3 appendResult169 = (float3(break170.r , break170.g , break170.b));
|
||
|
|
float4 break166 = ( 2.0 * ( ( 1.0 - input.ase_color ) * input.ase_color ) );
|
||
|
|
float2 texCoord17 = input.ase_texcoord3.xy * float2( 1,1 ) + float2( 0,0 );
|
||
|
|
float3 ase_viewVectorWS = ( _WorldSpaceCameraPos.xyz - PositionWS );
|
||
|
|
float3 ase_viewDirWS = normalize( ase_viewVectorWS );
|
||
|
|
float fresnelNdotV288 = dot( NormalWS, ase_viewDirWS );
|
||
|
|
float fresnelNode288 = ( 0.0 + 1.0 * pow( 1.0 - fresnelNdotV288, 10.17 ) );
|
||
|
|
float clampResult296 = clamp( fresnelNode288 , 0.0 , 1.0 );
|
||
|
|
float temp_output_291_0 = ( 1.0 - clampResult296 );
|
||
|
|
float3 tanToWorld0 = float3( TangentWS.x, BitangentWS.x, NormalWS.x );
|
||
|
|
float3 tanToWorld1 = float3( TangentWS.y, BitangentWS.y, NormalWS.y );
|
||
|
|
float3 tanToWorld2 = float3( TangentWS.z, BitangentWS.z, NormalWS.z );
|
||
|
|
float3 ase_viewVectorTS = tanToWorld0 * ( _WorldSpaceCameraPos.xyz - PositionWS ).x + tanToWorld1 * ( _WorldSpaceCameraPos.xyz - PositionWS ).y + tanToWorld2 * ( _WorldSpaceCameraPos.xyz - PositionWS ).z;
|
||
|
|
float3 ase_viewDirTS = normalize( ase_viewVectorTS );
|
||
|
|
float2 OffsetPOM98 = POM( _HeightMap1, ( texCoord17 * _Tilling1 ), ddx( ( texCoord17 * _Tilling1 ) ), ddy( ( texCoord17 * _Tilling1 ) ), NormalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset1 ) * temp_output_291_0 ), _PrlxRefPlane1, _HeightMap1_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult134 = lerp( 0.0 , break166.r , CalculateContrast(_BlendContrast,( _Height1 + tex2D( _HeightMap1, OffsetPOM98 ) )).r);
|
||
|
|
float2 OffsetPOM115 = POM( _HeightMap2, ( texCoord17 * _Tilling2 ), ddx( ( texCoord17 * _Tilling2 ) ), ddy( ( texCoord17 * _Tilling2 ) ), NormalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset2 ) * temp_output_291_0 ), _PrlxRefPlane2, _HeightMap2_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult135 = lerp( 0.0 , break166.g , CalculateContrast(_BlendContrast,( _Height2 + tex2D( _HeightMap2, OffsetPOM115 ) )).r);
|
||
|
|
float2 OffsetPOM257 = POM( _HeightMap3, ( texCoord17 * _Tilling3 ), ddx( ( texCoord17 * _Tilling3 ) ), ddy( ( texCoord17 * _Tilling3 ) ), NormalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset3 ) * temp_output_291_0 ), _PrlxRefPlane3, _HeightMap3_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult151 = lerp( 0.0 , break166.b , CalculateContrast(_BlendContrast,( _Height3 + tex2D( _HeightMap3, OffsetPOM257 ) )).r);
|
||
|
|
float3 appendResult129 = (float3(lerpResult134 , lerpResult135 , lerpResult151));
|
||
|
|
float3 clampResult182 = clamp( appendResult129 , float3( 0,0,0 ) , float3( 1,1,1 ) );
|
||
|
|
float3 temp_output_167_0 = ( appendResult169 + clampResult182 );
|
||
|
|
float2 OffsetPOM261 = POM( _HeightMapBase, ( texCoord17 * _TillingBase ), ddx( ( texCoord17 * _TillingBase ) ), ddy( ( texCoord17 * _TillingBase ) ), NormalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffsetBase ) * temp_output_291_0 ), _PrlxRefPlaneBase, _HeightMapBase_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float2 temp_output_262_0 = ( OffsetPOM261 * 1.0 );
|
||
|
|
float3 unpack13 = UnpackNormalScale( tex2D( _NormalMapBase, temp_output_262_0 ), _NormalMapDepthBase );
|
||
|
|
unpack13.z = lerp( 1, unpack13.z, saturate(_NormalMapDepthBase) );
|
||
|
|
float2 temp_output_239_0 = ( OffsetPOM98 * 1.0 );
|
||
|
|
float3 unpack111 = UnpackNormalScale( tex2D( _NormalMap1, temp_output_239_0 ), _NormalMapDepth1 );
|
||
|
|
unpack111.z = lerp( 1, unpack111.z, saturate(_NormalMapDepth1) );
|
||
|
|
float2 temp_output_243_0 = ( OffsetPOM115 * 1.0 );
|
||
|
|
float3 unpack171 = UnpackNormalScale( tex2D( _NormalMap2, temp_output_243_0 ), _NormalMapDepth2 );
|
||
|
|
unpack171.z = lerp( 1, unpack171.z, saturate(_NormalMapDepth2) );
|
||
|
|
float2 temp_output_246_0 = ( OffsetPOM257 * 1.0 );
|
||
|
|
float3 unpack172 = UnpackNormalScale( tex2D( _NormalMap3, temp_output_246_0 ), _NormalMapDepth3 );
|
||
|
|
unpack172.z = lerp( 1, unpack172.z, saturate(_NormalMapDepth3) );
|
||
|
|
float3 layeredBlendVar173 = temp_output_167_0;
|
||
|
|
float3 layeredBlend173 = ( lerp( lerp( lerp( unpack13 , unpack111 , layeredBlendVar173.x ) , unpack171 , layeredBlendVar173.y ) , unpack172 , layeredBlendVar173.z ) );
|
||
|
|
|
||
|
|
|
||
|
|
float3 Normal = layeredBlend173;
|
||
|
|
float Alpha = 1;
|
||
|
|
float AlphaClipThreshold = 0.5;
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
float DeviceDepth = input.positionCS.z;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( _ALPHATEST_ON )
|
||
|
|
AlphaDiscard( Alpha, AlphaClipThreshold );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(LOD_FADE_CROSSFADE)
|
||
|
|
LODDitheringTransition( input.positionCS.xyz, unity_LODFade.x );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
outputDepth = DeviceDepth;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(_GBUFFER_NORMALS_OCT)
|
||
|
|
float2 octNormalWS = PackNormalOctQuadEncode(NormalWS);
|
||
|
|
float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5);
|
||
|
|
half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS);
|
||
|
|
return half4(packedNormalWS, 0.0);
|
||
|
|
#else
|
||
|
|
#if defined(_NORMALMAP)
|
||
|
|
#if _NORMAL_DROPOFF_TS
|
||
|
|
float3 normalWS = TransformTangentToWorld(Normal, half3x3(TangentWS, BitangentWS, NormalWS));
|
||
|
|
#elif _NORMAL_DROPOFF_OS
|
||
|
|
float3 normalWS = TransformObjectToWorldNormal(Normal);
|
||
|
|
#elif _NORMAL_DROPOFF_WS
|
||
|
|
float3 normalWS = Normal;
|
||
|
|
#endif
|
||
|
|
#else
|
||
|
|
float3 normalWS = NormalWS;
|
||
|
|
#endif
|
||
|
|
return half4(NormalizeNormalPerPixel(normalWS), 0.0);
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
|
||
|
|
Name "GBuffer"
|
||
|
|
Tags { "LightMode"="UniversalGBuffer" }
|
||
|
|
|
||
|
|
Blend One Zero, One Zero
|
||
|
|
ZWrite On
|
||
|
|
ZTest LEqual
|
||
|
|
Offset 0 , 0
|
||
|
|
ColorMask RGBA
|
||
|
|
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
#define ASE_GEOMETRY 1
|
||
|
|
#pragma multi_compile_local_fragment _ALPHATEST_ON
|
||
|
|
#define _NORMAL_DROPOFF_TS 1
|
||
|
|
#pragma shader_feature_local_fragment _RECEIVE_SHADOWS_OFF
|
||
|
|
#pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
|
||
|
|
#pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
|
||
|
|
#pragma multi_compile_instancing
|
||
|
|
#pragma instancing_options renderinglayer
|
||
|
|
#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE
|
||
|
|
#pragma multi_compile_fog
|
||
|
|
#define ASE_FOG 1
|
||
|
|
#pragma multi_compile_fragment _ DEBUG_DISPLAY
|
||
|
|
#define _EMISSION
|
||
|
|
#define _NORMALMAP 1
|
||
|
|
#define ASE_VERSION 19903
|
||
|
|
#define ASE_SRP_VERSION 120115
|
||
|
|
|
||
|
|
#pragma multi_compile _ DOTS_INSTANCING_ON
|
||
|
|
|
||
|
|
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
|
||
|
|
#pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING
|
||
|
|
#pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION
|
||
|
|
#pragma multi_compile_fragment _ _SHADOWS_SOFT
|
||
|
|
#pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3
|
||
|
|
#pragma multi_compile_fragment _ _LIGHT_LAYERS
|
||
|
|
#pragma multi_compile_fragment _ _RENDER_PASS_ENABLED
|
||
|
|
|
||
|
|
#pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
|
||
|
|
#pragma multi_compile _ SHADOWS_SHADOWMASK
|
||
|
|
#pragma multi_compile _ DIRLIGHTMAP_COMBINED
|
||
|
|
#pragma multi_compile _ LIGHTMAP_ON
|
||
|
|
#pragma multi_compile _ DYNAMICLIGHTMAP_ON
|
||
|
|
#pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
|
||
|
|
|
||
|
|
#pragma vertex vert
|
||
|
|
#pragma fragment frag
|
||
|
|
|
||
|
|
#define SHADERPASS SHADERPASS_GBUFFER
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.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/Input.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
||
|
|
|
||
|
|
#if defined(UNITY_INSTANCING_ENABLED) && ( defined(_TERRAIN_INSTANCED_PERPIXEL_NORMAL) || defined(_INSTANCEDTERRAINNORMALS_PIXEL) )
|
||
|
|
#define ENABLE_TERRAIN_PERPIXEL_NORMAL
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define ASE_NEEDS_FRAG_COLOR
|
||
|
|
#define ASE_NEEDS_TEXTURE_COORDINATES0
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_VIEW_DIR
|
||
|
|
#define ASE_NEEDS_WORLD_NORMAL
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_NORMAL
|
||
|
|
#define ASE_NEEDS_WORLD_POSITION
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_POSITION
|
||
|
|
#define ASE_NEEDS_WORLD_TANGENT
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_TANGENT
|
||
|
|
#define ASE_NEEDS_FRAG_WORLD_BITANGENT
|
||
|
|
|
||
|
|
|
||
|
|
#if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45)
|
||
|
|
#define ASE_SV_DEPTH SV_DepthLessEqual
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid
|
||
|
|
#else
|
||
|
|
#define ASE_SV_DEPTH SV_Depth
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS
|
||
|
|
#endif
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float4 positionOS : POSITION;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
float4 texcoord : TEXCOORD0;
|
||
|
|
#if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1)
|
||
|
|
float4 texcoord1 : TEXCOORD1;
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2)
|
||
|
|
float4 texcoord2 : TEXCOORD2;
|
||
|
|
#endif
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct PackedVaryings
|
||
|
|
{
|
||
|
|
ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION;
|
||
|
|
float3 positionWS : TEXCOORD0;
|
||
|
|
half3 normalWS : TEXCOORD1;
|
||
|
|
float4 tangentWS : TEXCOORD2; // holds terrainUV ifdef ENABLE_TERRAIN_PERPIXEL_NORMAL
|
||
|
|
float4 lightmapUVOrVertexSH : TEXCOORD3;
|
||
|
|
#if defined(ASE_FOG) || defined(_ADDITIONAL_LIGHTS_VERTEX)
|
||
|
|
half4 fogFactorAndVertexLight : TEXCOORD4;
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
||
|
|
float2 dynamicLightmapUV : TEXCOORD5;
|
||
|
|
#endif
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
float4 ase_texcoord6 : TEXCOORD6;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
CBUFFER_START(UnityPerMaterial)
|
||
|
|
float4 _AlbedoColorBase;
|
||
|
|
float4 _AlbedoColor1;
|
||
|
|
float4 _EmissionColor;
|
||
|
|
float4 _HeightMapBase_ST;
|
||
|
|
float4 _HeightMap3_ST;
|
||
|
|
float4 _AlbedoColor2;
|
||
|
|
float4 _HeightMap2_ST;
|
||
|
|
float4 _AlbedoColor3;
|
||
|
|
float4 _HeightMap1_ST;
|
||
|
|
float _MetalicBrightnes2;
|
||
|
|
float _Metallic2;
|
||
|
|
float _MetalicBrightnes3;
|
||
|
|
float _Metallic1;
|
||
|
|
float _MetalicBrightnesBase;
|
||
|
|
float _MetallicBase;
|
||
|
|
float _SmoothnessBase;
|
||
|
|
float _NormalMapDepth3;
|
||
|
|
float _NormalMapDepth2;
|
||
|
|
float _NormalMapDepth1;
|
||
|
|
float _Smoothness1;
|
||
|
|
float _Smoothness2;
|
||
|
|
float _Smoothness3;
|
||
|
|
float _Metallic3;
|
||
|
|
float _MetalicBrightnes1;
|
||
|
|
float _BlendContrast;
|
||
|
|
float _PrlxRefPlaneBase;
|
||
|
|
float _Height1;
|
||
|
|
float _Tilling1;
|
||
|
|
float _ParalaxOffset1;
|
||
|
|
float _PrlxRefPlane1;
|
||
|
|
float _Height2;
|
||
|
|
float _Tilling2;
|
||
|
|
float _NormalMapDepthBase;
|
||
|
|
float _ParalaxOffset2;
|
||
|
|
float _Height3;
|
||
|
|
float _Tilling3;
|
||
|
|
float _ParalaxOffset3;
|
||
|
|
float _PrlxRefPlane3;
|
||
|
|
float _TillingBase;
|
||
|
|
float _ParalaxOffsetBase;
|
||
|
|
float _PrlxRefPlane2;
|
||
|
|
float _EmissionMultiplayer;
|
||
|
|
#ifdef ASE_TRANSMISSION
|
||
|
|
float _TransmissionShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TRANSLUCENCY
|
||
|
|
float _TransStrength;
|
||
|
|
float _TransNormal;
|
||
|
|
float _TransScattering;
|
||
|
|
float _TransDirect;
|
||
|
|
float _TransAmbient;
|
||
|
|
float _TransShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TESSELLATION
|
||
|
|
float _TessPhongStrength;
|
||
|
|
float _TessValue;
|
||
|
|
float _TessMin;
|
||
|
|
float _TessMax;
|
||
|
|
float _TessEdgeLength;
|
||
|
|
float _TessMaxDisp;
|
||
|
|
#endif
|
||
|
|
CBUFFER_END
|
||
|
|
|
||
|
|
#ifdef SCENEPICKINGPASS
|
||
|
|
float4 _SelectionID;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef SCENESELECTIONPASS
|
||
|
|
int _ObjectId;
|
||
|
|
int _PassValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
sampler2D _HeightMap1;
|
||
|
|
sampler2D _HeightMap2;
|
||
|
|
sampler2D _HeightMap3;
|
||
|
|
TEXTURE2D_ARRAY(_AlbedoMapArray);
|
||
|
|
sampler2D _HeightMapBase;
|
||
|
|
SAMPLER(sampler_AlbedoMapArray);
|
||
|
|
sampler2D _NormalMapBase;
|
||
|
|
sampler2D _NormalMap1;
|
||
|
|
sampler2D _NormalMap2;
|
||
|
|
sampler2D _NormalMap3;
|
||
|
|
TEXTURE2D_ARRAY(_MetallicMapArray);
|
||
|
|
SAMPLER(sampler_MetallicMapArray);
|
||
|
|
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl"
|
||
|
|
|
||
|
|
inline float2 POM( sampler2D heightMap, float2 uvs, float2 dx, float2 dy, float3 normalWorld, float3 viewWorld, float3 viewDirTan, int minSamples, int maxSamples, int sidewallSteps, float parallax, float refPlane, float2 tilling, float2 curv, int index )
|
||
|
|
{
|
||
|
|
float3 result = 0;
|
||
|
|
float stepIndex = 0;
|
||
|
|
float numSteps = floor( lerp( (float)maxSamples, (float)minSamples, saturate( dot( normalWorld, viewWorld ) ) ) );
|
||
|
|
float layerHeight = 1.0 / numSteps;
|
||
|
|
float2 plane = parallax * ( viewDirTan.xy / viewDirTan.z );
|
||
|
|
uvs.xy += refPlane * plane;
|
||
|
|
float2 deltaTex = -plane * layerHeight;
|
||
|
|
float2 prevTexOffset = 0;
|
||
|
|
float prevRayZ = 1.0f;
|
||
|
|
float prevHeight = 0.0f;
|
||
|
|
float2 currTexOffset = deltaTex;
|
||
|
|
float currRayZ = 1.0f - layerHeight;
|
||
|
|
float currHeight = 0.0f;
|
||
|
|
float intersection = 0;
|
||
|
|
float2 finalTexOffset = 0;
|
||
|
|
while ( stepIndex < numSteps + 1 )
|
||
|
|
{
|
||
|
|
currHeight = tex2Dgrad( heightMap, uvs + currTexOffset, dx, dy ).r;
|
||
|
|
if ( currHeight > currRayZ )
|
||
|
|
{
|
||
|
|
stepIndex = numSteps + 1;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
stepIndex++;
|
||
|
|
prevTexOffset = currTexOffset;
|
||
|
|
prevRayZ = currRayZ;
|
||
|
|
prevHeight = currHeight;
|
||
|
|
currTexOffset += deltaTex;
|
||
|
|
currRayZ -= layerHeight;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
float sectionSteps = sidewallSteps;
|
||
|
|
float sectionIndex = 0;
|
||
|
|
float newZ = 0;
|
||
|
|
float newHeight = 0;
|
||
|
|
while ( sectionIndex < sectionSteps )
|
||
|
|
{
|
||
|
|
intersection = ( prevHeight - prevRayZ ) / ( prevHeight - currHeight + currRayZ - prevRayZ );
|
||
|
|
finalTexOffset = prevTexOffset + intersection * deltaTex;
|
||
|
|
newZ = prevRayZ - intersection * layerHeight;
|
||
|
|
newHeight = tex2Dgrad( heightMap, uvs + finalTexOffset, dx, dy ).r;
|
||
|
|
if ( newHeight > newZ )
|
||
|
|
{
|
||
|
|
currTexOffset = finalTexOffset;
|
||
|
|
currHeight = newHeight;
|
||
|
|
currRayZ = newZ;
|
||
|
|
deltaTex = intersection * deltaTex;
|
||
|
|
layerHeight = intersection * layerHeight;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
prevTexOffset = finalTexOffset;
|
||
|
|
prevHeight = newHeight;
|
||
|
|
prevRayZ = newZ;
|
||
|
|
deltaTex = ( 1 - intersection ) * deltaTex;
|
||
|
|
layerHeight = ( 1 - intersection ) * layerHeight;
|
||
|
|
}
|
||
|
|
sectionIndex++;
|
||
|
|
}
|
||
|
|
return uvs.xy + finalTexOffset;
|
||
|
|
}
|
||
|
|
|
||
|
|
float4 CalculateContrast( float contrastValue, float4 colorTarget )
|
||
|
|
{
|
||
|
|
float t = 0.5 * ( 1.0 - contrastValue );
|
||
|
|
return mul( float4x4( contrastValue,0,0,t, 0,contrastValue,0,t, 0,0,contrastValue,t, 0,0,0,1 ), colorTarget );
|
||
|
|
}
|
||
|
|
|
||
|
|
PackedVaryings VertexFunction( Attributes input )
|
||
|
|
{
|
||
|
|
PackedVaryings output = (PackedVaryings)0;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||
|
|
|
||
|
|
output.ase_color = input.ase_color;
|
||
|
|
output.ase_texcoord6.xy = input.texcoord.xy;
|
||
|
|
|
||
|
|
//setting value to unused interpolator channels and avoid initialization warnings
|
||
|
|
output.ase_texcoord6.zw = 0;
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
float3 defaultVertexValue = input.positionOS.xyz;
|
||
|
|
#else
|
||
|
|
float3 defaultVertexValue = float3(0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 vertexValue = defaultVertexValue;
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
input.positionOS.xyz = vertexValue;
|
||
|
|
#else
|
||
|
|
input.positionOS.xyz += vertexValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
input.normalOS = input.normalOS;
|
||
|
|
input.tangentOS = input.tangentOS;
|
||
|
|
|
||
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz );
|
||
|
|
VertexNormalInputs normalInput = GetVertexNormalInputs( input.normalOS, input.tangentOS );
|
||
|
|
|
||
|
|
#if defined(LIGHTMAP_ON)
|
||
|
|
OUTPUT_LIGHTMAP_UV(input.texcoord1, unity_LightmapST, output.lightmapUVOrVertexSH.xy);
|
||
|
|
#else
|
||
|
|
OUTPUT_SH(normalInput.normalWS.xyz, output.lightmapUVOrVertexSH.xyz);
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
||
|
|
output.dynamicLightmapUV.xy = input.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(ASE_FOG) || defined(_ADDITIONAL_LIGHTS_VERTEX)
|
||
|
|
output.fogFactorAndVertexLight = 0;
|
||
|
|
#if defined(ASE_FOG) && !defined(_FOG_FRAGMENT)
|
||
|
|
// @diogo: no fog applied in GBuffer
|
||
|
|
#endif
|
||
|
|
#ifdef _ADDITIONAL_LIGHTS_VERTEX
|
||
|
|
half3 vertexLight = VertexLighting( vertexInput.positionWS, normalInput.normalWS );
|
||
|
|
output.fogFactorAndVertexLight.yzw = vertexLight;
|
||
|
|
#endif
|
||
|
|
#endif
|
||
|
|
|
||
|
|
output.positionCS = vertexInput.positionCS;
|
||
|
|
output.positionWS = vertexInput.positionWS;
|
||
|
|
output.normalWS = normalInput.normalWS;
|
||
|
|
output.tangentWS = float4( normalInput.tangentWS, ( input.tangentOS.w > 0.0 ? 1.0 : -1.0 ) * GetOddNegativeScale() );
|
||
|
|
|
||
|
|
#if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL )
|
||
|
|
output.tangentWS.zw = input.texcoord.xy;
|
||
|
|
output.tangentWS.xy = input.texcoord.xy * unity_LightmapST.xy + unity_LightmapST.zw;
|
||
|
|
#endif
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if defined(ASE_TESSELLATION)
|
||
|
|
struct VertexControl
|
||
|
|
{
|
||
|
|
float4 positionOS : INTERNALTESSPOS;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
float4 texcoord : TEXCOORD0;
|
||
|
|
#if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1)
|
||
|
|
float4 texcoord1 : TEXCOORD1;
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2)
|
||
|
|
float4 texcoord2 : TEXCOORD2;
|
||
|
|
#endif
|
||
|
|
float4 ase_color : COLOR;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct TessellationFactors
|
||
|
|
{
|
||
|
|
float edge[3] : SV_TessFactor;
|
||
|
|
float inside : SV_InsideTessFactor;
|
||
|
|
};
|
||
|
|
|
||
|
|
VertexControl vert ( Attributes input )
|
||
|
|
{
|
||
|
|
VertexControl output;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
output.positionOS = input.positionOS;
|
||
|
|
output.normalOS = input.normalOS;
|
||
|
|
output.tangentOS = input.tangentOS;
|
||
|
|
output.texcoord = input.texcoord;
|
||
|
|
#if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1)
|
||
|
|
output.texcoord1 = input.texcoord1;
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2)
|
||
|
|
output.texcoord2 = input.texcoord2;
|
||
|
|
#endif
|
||
|
|
output.ase_color = input.ase_color;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> input)
|
||
|
|
{
|
||
|
|
TessellationFactors output;
|
||
|
|
float4 tf = 1;
|
||
|
|
float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
|
||
|
|
float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
|
||
|
|
#if defined(ASE_FIXED_TESSELLATION)
|
||
|
|
tf = FixedTess( tessValue );
|
||
|
|
#elif defined(ASE_DISTANCE_TESSELLATION)
|
||
|
|
tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
|
||
|
|
#elif defined(ASE_LENGTH_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
|
||
|
|
#elif defined(ASE_LENGTH_CULL_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
|
||
|
|
#endif
|
||
|
|
output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
[partitioning("fractional_odd")]
|
||
|
|
[outputtopology("triangle_cw")]
|
||
|
|
[patchconstantfunc("TessellationFunction")]
|
||
|
|
[outputcontrolpoints(3)]
|
||
|
|
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
|
||
|
|
{
|
||
|
|
return patch[id];
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
|
||
|
|
{
|
||
|
|
Attributes output = (Attributes) 0;
|
||
|
|
output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z;
|
||
|
|
output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z;
|
||
|
|
output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z;
|
||
|
|
output.texcoord = patch[0].texcoord * bary.x + patch[1].texcoord * bary.y + patch[2].texcoord * bary.z;
|
||
|
|
#if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1)
|
||
|
|
output.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z;
|
||
|
|
#endif
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2)
|
||
|
|
output.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z;
|
||
|
|
#endif
|
||
|
|
output.ase_color = patch[0].ase_color * bary.x + patch[1].ase_color * bary.y + patch[2].ase_color * bary.z;
|
||
|
|
#if defined(ASE_PHONG_TESSELLATION)
|
||
|
|
float3 pp[3];
|
||
|
|
for (int i = 0; i < 3; ++i)
|
||
|
|
pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS));
|
||
|
|
float phongStrength = _TessPhongStrength;
|
||
|
|
output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz;
|
||
|
|
#endif
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(patch[0], output);
|
||
|
|
return VertexFunction(output);
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
PackedVaryings vert ( Attributes input )
|
||
|
|
{
|
||
|
|
return VertexFunction( input );
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
FragmentOutput frag ( PackedVaryings input
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
,out float outputDepth : ASE_SV_DEPTH
|
||
|
|
#endif
|
||
|
|
)
|
||
|
|
{
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
|
||
|
|
|
||
|
|
#if defined(LOD_FADE_CROSSFADE)
|
||
|
|
LODDitheringTransition( input.positionCS.xyz, unity_LODFade.x );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(MAIN_LIGHT_CALCULATE_SHADOWS)
|
||
|
|
float4 shadowCoord = TransformWorldToShadowCoord( input.positionWS );
|
||
|
|
#else
|
||
|
|
float4 shadowCoord = float4(0, 0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
// @diogo: mikktspace compliant
|
||
|
|
float renormFactor = 1.0 / max( FLT_MIN, length( input.normalWS ) );
|
||
|
|
|
||
|
|
float3 PositionWS = input.positionWS;
|
||
|
|
float3 PositionRWS = GetCameraRelativePositionWS( PositionWS );
|
||
|
|
float3 ViewDirWS = GetWorldSpaceNormalizeViewDir( PositionWS );
|
||
|
|
float4 ShadowCoord = shadowCoord;
|
||
|
|
float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw );
|
||
|
|
float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w;
|
||
|
|
float4 ScreenPos = ComputeScreenPos( ClipPos );
|
||
|
|
float3 TangentWS = input.tangentWS.xyz * renormFactor;
|
||
|
|
float3 BitangentWS = cross( input.normalWS, input.tangentWS.xyz ) * input.tangentWS.w * renormFactor;
|
||
|
|
float3 NormalWS = input.normalWS * renormFactor;
|
||
|
|
|
||
|
|
#if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL )
|
||
|
|
float2 sampleCoords = (input.tangentWS.zw / _TerrainHeightmapRecipSize.zw + 0.5f) * _TerrainHeightmapRecipSize.xy;
|
||
|
|
NormalWS = TransformObjectToWorldNormal(normalize(SAMPLE_TEXTURE2D(_TerrainNormalmapTexture, sampler_TerrainNormalmapTexture, sampleCoords).rgb * 2 - 1));
|
||
|
|
TangentWS = -cross(GetObjectToWorldMatrix()._13_23_33, NormalWS);
|
||
|
|
BitangentWS = cross(NormalWS, -TangentWS);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float4 clampResult178 = clamp( input.ase_color , float4( 0,0,0,0 ) , float4( 1,1,1,0 ) );
|
||
|
|
float4 break170 = clampResult178;
|
||
|
|
float3 appendResult169 = (float3(break170.r , break170.g , break170.b));
|
||
|
|
float4 break166 = ( 2.0 * ( ( 1.0 - input.ase_color ) * input.ase_color ) );
|
||
|
|
float2 texCoord17 = input.ase_texcoord6.xy * float2( 1,1 ) + float2( 0,0 );
|
||
|
|
float fresnelNdotV288 = dot( NormalWS, ViewDirWS );
|
||
|
|
float fresnelNode288 = ( 0.0 + 1.0 * pow( 1.0 - fresnelNdotV288, 10.17 ) );
|
||
|
|
float clampResult296 = clamp( fresnelNode288 , 0.0 , 1.0 );
|
||
|
|
float temp_output_291_0 = ( 1.0 - clampResult296 );
|
||
|
|
float3 tanToWorld0 = float3( TangentWS.x, BitangentWS.x, NormalWS.x );
|
||
|
|
float3 tanToWorld1 = float3( TangentWS.y, BitangentWS.y, NormalWS.y );
|
||
|
|
float3 tanToWorld2 = float3( TangentWS.z, BitangentWS.z, NormalWS.z );
|
||
|
|
float3 ase_viewVectorTS = tanToWorld0 * ( _WorldSpaceCameraPos.xyz - PositionWS ).x + tanToWorld1 * ( _WorldSpaceCameraPos.xyz - PositionWS ).y + tanToWorld2 * ( _WorldSpaceCameraPos.xyz - PositionWS ).z;
|
||
|
|
float3 ase_viewDirTS = normalize( ase_viewVectorTS );
|
||
|
|
float2 OffsetPOM98 = POM( _HeightMap1, ( texCoord17 * _Tilling1 ), ddx( ( texCoord17 * _Tilling1 ) ), ddy( ( texCoord17 * _Tilling1 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset1 ) * temp_output_291_0 ), _PrlxRefPlane1, _HeightMap1_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult134 = lerp( 0.0 , break166.r , CalculateContrast(_BlendContrast,( _Height1 + tex2D( _HeightMap1, OffsetPOM98 ) )).r);
|
||
|
|
float2 OffsetPOM115 = POM( _HeightMap2, ( texCoord17 * _Tilling2 ), ddx( ( texCoord17 * _Tilling2 ) ), ddy( ( texCoord17 * _Tilling2 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset2 ) * temp_output_291_0 ), _PrlxRefPlane2, _HeightMap2_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult135 = lerp( 0.0 , break166.g , CalculateContrast(_BlendContrast,( _Height2 + tex2D( _HeightMap2, OffsetPOM115 ) )).r);
|
||
|
|
float2 OffsetPOM257 = POM( _HeightMap3, ( texCoord17 * _Tilling3 ), ddx( ( texCoord17 * _Tilling3 ) ), ddy( ( texCoord17 * _Tilling3 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset3 ) * temp_output_291_0 ), _PrlxRefPlane3, _HeightMap3_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float lerpResult151 = lerp( 0.0 , break166.b , CalculateContrast(_BlendContrast,( _Height3 + tex2D( _HeightMap3, OffsetPOM257 ) )).r);
|
||
|
|
float3 appendResult129 = (float3(lerpResult134 , lerpResult135 , lerpResult151));
|
||
|
|
float3 clampResult182 = clamp( appendResult129 , float3( 0,0,0 ) , float3( 1,1,1 ) );
|
||
|
|
float3 temp_output_167_0 = ( appendResult169 + clampResult182 );
|
||
|
|
float3 clampResult190 = clamp( temp_output_167_0 , float3( 0,0,0 ) , float3( 1,1,1 ) );
|
||
|
|
float2 OffsetPOM261 = POM( _HeightMapBase, ( texCoord17 * _TillingBase ), ddx( ( texCoord17 * _TillingBase ) ), ddy( ( texCoord17 * _TillingBase ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffsetBase ) * temp_output_291_0 ), _PrlxRefPlaneBase, _HeightMapBase_ST.xy, float2( 0, 0 ), 0 );
|
||
|
|
float2 temp_output_262_0 = ( OffsetPOM261 * 1.0 );
|
||
|
|
float2 temp_output_239_0 = ( OffsetPOM98 * 1.0 );
|
||
|
|
float2 temp_output_243_0 = ( OffsetPOM115 * 1.0 );
|
||
|
|
float2 temp_output_246_0 = ( OffsetPOM257 * 1.0 );
|
||
|
|
float3 layeredBlendVar132 = clampResult190;
|
||
|
|
float4 layeredBlend132 = ( lerp( lerp( lerp( ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_262_0,0.0 ) * _AlbedoColorBase ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_239_0,1.0 ) * _AlbedoColor1 ) , layeredBlendVar132.x ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_243_0,2.0 ) * _AlbedoColor2 ) , layeredBlendVar132.y ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_246_0,3.0 ) * _AlbedoColor3 ) , layeredBlendVar132.z ) );
|
||
|
|
|
||
|
|
float3 unpack13 = UnpackNormalScale( tex2D( _NormalMapBase, temp_output_262_0 ), _NormalMapDepthBase );
|
||
|
|
unpack13.z = lerp( 1, unpack13.z, saturate(_NormalMapDepthBase) );
|
||
|
|
float3 unpack111 = UnpackNormalScale( tex2D( _NormalMap1, temp_output_239_0 ), _NormalMapDepth1 );
|
||
|
|
unpack111.z = lerp( 1, unpack111.z, saturate(_NormalMapDepth1) );
|
||
|
|
float3 unpack171 = UnpackNormalScale( tex2D( _NormalMap2, temp_output_243_0 ), _NormalMapDepth2 );
|
||
|
|
unpack171.z = lerp( 1, unpack171.z, saturate(_NormalMapDepth2) );
|
||
|
|
float3 unpack172 = UnpackNormalScale( tex2D( _NormalMap3, temp_output_246_0 ), _NormalMapDepth3 );
|
||
|
|
unpack172.z = lerp( 1, unpack172.z, saturate(_NormalMapDepth3) );
|
||
|
|
float3 layeredBlendVar173 = temp_output_167_0;
|
||
|
|
float3 layeredBlend173 = ( lerp( lerp( lerp( unpack13 , unpack111 , layeredBlendVar173.x ) , unpack171 , layeredBlendVar173.y ) , unpack172 , layeredBlendVar173.z ) );
|
||
|
|
|
||
|
|
float4 tex2DArrayNode253 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_262_0,0.0 );
|
||
|
|
float lerpResult223 = lerp( tex2DArrayNode253.r , 1.0 , _MetalicBrightnesBase);
|
||
|
|
float4 tex2DArrayNode254 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_239_0,0.0 );
|
||
|
|
float lerpResult93 = lerp( tex2DArrayNode254.r , 1.0 , _MetalicBrightnes1);
|
||
|
|
float4 tex2DArrayNode255 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_243_0,0.0 );
|
||
|
|
float lerpResult206 = lerp( tex2DArrayNode255.r , 1.0 , _MetalicBrightnes2);
|
||
|
|
float4 tex2DArrayNode256 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_246_0,0.0 );
|
||
|
|
float lerpResult214 = lerp( tex2DArrayNode256.r , 1.0 , _MetalicBrightnes3);
|
||
|
|
float3 layeredBlendVar220 = temp_output_167_0;
|
||
|
|
float layeredBlend220 = ( lerp( lerp( lerp( ( _MetallicBase * lerpResult223 ) , ( _Metallic1 * lerpResult93 ) , layeredBlendVar220.x ) , ( _Metallic2 * lerpResult206 ) , layeredBlendVar220.y ) , ( _Metallic3 * lerpResult214 ) , layeredBlendVar220.z ) );
|
||
|
|
|
||
|
|
float3 layeredBlendVar229 = temp_output_167_0;
|
||
|
|
float layeredBlend229 = ( lerp( lerp( lerp( ( tex2DArrayNode253.a * _SmoothnessBase ) , ( tex2DArrayNode254.a * _Smoothness1 ) , layeredBlendVar229.x ) , ( tex2DArrayNode255.a * _Smoothness2 ) , layeredBlendVar229.y ) , ( tex2DArrayNode256.a * _Smoothness3 ) , layeredBlendVar229.z ) );
|
||
|
|
float clampResult251 = clamp( ( layeredBlend229 + 0.0 ) , 0.0 , 1.0 );
|
||
|
|
|
||
|
|
|
||
|
|
float3 BaseColor = layeredBlend132.rgb;
|
||
|
|
float3 Normal = layeredBlend173;
|
||
|
|
float3 Specular = 0.5;
|
||
|
|
float Metallic = layeredBlend220;
|
||
|
|
float Smoothness = clampResult251;
|
||
|
|
float Occlusion = 1;
|
||
|
|
float3 Emission = ( _EmissionColor * ( _EmissionMultiplayer * layeredBlend132 ) ).rgb;
|
||
|
|
float Alpha = 1;
|
||
|
|
float AlphaClipThreshold = 0.5;
|
||
|
|
float AlphaClipThresholdShadow = 0.5;
|
||
|
|
float3 BakedGI = 0;
|
||
|
|
float3 RefractionColor = 1;
|
||
|
|
float RefractionIndex = 1;
|
||
|
|
float3 Transmission = 1;
|
||
|
|
float3 Translucency = 1;
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
float DeviceDepth = ClipPos.z;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( _ALPHATEST_ON )
|
||
|
|
AlphaDiscard( Alpha, AlphaClipThreshold );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_CHANGES_WORLD_POS)
|
||
|
|
ShadowCoord = TransformWorldToShadowCoord( PositionWS );
|
||
|
|
#endif
|
||
|
|
|
||
|
|
InputData inputData = (InputData)0;
|
||
|
|
inputData.positionWS = PositionWS;
|
||
|
|
inputData.positionCS = float4( input.positionCS.xy, ClipPos.zw / ClipPos.w );
|
||
|
|
inputData.normalizedScreenSpaceUV = ScreenPosNorm.xy;
|
||
|
|
inputData.shadowCoord = ShadowCoord;
|
||
|
|
|
||
|
|
#ifdef _NORMALMAP
|
||
|
|
#if _NORMAL_DROPOFF_TS
|
||
|
|
inputData.normalWS = TransformTangentToWorld(Normal, half3x3( TangentWS, BitangentWS, NormalWS ));
|
||
|
|
#elif _NORMAL_DROPOFF_OS
|
||
|
|
inputData.normalWS = TransformObjectToWorldNormal(Normal);
|
||
|
|
#elif _NORMAL_DROPOFF_WS
|
||
|
|
inputData.normalWS = Normal;
|
||
|
|
#endif
|
||
|
|
#else
|
||
|
|
inputData.normalWS = NormalWS;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS);
|
||
|
|
inputData.viewDirectionWS = SafeNormalize( ViewDirWS );
|
||
|
|
|
||
|
|
#ifdef ASE_FOG
|
||
|
|
// @diogo: no fog applied in GBuffer
|
||
|
|
#endif
|
||
|
|
#ifdef _ADDITIONAL_LIGHTS_VERTEX
|
||
|
|
inputData.vertexLighting = input.fogFactorAndVertexLight.yzw;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL )
|
||
|
|
float3 SH = SampleSH(inputData.normalWS.xyz);
|
||
|
|
#else
|
||
|
|
float3 SH = input.lightmapUVOrVertexSH.xyz;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
||
|
|
inputData.bakedGI = SAMPLE_GI(input.lightmapUVOrVertexSH.xy, input.dynamicLightmapUV.xy, SH, inputData.normalWS);
|
||
|
|
#else
|
||
|
|
inputData.bakedGI = SAMPLE_GI(input.lightmapUVOrVertexSH.xy, SH, inputData.normalWS);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef ASE_BAKEDGI
|
||
|
|
inputData.bakedGI = BakedGI;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
inputData.shadowMask = SAMPLE_SHADOWMASK(input.lightmapUVOrVertexSH.xy);
|
||
|
|
|
||
|
|
#if defined(DEBUG_DISPLAY)
|
||
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
||
|
|
inputData.dynamicLightmapUV = input.dynamicLightmapUV.xy;
|
||
|
|
#endif
|
||
|
|
#if defined(LIGHTMAP_ON)
|
||
|
|
inputData.staticLightmapUV = input.lightmapUVOrVertexSH.xy;
|
||
|
|
#else
|
||
|
|
inputData.vertexSH = SH;
|
||
|
|
#endif
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef _DBUFFER
|
||
|
|
ApplyDecal(input.positionCS,
|
||
|
|
BaseColor,
|
||
|
|
Specular,
|
||
|
|
inputData.normalWS,
|
||
|
|
Metallic,
|
||
|
|
Occlusion,
|
||
|
|
Smoothness);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
BRDFData brdfData;
|
||
|
|
InitializeBRDFData(BaseColor, Metallic, Specular, Smoothness, Alpha, brdfData);
|
||
|
|
|
||
|
|
Light mainLight = GetMainLight(inputData.shadowCoord, inputData.positionWS, inputData.shadowMask);
|
||
|
|
half4 color;
|
||
|
|
MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, inputData.shadowMask);
|
||
|
|
color.rgb = GlobalIllumination(brdfData, inputData.bakedGI, Occlusion, inputData.positionWS, inputData.normalWS, inputData.viewDirectionWS);
|
||
|
|
color.a = Alpha;
|
||
|
|
|
||
|
|
#ifdef ASE_FINAL_COLOR_ALPHA_MULTIPLY
|
||
|
|
color.rgb *= color.a;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
outputDepth = DeviceDepth;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
return BRDFDataToGbuffer(brdfData, inputData, Smoothness, Emission + color.rgb, Occlusion);
|
||
|
|
}
|
||
|
|
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
|
||
|
|
Name "SceneSelectionPass"
|
||
|
|
Tags { "LightMode"="SceneSelectionPass" }
|
||
|
|
|
||
|
|
Cull Off
|
||
|
|
AlphaToMask Off
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
#define ASE_GEOMETRY 1
|
||
|
|
#define _NORMAL_DROPOFF_TS 1
|
||
|
|
#define ASE_FOG 1
|
||
|
|
#pragma multi_compile_fragment _ DEBUG_DISPLAY
|
||
|
|
#define _EMISSION
|
||
|
|
#define _NORMALMAP 1
|
||
|
|
#define ASE_VERSION 19903
|
||
|
|
#define ASE_SRP_VERSION 120115
|
||
|
|
|
||
|
|
#pragma multi_compile _ DOTS_INSTANCING_ON
|
||
|
|
|
||
|
|
#pragma vertex vert
|
||
|
|
#pragma fragment frag
|
||
|
|
|
||
|
|
#if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE)
|
||
|
|
#define _SPECULAR_COLOR 1
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define SCENESELECTIONPASS 1
|
||
|
|
|
||
|
|
#define ATTRIBUTES_NEED_NORMAL
|
||
|
|
#define ATTRIBUTES_NEED_TANGENT
|
||
|
|
#define SHADERPASS SHADERPASS_DEPTHONLY
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.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/Input.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45)
|
||
|
|
#define ASE_SV_DEPTH SV_DepthLessEqual
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid
|
||
|
|
#else
|
||
|
|
#define ASE_SV_DEPTH SV_Depth
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS
|
||
|
|
#endif
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float4 positionOS : POSITION;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct PackedVaryings
|
||
|
|
{
|
||
|
|
ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION;
|
||
|
|
float3 positionWS : TEXCOORD0;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
CBUFFER_START(UnityPerMaterial)
|
||
|
|
float4 _AlbedoColorBase;
|
||
|
|
float4 _AlbedoColor1;
|
||
|
|
float4 _EmissionColor;
|
||
|
|
float4 _HeightMapBase_ST;
|
||
|
|
float4 _HeightMap3_ST;
|
||
|
|
float4 _AlbedoColor2;
|
||
|
|
float4 _HeightMap2_ST;
|
||
|
|
float4 _AlbedoColor3;
|
||
|
|
float4 _HeightMap1_ST;
|
||
|
|
float _MetalicBrightnes2;
|
||
|
|
float _Metallic2;
|
||
|
|
float _MetalicBrightnes3;
|
||
|
|
float _Metallic1;
|
||
|
|
float _MetalicBrightnesBase;
|
||
|
|
float _MetallicBase;
|
||
|
|
float _SmoothnessBase;
|
||
|
|
float _NormalMapDepth3;
|
||
|
|
float _NormalMapDepth2;
|
||
|
|
float _NormalMapDepth1;
|
||
|
|
float _Smoothness1;
|
||
|
|
float _Smoothness2;
|
||
|
|
float _Smoothness3;
|
||
|
|
float _Metallic3;
|
||
|
|
float _MetalicBrightnes1;
|
||
|
|
float _BlendContrast;
|
||
|
|
float _PrlxRefPlaneBase;
|
||
|
|
float _Height1;
|
||
|
|
float _Tilling1;
|
||
|
|
float _ParalaxOffset1;
|
||
|
|
float _PrlxRefPlane1;
|
||
|
|
float _Height2;
|
||
|
|
float _Tilling2;
|
||
|
|
float _NormalMapDepthBase;
|
||
|
|
float _ParalaxOffset2;
|
||
|
|
float _Height3;
|
||
|
|
float _Tilling3;
|
||
|
|
float _ParalaxOffset3;
|
||
|
|
float _PrlxRefPlane3;
|
||
|
|
float _TillingBase;
|
||
|
|
float _ParalaxOffsetBase;
|
||
|
|
float _PrlxRefPlane2;
|
||
|
|
float _EmissionMultiplayer;
|
||
|
|
#ifdef ASE_TRANSMISSION
|
||
|
|
float _TransmissionShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TRANSLUCENCY
|
||
|
|
float _TransStrength;
|
||
|
|
float _TransNormal;
|
||
|
|
float _TransScattering;
|
||
|
|
float _TransDirect;
|
||
|
|
float _TransAmbient;
|
||
|
|
float _TransShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TESSELLATION
|
||
|
|
float _TessPhongStrength;
|
||
|
|
float _TessValue;
|
||
|
|
float _TessMin;
|
||
|
|
float _TessMax;
|
||
|
|
float _TessEdgeLength;
|
||
|
|
float _TessMaxDisp;
|
||
|
|
#endif
|
||
|
|
CBUFFER_END
|
||
|
|
|
||
|
|
#ifdef SCENEPICKINGPASS
|
||
|
|
float4 _SelectionID;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef SCENESELECTIONPASS
|
||
|
|
int _ObjectId;
|
||
|
|
int _PassValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
struct SurfaceDescription
|
||
|
|
{
|
||
|
|
float Alpha;
|
||
|
|
float AlphaClipThreshold;
|
||
|
|
};
|
||
|
|
|
||
|
|
PackedVaryings VertexFunction(Attributes input )
|
||
|
|
{
|
||
|
|
PackedVaryings output;
|
||
|
|
ZERO_INITIALIZE(PackedVaryings, output);
|
||
|
|
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
float3 defaultVertexValue = input.positionOS.xyz;
|
||
|
|
#else
|
||
|
|
float3 defaultVertexValue = float3(0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 vertexValue = defaultVertexValue;
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
input.positionOS.xyz = vertexValue;
|
||
|
|
#else
|
||
|
|
input.positionOS.xyz += vertexValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
input.normalOS = input.normalOS;
|
||
|
|
|
||
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz );
|
||
|
|
|
||
|
|
output.positionCS = vertexInput.positionCS;
|
||
|
|
output.positionWS = vertexInput.positionWS;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if defined(ASE_TESSELLATION)
|
||
|
|
struct VertexControl
|
||
|
|
{
|
||
|
|
float4 positionOS : INTERNALTESSPOS;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct TessellationFactors
|
||
|
|
{
|
||
|
|
float edge[3] : SV_TessFactor;
|
||
|
|
float inside : SV_InsideTessFactor;
|
||
|
|
};
|
||
|
|
|
||
|
|
VertexControl vert ( Attributes input )
|
||
|
|
{
|
||
|
|
VertexControl output;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
output.positionOS = input.positionOS;
|
||
|
|
output.normalOS = input.normalOS;
|
||
|
|
output.tangentOS = input.tangentOS;
|
||
|
|
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> input)
|
||
|
|
{
|
||
|
|
TessellationFactors output;
|
||
|
|
float4 tf = 1;
|
||
|
|
float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
|
||
|
|
float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
|
||
|
|
#if defined(ASE_FIXED_TESSELLATION)
|
||
|
|
tf = FixedTess( tessValue );
|
||
|
|
#elif defined(ASE_DISTANCE_TESSELLATION)
|
||
|
|
tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
|
||
|
|
#elif defined(ASE_LENGTH_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
|
||
|
|
#elif defined(ASE_LENGTH_CULL_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
|
||
|
|
#endif
|
||
|
|
output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
[partitioning("fractional_odd")]
|
||
|
|
[outputtopology("triangle_cw")]
|
||
|
|
[patchconstantfunc("TessellationFunction")]
|
||
|
|
[outputcontrolpoints(3)]
|
||
|
|
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
|
||
|
|
{
|
||
|
|
return patch[id];
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
|
||
|
|
{
|
||
|
|
Attributes output = (Attributes) 0;
|
||
|
|
output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z;
|
||
|
|
output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z;
|
||
|
|
output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z;
|
||
|
|
|
||
|
|
#if defined(ASE_PHONG_TESSELLATION)
|
||
|
|
float3 pp[3];
|
||
|
|
for (int i = 0; i < 3; ++i)
|
||
|
|
pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS));
|
||
|
|
float phongStrength = _TessPhongStrength;
|
||
|
|
output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz;
|
||
|
|
#endif
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(patch[0], output);
|
||
|
|
return VertexFunction(output);
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
PackedVaryings vert ( Attributes input )
|
||
|
|
{
|
||
|
|
return VertexFunction( input );
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
half4 frag( PackedVaryings input
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
,out float outputDepth : ASE_SV_DEPTH
|
||
|
|
#endif
|
||
|
|
) : SV_Target
|
||
|
|
{
|
||
|
|
SurfaceDescription surfaceDescription = (SurfaceDescription)0;
|
||
|
|
|
||
|
|
float3 PositionWS = input.positionWS;
|
||
|
|
float3 PositionRWS = GetCameraRelativePositionWS( PositionWS );
|
||
|
|
float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw );
|
||
|
|
float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
surfaceDescription.Alpha = 1;
|
||
|
|
surfaceDescription.AlphaClipThreshold = 0.5;
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
float DeviceDepth = input.positionCS.z;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if _ALPHATEST_ON
|
||
|
|
float alphaClipThreshold = 0.01f;
|
||
|
|
#if ALPHA_CLIP_THRESHOLD
|
||
|
|
alphaClipThreshold = surfaceDescription.AlphaClipThreshold;
|
||
|
|
#endif
|
||
|
|
clip(surfaceDescription.Alpha - alphaClipThreshold);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
outputDepth = DeviceDepth;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
return half4( _ObjectId, _PassValue, 1.0, 1.0 );
|
||
|
|
}
|
||
|
|
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
|
||
|
|
Name "ScenePickingPass"
|
||
|
|
Tags { "LightMode"="Picking" }
|
||
|
|
|
||
|
|
AlphaToMask Off
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
#define ASE_GEOMETRY 1
|
||
|
|
#define _NORMAL_DROPOFF_TS 1
|
||
|
|
#define ASE_FOG 1
|
||
|
|
#pragma multi_compile_fragment _ DEBUG_DISPLAY
|
||
|
|
#define _EMISSION
|
||
|
|
#define _NORMALMAP 1
|
||
|
|
#define ASE_VERSION 19903
|
||
|
|
#define ASE_SRP_VERSION 120115
|
||
|
|
|
||
|
|
#pragma multi_compile _ DOTS_INSTANCING_ON
|
||
|
|
|
||
|
|
#pragma vertex vert
|
||
|
|
#pragma fragment frag
|
||
|
|
|
||
|
|
#if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE)
|
||
|
|
#define _SPECULAR_COLOR 1
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define SCENEPICKINGPASS 1
|
||
|
|
|
||
|
|
#define ATTRIBUTES_NEED_NORMAL
|
||
|
|
#define ATTRIBUTES_NEED_TANGENT
|
||
|
|
#define SHADERPASS SHADERPASS_DEPTHONLY
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.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/Input.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45)
|
||
|
|
#define ASE_SV_DEPTH SV_DepthLessEqual
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid
|
||
|
|
#else
|
||
|
|
#define ASE_SV_DEPTH SV_Depth
|
||
|
|
#define ASE_SV_POSITION_QUALIFIERS
|
||
|
|
#endif
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float4 positionOS : POSITION;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct PackedVaryings
|
||
|
|
{
|
||
|
|
ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION;
|
||
|
|
float3 positionWS : TEXCOORD0;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
CBUFFER_START(UnityPerMaterial)
|
||
|
|
float4 _AlbedoColorBase;
|
||
|
|
float4 _AlbedoColor1;
|
||
|
|
float4 _EmissionColor;
|
||
|
|
float4 _HeightMapBase_ST;
|
||
|
|
float4 _HeightMap3_ST;
|
||
|
|
float4 _AlbedoColor2;
|
||
|
|
float4 _HeightMap2_ST;
|
||
|
|
float4 _AlbedoColor3;
|
||
|
|
float4 _HeightMap1_ST;
|
||
|
|
float _MetalicBrightnes2;
|
||
|
|
float _Metallic2;
|
||
|
|
float _MetalicBrightnes3;
|
||
|
|
float _Metallic1;
|
||
|
|
float _MetalicBrightnesBase;
|
||
|
|
float _MetallicBase;
|
||
|
|
float _SmoothnessBase;
|
||
|
|
float _NormalMapDepth3;
|
||
|
|
float _NormalMapDepth2;
|
||
|
|
float _NormalMapDepth1;
|
||
|
|
float _Smoothness1;
|
||
|
|
float _Smoothness2;
|
||
|
|
float _Smoothness3;
|
||
|
|
float _Metallic3;
|
||
|
|
float _MetalicBrightnes1;
|
||
|
|
float _BlendContrast;
|
||
|
|
float _PrlxRefPlaneBase;
|
||
|
|
float _Height1;
|
||
|
|
float _Tilling1;
|
||
|
|
float _ParalaxOffset1;
|
||
|
|
float _PrlxRefPlane1;
|
||
|
|
float _Height2;
|
||
|
|
float _Tilling2;
|
||
|
|
float _NormalMapDepthBase;
|
||
|
|
float _ParalaxOffset2;
|
||
|
|
float _Height3;
|
||
|
|
float _Tilling3;
|
||
|
|
float _ParalaxOffset3;
|
||
|
|
float _PrlxRefPlane3;
|
||
|
|
float _TillingBase;
|
||
|
|
float _ParalaxOffsetBase;
|
||
|
|
float _PrlxRefPlane2;
|
||
|
|
float _EmissionMultiplayer;
|
||
|
|
#ifdef ASE_TRANSMISSION
|
||
|
|
float _TransmissionShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TRANSLUCENCY
|
||
|
|
float _TransStrength;
|
||
|
|
float _TransNormal;
|
||
|
|
float _TransScattering;
|
||
|
|
float _TransDirect;
|
||
|
|
float _TransAmbient;
|
||
|
|
float _TransShadow;
|
||
|
|
#endif
|
||
|
|
#ifdef ASE_TESSELLATION
|
||
|
|
float _TessPhongStrength;
|
||
|
|
float _TessValue;
|
||
|
|
float _TessMin;
|
||
|
|
float _TessMax;
|
||
|
|
float _TessEdgeLength;
|
||
|
|
float _TessMaxDisp;
|
||
|
|
#endif
|
||
|
|
CBUFFER_END
|
||
|
|
|
||
|
|
#ifdef SCENEPICKINGPASS
|
||
|
|
float4 _SelectionID;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef SCENESELECTIONPASS
|
||
|
|
int _ObjectId;
|
||
|
|
int _PassValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
struct SurfaceDescription
|
||
|
|
{
|
||
|
|
float Alpha;
|
||
|
|
float AlphaClipThreshold;
|
||
|
|
};
|
||
|
|
|
||
|
|
PackedVaryings VertexFunction( Attributes input )
|
||
|
|
{
|
||
|
|
PackedVaryings output;
|
||
|
|
ZERO_INITIALIZE(PackedVaryings, output);
|
||
|
|
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
float3 defaultVertexValue = input.positionOS.xyz;
|
||
|
|
#else
|
||
|
|
float3 defaultVertexValue = float3(0, 0, 0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
float3 vertexValue = defaultVertexValue;
|
||
|
|
|
||
|
|
#ifdef ASE_ABSOLUTE_VERTEX_POS
|
||
|
|
input.positionOS.xyz = vertexValue;
|
||
|
|
#else
|
||
|
|
input.positionOS.xyz += vertexValue;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
input.normalOS = input.normalOS;
|
||
|
|
|
||
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz );
|
||
|
|
|
||
|
|
output.positionCS = vertexInput.positionCS;
|
||
|
|
output.positionWS = vertexInput.positionWS;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if defined(ASE_TESSELLATION)
|
||
|
|
struct VertexControl
|
||
|
|
{
|
||
|
|
float4 positionOS : INTERNALTESSPOS;
|
||
|
|
half3 normalOS : NORMAL;
|
||
|
|
half4 tangentOS : TANGENT;
|
||
|
|
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct TessellationFactors
|
||
|
|
{
|
||
|
|
float edge[3] : SV_TessFactor;
|
||
|
|
float inside : SV_InsideTessFactor;
|
||
|
|
};
|
||
|
|
|
||
|
|
VertexControl vert ( Attributes input )
|
||
|
|
{
|
||
|
|
VertexControl output;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||
|
|
output.positionOS = input.positionOS;
|
||
|
|
output.normalOS = input.normalOS;
|
||
|
|
output.tangentOS = input.tangentOS;
|
||
|
|
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> input)
|
||
|
|
{
|
||
|
|
TessellationFactors output;
|
||
|
|
float4 tf = 1;
|
||
|
|
float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax;
|
||
|
|
float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp;
|
||
|
|
#if defined(ASE_FIXED_TESSELLATION)
|
||
|
|
tf = FixedTess( tessValue );
|
||
|
|
#elif defined(ASE_DISTANCE_TESSELLATION)
|
||
|
|
tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos );
|
||
|
|
#elif defined(ASE_LENGTH_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams );
|
||
|
|
#elif defined(ASE_LENGTH_CULL_TESSELLATION)
|
||
|
|
tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes );
|
||
|
|
#endif
|
||
|
|
output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w;
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
[partitioning("fractional_odd")]
|
||
|
|
[outputtopology("triangle_cw")]
|
||
|
|
[patchconstantfunc("TessellationFunction")]
|
||
|
|
[outputcontrolpoints(3)]
|
||
|
|
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID)
|
||
|
|
{
|
||
|
|
return patch[id];
|
||
|
|
}
|
||
|
|
|
||
|
|
[domain("tri")]
|
||
|
|
PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation)
|
||
|
|
{
|
||
|
|
Attributes output = (Attributes) 0;
|
||
|
|
output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z;
|
||
|
|
output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z;
|
||
|
|
output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z;
|
||
|
|
|
||
|
|
#if defined(ASE_PHONG_TESSELLATION)
|
||
|
|
float3 pp[3];
|
||
|
|
for (int i = 0; i < 3; ++i)
|
||
|
|
pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS));
|
||
|
|
float phongStrength = _TessPhongStrength;
|
||
|
|
output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz;
|
||
|
|
#endif
|
||
|
|
UNITY_TRANSFER_INSTANCE_ID(patch[0], output);
|
||
|
|
return VertexFunction(output);
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
PackedVaryings vert ( Attributes input )
|
||
|
|
{
|
||
|
|
return VertexFunction( input );
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
half4 frag( PackedVaryings input
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
,out float outputDepth : ASE_SV_DEPTH
|
||
|
|
#endif
|
||
|
|
) : SV_Target
|
||
|
|
{
|
||
|
|
SurfaceDescription surfaceDescription = (SurfaceDescription)0;
|
||
|
|
|
||
|
|
float3 PositionWS = input.positionWS;
|
||
|
|
float3 PositionRWS = GetCameraRelativePositionWS( PositionWS );
|
||
|
|
float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw );
|
||
|
|
float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
surfaceDescription.Alpha = 1;
|
||
|
|
surfaceDescription.AlphaClipThreshold = 0.5;
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
float DeviceDepth = input.positionCS.z;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if _ALPHATEST_ON
|
||
|
|
float alphaClipThreshold = 0.01f;
|
||
|
|
#if ALPHA_CLIP_THRESHOLD
|
||
|
|
alphaClipThreshold = surfaceDescription.AlphaClipThreshold;
|
||
|
|
#endif
|
||
|
|
clip(surfaceDescription.Alpha - alphaClipThreshold);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined( ASE_DEPTH_WRITE_ON )
|
||
|
|
outputDepth = DeviceDepth;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
return _SelectionID;
|
||
|
|
}
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
CustomEditor "UnityEditor.ShaderGraphLitGUI"
|
||
|
|
FallBack "Hidden/Shader Graph/FallbackError"
|
||
|
|
|
||
|
|
Fallback Off
|
||
|
|
}
|
||
|
|
|
||
|
|
/*ASEBEGIN
|
||
|
|
Version=19903
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;290;-3883.459,290.1167;Float;False;Constant;_Float4;Float 4;48;0;Create;True;0;0;0;False;0;False;10.17;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.FresnelNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;288;-3547.828,221.1874;Inherit;False;Standard;WorldNormal;ViewDir;False;False;5;0;FLOAT3;0,0,1;False;4;FLOAT3;0,0,0;False;1;FLOAT;0;False;2;FLOAT;1;False;3;FLOAT;5;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;282;-3670.607,90.60851;Float;False;Property;_ParalaxOffset3;ParalaxOffset3;36;0;Create;True;0;0;0;False;0;False;0.001;5.4;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.ClampOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;296;-3303.202,250.5947;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;279;-3656.308,-97.89147;Float;False;Property;_ParalaxOffset2;ParalaxOffset2;25;0;Create;True;0;0;0;False;0;False;0.001;58.53;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;64;-3714.573,-586.684;Float;False;Constant;_ParalaxDepthCorrection;ParalaxDepthCorrection;20;0;Create;True;0;0;0;False;0;False;0.001;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;276;-3642.007,-301.9914;Float;False;Property;_ParalaxOffset1;ParalaxOffset1;14;0;Create;True;0;0;0;False;0;False;0.001;38.29;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;277;-3398.801,-393.7146;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;280;-3413.102,-189.6146;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;283;-3427.401,-1.114647;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.OneMinusNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;291;-3271.738,151.3241;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;248;-2587.025,-227.9156;Float;False;Property;_Tilling2;Tilling2;30;0;Create;True;0;0;0;False;0;False;1;11.2;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;249;-2609.539,8.671144;Float;False;Property;_Tilling3;Tilling3;41;0;Create;True;0;0;0;False;0;False;1;26.22;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.TextureCoordinatesNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;17;-2904.818,-463.0872;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;241;-2586.618,-465.257;Float;False;Property;_Tilling1;Tilling1;19;0;Create;True;0;0;0;False;0;False;1;14.62;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;287;-2658.822,-110.0751;Float;False;Property;_PrlxRefPlane3;PrlxRefPlane3;37;0;Create;True;0;0;0;False;0;False;0.001;0.156;0;1;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;286;-2648.422,-333.6752;Float;False;Property;_PrlxRefPlane2;PrlxRefPlane2;26;0;Create;True;0;0;0;False;0;False;0.001;0.58;0;1;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;293;-3216.742,-213.7761;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;285;-2653.619,-574.1754;Float;False;Property;_PrlxRefPlane1;PrlxRefPlane1;15;0;Create;True;0;0;0;False;0;False;0.001;0;0;1;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;294;-3202.441,-417.8761;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.ViewDirInputsCoordNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;19;-2872.867,-294.6031;Float;False;Tangent;False;0;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;265;-2290.67,-249.8378;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;267;-2289.794,-458.0731;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;264;-2271.866,-10.85054;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;292;-3231.041,-25.27615;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.TexturePropertyNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;116;-3820.921,-1107.884;Float;True;Property;_HeightMap2;HeightMap2;24;0;Create;True;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;False;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1
|
||
|
|
Node;AmplifyShaderEditor.TexturePropertyNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;143;-3771.311,-904.1208;Float;True;Property;_HeightMap3;HeightMap3;35;0;Create;True;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;False;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1
|
||
|
|
Node;AmplifyShaderEditor.TexturePropertyNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;101;-3821.083,-1306.292;Float;True;Property;_HeightMap1;HeightMap1;13;0;Create;True;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;False;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1
|
||
|
|
Node;AmplifyShaderEditor.ParallaxOcclusionMappingNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;98;-1910.503,-586.5798;Inherit;False;0;8;False;;16;False;;2;0.02;0.5;False;1,1;False;0,0;11;0;FLOAT2;0,0;False;1;SAMPLER2D;;False;7;SAMPLERSTATE;;False;2;FLOAT;0.02;False;3;FLOAT3;0,0,0;False;8;INT;0;False;9;INT;0;False;10;INT;0;False;4;FLOAT;0;False;5;FLOAT2;0,0;False;6;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.ParallaxOcclusionMappingNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;115;-1911.256,-364.6845;Inherit;False;0;8;False;;16;False;;2;0.02;0.5;False;1,1;False;0,0;11;0;FLOAT2;0,0;False;1;SAMPLER2D;;False;7;SAMPLERSTATE;;False;2;FLOAT;0.02;False;3;FLOAT3;0,0,0;False;8;INT;0;False;9;INT;0;False;10;INT;0;False;4;FLOAT;0;False;5;FLOAT2;0,0;False;6;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.ParallaxOcclusionMappingNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;257;-1907.035,-160.4962;Inherit;False;0;8;False;;16;False;;2;0.02;0.5;False;1,1;False;0,0;11;0;FLOAT2;0,0;False;1;SAMPLER2D;;False;7;SAMPLERSTATE;;False;2;FLOAT;0.02;False;3;FLOAT3;0,0,0;False;8;INT;0;False;9;INT;0;False;10;INT;0;False;4;FLOAT;0;False;5;FLOAT2;0,0;False;6;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.VertexColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;119;-3686.579,-2139.288;Inherit;False;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;148;-3400.677,-903.2667;Inherit;True;Property;_TextureSample5;Texture Sample 5;24;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;188;-3238.771,-1820.16;Float;False;Property;_Height2;Height2;27;0;Create;True;0;0;0;False;0;False;2;0.33;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;184;-3248.421,-1900.571;Float;False;Property;_Height1;Height1;16;0;Create;True;0;0;0;False;0;False;2;0.11;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;189;-3252.416,-1727.857;Float;False;Property;_Height3;Height3;38;0;Create;True;0;0;0;False;0;False;2;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;125;-3424.734,-1322.12;Inherit;True;Property;_TextureSample0;Texture Sample 0;24;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;126;-3403.787,-1101.359;Inherit;True;Property;_TextureSample2;Texture Sample 2;24;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.OneMinusNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;162;-3539.181,-1975.778;Inherit;False;1;0;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleAddOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;193;-2809.38,-1240.837;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleAddOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;191;-2811.471,-1410.145;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;137;-2896.634,-1857.936;Float;False;Property;_BlendContrast;BlendContrast;0;0;Create;True;0;0;0;False;0;False;1;16.74;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleAddOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;192;-2826.104,-1623.347;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;161;-3243.217,-2160.498;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;164;-3346.034,-2329.627;Float;False;Constant;_Float1;Float 1;28;0;Create;True;0;0;0;False;0;False;2;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleContrastOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;159;-2496.419,-1600.617;Inherit;False;2;1;COLOR;0,0,0,0;False;0;FLOAT;0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;163;-3011.556,-2219.248;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;18;-3674.667,-506.7083;Float;False;Property;_ParalaxOffsetBase;ParalaxOffsetBase;4;0;Create;True;0;0;0;False;0;False;0.001;5.7;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleContrastOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;157;-2510.499,-1443.035;Inherit;False;2;1;COLOR;0,0,0,0;False;0;FLOAT;0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleContrastOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;154;-2492.806,-1243.64;Inherit;False;2;1;COLOR;0,0,0,0;False;0;FLOAT;0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.BreakToComponentsNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;156;-2241.454,-1551.634;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15
|
||
|
|
Node;AmplifyShaderEditor.BreakToComponentsNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;158;-2243.235,-1245.422;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15
|
||
|
|
Node;AmplifyShaderEditor.BreakToComponentsNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;166;-2822.625,-2092.846;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;63;-3395.061,-598.4315;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.BreakToComponentsNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;155;-2243.345,-1389.625;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;240;-2606.882,-681.7051;Float;False;Property;_TillingBase;TillingBase;8;0;Create;True;0;0;0;False;0;False;1;7.35;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;135;-1953.633,-1605.26;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;266;-2409.11,-742.2209;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;134;-1957.491,-1770.829;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;295;-3198.701,-622.593;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;151;-1934.993,-1458.566;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;284;-2687.422,-802.975;Float;False;Property;_PrlxRefPlaneBase;PrlxRefPlaneBase;5;0;Create;True;0;0;0;False;0;False;0.001;1;0;1;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.ClampOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;178;-2453.984,-2526.425;Inherit;False;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;COLOR;1,1,1,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.TexturePropertyNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;259;-3801.562,-1540.83;Float;True;Property;_HeightMapBase;HeightMapBase;3;0;Create;True;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;False;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1
|
||
|
|
Node;AmplifyShaderEditor.BreakToComponentsNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;170;-2274.408,-2397.194;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15
|
||
|
|
Node;AmplifyShaderEditor.DynamicAppendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;129;-1687.052,-1625.119;Inherit;False;FLOAT3;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT3;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;271;-1754.847,-1135.221;Float;False;Constant;_Float3;Float 3;38;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.ParallaxOcclusionMappingNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;261;-1917.706,-806.939;Inherit;False;0;8;False;;16;False;;2;0.02;0.5;False;1,1;False;0,0;11;0;FLOAT2;0,0;False;1;SAMPLER2D;;False;7;SAMPLERSTATE;;False;2;FLOAT;0.02;False;3;FLOAT3;0,0,0;False;8;INT;0;False;9;INT;0;False;10;INT;0;False;4;FLOAT;0;False;5;FLOAT2;0,0;False;6;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;237;-907.7741,-1502.912;Float;False;Constant;_AlbedoIndex3;AlbedoIndex3;37;0;Create;True;0;0;0;False;0;False;3;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;233;-924.3703,-2348.929;Float;False;Constant;_AlbedoIndex1;AlbedoIndex1;37;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;243;-1488.848,-361.5107;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;231;-967.8638,-2759.419;Float;False;Constant;_AlbedoIndex;AlbedoIndex;37;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.ClampOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;182;-1526.307,-1881.479;Inherit;False;3;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;1,1,1;False;1;FLOAT3;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;246;-1470.045,-122.5234;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;235;-909.506,-1873.41;Float;False;Constant;_AlbedoIndex2;AlbedoIndex2;37;0;Create;True;0;0;0;False;0;False;2;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.DynamicAppendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;169;-1987.758,-2365.499;Inherit;False;FLOAT3;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT3;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;262;-1495.174,-790.105;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;239;-1487.972,-569.7458;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0
|
||
|
|
Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;106;-650.8668,-2173.823;Float;False;Property;_AlbedoColor1;AlbedoColor1;20;0;Create;True;0;0;0;False;0;False;1,1,1,1;1,1,1,1;False;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;145;-678.6395,-1315.097;Float;False;Property;_AlbedoColor3;AlbedoColor3;42;0;Create;True;0;0;0;False;0;False;1,1,1,1;0.6981132,0.6981132,0.6981132,0;False;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;4;-669.6706,-2605.136;Float;False;Property;_AlbedoColorBase;AlbedoColorBase;9;0;Create;True;0;0;0;False;0;False;1,1,1,1;1,1,1,1;False;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;253;-1037.801,148.1044;Inherit;True;Property;_MetallicMapArray;MetallicMapArray;2;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;232;-746.82,-2395.449;Inherit;True;Property;_TextureArray0;Texture Array 0;1;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;230;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SimpleAddOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;167;-1368.372,-2197.729;Inherit;False;2;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT3;0
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;236;-719.7493,-1549.432;Inherit;True;Property;_TextureArray2;Texture Array 2;1;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;230;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;256;-1015.624,1277.151;Inherit;True;Property;_TextureArray5;Texture Array 5;2;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;253;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;230;-740.726,-2825.902;Inherit;True;Property;_AlbedoMapArray;AlbedoMapArray;1;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;254;-1042.824,536.3504;Inherit;True;Property;_TextureArray3;Texture Array 3;2;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;253;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;9;-625.6056,684.0491;Float;False;Property;_Smoothness1;Smoothness1;21;0;Create;True;0;0;0;False;0;False;1;0.32;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;215;-600.5758,1434.315;Float;False;Property;_Smoothness3;Smoothness3;43;0;Create;True;0;0;0;False;0;False;1;0.4;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;227;-636.3124,304.4656;Float;False;Property;_SmoothnessBase;SmoothnessBase;10;0;Create;True;0;0;0;False;0;False;1;0.25;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;255;-1028.425,904.3506;Inherit;True;Property;_TextureArray4;Texture Array 4;2;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;253;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;207;-614.1426,1056.536;Float;False;Property;_Smoothness2;Smoothness2;32;0;Create;True;0;0;0;False;0;False;1;0.3;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;234;-721.6922,-1952.12;Inherit;True;Property;_TextureArray1;Texture Array 1;1;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;230;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;141;-645.0353,-1742.706;Float;False;Property;_AlbedoColor2;AlbedoColor2;31;0;Create;True;0;0;0;False;0;False;1,1,1,1;1,1,1,0;False;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;225;-894.4614,-17.24541;Float;False;Constant;_Float2;Float 2;21;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;144;-373.828,-1417.128;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.ClampOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;190;-379.5413,-2045.497;Inherit;False;3;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;1,1,1;False;1;FLOAT3;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;142;-372.7155,-1838.764;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;109;-379.1516,-2585.914;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;210;-998.0695,820.6123;Float;False;Property;_MetalicBrightnes2;MetalicBrightnes2;34;0;Create;True;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;108;-378.5469,-2269.882;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;95;-1015.933,452.9251;Float;False;Property;_MetalicBrightnes1;MetalicBrightnes1;23;0;Create;True;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;205;-391.1477,995.8464;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;211;-895.3912,740.3919;Float;False;Constant;_Float5;Float 5;21;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;219;-888.2244,1112.971;Float;False;Constant;_Float9;Float 9;21;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;97;-891.7546,365.5381;Float;False;Constant;_Float0;Float 0;21;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;10;-409.0113,628.1591;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;228;-1018.639,70.14155;Float;False;Property;_MetalicBrightnesBase;MetalicBrightnesBase;12;0;Create;True;0;0;0;False;0;False;0;0.64;0;1;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;213;-383.9808,1368.425;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;218;-990.9027,1193.192;Float;False;Property;_MetalicBrightnes3;MetalicBrightnes3;45;0;Create;True;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;222;-411.7178,245.3755;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;274;-1242.925,-529.4929;Float;False;Property;_NormalMapDepth3;NormalMapDepth3;40;0;Create;True;0;0;0;False;0;False;1;1.34;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;66;-1259.126,-871.1492;Float;False;Property;_NormalMapDepthBase;NormalMapDepthBase;7;0;Create;True;0;0;0;False;0;False;1;0.64;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.LayeredBlendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;229;-83.37372,172.9181;Inherit;False;6;0;FLOAT3;0,0,0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;COLOR;0,0,0,0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;214;-593.7981,1239.483;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.LayeredBlendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;132;-66.76407,-1565.721;Inherit;False;6;0;FLOAT3;0,0,0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;38;-8.835178,-1128.632;Float;False;Property;_EmissionMultiplayer;EmissionMultiplayer;47;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;226;-630.488,29.36113;Float;False;Property;_MetallicBase;MetallicBase;11;0;Create;True;0;0;0;False;0;False;1;0.03;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;8;-627.7811,412.1447;Float;False;Property;_Metallic1;Metallic1;22;0;Create;True;0;0;0;False;0;False;1;0.57;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;272;-1264.925,-767.4929;Float;False;Property;_NormalMapDepth1;NormalMapDepth1;18;0;Create;True;0;0;0;False;0;False;1;1.03;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;93;-618.8279,499.2162;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;252;219.8878,198.5585;Float;False;Constant;_SmothnessAdd;SmothnessAdd;41;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;273;-1242.925,-635.4929;Float;False;Property;_NormalMapDepth2;NormalMapDepth2;29;0;Create;True;0;0;0;False;0;False;1;0.52;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;223;-619.2131,124.5581;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;206;-600.965,866.9034;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;216;-602.7513,1152.411;Float;False;Property;_Metallic3;Metallic3;44;0;Create;True;0;0;0;False;0;False;1;0.57;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;208;-609.9181,779.8319;Float;False;Property;_Metallic2;Metallic2;33;0;Create;True;0;0;0;False;0;False;1;0.57;0;0;0;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;111;-984.6247,-700.4472;Inherit;True;Property;_NormalMap1;NormalMap1;17;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;7;-410.0048,508.3086;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;13;-983.2156,-911.5417;Inherit;True;Property;_NormalMapBase;NormalMapBase;6;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;bump;Auto;True;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;39;303.1523,-1129.245;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleAddOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;250;487.9043,19.18243;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;36;354.2496,-1332.35;Float;False;Property;_EmissionColor;EmissionColor;46;0;Create;True;0;0;0;False;0;False;0,0,0,0;0,0,0,0;False;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;204;-390.0013,867.4355;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;171;-981.0021,-492.7853;Inherit;True;Property;_NormalMap2;NormalMap2;28;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;221;-422.3225,124.3643;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;212;-384.9745,1248.575;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;172;-981.0021,-272.2191;Inherit;True;Property;_NormalMap3;NormalMap3;39;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.SimpleContrastOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;177;-2743.4,-2513.37;Inherit;False;2;1;COLOR;0,0,0,0;False;0;FLOAT;0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;260;-3435.785,-1539.762;Inherit;True;Property;_TextureSample1;Texture Sample 1;24;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
|
||
|
|
Node;AmplifyShaderEditor.ClampOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;251;720.2132,-108.4211;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.LayeredBlendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;220;-131.8263,-188.9172;Inherit;False;6;0;FLOAT3;0,0,0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;COLOR;0,0,0,0;False;1;FLOAT;0
|
||
|
|
Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;37;415.4357,-928.699;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
|
||
|
|
Node;AmplifyShaderEditor.LayeredBlendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;173;-242.616,-777.1154;Inherit;False;6;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT3;0,0,0;False;4;FLOAT3;0,0,0;False;5;COLOR;0,0,0,0;False;1;FLOAT3;0
|
||
|
|
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;297;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;ExtraPrePass;0;0;ExtraPrePass;6;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;0;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;0;False;False;0;;0;0;Standard;0;False;0
|
||
|
|
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;298;1031.295,-535.8076;Float;False;True;-1;3;UnityEditor.ShaderGraphLitGUI;0;12;ASE/ASE_StandartBlend;94348b07e5e8bab40bd6c8a1e3df54cd;True;Forward;0;1;Forward;21;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;1;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=UniversalForward;False;False;0;;0;0;Standard;47;Category;0;0; Instanced Terrain Normals;1;0;Lighting Model;0;0;Workflow;1;0;Surface;0;0; Refraction Model;0;0; Blend;0;0;Two Sided;1;0;Alpha Clipping;1;0; Use Shadow Threshold;0;0;Fragment Normal Space,InvertActionOnDeselection;0;0;Forward Only;0;0;Transmission;0;0; Transmission Shadow;0.5,False,;0;Translucency;0;0; Translucency Strength;1,False,;0; Normal Distortion;0.5,False,;0; Scattering;2,False,;0; Direct;0.9,False,;0; Ambient;0.1,False,;0; Shadow;0.5,False,;0;Cast Shadows;1;0;Receive Shadows;2;0;Specular Highlights;2;0;Environment Reflections;2;0;Receive SSAO;1;0;GPU Instancing;1;0;LOD CrossFade;1;0;Built-in Fog;1;0;_FinalColorxAlpha;0;0;Meta Pass;1;0;Override Baked GI;0;0;Extra Pre Pass;0;0;Tessellation;0;0; Phong;0;0; Strength;0.5,False,;0; Type;0;0; Tess;16,False,;0; Min;10,False,;0; Max;25,False,;0; Edge Length;16,False,;0; Max Displacement;25,False,;0;Write Depth;0;0; Early Z;0;0;Vertex Position,InvertActionOnDeselection;1;0;Debug Display;1;0;Clear Coat;0;0;0;10;False;True;True;True;True;True;True;True;True;True;False;;False;0
|
||
|
|
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;299;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;ShadowCaster;0;2;ShadowCaster;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;False;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=ShadowCaster;False;False;0;;0;0;Standard;0;False;0
|
||
|
|
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;300;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;DepthOnly;0;3;DepthOnly;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;False;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;False;False;True;1;LightMode=DepthOnly;False;False;0;;0;0;Standard;0;False;0
|
||
|
|
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;301;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;Meta;0;4;Meta;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Meta;False;False;0;;0;0;Standard;0;False;0
|
||
|
|
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;302;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;Universal2D;0;5;Universal2D;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;1;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=Universal2D;False;False;0;;0;0;Standard;0;False;0
|
||
|
|
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;303;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;DepthNormals;0;6;DepthNormals;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;0;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=DepthNormals;False;False;0;;0;0;Standard;0;False;0
|
||
|
|
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;304;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;GBuffer;0;7;GBuffer;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;1;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=UniversalGBuffer;False;False;0;;0;0;Standard;0;False;0
|
||
|
|
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;305;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;SceneSelectionPass;0;8;SceneSelectionPass;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=SceneSelectionPass;False;False;0;;0;0;Standard;0;False;0
|
||
|
|
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;306;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;ScenePickingPass;0;9;ScenePickingPass;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Picking;False;False;0;;0;0;Standard;0;False;0
|
||
|
|
WireConnection;288;3;290;0
|
||
|
|
WireConnection;296;0;288;0
|
||
|
|
WireConnection;277;0;64;0
|
||
|
|
WireConnection;277;1;276;0
|
||
|
|
WireConnection;280;0;64;0
|
||
|
|
WireConnection;280;1;279;0
|
||
|
|
WireConnection;283;0;64;0
|
||
|
|
WireConnection;283;1;282;0
|
||
|
|
WireConnection;291;0;296;0
|
||
|
|
WireConnection;293;0;280;0
|
||
|
|
WireConnection;293;1;291;0
|
||
|
|
WireConnection;294;0;277;0
|
||
|
|
WireConnection;294;1;291;0
|
||
|
|
WireConnection;265;0;17;0
|
||
|
|
WireConnection;265;1;248;0
|
||
|
|
WireConnection;267;0;17;0
|
||
|
|
WireConnection;267;1;241;0
|
||
|
|
WireConnection;264;0;17;0
|
||
|
|
WireConnection;264;1;249;0
|
||
|
|
WireConnection;292;0;283;0
|
||
|
|
WireConnection;292;1;291;0
|
||
|
|
WireConnection;98;0;267;0
|
||
|
|
WireConnection;98;1;101;0
|
||
|
|
WireConnection;98;2;294;0
|
||
|
|
WireConnection;98;3;19;0
|
||
|
|
WireConnection;98;4;285;0
|
||
|
|
WireConnection;115;0;265;0
|
||
|
|
WireConnection;115;1;116;0
|
||
|
|
WireConnection;115;2;293;0
|
||
|
|
WireConnection;115;3;19;0
|
||
|
|
WireConnection;115;4;286;0
|
||
|
|
WireConnection;257;0;264;0
|
||
|
|
WireConnection;257;1;143;0
|
||
|
|
WireConnection;257;2;292;0
|
||
|
|
WireConnection;257;3;19;0
|
||
|
|
WireConnection;257;4;287;0
|
||
|
|
WireConnection;148;0;143;0
|
||
|
|
WireConnection;148;1;257;0
|
||
|
|
WireConnection;125;0;101;0
|
||
|
|
WireConnection;125;1;98;0
|
||
|
|
WireConnection;126;0;116;0
|
||
|
|
WireConnection;126;1;115;0
|
||
|
|
WireConnection;162;0;119;0
|
||
|
|
WireConnection;193;0;189;0
|
||
|
|
WireConnection;193;1;148;0
|
||
|
|
WireConnection;191;0;188;0
|
||
|
|
WireConnection;191;1;126;0
|
||
|
|
WireConnection;192;0;184;0
|
||
|
|
WireConnection;192;1;125;0
|
||
|
|
WireConnection;161;0;162;0
|
||
|
|
WireConnection;161;1;119;0
|
||
|
|
WireConnection;159;1;192;0
|
||
|
|
WireConnection;159;0;137;0
|
||
|
|
WireConnection;163;0;164;0
|
||
|
|
WireConnection;163;1;161;0
|
||
|
|
WireConnection;157;1;191;0
|
||
|
|
WireConnection;157;0;137;0
|
||
|
|
WireConnection;154;1;193;0
|
||
|
|
WireConnection;154;0;137;0
|
||
|
|
WireConnection;156;0;159;0
|
||
|
|
WireConnection;158;0;154;0
|
||
|
|
WireConnection;166;0;163;0
|
||
|
|
WireConnection;63;0;64;0
|
||
|
|
WireConnection;63;1;18;0
|
||
|
|
WireConnection;155;0;157;0
|
||
|
|
WireConnection;135;1;166;1
|
||
|
|
WireConnection;135;2;155;0
|
||
|
|
WireConnection;266;0;17;0
|
||
|
|
WireConnection;266;1;240;0
|
||
|
|
WireConnection;134;1;166;0
|
||
|
|
WireConnection;134;2;156;0
|
||
|
|
WireConnection;295;0;63;0
|
||
|
|
WireConnection;295;1;291;0
|
||
|
|
WireConnection;151;1;166;2
|
||
|
|
WireConnection;151;2;158;0
|
||
|
|
WireConnection;178;0;119;0
|
||
|
|
WireConnection;170;0;178;0
|
||
|
|
WireConnection;129;0;134;0
|
||
|
|
WireConnection;129;1;135;0
|
||
|
|
WireConnection;129;2;151;0
|
||
|
|
WireConnection;261;0;266;0
|
||
|
|
WireConnection;261;1;259;0
|
||
|
|
WireConnection;261;2;295;0
|
||
|
|
WireConnection;261;3;19;0
|
||
|
|
WireConnection;261;4;284;0
|
||
|
|
WireConnection;243;0;115;0
|
||
|
|
WireConnection;243;1;271;0
|
||
|
|
WireConnection;182;0;129;0
|
||
|
|
WireConnection;246;0;257;0
|
||
|
|
WireConnection;246;1;271;0
|
||
|
|
WireConnection;169;0;170;0
|
||
|
|
WireConnection;169;1;170;1
|
||
|
|
WireConnection;169;2;170;2
|
||
|
|
WireConnection;262;0;261;0
|
||
|
|
WireConnection;262;1;271;0
|
||
|
|
WireConnection;239;0;98;0
|
||
|
|
WireConnection;239;1;271;0
|
||
|
|
WireConnection;253;1;262;0
|
||
|
|
WireConnection;232;1;239;0
|
||
|
|
WireConnection;232;6;233;0
|
||
|
|
WireConnection;167;0;169;0
|
||
|
|
WireConnection;167;1;182;0
|
||
|
|
WireConnection;236;1;246;0
|
||
|
|
WireConnection;236;6;237;0
|
||
|
|
WireConnection;256;1;246;0
|
||
|
|
WireConnection;230;1;262;0
|
||
|
|
WireConnection;230;6;231;0
|
||
|
|
WireConnection;254;1;239;0
|
||
|
|
WireConnection;255;1;243;0
|
||
|
|
WireConnection;234;1;243;0
|
||
|
|
WireConnection;234;6;235;0
|
||
|
|
WireConnection;144;0;236;0
|
||
|
|
WireConnection;144;1;145;0
|
||
|
|
WireConnection;190;0;167;0
|
||
|
|
WireConnection;142;0;234;0
|
||
|
|
WireConnection;142;1;141;0
|
||
|
|
WireConnection;109;0;230;0
|
||
|
|
WireConnection;109;1;4;0
|
||
|
|
WireConnection;108;0;232;0
|
||
|
|
WireConnection;108;1;106;0
|
||
|
|
WireConnection;205;0;255;4
|
||
|
|
WireConnection;205;1;207;0
|
||
|
|
WireConnection;10;0;254;4
|
||
|
|
WireConnection;10;1;9;0
|
||
|
|
WireConnection;213;0;256;4
|
||
|
|
WireConnection;213;1;215;0
|
||
|
|
WireConnection;222;0;253;4
|
||
|
|
WireConnection;222;1;227;0
|
||
|
|
WireConnection;229;0;167;0
|
||
|
|
WireConnection;229;1;222;0
|
||
|
|
WireConnection;229;2;10;0
|
||
|
|
WireConnection;229;3;205;0
|
||
|
|
WireConnection;229;4;213;0
|
||
|
|
WireConnection;214;0;256;1
|
||
|
|
WireConnection;214;1;219;0
|
||
|
|
WireConnection;214;2;218;0
|
||
|
|
WireConnection;132;0;190;0
|
||
|
|
WireConnection;132;1;109;0
|
||
|
|
WireConnection;132;2;108;0
|
||
|
|
WireConnection;132;3;142;0
|
||
|
|
WireConnection;132;4;144;0
|
||
|
|
WireConnection;93;0;254;1
|
||
|
|
WireConnection;93;1;97;0
|
||
|
|
WireConnection;93;2;95;0
|
||
|
|
WireConnection;223;0;253;1
|
||
|
|
WireConnection;223;1;225;0
|
||
|
|
WireConnection;223;2;228;0
|
||
|
|
WireConnection;206;0;255;1
|
||
|
|
WireConnection;206;1;211;0
|
||
|
|
WireConnection;206;2;210;0
|
||
|
|
WireConnection;111;1;239;0
|
||
|
|
WireConnection;111;5;272;0
|
||
|
|
WireConnection;7;0;8;0
|
||
|
|
WireConnection;7;1;93;0
|
||
|
|
WireConnection;13;1;262;0
|
||
|
|
WireConnection;13;5;66;0
|
||
|
|
WireConnection;39;0;38;0
|
||
|
|
WireConnection;39;1;132;0
|
||
|
|
WireConnection;250;0;229;0
|
||
|
|
WireConnection;250;1;252;0
|
||
|
|
WireConnection;204;0;208;0
|
||
|
|
WireConnection;204;1;206;0
|
||
|
|
WireConnection;171;1;243;0
|
||
|
|
WireConnection;171;5;273;0
|
||
|
|
WireConnection;221;0;226;0
|
||
|
|
WireConnection;221;1;223;0
|
||
|
|
WireConnection;212;0;216;0
|
||
|
|
WireConnection;212;1;214;0
|
||
|
|
WireConnection;172;1;246;0
|
||
|
|
WireConnection;172;5;274;0
|
||
|
|
WireConnection;177;1;119;0
|
||
|
|
WireConnection;177;0;137;0
|
||
|
|
WireConnection;260;0;259;0
|
||
|
|
WireConnection;260;1;261;0
|
||
|
|
WireConnection;251;0;250;0
|
||
|
|
WireConnection;220;0;167;0
|
||
|
|
WireConnection;220;1;221;0
|
||
|
|
WireConnection;220;2;7;0
|
||
|
|
WireConnection;220;3;204;0
|
||
|
|
WireConnection;220;4;212;0
|
||
|
|
WireConnection;37;0;36;0
|
||
|
|
WireConnection;37;1;39;0
|
||
|
|
WireConnection;173;0;167;0
|
||
|
|
WireConnection;173;1;13;0
|
||
|
|
WireConnection;173;2;111;0
|
||
|
|
WireConnection;173;3;171;0
|
||
|
|
WireConnection;173;4;172;0
|
||
|
|
WireConnection;298;0;132;0
|
||
|
|
WireConnection;298;1;173;0
|
||
|
|
WireConnection;298;3;220;0
|
||
|
|
WireConnection;298;4;251;0
|
||
|
|
WireConnection;298;2;37;0
|
||
|
|
ASEEND*/
|
||
|
|
//CHKSM=423131E082840A30AA4536489C82E258900E1E8F
|