87 lines
3.0 KiB
Plaintext
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
|
|
}
|
|
}
|
|
}
|