52 lines
1.5 KiB
Plaintext
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)
|