Morten Vassvik
banner
vassvik.bsky.social
Morten Vassvik
@vassvik.bsky.social
Simulation and rendering nerd. Co-founder and CTO @JangaFX

Working on EmberGen and more.

Discord: vassvik @vassvik@mastodon.gamedev.place
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.
Reposted by Morten Vassvik
Introduction.
Since 2014 I've been using Excel to create math art. Post-processing in Krita.
December 5, 2024 at 1:42 PM
Found an interesting paper with an unexpected twist

www.semanticscholar.org/paper/On-the...
January 1, 2026 at 12:27 PM
"Welcome to the CUDA Core Compute Libraries (CCCL) where our mission is to make CUDA more delightful."

I've never been more upset than trying (and failing) to get one of the CUB examples to build

Massive failure of a trillion dollar company simply where it's a pain and a chore to use their thing
December 30, 2025 at 9:06 AM
Have recently been obsessed with (again) optimizing my "low-mid size" bitonic GPU sorter even more than it was.

The current state summerized in the images below for a 7900 XTX for the red team and a 4090 for the green team.

For once the former handedly beats the latter across the board!
December 23, 2025 at 9:41 PM
Nobody:
Me: I'm very proud of this 1µs optimization, it was definitely worth it to spend a day on it.
December 22, 2025 at 2:04 PM
Reposted by Morten Vassvik
-- JOB SEARCH POST/RT APPRECIATED --
Hello everyone!

I am available for work (full time position/internship) anywhere in the world with priority going to the EU, starting June 2026. 🧵
December 20, 2025 at 1:54 PM
Ever seen one of these, and wondered *why* they work? 🧵

This is a so-called Bitonic sorting network, and the illustrations show the two common ways to implement them. From an implementation point of view the two methods are effectively the same, so which one you pick just comes down to preference.
December 20, 2025 at 12:26 AM
Manually writing simple svg files for making illustrations turns out to be surprisingly simple and neat.

Getting motivated to do a full deep dive into Bitonic sorting networks and how to use them well on the GPU now. Maybe it'll happen over the christmas holidays.
December 19, 2025 at 1:53 PM
test
December 19, 2025 at 8:52 AM
It's roughly 4 years since I started to work on the 3D sparse fluid solver for what will ultimately become EmberGen 2.0.

A quick look at the current performance state of the solver.

A previous retrospective thread from a couple years ago on that other place: x.com/vassvik/stat...
x.com
December 10, 2025 at 1:37 PM
Reposted by Morten Vassvik
After nine years of development, meshoptimizer has reached its first major version, 1.0!

This release focuses on improvements in clusterization and simplification as well as stabilization. Here's a release announcement with more details on past, present and future; please RT!

meshoptimizer.org/v1
🐇 meshoptimizer v1.0
Mesh optimization library that makes meshes smaller and faster to render
meshoptimizer.org
December 8, 2025 at 4:56 PM
Final version for the 2D Morton decode functions. Fairly happy with the structure in general.

A 64-bit version should be easy enough to produce, by just using the 32-bit version twice and combining the results.
December 8, 2025 at 8:01 PM
I can't really recall the last time I actually read a paper/article for the sake of learning something, or for staying up to date, and I can barely muster the motivatation to skim new research papers even on topics I genuinely like.

Anything that isn't explicitly "mine" is really hard to focus on
December 5, 2025 at 11:37 PM
Reposted by Morten Vassvik
I've settled on using a simple utility that wraps D3D's SetStablePowerState to stabilize GPU clock rate when profiling using in-app timers.

This simple program does the trick:
github.com/milkru/gpu_c...

This should even work when profiling, e.g., WebGPU apps in browser!

[cont]
GitHub - milkru/gpu_clock_stabilizer: Simple GPU clock stabilizer for consistent profiling
Simple GPU clock stabilizer for consistent profiling - milkru/gpu_clock_stabilizer
github.com
December 4, 2025 at 5:52 PM
Some random Morton Code tricks:

If you've worked with Morton codes you've probably seen something like the this GLSL code to decode a Morton code, which end up at roughly 27 integer operations to generate the equivalent 2D position.

Code transcribed from fgiesen.wordpress.com/2009/12/13/d...
December 5, 2025 at 2:07 PM
New laptop arrived.

Curse of awful laptops broken?
November 7, 2025 at 2:26 PM
Reposted by Morten Vassvik
New blog post! Behind the scenes of some of the techniques involved in making our last PC demo 💫 gboisse.github.io/posts/this-i...
November 5, 2025 at 9:15 PM
November 6, 2025 at 8:15 PM
Reposted by Morten Vassvik
I feel like I need to split up my blackboard scribbles/notes for #half-edge into multiple files bc it's quite a lot to deal with an 8000x14000 px document lol
November 4, 2025 at 6:02 PM
Reposted by Morten Vassvik
Ray marching is a common approach to GPU-accelerated volume rendering, but gives biased transmittance estimates. My new #SIGGRAPHAsia paper (+code) proposes an amazingly simple formula to eliminate this bias almost completely without using more samples.
momentsingraphics.de/SiggraphAsia...
October 30, 2025 at 1:24 PM
Reposted by Morten Vassvik
Finished documenting work on optimized wireframe rendering: precision, clipping & math details for stable, performant edges in OpenGL.

Includes an analysis of NVIDIA’s wireframe paper & fixes its issues.

fauder.github.io/posts/2025/1...

#GraphicsProgramming #Rendering #OpenGL #ShaderDev #GameDev
Optimized Wireframe Rendering: Part III
Detailed technical breakdown of precision pitfalls, clipping logic, and geometry shader implementation for high-quality wireframe rendering.
fauder.github.io
October 21, 2025 at 4:43 PM
How do ye vote?
October 19, 2025 at 7:47 PM
Combustion tests with the new ground, 640M active voxels
October 19, 2025 at 12:16 AM
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.
October 16, 2025 at 8:22 PM
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.
October 14, 2025 at 10:15 AM