Files
FlaxEngine/Source/Shaders/Random.hlsl
2022-06-28 14:41:29 +02:00

56 lines
1.2 KiB
HLSL

// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
#ifndef __RANDOM__
#define __RANDOM__
float PseudoRandom(float2 xy)
{
float2 p = frac(xy / 128.0f) * 128.0f + float2(-64.340622f, -72.465622f);
return frac(dot(p.xyx * p.xyy, float3(20.390625f, 60.703125f, 2.4281209f)));
}
// Generic noise (1-component)
float RandN1(float n)
{
return frac(sin(n) * 43758.5453123);
}
// Generic noise (2-components)
float2 RandN2(float2 n)
{
return frac(sin(dot(n, float2(12.9898, 78.233))) * float2(43758.5453123, 28001.8384));
}
void FindBestAxisVectors(float3 input, out float3 axis1, out float3 axis2)
{
const float3 a = abs(input);
if (a.z > a.x && a.z > a.y)
axis1 = float3(1, 0, 0);
else
axis1 = float3(0, 0, 1);
axis1 = normalize(axis1 - input * dot(axis1, input));
axis2 = cross(axis1, input);
}
float PerlinRamp(in float t)
{
return t * t * t * (t * (t * 6 - 15) + 10);
}
float2 PerlinRamp(in float2 t)
{
return t * t * t * (t * (t * 6 - 15) + 10);
}
float3 PerlinRamp(in float3 t)
{
return t * t * t * (t * (t * 6 - 15) + 10);
}
float4 PerlinRamp(in float4 t)
{
return t * t * t * (t * (t * 6 - 15) + 10);
}
#endif