Files
beyond/Assets/ThirdParty/Lux URP Essentials/Scripts/Resources/Lux URP WindComposite.shader
2024-11-20 15:21:28 +01:00

87 lines
3.0 KiB
Plaintext

// http://www.iquilezles.org/www/articles/dynclouds/dynclouds.htm
Shader "Hidden/Lux URP WindComposite"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags { "RenderPipeline" = "LightweightPipeline" }
Pass
{
HLSLPROGRAM
// Required to compile gles 2.0 with standard SRP library
#pragma prefer_hlslcc gles
#pragma exclude_renderers d3d11_9x
#pragma target 2.0
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
// Global Inputs
float3 _LuxLWRPWindDir;
float2 _LuxLWRPWindUVs;
float2 _LuxLWRPWindUVs1;
float2 _LuxLWRPWindUVs2;
float2 _LuxLWRPWindUVs3;
float2 _LuxLWRPGust;
half3 _GustMixLayer;
TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); float4 _MainTex_ST;
#pragma vertex vert
#pragma fragment frag
struct VertexInput
{
float4 positionOS : POSITION;
half2 texcoord : TEXCOORD0;
};
struct VertexOutput
{
float4 positionCS : SV_POSITION;
float2 uv : TEXCOORD0;
};
VertexOutput vert( VertexInput v )
{
VertexOutput output;
output.positionCS = TransformObjectToHClip(v.positionOS.xyz);
output.uv = v.texcoord;
return output;
}
half4 frag(VertexOutput i) : SV_Target {
half4 n1 = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + _LuxLWRPWindUVs);
half4 n2 = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + _LuxLWRPWindUVs1);
half4 n3 = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + _LuxLWRPWindUVs2);
half4 n4 = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv * _LuxLWRPGust.x + _LuxLWRPWindUVs3);
half4 sum = half4(n1.r, n1.g + n2.g, n1.b + n2.b + n3.b, n1.a + n2.a + n3.a + n4.a);
const half4 weights = half4(0.5000, 0.2500 , 0.1250 , 0.0625 );
half2 WindStrengthGustNoise;
// WindStrength
WindStrengthGustNoise.x = dot(sum, weights);
// GrassGustNoise / _LuxLWRPGust.y comes in as 0.5 - 1.5
WindStrengthGustNoise.y = lerp(1.0h, (n4.a + dot(half3(n1.a, n2.a, n3.a), _GustMixLayer)) * 0.85h, _LuxLWRPGust.y - 0.5h);
// Sharpen WindStrengthGustNoise according to turbulence
WindStrengthGustNoise = (WindStrengthGustNoise - half2(0.5h, 0.5h)) * _LuxLWRPGust.yy + half2(0.5h, 0.5h);
return half4(
WindStrengthGustNoise,
//n4.a,
//0
(n3.a + abs(WindStrengthGustNoise.y)) * 0.5h + n2.a * 0.0h,
0
);
}
ENDHLSL
}
}
}