XaiJu
SARV
SARV

patreon


POP Fluid Solver | V1.0

POP Fluid Solver | V1.0

Comments

Is there anyway to have the edge behavior be to teleport to the other edge of the bounding box instead of staying physically contained? So that I might create a constant flow in a particular direction

Louie

second this

Max Swart

Stunning work! Sadly, I’m still struggling to make it work on a Mac. I’m not sure where to add the code (I’m a newbie). Could any Mac user who got this working please share the file? Cheers.

Felipe Faundez

I've got the same problem - it seems lowering the force multiplier helps, but I haven't been able to figure out how to remove it completly

Pierce Wilson

Great work! However I am getting strong and weird jerks of the particles, even when the strenght of the noise is small and the force multiplier is well bellow 1. If I add trails, I get a lot of weird very long and straight lines. What can it be? I am using 2025.31760 on a Mac, with the code changed as per the comment

Fernando

Honestly I don't know, it's not in my priorities hehe

Edgar Schubhan

How would you go about creating a renderable fluid geometry for this? I would like to render with PBR or substance to make a realistic interactive water sim installation.

Adam Anden

Łukasz Furman commented this on another post : MACOS arm: replace the code in glsl1 <- POP_Fluid_Solver Comp // M1 Max compatible version - using memory barriers instead of atomics // NOTE: This requires careful thread dispatch to minimize race conditions uint flatten3(ivec3 c, uint R){ return uint(c.x) + R * (uint(c.y) + R * uint(c.z)); } struct TriliInfo { ivec3 i0; vec3 f; }; TriliInfo triliInfo(vec3 x, vec3 bmin, vec3 size, uint R){ TriliInfo t; vec3 h = size / float(R); vec3 g = (x - bmin) / h - vec3(0.5); t.i0 = ivec3(floor(g)); t.f = clamp(fract(g), 0.0, 1.0); return t; } void splatV_trilinear_grid(vec3 p, vec3 v, vec3 bmin, vec3 size, uint R){ vec3 bmax = bmin + size; if (any(lessThan(p, bmin)) || any(greaterThan(p, bmax))) return; TriliInfo t = triliInfo(p, bmin, size, R); ivec3 lo = ivec3(0), hi = ivec3(int(R)-1); ivec3 i0 = clamp(t.i0, lo, hi); vec3 f = t.f; for (int dz=0; dz<=1; ++dz){ float wz = (dz==0) ? (1.0 - f.z) : f.z; int z = clamp(i0.z + dz, lo.z, hi.z); for (int dy=0; dy<=1; ++dy){ float wy = (dy==0) ? (1.0 - f.y) : f.y; int y = clamp(i0.y + dy, lo.y, hi.y); for (int dx=0; dx<=1; ++dx){ float wx = (dx==0) ? (1.0 - f.x) : f.x; int x = clamp(i0.x + dx, lo.x, hi.x); float w = wx * wy * wz; uint idx = flatten3(ivec3(x,y,z), R); // Non-atomic accumulation with memory barrier // Race conditions possible but often acceptable for smooth fields memoryBarrierBuffer(); AccV[idx].x += v.x * w; AccV[idx].y += v.y * w; AccV[idx].z += v.z * w; AccW[idx] += w; memoryBarrierBuffer(); } } } } void main(){ const uint id = TDIndex(); if (id >= TDNumElements()) return; uint R = max(SimRes, 1u); vec3 size = vec3(SimSizex, SimSizey, SimSizez); vec3 bmin = vec3(-0.5*SimSizex, -0.5*SimSizey, -0.5*SimSizez); vec3 p = TDIn_P(1, id); vec3 v = TDIn_v(1, id); splatV_trilinear_grid(p, v, bmin, size, R); }

Edgar Schubhan

Same here for only 5 days I couldnt upgrade my license... Have you manage to resolve this problem?

Miguel Guerrero

getting an attribute error on experimental 31310 "There is already a b

tYk

Hi, excellent and thanks for sharing. Unfortunately not working for Mac and I am having a look to why...

Marc Princivalle

Thank you SARV !!!

Dewpoint

Played with it yesterday-very cool! Looking forward to your upcoming deeper dive tutorial.

Tosca aka nanotopia

Are you gonna do a deepdive on how you built this? I’m craving the knowledge🤪

Anton Helgesson

astounding

Lihan Fitz

CFD in TD!

hwadxdt


More Creators