Files
beyond/Assets/ThirdParty/Lux URP Essentials/Shaders/Vegetation/Lux URP Wind Visualize.shader
2024-11-20 15:21:28 +01:00

113 lines
3.4 KiB
Plaintext

Shader "Lux URP/Vegetation/Wind Visualize"
{
Properties
{
[Header(Select Mode)]
[KeywordEnum(Combined Wind, Wind Strength, Wind Gust)]
_Visualize ("Visualize", Float) = 0
}
SubShader
{
Tags
{
"RenderPipeline" = "UniversalPipeline"
"RenderType"="Transparent"
"Queue"="Transparent"
}
Pass
{
Name "StandardUnlit"
Tags{"LightMode" = "UniversalForward"}
//Blend One One
Blend SrcAlpha OneMinusSrcAlpha
Cull Back
ZTest LEqual
ZWrite Off
HLSLPROGRAM
// Required to compile gles 2.0 with standard srp library
#pragma prefer_hlslcc gles
#pragma exclude_renderers d3d11_9x
#pragma target 3.0
// -------------------------------------
// Unity defined keywords
//--------------------------------------
// GPU Instancing
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
CBUFFER_START(UnityPerMaterial)
float _Visualize;
CBUFFER_END
TEXTURE2D(_LuxLWRPWindRT); SAMPLER(sampler_LuxLWRPWindRT); float4 _LuxLWRPWindRT_TexelSize;
float4 _LuxLWRPWindDirSize;
struct VertexInput
{
float4 vertex : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct VertexOutput
{
float4 positionCS : SV_POSITION;
float3 positionWS : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
VertexOutput vert (VertexInput v)
{
VertexOutput o = (VertexOutput)0;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_TRANSFER_INSTANCE_ID(v, o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.positionCS = TransformObjectToHClip(v.vertex.xyz);
o.positionWS = mul(UNITY_MATRIX_M,v.vertex).xyz;
return o;
}
half3 getResult(half4 sample) {
half full = sample.r * (sample.g * 2.0h - 0.243h); // - 0.24376f /* not a "real" normal as we want to keep the base direction */ );
half neg = saturate(-full);
switch(_Visualize) {
case 0:
half3 result = (neg == 0) ? full.xxx : half3(neg, full.xx);
return result;
case 1:
return sample.rrr;
case 2:
return sample.ggg;
default:
return sample.rgb;
}
}
half4 frag (VertexOutput input ) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(input);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
half4 sample = SAMPLE_TEXTURE2D(_LuxLWRPWindRT, sampler_LuxLWRPWindRT, input.positionWS.xz * _LuxLWRPWindDirSize.w);
half3 finalCol = getResult(sample);
return half4(finalCol, .5);
}
ENDHLSL
}
}
FallBack "Hidden/InternalErrorShader"
}