18 comments

[ 2.6 ms ] story [ 75.5 ms ] thread
Nice! p.s. I'm only seeing still images for 20 seconds, which I guess are supposed to be moving?
It's my first website/blog, so I may have misconfigured something, or maybe it's an issue with the self-hosted video player. I'll look into it now!
This is great work.

I'd love to see a blog post detailing some of the optimizations you did to speed this up. Presumably you octree/voxel segmentation to re-use already summed regions of the CA?

I'd also love to see some 3D MNCAs...

I'll add that to the list of pending posts!

For the most simple MNCA implementations, I don't use any special optimizations. It's essentially just brute-force naive convolution.

That said, some of the more advanced models I've made use up to 48 neighborhoods.

For those, I split the neighborhoods into 'Width-1' rings for each 'Radius' value, and then assemble the final neighborhoods by referencing some combination of those rings.

For the 'RGB-SMNCA' models with a maximum Radius of 10, this means that I can reduce the total texelFetch() calls from a maximum of 163348 = 16,704 (!!!) down to 13348 = 1044.

These numbers come from: ( Neighborhoods * Color Channels * Radius-10 Neighbor Count )

3D (S)MNCAs are something I certainly plan on developing, and will likely implement after I'm finished with the headless_engine branch of VulkanAutomata, which will hopefully (finally) allow for a proper cross-platform compatible application.

Github repo (unlicense/public domain): https://github.com/Slackermanz/VulkanAutomata
I just added two branches:

'messy_update_branch' - The current full version of VulkanAutomata that has become somewhat bloated and scattered, and almost certainly less compatible

'headless_engine' branch, something I started working on a couple of days ago to really clean up and refine the code, and remove any OS-dependent aspects.

I hope to use 'headless_engine' as a part of a larger cross-platform application with a separate and modular UI, so that other people can finally run the program!

How's the blog format? I hope things are explained clearly, and in enough detail!

If you have any suggestions about formatting or additional information/context you'd like me to include, or if you have any questions about MNCA (or in general), let me know!

Really enjoyed it.

Only thing I would add is numbering and rules for the extra videos. Easier to talk about that way (e.g. "I wonder what's going on with discrete pattern #7).

Very interesting observations! How did you stumble on this? :-)

IIUC (based on one of your blog comments), you typically need one “immediate” neighborhood and one “ring-like” neighborhood further away. The latter seems like it might likely require non-locality in a fundamental sense (which typically leads to both philosophical and practical problems, like how do you keep the non-locality in check to maintain approximate locality). Any thoughts on that?

Those NH configurations were simply examples, I've used a wide variety of randomly generated NHs and they all have their own quirks and capabilities.

Could you clarify what you mean by non-locality? All NHs are a circle, or ring(s) of pixels around the 'origin' pixel [0, 0]

This seems to be discrete approximation of continuous cellular automata like Lenia.

https://github.com/Chakazul/Lenia

They are indeed very similar - the multi-kernel methods used in Lenia were actually inspired by my works with MNCA!

Furthermore, Bert and I are working to bring our programs and techniques together.

With only minor adjustments to my fragment shaders, Lenia rules can be simulated.