Untitled
unknown
plain_text
8 months ago
3.5 kB
7
Indexable
Shader "Custom/GerstnerWaves"
{
Properties
{
_BaseColor ("Color", Color) = (1,1,1,1)
_WaveA ("Wave A", Vector) = (1,1,1,1)
_WaveB ("Wave B", Vector) = (1,1,1,1)
_WaveC ("Wave C", Vector) = (1,1,1,1)
}
SubShader
{
Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline" }
Pass {
Name "Main"
Tags { "LightMode"="UniversalForward" }
HLSLPROGRAM
#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"
float3 GerstnerWave(float4 waveData, float3 gridPoint, float time)
{
float steepness = waveData.z;
float wavelength = waveData.w;
float k = 2 * 3.14159265 / wavelength;
float c = sqrt(9.8 / k);
float2 d = normalize(waveData.xy);
float f = k * (dot(d, gridPoint.xz) - c * time);
float a = steepness / k;
return float3(
d.x * (a * cos(f)),
a * sin(f),
d.y * (a * cos(f))
);
}
struct Attributes
{
float4 positionOS : POSITION;
half3 normal : NORMAL;
half4 tangent : TANGENT;
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
float3 positionOS : POSITION;
half3 normal : TEXCOORD0;
};
// To make the Unity shader SRP Batcher compatible, declare all
// properties related to a Material in a a single CBUFFER block with
// the name UnityPerMaterial.
CBUFFER_START(UnityPerMaterial)
half4 _BaseColor;
half4 _WaveA;
half4 _WaveB;
half4 _WaveC;
CBUFFER_END
Varyings vert(Attributes IN)
{
Varyings OUT;
VertexPositionInputs positionInputs = GetVertexPositionInputs(IN.positionOS.xyz);
float3 pos = IN.positionOS;
pos += GerstnerWave(_WaveA, positionInputs.positionWS, _Time);
pos += GerstnerWave(_WaveB, positionInputs.positionWS, _Time);
pos += GerstnerWave(_WaveC, positionInputs.positionWS, _Time);
positionInputs = GetVertexPositionInputs(pos);
OUT.positionHCS = positionInputs.positionCS;
OUT.normal = IN.tangent;
return OUT;
}
half4 frag(Varyings IN) : SV_Target
{
normalize(cross(ddx(IN.positionOS), ddy(IN.positionOS)));
// Returning the _BaseColor value.
return _BaseColor;
}
ENDHLSL
}
}
FallBack "Diffuse"
}
Editor is loading...
Leave a Comment