@absulit@mastodon.social avatar absulit , to random

So I was trying to implement ping-pong buffers in my library (emphasis on trying). The code has no errors, but the values are not changing, and I think is basically how my library is built because I think (because I couldn't figure it out) the entries are being swap twice or not being swap at all and am tired, but I have another idea to test.

@juretriglav@mastodon.social avatar juretriglav , to random

Making a implementation of Lucas Alber's Markov Chain Path Guiding GI paper

Demo of real-time GI, walking through a hall, changing light parameters

@castano@mastodon.gamedev.place avatar castano , to random

I've put together an updated version of the Sponza scene with uncompressed PNG and compressed AVIF textures. I wrote about the process and compared the results against KTX.

https://www.ludicon.com/castano/blog/2026/02/an-updated-sponza-gltf/

@thekhronosgroup@fosstodon.org avatar thekhronosgroup , to random

We are seeking short talks, demos, and presentations that showcase real world use of , , , and Splatting on the web for the 3D on the Web special event during the week of GDC.

If you are building something interesting and would like to share it with the community, we would love to hear from you. Please note that sales forward presentations are unlikely to be selected.

To submit a 10 minute talk or demo, please email your description to [email protected]

ALT
@castano@mastodon.gamedev.place avatar castano , to random

While working on spark.js, I realized that normal map compression formats weren’t supported in popular frameworks like three.js. I addressed that gap by adding the necessary support to three.js and wrote an article to shed some light on the topic, drawing from my experience in real-time 3D graphics.

https://www.ludicon.com/castano/blog/2026/02/normal-map-compression-revisited/

@kbob@chaos.social avatar kbob , to random

I'm starting a new "build thread" (not building anything except pixels, but they're good pixels).

This is the "Bubble Universe" graphics hack. I'm going to try to have some fun with it. Follow or ignore hashtag for more.

🧵 1/N

40,000 colored particles swarm across a black background in a roughly circular area, leaving a complexly textured, ever shifting surface.

kbob OP ,
@kbob@chaos.social avatar

And now I've implemented it. But instead of porting it to the slowest most decrepit retromachine I can find, I'm going the other direction: What kind of visual effects can I achieve if I throw a decent GPU at it?

The video above in 🧵 1 is a screen capture from my Javascript + WebGPU implementation. It's running at 20 FPS, using about 5% of the CPU and 3% of the GPU. More to come...

🧵 6/N

kbob OP ,
@kbob@chaos.social avatar

I wrote another one! I ported my Javascript + WebGPU implementation to Python + wgpu-py, and now I have a desktop app.

And I pushed it to Github. "Share and enjoy!"

https://github.com/kbob/bubble-universe

🧵 7/N

@juretriglav@mastodon.social avatar juretriglav , to random
@castano@mastodon.gamedev.place avatar castano , to random

spark.js has been featured on webgpu.com!

"Real-Time Texture Transcoding for Faster Asset Delivery"
https://www.webgpu.com/showcase/spark-js-gltf-real-time-compression/

@h4ckernews@mastodon.social avatar h4ckernews Bot , to random

ChartGPU – WebGPU-powered charting library (1M points at 60fps)

https://github.com/ChartGPU/ChartGPU

@absulit@mastodon.social avatar absulit , to random

For the new version of POINTS I'm adding a way to load an HTMLElement as a texture. I think it's a simple way to load a weird font asset without an atlas/spritesheet. Or basically anything in the DOM.

Top Left: HTML
Below: texture in the canvas.

https://github.com/Absulit/points

ALT
@absulit@mastodon.social avatar absulit , to random

Another experiment with my POINTS library. This is basically an old physarum/slime demo I made a while ago, but rebuilt with compute shaders, particles and a lot more efficient than before.

@h4ckernews@mastodon.social avatar h4ckernews Bot , to random
@witchcrafter@mastodon.gamedev.place avatar witchcrafter , to random

Continuing my render pipeline tooling experiments - now testing simple deferred lighting!

☀️ directional sunlight
💡 point lights
🏝️ ambient light
🗺️ normal map support

video/mp4

@absulit@mastodon.social avatar absulit , to random

With the new version of my WebGPU library POINTS v0.6.0 (https://github.com/Absulit/points), I added a bunch of new features like support for depth maps, cameras, bloom and others, so I wanted to make a demo that used all of these.

Oscillating particles that move up and down like waves, some are emissive, and the camera zooms in and out.

absulit OP ,
@absulit@mastodon.social avatar

This demo has a 262K+ instanced particles (cubes) animated in compute shader, movement driven by a noise texture, it uses the depth map to create a slight depth of field and also some particles are emissive and to make the effect complete it has some bloom that affects only the bright particles, this thanks to the HDR output that allows those cubes to have a brightness beyond white and then those values are tonemapped to fit in the final output.

absulit OP ,
@absulit@mastodon.social avatar

All of this and running smoothly without losing any frames. This is the current state of graphics on the web.

@absulit@mastodon.social avatar absulit , to random

I also updated my POINTS library a couple of days ago to v0.6.0 (and a fix in the queue) with depth maps/shadow maps, bloom, wireframes

https://github.com/Absulit/points

The image is from a personal demo I'm currently working

ALT
@absulit@mastodon.social avatar absulit , to random

I think I understand better compute shaders than before. A thing that still eludes me is the fact that, even when I know I have 1 million particles, they are not all visible, even when I thought that was the case. I'm not entirely sure what it is, (not an expert but I manage to) it could be some sync issue related to random numbers, like it generates the same value and the particles overlaps

absulit OP ,
@absulit@mastodon.social avatar

I have this very clear demo with a lot less particles than a million, and it looks like it has more that the million one.

Also the workgroup sizes are different so that might be related.

I will check this later.

@castano@mastodon.gamedev.place avatar castano , to random

Now that three.js supports BC5/EAC normal maps, I've updated the spark.js gltf demo with new texture assets.

Last time I simply used gltf-transform with default settings, but this time I tailored the settings to each specific texture type and the resulting quality is much better:

https://github.com/ludicon/spark-gltf-demo/

@castano@mastodon.gamedev.place avatar castano , to random

I've updated the three.js gltf spark loader to use BC5/EAC_RG formats for normal maps, which are not supported in r182.

https://github.com/Ludicon/spark.js

I've also shaved a few more bytes bringing the package size down to 256KB!

@castano@mastodon.gamedev.place avatar castano , (edited ) to random

three.js r182 was just released! 🎉

https://github.com/mrdoob/three.js/releases/tag/r182

I contributed support for RG normal maps, enabling support BC5 and EAC_RG normal map compression in both the WebGL and WebGPU renderers.

@tojiro@mastodon.social avatar tojiro , to random

Want to use a modern GPU API on Android without going full Vulkan? is now part of Jetpack! Full flavor, zero barriers. 😉
https://developer.android.com/jetpack/androidx/releases/webgpu

@tojiro@mastodon.social avatar tojiro , to random

In case you didn't notice, is most likely available in your browser now! https://web.dev/blog/webgpu-supported-major-browsers