'push'
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
#ifndef d_WaveHarmonic_Utility_Helpers
|
||||
#define d_WaveHarmonic_Utility_Helpers
|
||||
|
||||
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Utility/Macros.hlsl"
|
||||
|
||||
m_UtilityNameSpace
|
||||
|
||||
void Swap(inout float a, inout float b)
|
||||
{
|
||||
float t = a; a = b; b = t;
|
||||
}
|
||||
|
||||
// Adapted from:
|
||||
// https://alex.vlachos.com/graphics/Alex_Vlachos_Advanced_VR_Rendering_GDC2015.pdf
|
||||
float3 ScreenSpaceDither(const float2 i_ScreenPosition)
|
||||
{
|
||||
// Iestyn's RGB dither (7 asm instructions) from Portal 2 X360, slightly modified for VR.
|
||||
float3 dither = dot(float2(171.0, 231.0), i_ScreenPosition.xy);
|
||||
dither.rgb = frac(dither.rgb / float3(103.0, 71.0, 97.0)) - float3(0.5, 0.5, 0.5);
|
||||
return (dither.rgb / 255.0);
|
||||
}
|
||||
|
||||
float2 WorldNormalToScreenDirection(const float3 i_PositionWS, const float3 i_NormalWS, const float4x4 i_MatrixVP, const float i_Offset)
|
||||
{
|
||||
const float3 p0 = i_PositionWS;
|
||||
const float3 p1 = p0 + i_NormalWS * i_Offset;
|
||||
|
||||
const float4 clip0 = mul(i_MatrixVP, float4(p0, 1));
|
||||
const float4 clip1 = mul(i_MatrixVP, float4(p1, 1));
|
||||
|
||||
const float2 uv0 = (clip0.xy / clip0.w) * 0.5 + 0.5;
|
||||
const float2 uv1 = (clip1.xy / clip1.w) * 0.5 + 0.5;
|
||||
|
||||
float2 direction = normalize(uv1 - uv0);
|
||||
|
||||
#if UNITY_UV_STARTS_AT_TOP
|
||||
direction.y = -direction.y;
|
||||
#endif
|
||||
|
||||
return direction;
|
||||
}
|
||||
|
||||
m_UtilityNameSpaceEnd
|
||||
|
||||
#endif // d_WaveHarmonic_Utility_Helpers
|
||||
Reference in New Issue
Block a user