Fast Splat Morphing
A fast near-optimal splat assignment for morphing between Gaussian splattings
, September 2026
Abstract
Morphing one 3D Gaussian splatting capture into another requires an assignment: which source splat becomes which target splat. Optimal transport is the principled way to choose it, but at capture scale exact, entropic and hierarchical solvers are all too slow for interactive use in our measurements. We introduce Fast Splat Morphing (FSM), a hierarchical optimal-transport refinement to the rank-2 case, replaces the per-node transport solve with a closed-form median split along a shared axis, and add appearance to the assignment choice through a weighted lightness coordinate. FSM assigns 1.2 million splats in single-threaded browser JavaScript, without precomputations or GPU solvers. We measure how close our result is compared to the optimal solution.
Method
A morph between two splat captures needs an assignment: every source splat is paired with exactly one target splat, and each pair then interpolates its position, covariance and color. FSM builds that assignment by co-bisection. Both clouds are cut at their median along one shared axis, the widest of their combined extents, and the four halves are paired straight or crossed, whichever makes the half centroids travel less. The recursion continues down to single splats in O(N log N) time. Appearance enters as a fourth coordinate, the CIELAB lightness at weight ω = 1/4, so a split can separate dark from bright before it separates space. The smaller capture is padded with transparent clones, so the assignment stays a bijection and both endpoints are exact.
Results
Live morphing in your browser
Pick an object for each side. The page computes the assignment between them on your device, with the paper's code, and shows the morph swinging from one to the other.
About the demo
- The time shown covers what the paper times: packing both clouds with their lightness at ω = 1/4 and the co-bisection, in one thread of your browser. Preparing the clouds and bending each pair's path come on top, and the first pair also pays for the JavaScript engine warming up.
- Every object is used at full density. The counts are the Gaussians left after floaters are removed, and the smaller side is padded with transparent clones.
- The method assumes both objects share a frame, so the bonsai, the duck and the bee are turned about the up axis when they load, and the bee is also tilted toward the camera.
- Drag to turn the view, double-click to reset it. It needs WebGL2.
BibTeX
@misc{padilla2026fsm,
title = {Fast Splat Morphing},
author = {Padilla, Marcel},
year = {2026},
howpublished = {Preprint, ETH Z\"urich},
url = {https://marcelpadilla.com/Fast_Splat_Morphing/}
}
Data and licences
code is MIT; the splats keep their own terms
The code and this page are MIT; the splats are not. The house plant is the author's capture (CC BY 4.0). The bonsai and the duck were generated by the author with TripoSplat from CC0 photographs on Wikimedia Commons, by Wilfredor and by Oleg Yunakov, and are provided as-is, with no warranty of rights. The bee is a subsample of Japanese Bee by YUMA株式会社 and the cat in the thumbnail is Kitty by Andrej Kurcik, both CC BY 4.0 on SuperSplat. The plant, the bonsai and the duck are also in the author's splat collection. The viewer adapts antimatter15/splat (MIT); the notices carry the upstream licence text.
This project is part of a wrapping up at the end of my postdoc ETH Zürich.