pcouy 4 days ago

Hey! I'm the author of this article and just noticed the huge traffic spike.

This was my first time writing a shader. I was just playing around on shadertoy when I realized I could implement this chemical model that has fascinated me for quite some time. I'm really happy with how well my results align with results from other people who have done this before me.

While writing the article, I noticed that the same kind of shader implementation has already been done before.

Feel free to ask me anything about the implementation or the chemical model

  • danwills 4 days ago

    Great work on the article and video!

    I've played with RD's especially Gray Scott a lot in Gollygang/Ready, and found some fascinating behaviours that I then brought into Houdini for visualisation, here's a couple of examples:

    https://youtu.be/4dWJ504FULw?si=lWBrhaL2J12o58e1

    https://youtu.be/Naj_J8aznyk?si=lb0WrkrUaCDg-Rzl

    One thing that can help them to look nicer (in my opinion) is a reinterpretation of the reagent values as specific colours before display.. even something as simple as: pow(Uucolor,upow) + pow(Vvcolor,vpow) can be nice with well-picked ucolor&vcolor and powers. Other possibilities like hsv-to-rgb on the values can be pretty interesting too!

    • danwills 4 days ago

      Ah damn was meant to be asterisks there (ie multiplication of ucolor by U etc) but it got turned into italics!

  • ryanartecona 4 days ago

    This reminds me of this other work[1], which is also a fascinating example of emergence from a dynamical system. Instead of a chemical reaction model, it's a model of slime mold growth, as a system of particles and some update rules. They haven't posted new work in a while, but you can still see many video renderings on their twitter[2] using variants of it that are absolutely mesmerizing.

    [1] "Physarum" by Sage Jenson https://cargocollective.com/sagejenson/physarum

    [2] https://x.com/mxsage

    • pcouy 3 days ago

      Emergence is mesmerizing in the literal sense. For me, I think the fascination takes its roots in how all biology - from the apparition of life to how brain works - happens thanks to emerging behaviors.

      Anyway, thanks for the share, it makes me want to try implementing it as well.

  • davedx 4 days ago

    I considered trying to do something like this for CFD (specifically to see if I could show how lift is created by airflow over an airfoil). I got kind of stuck on it though and gave up, too far out of my area. Awesome to see others doing things like this though, feels like it’s an area ripe for exploitation!

    • pcouy 3 days ago

      I tried making fluid dynamics in a similar way right after making this, but I gave up as well. As far as I remember, I got stuck on managing non-miscible fluids (such as air and water) which introduces some edge cases where they meet.

  • DylanSp 4 days ago

    This is really cool, it looks like it's pretty easy to get started with Shadertoy and your guidance.

    One nitpick: in section 2.1.1 on implementing the reactions, you refer to "simulating the reaction A + 2B -> C"; should this have "4C"?

    • pcouy 3 days ago

      The section you're referring to is meant to first give the update rule for the general-case of a reaction that is not autocatalytic.

      I'm not sure what made you think it should have 4C, but if you want to explain me the reasoning that led you to this conclusion, I'd be glad to fix the article and make it clearer

      • DylanSp 3 days ago

        The equation in that section for updating the concentration of C has a "4 * speed(t,x,y)" term, it seems like that should correspond to 4C in the reaction, especially because the equation for B has "-2 * speed(t,x,y)".

        EDIT: Also, the text after the equations says "Notice that the numbers in front of speed(t) come from the quantities in the equation that summarizes the reaction."

        • pcouy 3 days ago

          You're right, how did I miss this ?! Thanks for picking this up

Slackermanz 4 days ago

I also used a GPU shader-based approach (custom vulkan engine), but used a cellular-automata-first implementation for exploring and evolving through these emergent wonderlands.

Unfortunately, my writeup isn't anywhere near as coherent on the technical/engine details, and the actual code is a right mess. It's more focused on the pattern family design.

Overall, my results came out very similar to Lenia in many ways, and some discovered patterns also directly resemble reaction diffusion.

---

