2025-02-09 18:57:59 +00:00

94 lines
6.3 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
██████╗░██╗░░░░░███████╗██╗░░██╗██╗░░░██╗░██████╗  ░█████╗░░█████╗░███╗░░░███╗██████╗░██╗░░░██╗████████╗███████╗
██╔══██╗██║░░░░░██╔════╝╚██╗██╔╝██║░░░██║██╔════╝  ██╔══██╗██╔══██╗████╗░████║██╔══██╗██║░░░██║╚══██╔══╝██╔════╝
██████╔╝██║░░░░░█████╗░░░╚███╔╝░██║░░░██║╚█████╗░  ██║░░╚═╝██║░░██║██╔████╔██║██████╔╝██║░░░██║░░░██║░░░█████╗░░
██╔═══╝░██║░░░░░██╔══╝░░░██╔██╗░██║░░░██║░╚═══██╗  ██║░░██╗██║░░██║██║╚██╔╝██║██╔═══╝░██║░░░██║░░░██║░░░██╔══╝░░
██║░░░░░███████╗███████╗██╔╝╚██╗╚██████╔╝██████╔╝  ╚█████╔╝╚█████╔╝██║░╚═╝░██║██║░░░░░╚██████╔╝░░░██║░░░███████╗
╚═╝░░░░░╚══════╝╚══════╝╚═╝░░╚═╝░╚═════╝░╚═════╝░  ░╚════╝░░╚════╝░╚═╝░░░░░╚═╝╚═╝░░░░░░╚═════╝░░░░╚═╝░░░╚══════╝
░██████╗██╗░░██╗░█████╗░██████╗░███████╗██████╗░
██╔════╝██║░░██║██╔══██╗██╔══██╗██╔════╝██╔══██╗
╚█████╗░███████║███████║██║░░██║█████╗░░██████╔╝
░╚═══██╗██╔══██║██╔══██║██║░░██║██╔══╝░░██╔══██╗
██████╔╝██║░░██║██║░░██║██████╔╝███████╗██║░░██║
╚═════╝░╚═╝░░╚═╝╚═╝░░╚═╝╚═════╝░╚══════╝╚═╝░░╚═╝
█▀▀▄ █──█   ▀▀█▀▀ █──█ █▀▀   ░█▀▀▄ █▀▀ ▀█─█▀ █▀▀ █── █▀▀█ █▀▀█ █▀▀ █▀▀█
█▀▀▄ █▄▄█   ─░█── █▀▀█ █▀▀   ░█─░█ █▀▀ ─█▄█─ █▀▀ █── █──█ █──█ █▀▀ █▄▄▀
▀▀▀─ ▄▄▄█   ─░█── ▀──▀ ▀▀▀   ░█▄▄▀ ▀▀▀ ──▀── ▀▀▀ ▀▀▀ ▀▀▀▀ █▀▀▀ ▀▀▀ ▀─▀▀
____________________________________________________________________________________________________________________________________________
▄▀█ █▀ █▀ █▀▀ ▀█▀ ▀   █░█ █░░ ▀█▀ █ █▀▄▀█ ▄▀█ ▀█▀ █▀▀   ▄█ █▀█ ▄█▄   █▀ █░█ ▄▀█ █▀▄ █▀▀ █▀█ █▀
█▀█ ▄█ ▄█ ██▄ ░█░ ▄   █▄█ █▄▄ ░█░ █ █░▀░█ █▀█ ░█░ ██▄   ░█ █▄█ ░▀░   ▄█ █▀█ █▀█ █▄▀ ██▄ █▀▄ ▄█
____________________________________________________________________________________________________________________________________________
License:
The license is ATTRIBUTION 3.0
More license info here:
https://creativecommons.org/licenses/by/3.0/
____________________________________________________________________________________________________________________________________________
This shader has NOT been tested on any other PC configuration except the following:
CPU: Intel Core i5-6400
GPU: NVidia GTX 750Ti
RAM: 16GB
Windows: 10 x64
DirectX: 11
____________________________________________________________________________________________________________________________________________
*/
#pragma kernel MoveParticels
RWStructuredBuffer<float3> positions;
RWStructuredBuffer<float3> defaultPositions;
RWStructuredBuffer<float3> velocities;
float deltaTime;
float elapsedTime;
float particleSpeed;
// really rounded
#define PI 3.14
#define PI_M_2 6.28
#define PI_D_2 1.57
// Sine from Taylor series
half ta_sin(half theta) {
half a = theta + PI_D_2;
theta = ((a>0) ? a - PI_M_2*((int)(a / PI_M_2)) : (-a + PI_M_2*((int)(a / PI_M_2)))) - PI_D_2;
if (theta > PI_D_2)
theta = PI - theta;
half x3 = theta * theta * theta;
return theta - (x3 / 6.0) + (x3 * theta * theta) / 120.0;
}
half ta_cos(half theta) {
return ta_sin(90.0 - theta);
}
float distSqr(half3 p1, half3 p2)
{
return (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y) + (p1.z - p2.z) * (p1.z - p2.z);
}
half3 randomMovement(uint3 id) {
return
half3(frac(sin(id.x + ta_sin(id.x + ta_cos(elapsedTime))) * particleSpeed) - .5,
frac(cos(id.x + ta_sin(id.x + ta_sin(elapsedTime))) * particleSpeed) - .5,
frac(sin(id.x + ta_sin(id.x) * ta_cos(elapsedTime)) * particleSpeed) - .5
);
}
[numthreads(1,1,1)]
void MoveParticels(uint3 id : SV_DispatchThreadID)
{
// id.x
velocities[id.x] += randomMovement(id.x) * .1;
velocities[id.x] += (defaultPositions[id.x] - positions[id.x]) * distSqr(positions[id.x], defaultPositions[id.x]) * .1;
velocities[id.x] = normalize(velocities[id.x]);
positions[id.x] += velocities[id.x] * particleSpeed * deltaTime;
}