Files
back_cantanBuilding/LocalPackages/zzwater/shaders/horizon_ocean.shader
2026-05-26 16:15:54 +08:00

98 lines
2.8 KiB
Plaintext

Shader "zzwater/horizon_ocean"
{
Properties
{
[HDR]_Color("Color", Color) = (0, 0.44, 0.62, 1)
_ReflectionStrength("Reflection Strength", Range(0, 2)) = 1
_ReflectionBlur("Probe Blur Factor", Range(0, 1)) = 0
}
SubShader
{
Tags
{
"RenderType" = "Transparent"
"RenderPipeline" = "UniversalPipeline"
"UniversalMaterialType" = "Unlit"
"IgnoreProjector" = "True"
"Queue" = "Transparent+0"
}
Pass
{
Name "ForwardLit"
Tags { "LightMode"="UniversalForward" }
Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha
ZWrite On
Cull Back
ZTest LEqual
ZClip On
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"
//Fog rendering (integration)
#define UnityFog
#pragma multi_compile_fog
CBUFFER_START(UnityPerMaterial)
float _ReflectionBlur;
float _ReflectionStrength;
half4 _Color;
CBUFFER_END
struct Attributes
{
float4 positionOS : POSITION;
};
struct Varyings
{
float4 positionCS : SV_POSITION;
float3 positionWS : TEXCOORD0;
float4 positionNDC : TEXCOORD1;
float fogFactor : TEXCOORD2;
};
Varyings vert(Attributes IN)
{
Varyings OUT;
// Get the position of the vertex in different spaces
VertexPositionInputs positions = GetVertexPositionInputs(IN.positionOS);
OUT.positionCS = positions.positionCS;
OUT.positionWS = positions.positionWS.xyz;
OUT.positionNDC = positions.positionNDC;
OUT.fogFactor = ComputeFogFactor(positions.positionCS.z);
return OUT;
}
half4 frag(Varyings IN) : SV_Target
{
float3 viewDir = normalize(_WorldSpaceCameraPos - IN.positionWS);
half3 reflectionVector = reflect(-viewDir, float3(0, 1, 0));
float2 screenPos = IN.positionNDC.xy / IN.positionNDC.w;
float3 reflections = GlossyEnvironmentReflection(reflectionVector, IN.positionWS, _ReflectionBlur, 1 ,screenPos) * _ReflectionStrength;
//Apply fog
half fogCoord = InitializeInputDataFog(float4(IN.positionWS,1), IN.fogFactor);
half3 finalColor = MixFog(_Color.rgb * reflections, fogCoord);
return half4(finalColor, _Color.a);
}
ENDHLSL
}
}
}