Files
ZHGD_Web/Assets/Art/Art Plugins/GPUInstancer/Shaders/Internal-DepthNormalsTexture_GPUI.shader
2025-07-13 23:16:20 +08:00

542 lines
17 KiB
Plaintext

// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
Shader "Hidden/GPUInstancer/Internal-DepthNormalsTexture" {
Properties{
_MainTex("", 2D) = "white" {}
_Cutoff("", Float) = 0.5
_Color("", Color) = (1,1,1,1)
}
SubShader{
Tags { "RenderType" = "Opaque" }
Pass {
CGPROGRAM
#include "UnityCG.cginc"
#include "Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
struct v2f {
float4 pos : SV_POSITION;
float4 nz : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
v2f vert(appdata_base v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.pos = UnityObjectToClipPos(v.vertex);
o.nz.xyz = COMPUTE_VIEW_NORMAL;
o.nz.w = COMPUTE_DEPTH_01;
return o;
}
fixed4 frag(v2f i) : SV_Target {
return EncodeDepthNormal(i.nz.w, i.nz.xyz);
}
ENDCG
}
}
SubShader{
Tags { "RenderType" = "TransparentCutout" }
Pass {
CGPROGRAM
#include "UnityCG.cginc"
#include "Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float4 nz : TEXCOORD1;
UNITY_VERTEX_OUTPUT_STEREO
};
uniform float4 _MainTex_ST;
v2f vert(appdata_base v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
o.nz.xyz = COMPUTE_VIEW_NORMAL;
o.nz.w = COMPUTE_DEPTH_01;
return o;
}
uniform sampler2D _MainTex;
uniform fixed _Cutoff;
uniform fixed4 _Color;
fixed4 frag(v2f i) : SV_Target {
fixed4 texcol = tex2D(_MainTex, i.uv);
clip(texcol.a*_Color.a - _Cutoff);
return EncodeDepthNormal(i.nz.w, i.nz.xyz);
}
ENDCG
}
}
SubShader{
Tags { "RenderType" = "TreeBark" }
Pass {
CGPROGRAM
#include "UnityCG.cginc"
#include "Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
#include "UnityBuiltin3xTreeLibrary.cginc"
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float4 nz : TEXCOORD1;
UNITY_VERTEX_OUTPUT_STEREO
};
v2f vert(appdata_full v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
TreeVertBark(v);
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
o.nz.xyz = COMPUTE_VIEW_NORMAL;
o.nz.w = COMPUTE_DEPTH_01;
return o;
}
fixed4 frag(v2f i) : SV_Target {
return EncodeDepthNormal(i.nz.w, i.nz.xyz);
}
ENDCG
}
}
SubShader{
Tags { "RenderType" = "TreeLeaf" }
Pass {
CGPROGRAM
#include "UnityCG.cginc"
#include "Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
#include "UnityBuiltin3xTreeLibrary.cginc"
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float4 nz : TEXCOORD1;
UNITY_VERTEX_OUTPUT_STEREO
};
v2f vert(appdata_full v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
TreeVertLeaf(v);
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
o.nz.xyz = COMPUTE_VIEW_NORMAL;
o.nz.w = COMPUTE_DEPTH_01;
return o;
}
uniform sampler2D _MainTex;
uniform fixed _Cutoff;
fixed4 frag(v2f i) : SV_Target {
half alpha = tex2D(_MainTex, i.uv).a;
clip(alpha - _Cutoff);
return EncodeDepthNormal(i.nz.w, i.nz.xyz);
}
ENDCG
}
}
SubShader{
Tags { "RenderType" = "TreeOpaque" "DisableBatching" = "True" }
Pass {
CGPROGRAM
#include "UnityCG.cginc"
#include "Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
#include "TerrainEngine.cginc"
struct v2f {
float4 pos : SV_POSITION;
float4 nz : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
fixed4 color : COLOR;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
v2f vert(appdata v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
TerrainAnimateTree(v.vertex, v.color.w);
o.pos = UnityObjectToClipPos(v.vertex);
o.nz.xyz = COMPUTE_VIEW_NORMAL;
o.nz.w = COMPUTE_DEPTH_01;
return o;
}
fixed4 frag(v2f i) : SV_Target {
return EncodeDepthNormal(i.nz.w, i.nz.xyz);
}
ENDCG
}
}
SubShader{
Tags { "RenderType" = "TreeTransparentCutout" "DisableBatching" = "True" }
Pass {
Cull Back
CGPROGRAM
#include "UnityCG.cginc"
#include "Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
#include "TerrainEngine.cginc"
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float4 nz : TEXCOORD1;
UNITY_VERTEX_OUTPUT_STEREO
};
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
fixed4 color : COLOR;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
v2f vert(appdata v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
TerrainAnimateTree(v.vertex, v.color.w);
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
o.nz.xyz = COMPUTE_VIEW_NORMAL;
o.nz.w = COMPUTE_DEPTH_01;
return o;
}
uniform sampler2D _MainTex;
uniform fixed _Cutoff;
fixed4 frag(v2f i) : SV_Target {
half alpha = tex2D(_MainTex, i.uv).a;
clip(alpha - _Cutoff);
return EncodeDepthNormal(i.nz.w, i.nz.xyz);
}
ENDCG
}
Pass {
Cull Front
CGPROGRAM
#include "UnityCG.cginc"
#include "Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
#include "TerrainEngine.cginc"
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float4 nz : TEXCOORD1;
UNITY_VERTEX_OUTPUT_STEREO
};
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
fixed4 color : COLOR;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
v2f vert(appdata v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
TerrainAnimateTree(v.vertex, v.color.w);
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
o.nz.xyz = -COMPUTE_VIEW_NORMAL;
o.nz.w = COMPUTE_DEPTH_01;
return o;
}
uniform sampler2D _MainTex;
uniform fixed _Cutoff;
fixed4 frag(v2f i) : SV_Target {
fixed4 texcol = tex2D(_MainTex, i.uv);
clip(texcol.a - _Cutoff);
return EncodeDepthNormal(i.nz.w, i.nz.xyz);
}
ENDCG
}
}
SubShader {
Tags{ "RenderType" = "TreeBillboard" }
Pass{
Cull Off
CGPROGRAM
#include "UnityCG.cginc"
#include "Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
#include "TerrainEngine.cginc"
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float4 nz : TEXCOORD1;
UNITY_VERTEX_OUTPUT_STEREO
};
v2f vert(appdata_tree_billboard v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
TerrainBillboardTree(v.vertex, v.texcoord1.xy, v.texcoord.y);
o.pos = UnityObjectToClipPos(v.vertex);
o.uv.x = v.texcoord.x;
o.uv.y = v.texcoord.y > 0;
o.nz.xyz = float3(0,0,1);
o.nz.w = COMPUTE_DEPTH_01;
return o;
}
uniform sampler2D _MainTex;
fixed4 frag(v2f i) : SV_Target {
fixed4 texcol = tex2D(_MainTex, i.uv);
clip(texcol.a - 0.001);
return EncodeDepthNormal(i.nz.w, i.nz.xyz);
}
ENDCG
}
}
SubShader{
Tags { "RenderType" = "GrassBillboard" }
Pass {
Cull Off
CGPROGRAM
#include "UnityCG.cginc"
#include "Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
#include "TerrainEngine.cginc"
struct v2f {
float4 pos : SV_POSITION;
fixed4 color : COLOR;
float2 uv : TEXCOORD0;
float4 nz : TEXCOORD1;
UNITY_VERTEX_OUTPUT_STEREO
};
v2f vert(appdata_full v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
WavingGrassBillboardVert(v);
o.color = v.color;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
o.nz.xyz = COMPUTE_VIEW_NORMAL;
o.nz.w = COMPUTE_DEPTH_01;
return o;
}
uniform sampler2D _MainTex;
uniform fixed _Cutoff;
fixed4 frag(v2f i) : SV_Target {
fixed4 texcol = tex2D(_MainTex, i.uv);
fixed alpha = texcol.a * i.color.a;
clip(alpha - _Cutoff);
return EncodeDepthNormal(i.nz.w, i.nz.xyz);
}
ENDCG
}
}
SubShader{
Tags { "RenderType" = "Grass" }
Pass {
Cull Off
CGPROGRAM
#include "UnityCG.cginc"
#include "Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
#include "TerrainEngine.cginc"
struct v2f {
float4 pos : SV_POSITION;
fixed4 color : COLOR;
float2 uv : TEXCOORD0;
float4 nz : TEXCOORD1;
UNITY_VERTEX_OUTPUT_STEREO
};
v2f vert(appdata_full v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
WavingGrassVert(v);
o.color = v.color;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord;
o.nz.xyz = COMPUTE_VIEW_NORMAL;
o.nz.w = COMPUTE_DEPTH_01;
return o;
}
uniform sampler2D _MainTex;
uniform fixed _Cutoff;
fixed4 frag(v2f i) : SV_Target {
fixed4 texcol = tex2D(_MainTex, i.uv);
fixed alpha = texcol.a * i.color.a;
clip(alpha - _Cutoff);
return EncodeDepthNormal(i.nz.w, i.nz.xyz);
}
ENDCG
}
}
SubShader{
Tags { "RenderType" = "GPUIFoliage" }
Pass {
Cull Off
CGPROGRAM
#include "UnityCG.cginc"
#include "Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
#include "TerrainEngine.cginc"
struct v2f {
float4 pos : SV_POSITION;
fixed4 color : COLOR;
float2 uv : TEXCOORD0;
float4 nz : TEXCOORD1;
UNITY_VERTEX_OUTPUT_STEREO
};
uniform float _IsBillboard;
uniform float _WindWavesOn;
uniform sampler2D _WindWaveNormalTexture;
uniform float2 _WindVector;
uniform float _WindWaveSize;
uniform float _WindIdleSway;
uniform float _WindWaveSway;
uniform sampler2D _MainTex;
uniform float4 _MainTex_ST;
uniform float _Cutoff = 0.5;
void GPUIFoliageVert(inout appdata_full v)
{
float BillboardOn261 = lerp(0.0,1.0,_IsBillboard);
float4 ase_vertex4Pos = v.vertex;
float4x4 break301 = unity_ObjectToWorld;
float3 appendResult302 = (float3(break301[ 0 ][ 0 ] , break301[ 1 ][ 0 ] , break301[ 2 ][ 0 ]));
float3 appendResult306 = (float3(break301[ 0 ][ 1 ] , break301[ 1 ][ 1 ] , break301[ 2 ][ 1 ]));
float3 appendResult307 = (float3(break301[ 0 ][ 2 ] , break301[ 1 ][ 2 ] , break301[ 2 ][ 2 ]));
float4 appendResult303 = (float4(( ase_vertex4Pos.x * length( appendResult302 ) ) , ( ase_vertex4Pos.y * length( appendResult306 ) ) , ( ase_vertex4Pos.z * length( appendResult307 ) ) , ase_vertex4Pos.w));
float4x4 break278 = UNITY_MATRIX_V;
float3 appendResult287 = (float3(break278[ 0 ][ 0 ] , break278[ 0 ][ 1 ] , break278[ 0 ][ 2 ]));
float3 normalizeResult288 = normalize( appendResult287 );
float3 appendResult295 = (float3(normalizeResult288));
float3 appendResult314 = (float3(break301[ 0 ][ 3 ] , break301[ 1 ][ 3 ] , break301[ 2 ][ 3 ]));
float3 normalizeResult504 = normalize( cross( float3(0,1,0) , ( appendResult314 - _WorldSpaceCameraPos ) ) );
#ifdef _BILLBOARDFACECAMPOS_ON
float3 staticSwitch496 = normalizeResult504;
#else
float3 staticSwitch496 = appendResult295;
#endif
float3 appendResult279 = (float3(break278[ 1 ][ 0 ] , break278[ 1 ][ 1 ] , break278[ 1 ][ 2 ]));
float3 normalizeResult283 = normalize( appendResult279 );
float3 appendResult296 = (float3(normalizeResult283));
float temp_output_416_0 = (appendResult296).y;
float3 break419 = appendResult296;
float4 appendResult420 = (float4(break419.x , ( temp_output_416_0 * -1.0 ) , break419.z , 0.0));
#ifdef _BILLBOARDFACECAMPOS_ON
float4 staticSwitch498 = float4(0,1,0,0);
#else
float4 staticSwitch498 = (( temp_output_416_0 > 0.0 ) ? float4( appendResult296 , 0.0 ) : appendResult420 );
#endif
float3 appendResult281 = (float3(break278[ 2 ][ 0 ] , break278[ 2 ][ 1 ] , break278[ 2 ][ 2 ]));
float3 normalizeResult284 = normalize( appendResult281 );
float3 appendResult297 = (float3(( normalizeResult284 * -1.0 )));
float3 appendResult322 = (float3(mul( appendResult303, float4x4(float4( staticSwitch496 , 0.0 ), staticSwitch498, float4( appendResult297 , 0.0 ), float4( 0,0,0,0 )) ).xyz));
float4 appendResult323 = (float4(( appendResult322 + appendResult314 ) , ase_vertex4Pos.w));
float4 transform327 = mul(unity_WorldToObject,appendResult323);
float4 BillboardedVertexPos320 = transform327;
float WindWavesOn112 = lerp(0.0,1.0,_WindWavesOn);
float2 WindDirVector29 = _WindVector;
float mulTime407 = _Time.y * ( length( WindDirVector29 ) * 0.01 );
float WindWaveSize128 = _WindWaveSize;
float3 ase_worldPos = mul( unity_ObjectToWorld, v.vertex );
float2 panner36 = ( mulTime407 * WindDirVector29 + ( ( 1.0 - (0.0 + (WindWaveSize128 - 0.0) * (0.9 - 0.0) / (1.0 - 0.0)) ) * 0.003 * (ase_worldPos).xz ));
float3 tex2DNode2 = UnpackNormal( tex2Dlod( _WindWaveNormalTexture, float4( panner36, 0, 0.0) ) );
float3 FinalWindVectors181 = tex2DNode2;
float3 break185 = FinalWindVectors181;
float3 appendResult186 = (float3(break185.x , 0.0 , break185.y));
float WindIdleSway197 = _WindIdleSway;
float3 ase_vertex3Pos = v.vertex.xyz;
float3 lerpResult230 = lerp( float3( 0,0,0 ) , ( appendResult186 * WindIdleSway197 ) , saturate( ase_vertex3Pos.y ));
float3 WindIdleSwayCalculated218 = lerpResult230;
float WindWaveSway191 = _WindWaveSway;
float WindWaveNoise126 = saturate( tex2DNode2.g );
float2 break206 = ( WindWaveNoise126 * WindDirVector29 );
float3 appendResult205 = (float3(break206.x , 0.0 , break206.y));
float3 lerpResult229 = lerp( float3( 0,0,0 ) , ( WindWaveSway191 * 20.0 * appendResult205 ) , saturate( ase_vertex3Pos.y ));
float3 WindWaveSwayCalculated220 = lerpResult229;
float3 lerpResult215 = lerp( WindIdleSwayCalculated218 , ( WindIdleSwayCalculated218 + ( WindWaveSwayCalculated220 * -1.0 ) ) , WindWaveNoise126);
float4 transform233 = mul(unity_WorldToObject,float4( (( WindWavesOn112 > 0.0 ) ? lerpResult215 : WindIdleSwayCalculated218 ) , 0.0 ));
float4 WindVertexOffset183 = transform233;
float4 FinalVertexPos336 = (( BillboardOn261 > 0.0 ) ? ( BillboardedVertexPos320 + WindVertexOffset183 ) : ( WindVertexOffset183 + ase_vertex4Pos ) );
v.vertex.xyz = FinalVertexPos336.xyz;
v.normal = float3(0,1,0);
}
v2f vert(appdata_full v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
GPUIFoliageVert(v);
o.color = v.color;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord;
o.nz.xyz = COMPUTE_VIEW_NORMAL;
o.nz.w = COMPUTE_DEPTH_01;
return o;
}
fixed4 frag(v2f i) : SV_Target {
fixed4 texcol = tex2D(_MainTex, i.uv);
fixed alpha = texcol.a * i.color.a;
clip(alpha - _Cutoff);
return EncodeDepthNormal(i.nz.w, i.nz.xyz);
}
ENDCG
}
}
Fallback Off
}