https://slackermanz.com/understanding-multiple-neighborhood-...

https://www.shadertoy.com/user/SlackermanzCA

https://www.youtube.com/@Slackermanz/videos

  • danwills 4 days ago

    That is extremely cool, very fine work thanks for sharing!

    I agree some of the MNCA examples are very reminiscent of things that various RD's do, the one titled "A more complex MNCA example" has a similar oscillating-worms feel to something I found in a modified Gray Scott:

    https://youtu.be/Naj_J8aznyk?si=lb0WrkrUaCDg-Rzl

  • pcouy 3 days ago

    I just took a look at your Shadertoy profile and I liked it a lot

    I want to try my hand at writing such a general case continuous cellular automata engine, but I first need to dive into the literature around Lenia, and this is only one of the many things I want to try...

    Anyway, thanks for sharing your work. I took a quick look at your write-up and will definitely come back to it later.

  • danwills 4 days ago

    I've often thought it would be heaps of fun to try to build a playful dynamic UI (perhaps for use in a game or something) where all the elements are are made from 'living' components, say CA's like your MNCA or perhaps reaction-diffusion. I would love to collaborate on some experiments around that if you'd be interested?

    • pcouy 3 days ago

      Another commenter shared https://github.com/GollyGang/ready which may be what you have in mind. I clearly see the fun in building such a thing from scratch though, and I intend to make a simple web-based one. Let me know if you create a repo for you project, I'll make sure to take a look and try to contribute if I'm comfortable with the tech stack.

      Edit : Ahah I just noticed the "other commenter" is you

      • danwills 3 days ago

        Heheh indeed it was! - What I was saying above though is not just for exploring RDs but more for actually building things out of them!!

        It's a rather out-there (non-serious) idea where all the usual 'stuff' of a GUI is actually made out of dynamically-simulated-CA/RD cells interacting with each other.

        Let's say for example once one had developed some way to reliably simulate a dynamic but smooth and stable enclosed area with a boundary (like a bag?), well you could call that layer a 'window'-ish-type-thing and constrain the sub-simulations (ie the window-widgets) to only grow inside the window. Window-docking could perhaps have behavior a bit like bubbles-adhering-to-each-other as a natural outcome of the simulated-nature of them and wobbly-windows could be made to be a natural outcome of there being the wave-equation as one of the formulae being used, and other things like that.

        It's definitely an out-there idea not really intended for regular-consumption but I think it could be super fun to explore especially for playful in-game-UI use-cases.

    • Slackermanz 4 days ago

      Sounds good! Always down to collab on experiments with like minds. I'll send an email your way with contact details!

      • danwills 3 days ago

        Damnnn, sweet! I'm very excited to hear that!!

        I've been checking out some of the huge amount of output that you and Jason from Softology have made with MNCA, so awesome to see, top work!!

        I also cloned the vulkan-mnca repo from your github and it compiled and ran without any issues on my thankfully very-recently completely-updated Gentoo. I'm over the moon about that!! I've been meaning to try to wrap my head around what vulkan is like to work with and this looks like a perfect example for the kinds of things I'd want to play with! Utterly choice to connect with you, thankyou HN for being so choice! (especialy dang!)

  • sitkack 4 days ago

    Your work with MNCAs is amazing and an inspiration.

danwills 4 days ago

If you're into reaction-diffusion there's an open source app called 'Ready' which I think is a great way to explore example patterns or tinker with formulas:

https://github.com/GollyGang/ready

Some fun ones from me can be found in Patterns/Experiments/DanWills

  • pcouy 3 days ago

    Woah cool ! Thanks for the share

zokier 3 days ago

I wish there would be more about how to connect this to actual chemistry and less about generating random pretty pictures

  • pcouy 3 days ago

    I'm not sure there is much more relations to actual chemistry than what I put in the "Prerequisites" section. You can also look the Belousov-Zhabotinsky reaction, which is (at a very basic level) a real world instance of a reaction-diffusion system that acts similarly to this model.