JMS55
jms5517.bsky.social
JMS55
@jms5517.bsky.social
Working on rendering for the Bevy game engine.

Long form blog at https://jms55.github.io.
* If you're ok only setting it once per frame, you can use a counter per cell initialized to 1, and atomicMac(cell, 1), and then if the result is 0 you write to it
* If you really need multiple updates per frame, you can use a linked list link.springer.com/content/pdf/... or list of buckets per cell
link.springer.com
November 12, 2025 at 10:34 PM
Couple of different solutions:
* If you're ok only setting it once, you can do so once you're the one to initialize the cell github.com/bevyengine/b...
bevy/crates/bevy_solari/src/realtime/world_cache_query.wgsl at main · bevyengine/bevy
A refreshingly simple data-driven game engine built in Rust - bevyengine/bevy
github.com
November 12, 2025 at 10:34 PM
Once again, thank you so much for all the tips!
November 11, 2025 at 10:25 PM
I tried out the luminance tracking, works great! github.com/bevyengine/b...

Now I might be able to get ReSTIR GI validation rays working and further decrease the lag (before the cache was not stable enough to validate against)
Solari: More reactive world cache by JMS55 · Pull Request #21810 · bevyengine/bevy
Thanks to Guillaume Boissé, the world cache is both more stable in static scenarios, and more reactive in dynamic scenarios! https://bsky.app/profile/gboisse.bsky.social/post/3m5blga3ftk2a
github.com
November 11, 2025 at 10:24 PM
Oh, gotcha! I didn't end up having that problem because I don't store albedo per cache cell, I always just use the per-ray albedo. Gives pretty much the same result (no denoiser because I'm on my laptop atm)
November 11, 2025 at 2:46 PM
Do you mind expanding on the albedo bit as well? Not quite sure I understand how that works.
November 11, 2025 at 4:05 AM
Thanks for sharing! Luminance tracking should be fairly easy to implement, I'll give that a go tomorrow. And I'll also look into the cache append scheme.

Also glad you enjoyed my article! I've already made a bunch of improvements, so expect a sequel when Bevy 0.18 comes out in ~a month!
November 11, 2025 at 3:57 AM
Also making a list of cache requests and then updating cells using a random request per cell is interesting. Currently I have a fixed point per cell (position of first request to the cell), which can lead to some ugly artifacts if it poorly represents the cell.

jms55.github.io/posts/2025-0...
Realtime Raytracing in Bevy 0.17 (Solari)
Bevy, Rust, Graphics, etc
jms55.github.io
November 10, 2025 at 3:08 AM
2. How do you sample direct and indirect lighting per cell? For direct lighting, is it just RIS? And BRDF sampling for indirect lighting?

3. Do you treat cache cells as always diffuse surfaces, or do you account for the specular BRDF when querying the cache?
November 10, 2025 at 3:07 AM
Great post! Some questions on your world cache:
1. Assuming you have a temporal blend factor to accumulate radiance per cell, how do you get both stability, and adapting to light changes quickly? Also, do you separate direct and indirect accumulation?
November 10, 2025 at 3:04 AM
With any luck, I should have some more time to work on Bevy soon, and we should be able to catch up and process Zorah. My PC has "only" 16 GB of RAM. Lots of work to do to get to the point we can process, load, and render it!
September 30, 2025 at 6:15 PM
Great post! Bevy is on a fairly old version of meshoptimizer at this point, we're overdue in updating our from_mesh() algorithm to take advantage of the new simplification and possibly clusterization code (would have to see how it compares to METIS).
September 30, 2025 at 6:14 PM
That said, please do try it out and let me know what the limitations are! (keeping in mind it's experimental and not production ready).

I'm a developer, not a designer, so I've only been testing it on a few static scenes. If you try it, please let me know how it fares for real use cases!
August 18, 2025 at 1:18 AM
* No skinned meshes or morph targets
* No alpha masked or transparent material
* No support for specular materials
* You need a NVIDIA RTX GPU (for DLSS-RR)

All things I hope to solve eventually, but not in this release.
August 18, 2025 at 1:17 AM
It's going to be in Bevy 0.17!

Special setup, sorta? Current caveats:
* You have to use StandardMaterial only
* You have to use meshes with exactly {position,uv_0,tangent,normal} vertex attributes
...
August 18, 2025 at 1:15 AM
DI/GI/world cache
August 17, 2025 at 7:52 PM