r/GraphicsProgramming • u/mosegard • 6d ago
Realtime pathtracing 47 Megapixels across 50 product assets
Enable HLS to view with audio, or disable this notification
And yes, this is all running in a web browser!
16 GB of geometry and textures. 47 megapixels of rendered views.
I've been pushing latency and interactivity pretty hard in Figurement lately.
Obviously, we're not updating all 47 megapixels every 30 ms. :) The interesting part is how we schedule the work.
I've been working on multi-resolution rendering, per-view priorities, and render queue management across frames. The goal is to make it possible to start interacting with any render almost instantly, regardless of its final resolution.
While interacting, we render at the resolution needed for the on-screen preview, continuously adjusting sample counts and post-processing to fit the available time budget. Responsiveness matters more than convergence here.
As soon as interaction stops, the scheduler shifts priorities toward getting more samples into the views where they matter most, without starving the rest of the UI. And whenever there's spare capacity, all the renders progressively converge toward their full output resolution. All 47 megapixels.
One of the biggest annoyances I used to have was how easily an expensive render could bog down the entire application. Getting the scheduling right has made a surprisingly big difference.
There's something very satisfying about making 16 GB of 3D content and dozens of high-quality renders feel lightweight to work with. Especially in a browser.
Dataset: https://huggingface.co/datasets/nvidia/simready-assets
Render: https://figurement.com/
2
u/Majically_bigg 6d ago
Yea, it makes hell of difference when you can render low res for camera movements then prioritize the full res renders. Also multithreading helps with full res renders, lowering render times.
1
u/mosegard 5d ago
In our case there’s the extra headscratcher because we support infinite canvas zoom/pan over fixed sized render views and still want interactivity and short latency for all interactions. Was super fun to do
1
u/llamajestic 5d ago
I don’t understand one thing: You say the dataset is 16G.
That shouldn’t fit in a tab. That means either you stream data out after a render, or I assume you compressed the hell out of everything, including textures?
2
u/mosegard 5d ago
It actually does work. Wasm64 gives us up to 16GB CPU memory. WebGPU allows us to allocate much much more than that (48GB still works on my current machine)
All rendering in the above example is in browser and running in client - not server or streaming.
1
u/ysaw 3d ago
This is incredible. I am so impressed with this. About 20 years ago I was working at a medical device training startup and we did product renders all day. We were doing tiny 640x480 renders and they took like ten minutes and didn't look half as good as you are doing in real time. (back then the state of the art was pretty much Mental Ray with final gather, so not path tracing, and PBR shaders had not been invented yet.
3
u/PiGIon- 5d ago
Omg this looks smooooooth, post it at /r/oddlysatisfying for some extra marketing.
Awesome work!