MΞ›X's Avatar

MΞ›X

@m4xc.bsky.social

Software engineer fascinated by hardware, electronics, & the niche. Studying graphics programming at BUAS 🀟 Intrigued by voxels, pixel art, & graphics. https://m4xc.dev/

326 Followers  |  51 Following  |  44 Posts  |  Joined: 22.10.2024  |  2.1609

Latest posts by m4xc.bsky.social on Bluesky

Thank you! :)
Yes, we are fortunate to have access to PS5 development through our Uni.

03.07.2025 18:45 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
A first pass is used to determine what 8x8x8 chunks need to be updated, then the second pass is indirectly dispatched to perform only required re-voxelization.

A first pass is used to determine what 8x8x8 chunks need to be updated, then the second pass is indirectly dispatched to perform only required re-voxelization.

A big optimization I worked on after my last post was making our voxelizer lazy. So, it only updates parts of the scene that changed. This made a huge difference for our performance and allowed us to push for larger level sizes!
Below is a high-level drawing of how it works:

02.07.2025 19:02 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
A picture showing how to use the render graph interface using a builder pattern.

A picture showing how to use the render graph interface using a builder pattern.

The engine supports both PC and PS5 through a platform-agnostic render graph I wrote.
It was a big gamble, I had written it as a prototype in 2 weeks, but it really paid off in the end. Saving us a ton of time and keeping our renderer clean.
Below is a code snippet showcasing the interface :)

02.07.2025 19:02 β€” πŸ‘ 5    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0
Kudzu Engine - Showcase
YouTube video by Sven Kudzu Engine - Showcase

We've used the #voxel game-engine we build as a team of students to make a little diorama puzzle game :)
This has been an incredibly fun experience, building this from the ground up, working together with designers and artists!

Engine: youtu.be/uvLZn1X_R0Q
Game: buas.itch.io/zentera

02.07.2025 19:02 β€” πŸ‘ 17    πŸ” 6    πŸ’¬ 1    πŸ“Œ 0

I'm assuming that by cluster you're referring to a voxel brick in this context :) (correct me if I'm wrong)
If each brick has its own transform. Couldn't that result in gaps between the bricks? Do you do anything to combat that, or is it not an issue?

04.06.2025 13:44 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
The Witcher 4 - UE 5.6 Tech Demo | State of Unreal 2025
YouTube video by IGN The Witcher 4 - UE 5.6 Tech Demo | State of Unreal 2025

Excited to finally show off Nanite Foliage www.youtube.com/watch?v=FJtF...

03.06.2025 18:19 β€” πŸ‘ 209    πŸ” 46    πŸ’¬ 14    πŸ“Œ 2

Awesome work, the demo looks amazing! :)
I'm curious what is the voxel size difference between LODs?
Does one brick in LOD1 cover 4x4x4 bricks in LOD0?
Or does it cover 2x2x2 bricks in LOD0?

03.06.2025 20:09 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Hey, sorry for my late response, I’m happy you enjoyed reading my blog post :)
I don’t currently have an RSS feed, I always share the posts on socials instead.
But I might look into RSS sometime.

09.05.2025 14:16 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

Here's a video showcasing the demo we created using the engine, to showcase our engine is capable of being used to make actual games! :D

16.04.2025 14:57 β€” πŸ‘ 9    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Cone traced reflections.

Cone traced reflections.

Cone traced soft shadows.

Cone traced soft shadows.

Cone traced soft shadows & ambient occlusion.

Cone traced soft shadows & ambient occlusion.

For the past 8 weeks I've been working in a team of fellow students on a voxel game engine. I've been primarily working on the graphics, creating a cross-platform render graph for us, and working together with @scarak.bsky.social on our cone-traced lighting, and various graphics features! :)

16.04.2025 14:57 β€” πŸ‘ 19    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0
Preview
GitHub - mxcop/src-dgi: Surfel Radiance Cascades Diffuse Global Illumination Surfel Radiance Cascades Diffuse Global Illumination - mxcop/src-dgi

I decided to open source my implementation of Surfel Radiance Cascades Diffuse Global Illumination, since I'm not longer actively working on it. Hopefully the code can serve as a guide to others who can push this idea further :)
github.com/mxcop/src-dgi

12.03.2025 08:21 β€” πŸ‘ 117    πŸ” 21    πŸ’¬ 0    πŸ“Œ 0

It’s interesting to see the CWBVH performing worse here. If I remember correctly it usually outperforms the others right?

03.03.2025 11:20 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image

Graphics Programming weekly - Issue 376 - January 26th, 2025 www.jendrikillner.com/post/graphic...

27.01.2025 14:02 β€” πŸ‘ 78    πŸ” 23    πŸ’¬ 0    πŸ“Œ 0
Preview
MΞ›X - Surfel Maintenance for Global Illumination A comprehensive explanation of my implementation of Surfel probe maintenance.

I wrote a blog post on my implementation of the Surfel maintenance pipeline from my Surfel Radiance Cascades project. Most of what I learned came from "SIGGRAPH 2021: Global Illumination Based on Surfels" a great presentation from EA SEED :)
m4xc.dev/blog/surfel-...

