Morten Vassvik
@vassvik.bsky.social
1.8K followers 1.6K following 770 posts
Simulation and rendering nerd. Co-founder and CTO @JangaFX Working on EmberGen and more. Discord: vassvik @[email protected]
Posts Media Videos Starter Packs
Pinned
Never to late for an introduction post, eh

Hi I'm Morten. I work at JangaFX, where I primarily work on EmberGen, but I occasionally work on our other tools as well.

I hope to eventually start posting more fluid sim and graphics content, hopefully even blogposts and some code too.
It's sufficient to find the closest point on all geometry to the center, then check all the other geometry whether its closest point to any of the corners of the box is within the purple area. If it isn't you can discard those parts of the geometry when doing a refined check within the red box.
The orange shaded area is a conservative upper bound, equal to the distance to the closest object to the center of the box (green point) plus the diagonal length of the box.

The green shaded area is all the points that are closer than the closest point

These two regions bound the purple region
If the green point is the closest point on any geometry from the center of the red square, then there could be some geometry inside the purple shading area that are closer to some other point inside the red square, but any point outside the purple area cannot contain any closer points.
Spent some time trying to do conservative culling of geometry for distance function evaluation. Turns out I ended up reinventing something like GJK (which I really have no clue about or experience with) with exact bounds.
Fixed a bug and tried beefing up the voxel count: 1.275B active voxels, 3072x3136x1312 bounding box.

Realtime capture in the viewport on 4090.

The projection struggles a bit on this scale, so I brute forced it a bit, so it's a bit slower than it has to be. FMG to initialize should help a lot here.
Roughly 1800x1800x500 bounds if this was a dense sim, 134M (same as 512x512x512) active voxels towards the end. Roughly 3.5 GiB used by the entire app, should be able to push that below 3 GiB for this, maybe close to 2.5 GiB
Finally adding ground collisions
Reposted by Morten Vassvik
Extended my topology libs to work on non-Euclidean domains (spherical, toroidal, etc.) by turning mesh edges into geodesics. Below: Bridson's Poisson disk sampling across different domains.

#indiedev #gamedev #computergraphics #computationalgeometry #topology
Reposted by Morten Vassvik
Some progress on the VAT export in #illugen. Complex mesh animations can be imported in game engines ... (made with an internal build)
#VFXFriday #realtimevfx #vfx
Meaning trying to detect inside/out by any means on a mesh that isn't very "nice" is rough, and things that are usually out of sight out mind to an artist or someone who's made the mesh doesn't exactly make your job of voxelizing such meshes easier :D
Therein lies the madness that is sloppy meshes
I need to try some hysteresis for my sparse sim at some point
Few stills

1664x1568x576 bounding box, 536M active voxels. Roughly 65% sparsity.
Bright Red-Blue-Yellow primaries
Some tests I did with hacking in mixbox (github.com/scrtwpns/mix...) support today

Left: RGB blending
Right: Mixbox blending

Interestingly I there's a lot to take from this for smoke scattering, which generally has an absorption component, so subtractive color mixing makes sense I think?
Time level yeah, and I have large tiles (so there's not a lot of tiles, max 64K by design). And I have a wave size of at least 32 (never heard of anything less, I swear!), so fetching 32 values at once and distributing them across a wave sort of fits nicely
Singly linked lists? Doubly linked lists? On the GPU?

I use 27-way linked lists on the GPU, and it's good and highly appropriate!
Definitely skipping US conferences for the foreseeable future:(
A cool experiment would actually be to have these, but view them under different colored light
Fog is <color> if it scatters <color> light. It is not <color> if it absorbs it.

What do you mean what color is the fog if there's no light?
Setting/defining a fog color is probably the easier part *nervous laughter*