Files
2026-03-05 00:14:42 +08:00

52 lines
1.5 KiB
Plaintext

// Crest Water System
// Copyright © 2024 Wave Harmonic. All rights reserved.
#pragma kernel CrestWaterLineBRP _BRP
#pragma kernel CrestWaterLineHRP _HRP
#pragma kernel CrestWaterLineURP _URP
// Not every RP handles this. HDRP seems to.
#pragma multi_compile _ STEREO_INSTANCING_ON STEREO_MULTIVIEW_ON
#pragma multi_compile_local _ d_KeepValue
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Utility/RP/Compute.hlsl"
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Macros.hlsl"
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Constants.hlsl"
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Globals.hlsl"
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Cascade.hlsl"
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Surface/Data.hlsl"
RW_TEXTURE2D_X(float, _Crest_WaterMaskTexture);
m_CrestNameSpace
void WaterLine(const uint3 id)
{
UNITY_XR_ASSIGN_VIEW_INDEX(id.z);
#if d_KeepValue
// Prevent rendering inside of portals.
if (_Crest_WaterMaskTexture[COORD_TEXTURE2D_X(id.xy)] != 0)
{
return;
}
#endif
float3 position = ComputeWorldSpacePosition(id.xy / _ScreenSize.xy, UNITY_NEAR_CLIP_VALUE, UNITY_MATRIX_I_VP);
#if (SHADEROPTIONS_CAMERA_RELATIVE_RENDERING != 0)
position.xyz += _WorldSpaceCameraPos.xyz;
#endif
const float height = SampleWaterLineHeight(position.xz).x;
_Crest_WaterMaskTexture[COORD_TEXTURE2D_X(id.xy)] = position.y <= height ? -1 : 1;
}
m_CrestNameSpaceEnd
m_CrestKernelXRP(WaterLine)