25.01.2025 15:45 β€” πŸ‘ 117    πŸ” 32    πŸ’¬ 1    πŸ“Œ 0
Post image Post image Post image Post image

In case you're looking for the perfect university for 2025/2026:
Consider the game program of Breda University. :) Teaching team straight out of gamedev, C++, strong focus on graphics, and dedicated tracks for programming, art and design.
Tuition fee this year is 2530 for EU citizens.
games.buas.nl

25.01.2025 13:26 β€” πŸ‘ 38    πŸ” 8    πŸ’¬ 3    πŸ“Œ 0
Post image

My new blog post explains spectral radiometric quantities, photometry and basics of spectral rendering. This is part 2/2 in a series on radiometry. Learn what it means when a light bulb has 800 lumen and how your renderer can account for that.
momentsingraphics.de/Radiometry2P...

19.01.2025 08:29 β€” πŸ‘ 45    πŸ” 10    πŸ’¬ 1    πŸ“Œ 0
Join the Radiance Cascades Discord Server! Check out the Radiance Cascades community on Discord – hang out with 652 other members and enjoy free voice and text chat.

With RC we store intervals for every probe (intervals are rays with a min and max time)
They are represented as HDR RGB radiance and a visibility term which is either 0 or 1.
Here’s the discord link :)
discord.gg/6sUYQjMj

16.01.2025 23:48 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

That’s correct :)
GT stands for Ground Truth, it’s the brute force correct result which I want to achieve.

16.01.2025 11:48 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

Now I'm working on integrating a multi-level hash grid for the Surfels based on NVIDIA's SHARC and @h3r2tic.bsky.social's fork of kajiya. Here's a sneak peak of the heatmap debug view :)

15.01.2025 18:28 β€” πŸ‘ 10    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image Post image

I've been validating the results of my Surfel Radiance Cascades, comparing it to ground-truth and using the white furnace test. I think I'm really close to GT now, attached are 2 images, one is GT, the other is SRC :)

15.01.2025 18:28 β€” πŸ‘ 26    πŸ” 1    πŸ’¬ 2    πŸ“Œ 0
Post image

I've been improving the Surfel Radiance Cascades since my last post, ironing out bugs one by one. It's starting to get difficult to see the difference between my ground truth renderer and the SRC one :)
(in this rather low frequency scene, more high frequency tests coming soon)

08.01.2025 18:13 β€” πŸ‘ 13    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Video thumbnail

After many weeks of effort I finally have radiance on screen now! I’ve still got issues mostly related to my Surfel Acceleration Structure, however I’d say the results are already looking quite promising. It has kind of a hand painted look to it now :)

03.01.2025 09:38 β€” πŸ‘ 39    πŸ” 4    πŸ’¬ 0    πŸ“Œ 0

I think that this is indeed the best next step, the acceleration structure I have right now is starting to become the bottleneck.
Thanks for the tip!
It’s time for an upgrade :)

02.01.2025 11:55 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Surfel debugger showing Cascade statistics to get an idea of what kind of work we're going to be doing.

Surfel debugger showing Cascade statistics to get an idea of what kind of work we're going to be doing.

A Surfel covered terrain with some Debug GUI overlayed on top.

A Surfel covered terrain with some Debug GUI overlayed on top.

I Finally got around to adding ImGui to my project, it was about time after logging info for a while :p
I'm now working on splitting the Surfels into Cascades, after which I can start implementing the radiance gathering, merging, and finally applying the diffuse irradiance to the screen :)

27.12.2024 11:48 β€” πŸ‘ 14    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Join the Radiance Cascades Discord Server! Check out the Radiance Cascades community on Discord – hang out with 574 other members and enjoy free voice and text chat.

Thanks! We have a discord community where you can ask questions in case you get stuck :)
Warning: once you go RC there’s no going back :p (jk)

discord.gg/DezF3NF3

23.12.2024 11:42 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Awesome! :)
Is the attached image 1 frame of accumulation? (single-shot)
If not I’m curious, how many frames does it take to converge to that level, on average?

19.12.2024 19:09 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image

Something I'm considering for the acceleration structure is an extra layer of indirection (Surfel Clusters), which would allow me to store an offset & count in each cell.
Instead of storing the index of each Surfel in the cell itself.

14.12.2024 15:59 β€” πŸ‘ 7    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

For the acceleration structure I'm using a simple uniform grid at the moment, which can store a fixed number of Surfels per cell.
This is quite annoying, because closer to the camera Surfels are physically smaller, so cells need a higher capacity and cells are using a lot of memory.

14.12.2024 15:59 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
~2500 Surfels distributed across the screen using gbuffer data.

~2500 Surfels distributed across the screen using gbuffer data.

This week I've been implementing Surfels for the first time, the most challenging part so far has been the spawning algorithm. Stopping Surfels from spawning on top of each other. The spatial look-up acceleration structure is also a part which I still need to iterate on :)

14.12.2024 15:59 β€” πŸ‘ 28    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I'm using a method we call SPWI (Screen Probes World Intervals) which means probes are distributed across the screen. But, they are actually placed in the world, and their intervals (rays) are traced in world space.
So, in this demo lighting is also gathered outside of the screen-space.

04.12.2024 22:07 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

@m4xc is following 20 prominent accounts