HeavenStudioPlus/Assets/DoodleShader/GPU-Doodle/UtilsCG.cginc

30 lines
899 B
HLSL
Raw Permalink Normal View History

2024-06-12 14:38:28 +00:00
float random(float2 seed)
{
return frac(sin(dot(seed.xy, float2(12.9898, 78.233))) * 43758.5453123);
}
float noise(float2 seed)
{
float2 i = floor(seed);
float2 f = frac(seed);
float a = random(i);
float b = random(i + float2(1.0f, 0.0f));
float c = random(i + float2(0.0f, 1.0f));
float d = random(i + float2(1.0f, 1.0f));
float2 u = f* f * (3.0f - 2.0f * f);
return lerp(a, b, u.x) + (c - a) * u.y * (1.0f - u.x) + (d - b) * u.x * u.y;
}
float2 DoodleTextureOffset(float2 textureCoords, float2 maxOffset, float time, float frameTime, int frameCount, float2 noiseScale)
{
float timeValue = (floor(time / frameTime) % frameCount) + 1;
float2 offset = 0;
float2 coordsPlusTime = (textureCoords + timeValue);
offset.x = (noise(coordsPlusTime * noiseScale.x) * 2.0 - 1.0) * maxOffset.x;
offset.y = (noise(coordsPlusTime * noiseScale.y) * 2.0 - 1.0) * maxOffset.y;
return offset;
}