-
-
Save rngtm/b03dfab7b90aee5e28a744aeb86493b9 to your computer and use it in GitHub Desktop.
Stencil設定可能なディゾルブシェーダー
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Made with Amplify Shader Editor | |
// Available at the Unity Asset Store - http://u3d.as/y3X | |
Shader "FresnelDissolveTest" | |
{ | |
Properties | |
{ | |
[HideInInspector] _AlphaCutoff("Alpha Cutoff ", Range(0, 1)) = 0.5 | |
[HideInInspector] _EmissionColor("Emission Color", Color) = (1,1,1,1) | |
[ASEBegin]_TextureSample0("Texture Sample 0", 2D) = "white" {} | |
_Bias("Bias", Float) = 0 | |
_Scale("Scale", Float) = 2 | |
_Power("Power", Float) = 2 | |
_Alpha("Alpha", Range( 0 , 1)) = 0.3797129 | |
_ContrastEdge1("Contrast Edge 1", Range( 0 , 1)) = 0.07058824 | |
_ContrastEdge2("Contrast Edge 2", Range( 0 , 1)) = 0.4470588 | |
[HDR]_BaseColor("BaseColor", Color) = (0.3568628,0.7019608,1,1) | |
_StencilReference1("Stencil Reference", Int) = 0 | |
[Enum(UnityEngine.Rendering.CompareFunction)]_StencilComparison1("Stencil Comparison", Int) = 8 | |
[ASEEnd][Enum(UnityEngine.Rendering.StencilOp)]_StencilPass1("Stencil Pass", Int) = 0 | |
[HideInInspector] _texcoord( "", 2D ) = "white" {} | |
//_TessPhongStrength( "Tess Phong Strength", Range( 0, 1 ) ) = 0.5 | |
//_TessValue( "Tess Max Tessellation", Range( 1, 32 ) ) = 16 | |
//_TessMin( "Tess Min Distance", Float ) = 10 | |
//_TessMax( "Tess Max Distance", Float ) = 25 | |
//_TessEdgeLength ( "Tess Edge length", Range( 2, 50 ) ) = 16 | |
//_TessMaxDisp( "Tess Max Displacement", Float ) = 25 | |
} | |
SubShader | |
{ | |
LOD 0 | |
Tags { "RenderPipeline"="UniversalPipeline" "RenderType"="Transparent" "Queue"="Transparent" } | |
Cull Back | |
AlphaToMask Off | |
HLSLINCLUDE | |
#pragma target 2.0 | |
#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 SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha | |
ZWrite Off | |
ZTest LEqual | |
Offset 0 , 0 | |
ColorMask RGBA | |
Stencil | |
{ | |
Ref [_StencilReference1] | |
Comp [_StencilComparison1] | |
Pass [_StencilPass1] | |
Fail Keep | |
ZFail Keep | |
} | |
HLSLPROGRAM | |
#pragma multi_compile_instancing | |
#define ASE_SRP_VERSION 999999 | |
#pragma prefer_hlslcc gles | |
#pragma exclude_renderers d3d11_9x | |
#pragma vertex vert | |
#pragma fragment frag | |
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" | |
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" | |
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" | |
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" | |
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" | |
#if ASE_SRP_VERSION <= 70108 | |
#define REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR | |
#endif | |
#define ASE_NEEDS_FRAG_WORLD_POSITION | |
#define ASE_NEEDS_VERT_NORMAL | |
struct VertexInput | |
{ | |
float4 vertex : POSITION; | |
float3 ase_normal : NORMAL; | |
float4 ase_texcoord : TEXCOORD0; | |
UNITY_VERTEX_INPUT_INSTANCE_ID | |
}; | |
struct VertexOutput | |
{ | |
float4 clipPos : SV_POSITION; | |
#if defined(ASE_NEEDS_FRAG_WORLD_POSITION) | |
float3 worldPos : TEXCOORD0; | |
#endif | |
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) | |
float4 shadowCoord : TEXCOORD1; | |
#endif | |
#ifdef ASE_FOG | |
float fogFactor : TEXCOORD2; | |
#endif | |
float4 ase_texcoord3 : TEXCOORD3; | |
float4 ase_texcoord4 : TEXCOORD4; | |
UNITY_VERTEX_INPUT_INSTANCE_ID | |
UNITY_VERTEX_OUTPUT_STEREO | |
}; | |
CBUFFER_START(UnityPerMaterial) | |
float4 _BaseColor; | |
float4 _TextureSample0_ST; | |
int _StencilPass1; | |
int _StencilReference1; | |
int _StencilComparison1; | |
float _ContrastEdge1; | |
float _ContrastEdge2; | |
float _Bias; | |
float _Scale; | |
float _Power; | |
float _Alpha; | |
#ifdef TESSELLATION_ON | |
float _TessPhongStrength; | |
float _TessValue; | |
float _TessMin; | |
float _TessMax; | |
float _TessEdgeLength; | |
float _TessMaxDisp; | |
#endif | |
CBUFFER_END | |
sampler2D _TextureSample0; | |
VertexOutput VertexFunction ( VertexInput v ) | |
{ | |
VertexOutput o = (VertexOutput)0; | |
UNITY_SETUP_INSTANCE_ID(v); | |
UNITY_TRANSFER_INSTANCE_ID(v, o); | |
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); | |
float3 ase_worldNormal = TransformObjectToWorldNormal(v.ase_normal); | |
o.ase_texcoord3.xyz = ase_worldNormal; | |
o.ase_texcoord4.xy = v.ase_texcoord.xy; | |
//setting value to unused interpolator channels and avoid initialization warnings | |
o.ase_texcoord3.w = 0; | |
o.ase_texcoord4.zw = 0; | |
#ifdef ASE_ABSOLUTE_VERTEX_POS | |
float3 defaultVertexValue = v.vertex.xyz; | |
#else | |
float3 defaultVertexValue = float3(0, 0, 0); | |
#endif | |
float3 vertexValue = defaultVertexValue; | |
#ifdef ASE_ABSOLUTE_VERTEX_POS | |
v.vertex.xyz = vertexValue; | |
#else | |
v.vertex.xyz += vertexValue; | |
#endif | |
v.ase_normal = v.ase_normal; | |
float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); | |
float4 positionCS = TransformWorldToHClip( positionWS ); | |
#if defined(ASE_NEEDS_FRAG_WORLD_POSITION) | |
o.worldPos = positionWS; | |
#endif | |
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) | |
VertexPositionInputs vertexInput = (VertexPositionInputs)0; | |
vertexInput.positionWS = positionWS; | |
vertexInput.positionCS = positionCS; | |
o.shadowCoord = GetShadowCoord( vertexInput ); | |
#endif | |
#ifdef ASE_FOG | |
o.fogFactor = ComputeFogFactor( positionCS.z ); | |
#endif | |
o.clipPos = positionCS; | |
return o; | |
} | |
#if defined(TESSELLATION_ON) | |
struct VertexControl | |
{ | |
float4 vertex : INTERNALTESSPOS; | |
float3 ase_normal : NORMAL; | |
float4 ase_texcoord : TEXCOORD0; | |
UNITY_VERTEX_INPUT_INSTANCE_ID | |
}; | |
struct TessellationFactors | |
{ | |
float edge[3] : SV_TessFactor; | |
float inside : SV_InsideTessFactor; | |
}; | |
VertexControl vert ( VertexInput v ) | |
{ | |
VertexControl o; | |
UNITY_SETUP_INSTANCE_ID(v); | |
UNITY_TRANSFER_INSTANCE_ID(v, o); | |
o.vertex = v.vertex; | |
o.ase_normal = v.ase_normal; | |
o.ase_texcoord = v.ase_texcoord; | |
return o; | |
} | |
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v) | |
{ | |
TessellationFactors o; | |
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(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); | |
#elif defined(ASE_LENGTH_TESSELLATION) | |
tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); | |
#elif defined(ASE_LENGTH_CULL_TESSELLATION) | |
tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); | |
#endif | |
o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; | |
return o; | |
} | |
[domain("tri")] | |
[partitioning("fractional_odd")] | |
[outputtopology("triangle_cw")] | |
[patchconstantfunc("TessellationFunction")] | |
[outputcontrolpoints(3)] | |
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID) | |
{ | |
return patch[id]; | |
} | |
[domain("tri")] | |
VertexOutput DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation) | |
{ | |
VertexInput o = (VertexInput) 0; | |
o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; | |
o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; | |
o.ase_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] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); | |
float phongStrength = _TessPhongStrength; | |
o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; | |
#endif | |
UNITY_TRANSFER_INSTANCE_ID(patch[0], o); | |
return VertexFunction(o); | |
} | |
#else | |
VertexOutput vert ( VertexInput v ) | |
{ | |
return VertexFunction( v ); | |
} | |
#endif | |
half4 frag ( VertexOutput IN ) : SV_Target | |
{ | |
UNITY_SETUP_INSTANCE_ID( IN ); | |
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); | |
#if defined(ASE_NEEDS_FRAG_WORLD_POSITION) | |
float3 WorldPosition = IN.worldPos; | |
#endif | |
float4 ShadowCoords = float4( 0, 0, 0, 0 ); | |
#if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) | |
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) | |
ShadowCoords = IN.shadowCoord; | |
#elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) | |
ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); | |
#endif | |
#endif | |
float3 ase_worldViewDir = ( _WorldSpaceCameraPos.xyz - WorldPosition ); | |
ase_worldViewDir = normalize(ase_worldViewDir); | |
float3 ase_worldNormal = IN.ase_texcoord3.xyz; | |
float fresnelNdotV6 = dot( ase_worldNormal, ase_worldViewDir ); | |
float fresnelNode6 = ( _Bias + _Scale * pow( 1.0 - fresnelNdotV6, _Power ) ); | |
float2 uv_TextureSample0 = IN.ase_texcoord4.xy * _TextureSample0_ST.xy + _TextureSample0_ST.zw; | |
float blendOpSrc7 = fresnelNode6; | |
float blendOpDest7 = tex2D( _TextureSample0, uv_TextureSample0 ).r; | |
float lerpBlendMode7 = lerp(blendOpDest7,(( blendOpSrc7 > 0.5 ) ? ( blendOpDest7 / max( ( 1.0 - blendOpSrc7 ) * 2.0 ,0.00001) ) : ( 1.0 - ( ( ( 1.0 - blendOpDest7 ) * 0.5 ) / max( blendOpSrc7,0.00001) ) ) ),_Alpha); | |
float smoothstepResult19 = smoothstep( _ContrastEdge1 , _ContrastEdge2 , ( saturate( lerpBlendMode7 ))); | |
float3 BakedAlbedo = 0; | |
float3 BakedEmission = 0; | |
float3 Color = _BaseColor.rgb; | |
float Alpha = smoothstepResult19; | |
float AlphaClipThreshold = 0.5; | |
float AlphaClipThresholdShadow = 0.5; | |
#ifdef _ALPHATEST_ON | |
clip( Alpha - AlphaClipThreshold ); | |
#endif | |
#ifdef LOD_FADE_CROSSFADE | |
LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); | |
#endif | |
#ifdef ASE_FOG | |
Color = MixFog( Color, IN.fogFactor ); | |
#endif | |
return half4( Color, Alpha ); | |
} | |
ENDHLSL | |
} | |
Pass | |
{ | |
Name "ShadowCaster" | |
Tags { "LightMode"="ShadowCaster" } | |
ZWrite On | |
ZTest LEqual | |
AlphaToMask Off | |
HLSLPROGRAM | |
#pragma multi_compile_instancing | |
#define ASE_SRP_VERSION 999999 | |
#pragma prefer_hlslcc gles | |
#pragma exclude_renderers d3d11_9x | |
#pragma vertex vert | |
#pragma fragment frag | |
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" | |
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" | |
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" | |
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" | |
#define ASE_NEEDS_FRAG_WORLD_POSITION | |
#define ASE_NEEDS_VERT_NORMAL | |
struct VertexInput | |
{ | |
float4 vertex : POSITION; | |
float3 ase_normal : NORMAL; | |
float4 ase_texcoord : TEXCOORD0; | |
UNITY_VERTEX_INPUT_INSTANCE_ID | |
}; | |
struct VertexOutput | |
{ | |
float4 clipPos : SV_POSITION; | |
#if defined(ASE_NEEDS_FRAG_WORLD_POSITION) | |
float3 worldPos : TEXCOORD0; | |
#endif | |
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) | |
float4 shadowCoord : TEXCOORD1; | |
#endif | |
float4 ase_texcoord2 : TEXCOORD2; | |
float4 ase_texcoord3 : TEXCOORD3; | |
UNITY_VERTEX_INPUT_INSTANCE_ID | |
UNITY_VERTEX_OUTPUT_STEREO | |
}; | |
CBUFFER_START(UnityPerMaterial) | |
float4 _BaseColor; | |
float4 _TextureSample0_ST; | |
int _StencilPass1; | |
int _StencilReference1; | |
int _StencilComparison1; | |
float _ContrastEdge1; | |
float _ContrastEdge2; | |
float _Bias; | |
float _Scale; | |
float _Power; | |
float _Alpha; | |
#ifdef TESSELLATION_ON | |
float _TessPhongStrength; | |
float _TessValue; | |
float _TessMin; | |
float _TessMax; | |
float _TessEdgeLength; | |
float _TessMaxDisp; | |
#endif | |
CBUFFER_END | |
sampler2D _TextureSample0; | |
float3 _LightDirection; | |
VertexOutput VertexFunction( VertexInput v ) | |
{ | |
VertexOutput o; | |
UNITY_SETUP_INSTANCE_ID(v); | |
UNITY_TRANSFER_INSTANCE_ID(v, o); | |
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); | |
float3 ase_worldNormal = TransformObjectToWorldNormal(v.ase_normal); | |
o.ase_texcoord2.xyz = ase_worldNormal; | |
o.ase_texcoord3.xy = v.ase_texcoord.xy; | |
//setting value to unused interpolator channels and avoid initialization warnings | |
o.ase_texcoord2.w = 0; | |
o.ase_texcoord3.zw = 0; | |
#ifdef ASE_ABSOLUTE_VERTEX_POS | |
float3 defaultVertexValue = v.vertex.xyz; | |
#else | |
float3 defaultVertexValue = float3(0, 0, 0); | |
#endif | |
float3 vertexValue = defaultVertexValue; | |
#ifdef ASE_ABSOLUTE_VERTEX_POS | |
v.vertex.xyz = vertexValue; | |
#else | |
v.vertex.xyz += vertexValue; | |
#endif | |
v.ase_normal = v.ase_normal; | |
float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); | |
#if defined(ASE_NEEDS_FRAG_WORLD_POSITION) | |
o.worldPos = positionWS; | |
#endif | |
float3 normalWS = TransformObjectToWorldDir( v.ase_normal ); | |
float4 clipPos = TransformWorldToHClip( ApplyShadowBias( positionWS, normalWS, _LightDirection ) ); | |
#if UNITY_REVERSED_Z | |
clipPos.z = min(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); | |
#else | |
clipPos.z = max(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); | |
#endif | |
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) | |
VertexPositionInputs vertexInput = (VertexPositionInputs)0; | |
vertexInput.positionWS = positionWS; | |
vertexInput.positionCS = clipPos; | |
o.shadowCoord = GetShadowCoord( vertexInput ); | |
#endif | |
o.clipPos = clipPos; | |
return o; | |
} | |
#if defined(TESSELLATION_ON) | |
struct VertexControl | |
{ | |
float4 vertex : INTERNALTESSPOS; | |
float3 ase_normal : NORMAL; | |
float4 ase_texcoord : TEXCOORD0; | |
UNITY_VERTEX_INPUT_INSTANCE_ID | |
}; | |
struct TessellationFactors | |
{ | |
float edge[3] : SV_TessFactor; | |
float inside : SV_InsideTessFactor; | |
}; | |
VertexControl vert ( VertexInput v ) | |
{ | |
VertexControl o; | |
UNITY_SETUP_INSTANCE_ID(v); | |
UNITY_TRANSFER_INSTANCE_ID(v, o); | |
o.vertex = v.vertex; | |
o.ase_normal = v.ase_normal; | |
o.ase_texcoord = v.ase_texcoord; | |
return o; | |
} | |
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v) | |
{ | |
TessellationFactors o; | |
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(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); | |
#elif defined(ASE_LENGTH_TESSELLATION) | |
tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); | |
#elif defined(ASE_LENGTH_CULL_TESSELLATION) | |
tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); | |
#endif | |
o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; | |
return o; | |
} | |
[domain("tri")] | |
[partitioning("fractional_odd")] | |
[outputtopology("triangle_cw")] | |
[patchconstantfunc("TessellationFunction")] | |
[outputcontrolpoints(3)] | |
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID) | |
{ | |
return patch[id]; | |
} | |
[domain("tri")] | |
VertexOutput DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation) | |
{ | |
VertexInput o = (VertexInput) 0; | |
o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; | |
o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; | |
o.ase_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] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); | |
float phongStrength = _TessPhongStrength; | |
o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; | |
#endif | |
UNITY_TRANSFER_INSTANCE_ID(patch[0], o); | |
return VertexFunction(o); | |
} | |
#else | |
VertexOutput vert ( VertexInput v ) | |
{ | |
return VertexFunction( v ); | |
} | |
#endif | |
half4 frag(VertexOutput IN ) : SV_TARGET | |
{ | |
UNITY_SETUP_INSTANCE_ID( IN ); | |
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); | |
#if defined(ASE_NEEDS_FRAG_WORLD_POSITION) | |
float3 WorldPosition = IN.worldPos; | |
#endif | |
float4 ShadowCoords = float4( 0, 0, 0, 0 ); | |
#if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) | |
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) | |
ShadowCoords = IN.shadowCoord; | |
#elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) | |
ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); | |
#endif | |
#endif | |
float3 ase_worldViewDir = ( _WorldSpaceCameraPos.xyz - WorldPosition ); | |
ase_worldViewDir = normalize(ase_worldViewDir); | |
float3 ase_worldNormal = IN.ase_texcoord2.xyz; | |
float fresnelNdotV6 = dot( ase_worldNormal, ase_worldViewDir ); | |
float fresnelNode6 = ( _Bias + _Scale * pow( 1.0 - fresnelNdotV6, _Power ) ); | |
float2 uv_TextureSample0 = IN.ase_texcoord3.xy * _TextureSample0_ST.xy + _TextureSample0_ST.zw; | |
float blendOpSrc7 = fresnelNode6; | |
float blendOpDest7 = tex2D( _TextureSample0, uv_TextureSample0 ).r; | |
float lerpBlendMode7 = lerp(blendOpDest7,(( blendOpSrc7 > 0.5 ) ? ( blendOpDest7 / max( ( 1.0 - blendOpSrc7 ) * 2.0 ,0.00001) ) : ( 1.0 - ( ( ( 1.0 - blendOpDest7 ) * 0.5 ) / max( blendOpSrc7,0.00001) ) ) ),_Alpha); | |
float smoothstepResult19 = smoothstep( _ContrastEdge1 , _ContrastEdge2 , ( saturate( lerpBlendMode7 ))); | |
float Alpha = smoothstepResult19; | |
float AlphaClipThreshold = 0.5; | |
float AlphaClipThresholdShadow = 0.5; | |
#ifdef _ALPHATEST_ON | |
#ifdef _ALPHATEST_SHADOW_ON | |
clip(Alpha - AlphaClipThresholdShadow); | |
#else | |
clip(Alpha - AlphaClipThreshold); | |
#endif | |
#endif | |
#ifdef LOD_FADE_CROSSFADE | |
LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); | |
#endif | |
return 0; | |
} | |
ENDHLSL | |
} | |
Pass | |
{ | |
Name "DepthOnly" | |
Tags { "LightMode"="DepthOnly" } | |
ZWrite On | |
ColorMask 0 | |
AlphaToMask Off | |
HLSLPROGRAM | |
#pragma multi_compile_instancing | |
#define ASE_SRP_VERSION 999999 | |
#pragma prefer_hlslcc gles | |
#pragma exclude_renderers d3d11_9x | |
#pragma vertex vert | |
#pragma fragment frag | |
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" | |
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" | |
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" | |
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" | |
#define ASE_NEEDS_FRAG_WORLD_POSITION | |
#define ASE_NEEDS_VERT_NORMAL | |
struct VertexInput | |
{ | |
float4 vertex : POSITION; | |
float3 ase_normal : NORMAL; | |
float4 ase_texcoord : TEXCOORD0; | |
UNITY_VERTEX_INPUT_INSTANCE_ID | |
}; | |
struct VertexOutput | |
{ | |
float4 clipPos : SV_POSITION; | |
#if defined(ASE_NEEDS_FRAG_WORLD_POSITION) | |
float3 worldPos : TEXCOORD0; | |
#endif | |
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) | |
float4 shadowCoord : TEXCOORD1; | |
#endif | |
float4 ase_texcoord2 : TEXCOORD2; | |
float4 ase_texcoord3 : TEXCOORD3; | |
UNITY_VERTEX_INPUT_INSTANCE_ID | |
UNITY_VERTEX_OUTPUT_STEREO | |
}; | |
CBUFFER_START(UnityPerMaterial) | |
float4 _BaseColor; | |
float4 _TextureSample0_ST; | |
int _StencilPass1; | |
int _StencilReference1; | |
int _StencilComparison1; | |
float _ContrastEdge1; | |
float _ContrastEdge2; | |
float _Bias; | |
float _Scale; | |
float _Power; | |
float _Alpha; | |
#ifdef TESSELLATION_ON | |
float _TessPhongStrength; | |
float _TessValue; | |
float _TessMin; | |
float _TessMax; | |
float _TessEdgeLength; | |
float _TessMaxDisp; | |
#endif | |
CBUFFER_END | |
sampler2D _TextureSample0; | |
VertexOutput VertexFunction( VertexInput v ) | |
{ | |
VertexOutput o = (VertexOutput)0; | |
UNITY_SETUP_INSTANCE_ID(v); | |
UNITY_TRANSFER_INSTANCE_ID(v, o); | |
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); | |
float3 ase_worldNormal = TransformObjectToWorldNormal(v.ase_normal); | |
o.ase_texcoord2.xyz = ase_worldNormal; | |
o.ase_texcoord3.xy = v.ase_texcoord.xy; | |
//setting value to unused interpolator channels and avoid initialization warnings | |
o.ase_texcoord2.w = 0; | |
o.ase_texcoord3.zw = 0; | |
#ifdef ASE_ABSOLUTE_VERTEX_POS | |
float3 defaultVertexValue = v.vertex.xyz; | |
#else | |
float3 defaultVertexValue = float3(0, 0, 0); | |
#endif | |
float3 vertexValue = defaultVertexValue; | |
#ifdef ASE_ABSOLUTE_VERTEX_POS | |
v.vertex.xyz = vertexValue; | |
#else | |
v.vertex.xyz += vertexValue; | |
#endif | |
v.ase_normal = v.ase_normal; | |
float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); | |
#if defined(ASE_NEEDS_FRAG_WORLD_POSITION) | |
o.worldPos = positionWS; | |
#endif | |
o.clipPos = TransformWorldToHClip( positionWS ); | |
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) | |
VertexPositionInputs vertexInput = (VertexPositionInputs)0; | |
vertexInput.positionWS = positionWS; | |
vertexInput.positionCS = o.clipPos; | |
o.shadowCoord = GetShadowCoord( vertexInput ); | |
#endif | |
return o; | |
} | |
#if defined(TESSELLATION_ON) | |
struct VertexControl | |
{ | |
float4 vertex : INTERNALTESSPOS; | |
float3 ase_normal : NORMAL; | |
float4 ase_texcoord : TEXCOORD0; | |
UNITY_VERTEX_INPUT_INSTANCE_ID | |
}; | |
struct TessellationFactors | |
{ | |
float edge[3] : SV_TessFactor; | |
float inside : SV_InsideTessFactor; | |
}; | |
VertexControl vert ( VertexInput v ) | |
{ | |
VertexControl o; | |
UNITY_SETUP_INSTANCE_ID(v); | |
UNITY_TRANSFER_INSTANCE_ID(v, o); | |
o.vertex = v.vertex; | |
o.ase_normal = v.ase_normal; | |
o.ase_texcoord = v.ase_texcoord; | |
return o; | |
} | |
TessellationFactors TessellationFunction (InputPatch<VertexControl,3> v) | |
{ | |
TessellationFactors o; | |
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(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); | |
#elif defined(ASE_LENGTH_TESSELLATION) | |
tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); | |
#elif defined(ASE_LENGTH_CULL_TESSELLATION) | |
tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); | |
#endif | |
o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; | |
return o; | |
} | |
[domain("tri")] | |
[partitioning("fractional_odd")] | |
[outputtopology("triangle_cw")] | |
[patchconstantfunc("TessellationFunction")] | |
[outputcontrolpoints(3)] | |
VertexControl HullFunction(InputPatch<VertexControl, 3> patch, uint id : SV_OutputControlPointID) | |
{ | |
return patch[id]; | |
} | |
[domain("tri")] | |
VertexOutput DomainFunction(TessellationFactors factors, OutputPatch<VertexControl, 3> patch, float3 bary : SV_DomainLocation) | |
{ | |
VertexInput o = (VertexInput) 0; | |
o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; | |
o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; | |
o.ase_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] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_normal)); | |
float phongStrength = _TessPhongStrength; | |
o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; | |
#endif | |
UNITY_TRANSFER_INSTANCE_ID(patch[0], o); | |
return VertexFunction(o); | |
} | |
#else | |
VertexOutput vert ( VertexInput v ) | |
{ | |
return VertexFunction( v ); | |
} | |
#endif | |
half4 frag(VertexOutput IN ) : SV_TARGET | |
{ | |
UNITY_SETUP_INSTANCE_ID(IN); | |
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); | |
#if defined(ASE_NEEDS_FRAG_WORLD_POSITION) | |
float3 WorldPosition = IN.worldPos; | |
#endif | |
float4 ShadowCoords = float4( 0, 0, 0, 0 ); | |
#if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) | |
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) | |
ShadowCoords = IN.shadowCoord; | |
#elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) | |
ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); | |
#endif | |
#endif | |
float3 ase_worldViewDir = ( _WorldSpaceCameraPos.xyz - WorldPosition ); | |
ase_worldViewDir = normalize(ase_worldViewDir); | |
float3 ase_worldNormal = IN.ase_texcoord2.xyz; | |
float fresnelNdotV6 = dot( ase_worldNormal, ase_worldViewDir ); | |
float fresnelNode6 = ( _Bias + _Scale * pow( 1.0 - fresnelNdotV6, _Power ) ); | |
float2 uv_TextureSample0 = IN.ase_texcoord3.xy * _TextureSample0_ST.xy + _TextureSample0_ST.zw; | |
float blendOpSrc7 = fresnelNode6; | |
float blendOpDest7 = tex2D( _TextureSample0, uv_TextureSample0 ).r; | |
float lerpBlendMode7 = lerp(blendOpDest7,(( blendOpSrc7 > 0.5 ) ? ( blendOpDest7 / max( ( 1.0 - blendOpSrc7 ) * 2.0 ,0.00001) ) : ( 1.0 - ( ( ( 1.0 - blendOpDest7 ) * 0.5 ) / max( blendOpSrc7,0.00001) ) ) ),_Alpha); | |
float smoothstepResult19 = smoothstep( _ContrastEdge1 , _ContrastEdge2 , ( saturate( lerpBlendMode7 ))); | |
float Alpha = smoothstepResult19; | |
float AlphaClipThreshold = 0.5; | |
#ifdef _ALPHATEST_ON | |
clip(Alpha - AlphaClipThreshold); | |
#endif | |
#ifdef LOD_FADE_CROSSFADE | |
LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); | |
#endif | |
return 0; | |
} | |
ENDHLSL | |
} | |
} | |
CustomEditor "UnityEditor.ShaderGraph.PBRMasterGUI" | |
Fallback "Hidden/InternalErrorShader" | |
} | |
/*ASEBEGIN | |
Version=18909 | |
0;772;975;227;2194.439;764.6398;1;True;False | |
Node;AmplifyShaderEditor.RangedFloatNode;12;-1160.966,-365.2289;Inherit;False;Property;_Scale;Scale;2;0;Create;True;0;0;0;False;0;False;2;2;0;0;0;1;FLOAT;0 | |
Node;AmplifyShaderEditor.RangedFloatNode;10;-1160.966,-269.2289;Inherit;False;Property;_Power;Power;3;0;Create;True;0;0;0;False;0;False;2;2;0;0;0;1;FLOAT;0 | |
Node;AmplifyShaderEditor.RangedFloatNode;11;-1163.966,-466.2289;Inherit;False;Property;_Bias;Bias;1;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 | |
Node;AmplifyShaderEditor.FresnelNode;6;-892.9661,-506.2289;Inherit;True;Standard;WorldNormal;ViewDir;False;False;5;0;FLOAT3;0,0,1;False;4;FLOAT3;0,0,0;False;1;FLOAT;0;False;2;FLOAT;3.4;False;3;FLOAT;1;False;1;FLOAT;0 | |
Node;AmplifyShaderEditor.SamplerNode;8;-877.9661,-275.2289;Inherit;True;Property;_TextureSample0;Texture Sample 0;0;0;Create;True;0;0;0;False;0;False;-1;0a4f03fe5d59b1e4db904589a9216c8d;0a4f03fe5d59b1e4db904589a9216c8d;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 | |
Node;AmplifyShaderEditor.RangedFloatNode;9;-856.9661,-23.22888;Inherit;False;Property;_Alpha;Alpha;4;0;Create;True;0;0;0;False;0;False;0.3797129;0.253;0;1;0;1;FLOAT;0 | |
Node;AmplifyShaderEditor.RangedFloatNode;23;-418.6906,-59.03491;Inherit;False;Property;_ContrastEdge2;Contrast Edge 2;6;0;Create;True;0;0;0;False;0;False;0.4470588;0.493;0;1;0;1;FLOAT;0 | |
Node;AmplifyShaderEditor.BlendOpsNode;7;-509.9661,-509.2289;Inherit;True;VividLight;True;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 | |
Node;AmplifyShaderEditor.RangedFloatNode;22;-422.6906,-156.0349;Inherit;False;Property;_ContrastEdge1;Contrast Edge 1;5;0;Create;True;0;0;0;False;0;False;0.07058824;0.389;0;1;0;1;FLOAT;0 | |
Node;AmplifyShaderEditor.IntNode;24;-1728.066,-401.0986;Inherit;False;Property;_StencilComparison1;Stencil Comparison;9;1;[Enum];Create;True;0;0;1;UnityEngine.Rendering.CompareFunction;True;0;False;8;8;False;0;1;INT;0 | |
Node;AmplifyShaderEditor.SmoothstepOpNode;19;-117.6906,-194.0349;Inherit;True;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 | |
Node;AmplifyShaderEditor.IntNode;26;-1726.066,-311.0986;Inherit;False;Property;_StencilPass1;Stencil Pass;10;1;[Enum];Create;True;0;0;1;UnityEngine.Rendering.StencilOp;True;0;False;0;2;False;0;1;INT;0 | |
Node;AmplifyShaderEditor.ColorNode;18;-143.6906,-526.0349;Inherit;False;Property;_BaseColor;BaseColor;7;1;[HDR];Create;True;0;0;0;False;0;False;0.3568628,0.7019608,1,1;0.518868,1.321891,2,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 | |
Node;AmplifyShaderEditor.IntNode;25;-1729.066,-481.0986;Inherit;False;Property;_StencilReference1;Stencil Reference;8;0;Create;True;0;0;1;;True;0;False;0;0;False;0;1;INT;0 | |
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;2;0,0;Float;False;False;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;3;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;ShadowCaster;0;2;ShadowCaster;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;0;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;False;-1;True;3;False;-1;False;True;1;LightMode=ShadowCaster;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 | |
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;0;0,0;Float;False;False;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;3;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;ExtraPrePass;0;0;ExtraPrePass;5;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;0;0;False;True;1;1;False;-1;0;False;-1;0;1;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;1;False;-1;True;3;False;-1;True;True;0;False;-1;0;False;-1;True;0;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 | |
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;4;0,0;Float;False;False;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;3;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;Meta;0;4;Meta;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;0;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Meta;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 | |
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;3;0,0;Float;False;False;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;3;New Amplify Shader;2992e84f91cbeb14eab234972e07ea9d;True;DepthOnly;0;3;DepthOnly;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;True;0;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;False;False;True;False;False;False;False;0;False;-1;False;False;False;False;False;False;False;False;False;True;1;False;-1;False;False;True;1;LightMode=DepthOnly;False;0;Hidden/InternalErrorShader;0;0;Standard;0;False;0 | |
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;1;217,-523;Float;False;True;-1;2;UnityEditor.ShaderGraph.PBRMasterGUI;0;3;FresnelDissolveTest;2992e84f91cbeb14eab234972e07ea9d;True;Forward;0;1;Forward;8;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;3;RenderPipeline=UniversalPipeline;RenderType=Transparent=RenderType;Queue=Transparent=Queue=0;True;0;0;False;True;1;5;False;-1;10;False;-1;1;1;False;-1;10;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;True;True;True;255;True;25;255;False;-1;255;False;-1;7;True;24;1;True;26;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;2;False;-1;True;3;False;-1;True;True;0;False;-1;0;False;-1;True;1;LightMode=UniversalForward;False;0;Hidden/InternalErrorShader;0;0;Standard;22;Surface;1; Blend;0;Two Sided;1;Cast Shadows;1; Use Shadow Threshold;0;Receive Shadows;1;GPU Instancing;1;LOD CrossFade;0;Built-in Fog;0;DOTS Instancing;0;Meta Pass;0;Extra Pre Pass;0;Tessellation;0; Phong;0; Strength;0.5,False,-1; Type;0; Tess;16,False,-1; Min;10,False,-1; Max;25,False,-1; Edge Length;16,False,-1; Max Displacement;25,False,-1;Vertex Position,InvertActionOnDeselection;1;0;5;False;True;True;True;False;False;;False;0 | |
WireConnection;6;1;11;0 | |
WireConnection;6;2;12;0 | |
WireConnection;6;3;10;0 | |
WireConnection;7;0;6;0 | |
WireConnection;7;1;8;1 | |
WireConnection;7;2;9;0 | |
WireConnection;19;0;7;0 | |
WireConnection;19;1;22;0 | |
WireConnection;19;2;23;0 | |
WireConnection;1;2;18;0 | |
WireConnection;1;3;19;0 | |
ASEEND*/ | |
//CHKSM=7ABB7DB890FE5465D814CBCD7BFD8A1CE7A2B3D8 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment