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

Long form blog at https://jms55.github.io.
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
New blog post: "Realtime Raytracing in Bevy 0.17 (Solari)"
jms55.github.io/posts/2025-0...
September 20, 2025 at 9:23 PM
DI/GI/world cache
August 17, 2025 at 7:52 PM
Realtime raytraced DI/GI
August 17, 2025 at 7:52 PM
Vs several minutes pathtraced reference
August 10, 2025 at 2:01 AM
~14ms
August 10, 2025 at 2:00 AM
Added DLSS Ray Reconstruction to Bevy Solari!

It's kind of fun to look at the profile, I _think_ this is a series of upsample/downsample convolutions for a U-net, but who knows!
August 9, 2025 at 9:35 PM
Trying to upload this again, radiance cache: github.com/bevyengine/b...
August 4, 2025 at 3:07 AM
For comparison, this is the best I could get the subgroup-level resampling. ~7.3ms.
August 2, 2025 at 5:10 PM
So subgroups are a bust, which is a shame because they were cheap. But they didn't have enough samples to reduce correlations.

So I tried workgroup-level resampling, which is mostly artifact free. Greatly improves quality! ...At double the cost (6.4->12ms) :(

Left is main, right is workgroup.
August 2, 2025 at 5:01 PM
Tried doing ReSTIR spatial reuse within a subgroup today. This is the result - super good quality, but with tiling artifacts.

I tried jittering the thread ID to get subgroups to overlap across frames, and it helped a bit, but didn't entirely eliminate the artifacts :(
August 2, 2025 at 2:56 AM
Realtime, no denoising besides TAA :)
August 1, 2025 at 5:47 PM
Added a radiance cache, and initial results show it _halved_ my ReSTIR GI time (8.62ms -> 4.32ms) in bistro! Also improved disocclusion quality a lot. The downside is that it's more temporally unstable and has some artifacts due to using a fixed sample point per voxel.
July 29, 2025 at 12:30 AM
Specular! (PT, not realtime)
July 19, 2025 at 3:38 PM
Adding light tiles adds a small 0.1ms dispatch, and then reduces the initial + temporal dispatch down to 2.6ms.
July 18, 2025 at 1:55 AM
For context by _far_ the longest time spent in Bevy Solari is on the direct lighting initial candidate pass.

This is the initial trace on an RX 9070. Yes, you read it right, 22ms is spent on the first dispatch (32 initial candidates + visibility test + temporal resampling).
July 18, 2025 at 1:51 AM
This is neat
July 18, 2025 at 1:06 AM
July 13, 2025 at 12:31 AM
After like 3 years, I finally got usable realtime, fully dynamic fully raytraced lighting in Bevy!
July 6, 2025 at 4:29 PM
ReSTIR GI was shockingly easy to get started on. With initial + temporal resampling (no spatial yet) it was pretty much a copy + paste of the DI code with some small adjustments. Didn't really expect to get this far so quickly!
July 5, 2025 at 7:22 PM
After a bunch of work, re-enabled the directional light and added TAA, and it's starting to look great!

@gpuopen.bsky.social's paper gpuopen.com/download/Eff... in particular was a big quality increase, for a simple change.
June 21, 2025 at 11:01 PM
Add temporal reuse (and disabled the variance-heavy sun disk), and it's starting to look really usable at just 2spp (no denoiser yet).
June 5, 2025 at 8:51 PM
Slowly working on ReSTIR. Keeping things unbiased gets really complicated, really fast! I have spatial reuse done, working on temporal.

At this rate I'm hoping to get raytraced direct lighting into Bevy 0.17, although it'll probably depend on how long it takes me to polish the DLSS integration.
June 5, 2025 at 3:40 PM
Spent some time yesterday prototyping what component categories would look like for the Bevy editor. Figma's autolayout is pretty cool, but also very finicky sometimes.

I think that this design is ultimately a dead-end, the nesting leads to the same issue with usability that I feel Godot has.
May 28, 2025 at 9:26 PM
And now directional light support added.

Hardest part was actually just figuring out units. Bevy uses illuminance (lux) for directional lights, but I need it in luminance (just convincing myself that this was true took a long while).

The conversion process is a little tricky (thread below).
April 30, 2025 at 5:53 AM