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?
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.
'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!
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?
18 comments
[ 2.6 ms ] story [ 75.5 ms ] threadI see videos on my desktop — perhaps a browser issue?
I guess I do now!
https://www.reddit.com/r/cellular_automata/
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...
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.
- Video resolution is larger than 1920 × 1088 ( https://www.caniuse.com/?search=video > Known Issues )
- The videos contain no audio track ( https://wordpress.org/support/topic/mp4-h264-video-doesnt-al... )
Anyone else have ideas?
Other than that, I'm not sure. I've added direct media links under each video - hopefully that works until I can try some fixes.
'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!
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!
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).
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?
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]
https://github.com/Chakazul/Lenia
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.
https://bitbucket.org/rallison/von-neumann-life/src/master/