Home Creators Posts Import Register Favorites Logout
haven't archived this post yet. have a subscription? use the importer!

Downloads

  • POP_Fluid_Solver.tox
  • POP_Fluid_Solver_default_project_A.toe
  • POP_Fluid_Solver_default_project_B.toe
  • POP_Fluid_Solver_default_project_C.toe
  • POP_Fluid_Solver_default_project_D.toe
  • Voxel_Grid_Init.tox
  • Rankine_Vortex_Force.tox

Missing 2 full-res photos, 7 files.

Files

Previews only

Comments

hwadxdt

CFD in TD!

Lihan Fitz

astounding

Anton Helgesson

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

Tosca aka nanotopia

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

Dewpoint

Thank you SARV !!!

Marc Princivalle

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

tYk

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

Miguel Guerrero

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

SARV

Ł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); }

Adam Anden

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.

Fernando

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

Pierce Wilson

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

Felipe Faundez

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.

Louie

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