#ifndef FLUIDKERNELS_INCLUDE #define FLUIDKERNELS_INCLUDE #include "SolverParameters.cginc" float Poly6(float r, float h) { float h2 = h * h; float h4 = h2 * h2; float h8 = h4 * h4; float rl = min(r, h); float hr = h2 - rl * rl; if (mode) return 4.0f / PI / h8 * hr * hr * hr; else return 315.0f / (64.0 * PI) / (h8 * h) * hr * hr * hr; } float Spiky(float r, float h) { float h2 = h * h; float h4 = h2 * h2; float rl = min(r, h); float hr = h - rl; if (mode) return -30.0f / PI / (h4 * h) * hr * hr; else return -45.0f / PI / (h4 * h2) * hr * hr; } float Cohesion(float r, float h) { return cos(min(r, h) * 3 * PI / (2 * h)); } #endif