Files
MinFt/Client/Assets/Plugins/URPWater/Shaders/HLSL/Includes/URPWaterVariables.hlsl
2026-04-27 12:07:32 +08:00

275 lines
7.3 KiB
HLSL

//-----------------------------------------------------------------------------
// Copyright(C) Yan Verde - All Rights Reserved
// Copyright protected under Unity Asset Store EULA
// Refer to https://unity3d.com/legal/as_terms for more informations
// -----------------------------------------------------------------------------
// URP Water
// Author : Yan Verde
// Date : April 10, 2021
// -----------------------------------------------------------------------------
#ifndef URPWATER_VARIABLES_INCLUDED
#define URPWATER_VARIABLES_INCLUDED
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
#if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED)
#define UNITY_DECLARE_SCREENSPACE_TEXTURE(textureName) TEXTURE2D_ARRAY(textureName);
#define UNITY_DECLARE_SCREENSPACE_TEXTURE_FLOAT(textureName) TEXTURE2D_ARRAY_FLOAT(textureName);
//UNITY_SAMPLE_TEX2DARRAY(tex, float3((uv).xy, (float)unity_StereoEyeIndex))
#define UNITY_SAMPLE_SCREENSPACE_TEXTURE(tex, samplerName, uv) SAMPLE_TEXTURE2D_ARRAY(tex, samplerName, uv.xy, (float)unity_StereoEyeIndex);
#define UNITY_SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, (float)unity_StereoEyeIndex, lod);
#else
#define UNITY_DECLARE_SCREENSPACE_TEXTURE(tex) TEXTURE2D(tex);
#define UNITY_DECLARE_SCREENSPACE_TEXTURE_FLOAT(tex) TEXTURE2D_FLOAT(tex);
#define UNITY_SAMPLE_SCREENSPACE_TEXTURE(tex, samplerName, uv) SAMPLE_TEXTURE2D(tex, samplerName, uv);
#define UNITY_SAMPLE_TEXTURE2D_LOD(tex, samplerName, coord2, lod) SAMPLE_TEXTURE2D_LOD(tex, samplerName, coord2, lod);
#endif
#define URP_WATER_PI 3.1415926535
TEXTURE2D(_CausticsTex);
TEXTURE3D(_CausticsTex3D);
TEXTURE2D(_FoamTex);
TEXTURE2D(_NormalMapA);
TEXTURE2D(_NormalMapB);
TEXTURE2D(_NormalMapFar);
TEXTURE2D(_FlowMap);
//UNITY_DECLARE_SCREENSPACE_TEXTURE_FLOAT(_CameraDepthTexture); // VR
//UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraOpaqueTexture); // VR
TEXTURE2D(_RefractionColor);
TEXTURE2D(_DynamicEffectsTexture);
SAMPLER(sampler_CameraOpaqueTexture_linear_clamp);
SAMPLER(sampler_ScreenTextures_linear_clamp);
SAMPLER(sampler_pointTextures_point_clamp);
TEXTURE2D(_ReflectionTexture);
TEXTURECUBE(_CubemapTexture);
SAMPLER(sampler_CubemapTexture);
SamplerState URPWater_trilinear_repeat_sampler;
SamplerState URPWater_linear_repeat_sampler;
SamplerState URPWater_linear_clamp_sampler;
float4 _CameraOpaqueTexture_TexelSize;
float4 _CameraDepthTexture_TexelSize;
float4 _DynamicEffectsTexture_TexelSize;
float4 _DynamicEffectsParams;
CBUFFER_START(UnityPerMaterial)
float4 _NormalMapA_ST;
float4 _NormalMapASpeeds;
float4 _NormalMapATilings;
float4 _NormalMapB_ST;
float4 _NormalMapBSpeeds;
float4 _NormalMapBTilings;
float4 _NormalMapFarTilings;
float4 _NormalMapFarSpeeds;
float4 _FlowTiling;
float4 _CausticsTiling;
float4 _Color;
float4 _DepthColor;
float4 _UnderWaterColor;
//float4 _AmbientColor;
float4 _SpecColor;
float4 _CausticsSpeed;
float4 _CausticsSpeed3D;
float4 _ScatteringColor;
float4 _FoamColor;
float4 _FoamTiling;
float _CausticsStart;
float _CausticsEnd;
float _CausticsTiling3D;
float _CausticsDistortion;
float _Distortion;
float _Smoothness;
float _NormalMapAIntensity;
float _NormalMapBIntensity;
float _NormalMapFarIntensity;
float _NormalFarDistance;
float _FlowSpeed;
float _FlowIntensity;
float _DepthStart;
float _DepthEnd;
float _ReflectionDistortion;
float _ReflectionFresnelNormal;
float _ReflectionRoughness;
float _EdgeSize;
float _CausticsIntensity;
float _ReflectionFresnel;
float _ReflectionIntensity;
float _FoamSize;
float _FoamRippleDistance;
float _FoamRippleSize;
float _FoamRippleSpeed;
float _FoamDistortion;
float _FoamCapsRangeMin;
float _FoamCapsRangeMax;
float _FoamCapsIntensity;
float _ScatteringIntensity;
float _ScatteringRangeMin;
float _ScatteringRangeMax;
float _CapsScatteringIntensity;
float _CapsScatteringRangeMin;
float _CapsScatteringRangeMax;
float _CapsScatterNormals;
float _DynamicNormal;
float _DynamicFoam;
float _DynamicDisplacement;
float _WaveNormal;
float _WaveEffectsBoost;
float _WaveCount;
float _WaveLength;
float _WaveAmplitude;
float _WaveSteepness;
float _WaveSpeed;
float _WaveStartDistance;
float _WaveEndDistance;
float _Tess;
CBUFFER_END
struct Attributes
{
float4 vertex : POSITION;
float4 color : COLOR;
float3 normal : NORMAL;
float4 tangent : TANGENT;
float2 texcoord : TEXCOORD0;
#if _DISPLACEMENTMODE_GERSTNER
float waveHeight : TEXCOORD1;
#endif
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Varyings
{
float4 pos : SV_POSITION;
float4 color : COLOR;
float3 worldNormal : NORMAL;
float4 texcoord : TEXCOORD0;
#if _NORMALSMODE_DUAL || _FOAM_ON
float4 texcoord1 : TEXCOORD1;
#endif
#if _NORMAL_FAR_ON
float4 texcoord2 : TEXCOORD2;
#endif
// X: Far Distance, Y: Waves Height Z: W:
#if _NORMAL_FAR_ON || _DISPLACEMENTMODE_GERSTNER
float4 texcoord3 : TEXCOORD3;
#endif
float4 screenCoord : TEXCOORD4;
half4 normal : TEXCOORD5; // xyz: normal, w: viewDir.x
half4 tangent : TEXCOORD6; // xyz: tangent, w: viewDir.y
half4 bitangent : TEXCOORD7; // xyz: binormal, w: viewDir.z
#if _DYNAMIC_EFFECTS_ON
float2 projectionUV : TEXCOORD8;
#endif
UNITY_FOG_COORDS(9)
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
struct GlobalData
{
float depth; // Remapped Depth
float sceneDepth; // Linear Depth
float rawDepthDst; // Raw Depth Distorted
float pixelDepth;
float foamMask;
float2 refractionOffset;
float2 refractionUV;
float3 finalColor;
float4 refractionData; // RGB: Refraction Color A: Refraction Depth
float3 clearColor; // RGB: Clear Color
float3 shadowColor;
float3 worldPosition;
float3 worldNormal;
float3 worldViewDir;
float4 screenUV;
#if _DYNAMIC_EFFECTS_ON
float4 dynamicData;
#endif
#if _DOUBLE_SIDED_ON
float vFace;
#endif
#if _SCATTERING_ON
float3 scattering;
#endif
Light mainLight;
float3 addLight;
real3x3 tangentToWorld;
// Debug purpose only
float4 debug;
};
void InitializeGlobalData(inout GlobalData data, Varyings IN)
{
data.depth = 0;
data.sceneDepth = 0;
data.rawDepthDst = 0;
data.pixelDepth = IN.screenCoord.z;
data.foamMask = 0;
data.refractionOffset = float2(0, 0);
data.refractionUV = float2(0, 0);
data.refractionData = float4(0, 0, 0 ,0);
data.clearColor = float3(1, 1, 1);
data.finalColor = float3(1, 1, 1);
data.shadowColor = float3(1, 1, 1);
data.worldPosition = float3(IN.normal.w, IN.tangent.w, IN.bitangent.w);
data.worldNormal = float3(0, 1, 0);
data.worldViewDir = GetWorldSpaceNormalizeViewDir(data.worldPosition); //SafeNormalize(_WorldSpaceCameraPos.xyz - data.worldPosition);
data.screenUV = float4(IN.screenCoord.xyz / IN.screenCoord.w, IN.pos.z); //ComputeScreenPos(TransformWorldToHClip(data.worldPosition), _ProjectionParams.x);
#if _DYNAMIC_EFFECTS_ON
data.dynamicData = float4(0, 0, 0, 0);
#endif
#if _DOUBLE_SIDED_ON
data.vFace = 1;
#endif
#if _SCATTERING_ON
data.scattering = float3(0,0,0);
#endif
data.mainLight = GetMainLight(TransformWorldToShadowCoord(data.worldPosition));
data.addLight = float3(0, 0, 0);
data.tangentToWorld = float3x3(IN.tangent.xyz, IN.bitangent.xyz, IN.normal.xyz);
data.debug = float4 (0, 0, 0, 1);
}
#endif