Why I replaced Google Filament with 40K lines of custom PBR engine code, written with Claude in weeks, that survives VK_DEVICE_LOST without crashing.
Evan Mezeske
Jun 2026
Custom 3D models broke my hard-coded hitboxes, so mouse picking now runs on Bullet Physics raycasts against convex hulls approximating the model geometry.
Nov 2024
Metal profiling shows the simulation is ALU-bound, so I'm chasing half floats and signed indexes, plus a visual style doc for hiring 3D artists.
Random glitches on the Filament Metal backend came down to render passes without a color clear. Enabling clearing fixed it and I filed an upstream bug.
Oct 2024
Ableton's Auto-Scale Plug-In Window option sent me down the Windows DPI awareness rabbit hole and into a Vulkan swap chain scaling driver bug.
Skyboxes and lighting are now zip-file presets anyone can build from an .hdr file, and the instrument's 3D models load from swappable .glb presets too.
Filament now builds as a git submodule inside Anukari's CMake, and the renderer preferences menu has low, medium, high, and max speed presets.
Tracked down a JUCE bug duplicating mouse events between stacked NSViews on macOS, plus a Filament black screen on Intel Iris Xe OpenGL.
I wired render-thread errors into the GUI thread and redid the camera controls, with rotate on right-click drag and pan on shift so touchpads work.
Filament's JIT shader compilation was the whole startup delay, so I switched to ubershaders. The floating GUI now uses native OS child windows.
Bodies scale with mass, springs thicken with stiffness and redden with tension, and links light up with signal. Also fought Filament's messy cleanup APIs.
The Filament renderer now matches the old OpenGL one, selection highlights and all. I deleted the hand-rolled renderer and fixed the Windows file browser.
Ableton destroys the plugin window before the editor, crashing Filament's Vulkan swap chain. Hooking WM_DESTROY to shut the renderer down first fixed it.
Sep 2024
A hacked-together skybox and irradiance map give the .glb objects environmental lighting, and masses and springs finally look right again.
Filament now draws my Blender models as instanced .glb assets and gives me shadows and ambient occlusion for free. Asset caching is next.
The new renderer runs on macOS via Metal and an NSView overlay, with OpenGL fully removed. The macOS audio performance mystery remains unsolved.
After a dead end with WS_EX_LAYERED transparency, I'm drawing the 3D graphics in an HWND on top of the JUCE GUI, and native popup menus still appear.
Getting Filament rendering into a JUCE window is harder than expected since JUCE hides its swap chain, and overlay native windows break menus.
On macOS the 3D graphics interfere with GPU audio even when nothing is drawn, so I'm starting the Filament port to rule out Apple's OpenGL.
Golden tests now compare audio via chunked FFTs and L2 distance, which surfaced an OpenCL bug on Mac where objects can legally live at address NULL.
Jun 2024
Most of the CPU-side refactor for the new voice instancing memory layout is done, with golden tests catching every break in the CPU-to-GPU data reshuffle.
May 2024
The Audio Units logo and the Audio Units symbol are trademarks of Apple Computer, Inc.
VST is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.