[HN Gopher] Recursive Game of Life
___________________________________________________________________
Recursive Game of Life
Author : alden5
Score : 966 points
Date : 2022-12-14 01:44 UTC (21 hours ago)
(HTM) web link (oimo.io)
(TXT) w3m dump (oimo.io)
| oliverbennett wrote:
| I'm never going to stare at TV static and see deeper meaning in
| random noise, and while this is almost the opposite of that, I'm
| surprised by how I felt watching this.
|
| Awe and mild discomfort aren't the usual feelings I get watching
| information being processed.
| fooker wrote:
| It is interesting to observe that the perception of time changes
| with zooming in/out. I know the actual speed of the gliders
| remains the same, but it seems to my eye that they speed up if
| you zoom out and slow down if you zoom in.
|
| I wonder if this perception has an analogue in the physical world
| that has relativity as a consequence.
| lobocinza wrote:
| They really slow down it's not just perception. Try to time it.
| fooker wrote:
| The distance metric also changes.
| rodrigosetti wrote:
| This is awesome. How would one describe this formal system? There
| are no cells essentially
| kleene_op wrote:
| That's what's really awesome about it. In essence there's
| nothing but the rules of the game of life.
|
| I wonder if it's the same for reality. Everytime we've been
| looking at some particles we deemed fundamental they appear to
| be made of even smaller ones.
| mr_mitm wrote:
| > Everytime we've been looking at some particles we deemed
| fundamental they appear to be made of even smaller ones.
|
| Not everytime. There is a list of particles that we currently
| deem fundamental, because no one has found any structure in
| them. But maybe we haven't looked closely enough yet. Some
| entertain the idea that they consist of vibrating strings
| instead of structurless, pointlike particles, but then those
| would be fundamental.
| eru wrote:
| Well, electrons are sort-of fundamental.
|
| But they can also be seen as quantized excitations of some
| underlying quantum field.
| TuringTest wrote:
| There are cells, but they are not atomic but decomposeable.
|
| Each cell in level N is the stable pattern of gliders arranged
| into a square shape in the lower level N-1. If you think about
| it, this is how "objects" in the real world exist - not as an
| essence of the object, but as a pattern of simpler elements
| arranged in space-time that we recognize as an object.
| Exuma wrote:
| Wow, this is something I never considered... go down the rabbit
| hole on this site ("guns", "glider guns", etc). I had no idea
| people actually tried to "game" or discover useful patterns in
| game of life:
|
| https://conwaylife.com/wiki/OTCA_metapixel
| rizky05 wrote:
| jerrygoyal wrote:
| i can't possibly be the only one who didn't get what this is
| bornfreddy wrote:
| Hint: zoom out.
| Kim_Bruning wrote:
| It's a game of life simulation that is -itself- running a game
| of life simulation that is running a game of life simulation
| that is ...
|
| https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
|
| Game of Life is Turing-complete, and has all sorts of other
| weird and interesting implications in chaos theory and
| philosophy of maths.
|
| You can write a game of life implementation on a rainy sunday
| afternoon, and be stuck playing with it for weeks.
|
| This guy took it to another level though.
| JediLuke wrote:
| kmoser wrote:
| You can't fool me! It's Life all the way down!
| zogomoox wrote:
| Life is life - nana na nana
| wintorez wrote:
| OK, this is mind-blowing
| sambalbadjak wrote:
| This should be an option for a screensaver. Well made!
| globalise83 wrote:
| This is really great. I would like to use it as a visual backdrop
| on a big screen when playing DJ sets. I see that it enters a
| permanently zooming out mode when I zoom out fast, would be
| awesome if the zoom control disappears when it enters that mode
| so that it just displays the game of life itself and no UI
| elements.
| concordDance wrote:
| Make a greasemonkey script and Bob's yer uncle! :)
| globalise83 wrote:
| Unfortunately the controls UI elements seem to be rendered in
| the canvas, so it's not as simple as just hiding something. I
| can't even inspect it.
| ranting-moth wrote:
| Doesn't work in Firefox
|
| Uncaught Object { message: "assertion error", stack: "C@https://o
| imo.io/works/life/main.js:31:459\nze@https://oimo.i..., g: {...},
| value: "assertion error" } main.js:37:66
| pmontra wrote:
| Firefox Android, ok.
| pmontra wrote:
| But hours later, Firefox Ubuntu crash with "assertion error".
| I disabled uBO, Decentraleyes, Privacy Badger, it doesn't go
| away.
| sushibowl wrote:
| I use firefox 108, worked for me just fine
| taink wrote:
| Works with 107.0.1 as well
| bartvk wrote:
| Firefox 108 on macOS Monterey, works.
| mNovak wrote:
| I got that error in Brave until I turned off the blockers
| bartvk wrote:
| Perhaps disable some extensions?
| rwmj wrote:
| It just says "Loading" for me with FF 106.
| jefftk wrote:
| It wasn't immediately obvious to me: you need to scroll to see
| the recursive aspect.
|
| (This is really amazing)
| singularity2001 wrote:
| Wow! At the speed of around 0.15 you can see all the relevant
| computations: Every few seconds three glider triples get sent
| out, obviously directly representing the 9 neighboring cells.
| These interact with some lane shifting and 90 degree reflections.
| In the process these "byte" may lose a glider or two,
| representing the result of the game of life computation. Then you
| can see a fuse burn down, then a single glider makes a round and
| suddenly the whole cell switches state by an army of gliders
| gently touching the producing border.
| infogulch wrote:
| Did you zoom yet?
| tinyplanets wrote:
| Whoa!
| davedx wrote:
| Incredible. There's more here: https://oimo.io/works
| bloopernova wrote:
| I wonder what the smallest molecules/things are that could be
| used to make a real game of life? Could you do it with bacteria?
| Surely not viruses or amino acids?
| layer8 wrote:
| The difficulty is keeping it error-free. The best way we know
| is what we're using for CPUs.
| fernanDOTdo wrote:
| The longest-running evolution experiment uses bacteria and it
| has been running for more than 30 years. There's a Veritasium
| video about it: https://www.youtube.com/watch?v=w4sLAQvEH-M
| dschuetz wrote:
| OOOohhh, you have to scroll!
| Rendello wrote:
| Rarely do I look at a website in amazement and ask "How?". This
| is awesome.
| naikrovek wrote:
| there's an open source tool/toy called "Golly" which can show
| you.
|
| https://golly.sourceforge.net/
| danwills wrote:
| And if you want to explore continuous-state automata
| ('reaction diffusion') there's Golly's cousin-app Ready, too!
| (Next version of Ready's Houdini plugin (py3/H19.5) hopefully
| coming soon!)
| luxuryballs wrote:
| "It was the right day to micro dose", Christopher Robin said to
| himself.
| system2 wrote:
| Trippy.
| tehsauce wrote:
| Super well done! The transition between levels is beautiful.
| zengid wrote:
| First off, this is one of the coolest things I've ever seen.
|
| Second, judging from the author's github [0], I'm guessing this
| was made in Haxe [1], which is a language often used to make
| games. I'd looked at Haxe before, but I hadn't realized that it
| has a lot of Ocaml-like features. I think I need to give it a try
| on my next prototype project!
|
| [0] https://github.com/saharan
|
| [1] https://haxe.org/
| zengid wrote:
| *OCaml
| strenholme wrote:
| While an interesting effect, this recursive nature of this game
| can not be seen unless one has a mouse scroll wheel. I think it
| would be good to allow zoom in/zoom out to be done a different
| way (such as page up/page down or +/-). Not everyone has a mouse
| scroll wheel.
| traes wrote:
| While this may not work for tablets (?), the vast majority of
| laptops have a setting called two-finger scrolling that lets
| you use two fingers on a trackpad to give scroll wheel inputs.
| Zeyka wrote:
| It works perfectly fine on mobile and it feels really smooth
| :)
| xigoi wrote:
| What kind of mouse doesn't have a scroll wheel?
| [deleted]
| felipelalli wrote:
| How?
| jerpint wrote:
| How is this even possible?
| ttul wrote:
| As you zoom out, the simulation of the underlying cells is
| swapped for a higher level simulation of the cells at the next
| higher level. Watch how the simulation of the cells from the
| level down speeds up as you transition to the next level.
| naikrovek wrote:
| Life in Life is a real thing.
|
| https://golly.sourceforge.net/ is a tool/toy that will help you
| explore this stuff if you're interested.
| Karsteski wrote:
| This person's entire website is beautiful.
| Papirola wrote:
| amazing, both visually and conceptually.
| an_aparallel wrote:
| this is what the internet is all about thx :)
| mjhagen wrote:
| My God, it's full of pixels!
| m00dy wrote:
| well this guy makes me feel stupid, tbh.
| smegsicle wrote:
| haha getting the speed right at the different levels and
| everything, nice
| bobnamob wrote:
| It isn't often I verbally exclaim on opening an HN link. Wow.
| Kim_Bruning wrote:
| also duplicated at: https://news.ycombinator.com/item?id=33971341
|
| There must be a trick to it, but some of it has to be real... and
| it's so smoothly done I can't easily see the transition.
| fishtoaster wrote:
| This is amazing! I've seen "life in life" as a video from ages
| ago[0], but this is just suck a slick implementation of it!
|
| [0] https://www.youtube.com/watch?v=xP5-iIeKXE8
| logicallee wrote:
| Amazingly performant. Runs on old hardware very smoothly.
| Jerrrry wrote:
| At a certain draw distance (probably/hopefully depending on
| framerate and other specs), the platform replaces the individual
| cells with the OTCA metapixel, effectively giving the illusion
| that it is GoL all the way down.
|
| Neat, even when you know the trick.
|
| https://conwaylife.com/wiki/OTCA_metapixel
| mysecretaccount wrote:
| Thank you, I came here to ask for an explanation for how this
| was optimized.
| svara wrote:
| That's purely an optimization, though. Meaning, it would look
| just like this if it really was "GoL all the way down".
| [deleted]
| nneonneo wrote:
| The other trick is that the simulation speed scales with draw
| distance, such that once you've zoomed out a full cycle the
| simulation has gotten exactly 35328x faster, which is the
| period of the OTCA metapixel.
|
| There's some lovely "engineering diagrams" of the OTCA
| metapixel on this (sparse) blog:
| http://otcametapixel.blogspot.com/2006/05/how-does-it-
| work.h.... It's fun to zoom in on the posted site and identify
| all the features, like the rule table near the bottom left.
|
| For context, the OTCA metapixel is a large pattern (2048x2048)
| which is capable of simulating Conway's Game of Life rules (or,
| indeed, any rule set consisting of neighbour-counting
| birth/death conditions); it does this by having adjacent pixels
| coordinate sharing of state (whether they're on or off) and
| then looking up what to do via a (programmable) lookup table.
| Based on the current state (on or off), a series of "glider
| guns" will be conditionally activated, which creates the
| appearance of a filled center (filled with moving gliders).
| infogulch wrote:
| It also appears to retain the current state of arbitrarily
| higher recursive instances, not that they move much when
| you're zoomed in. Makes me wonder, how do you code for the
| current 'position' in the whole stack in a way that remains
| consistent? Conceptually the space is _very_ big. If you zoom
| /recurse in to a random metapixel 13 times in a row, you're
| almost certainly looking at a pixel that no other human has
| or ever will see, and you have scaled from the width of the
| observable universe to the width of a proton.
| nneonneo wrote:
| Yeah, this part is _very_ clever and quite well-done IMHO.
| I suspect the trick is to only store the state for any
| levels you 've actually seen.
|
| As you go higher, they can just arbitrarily select a
| location in the simulation a few levels up from where you
| are that is consistent with the metapixels you've seen;
| once you go up a few levels, there's no chance of you
| having seen beyond a very small window of the simulation,
| so it's a matter of just finding a matching pattern.
|
| As you go lower, the time step cannot be set be zero, so
| they can simply initialize the simulation a few levels down
| to an arbitrary state since the lower levels will tick
| exponentially faster.
|
| The only problem is that you do have to store state for
| levels between the highest level you've seen and the
| current level as you zoom in. I suppose this means that if
| you zoom out a lot (just spam the scroll) and then zoom in
| a lot, there might be substantial memory usage. I've tested
| it and they do seem to consistently remember the exact
| state of the simulation at least a few levels up - it's
| easy to check by looking at the length of the clock train
| on the left of the metapixel in each level.
| space_fountain wrote:
| Need they do any simulation? I would need paper and some
| time, but can't you store 16 animations of a cell and
| then just have the state as a zoom level, position in x y
| space (wrapping) and a time (in a loop). The rest should
| be calculatable assuming this is a true fractal which I
| think it is. 0 zoom is probably the starting position.
| Zooming in actually switches to maximally zoomed out with
| each cell following the prerecorded animation from a
| layer up based on the x y position. What state are you
| imaging?
| nneonneo wrote:
| Yes, you're right on the state: the state for each level
| can just be OTCA timestep and x,y within the parent
| level. However, I think you need to store somewhat more
| than 2^4 animations: there are 35328 cycles per OTCA
| tick, and a cell's animation depends on all of its
| neighbors, for something like 2^9 * 35328 distinct
| states. The vast majority of cells are quite predictable
| (and have short animation periods) but some of the logic
| elements will change in somewhat unpredictable ways.
| There is likely to be some fancy compression that can be
| done if the states need to be computed ahead-of-time.
|
| Some of the more subtle bits do depend on the neighbor
| cells in the parent level, so I think there still does
| need to be some simulation done to ensure that these
| subtle bits are correct when viewing lower levels. But
| that only needs it be done in a small neighborhood.
| space_fountain wrote:
| Interesting, I guess I forgot that the game of life
| includes edge neighbors and had no idea of the cycle
| time. Why isn't it 2^8 neighbors though?. Maybe just
| running 2^8 simulations is the way to go? Or that's 9
| megabytes * frame size per so maybe that ends up being
| small enough with compression
|
| Edit: the author has said that it's non periodic
| apparently which seems like it would make this whole
| thing a lot harder and probably require more state
| danbruc wrote:
| Eight neighbors plus the cell itself. With a period of
| 35,328 and a size of 2048 x 2048 cells for the OTCA
| metapixel you end up with 75,866,302,316,544 bit without
| any compression.
| tobyhinloopen wrote:
| Neat
| tobyhinloopen wrote:
| neat
| szundi wrote:
| It should be oiomo.io
| sheerun wrote:
| Nice zoom out, it feels like the Universe is constructed a bit
| like this
| msarris wrote:
| It looks quite different on mobile here (both Chrome and Firefox)
| than on desktop. It's way better on desktop, on mobile quite
| chaotic and doesn't seem to follow the actual Game of Life rules.
|
| Really cool on desktop here!
| remram wrote:
| Yeah, on mobile even if I turn the speed way down, it skips
| over many steps making everything unrecognizable. It lowers the
| FPS but still skips just as much between rendered frames. Seems
| like a programming error.
| danbruc wrote:
| I can wrap my head around zooming in - conceptually you run any
| life simulation you want, i.e. a base level game of life, and
| then recursively decompose each cell into the 222 cells of a OTCA
| metapixel.
|
| Zooming out I find much harder to make sense of. What does it
| look like if you zoom out infinitely often? Is there some limit?
| If you take an empty universe with all cells dead there seems to
| be nothing at first, but at closer inspection there is of course
| still a lot of stuff going on in all the dead metapixels making
| up the empty universe. After zooming in a couple of times it
| would be hard to tell that zooming out a bit would leave you with
| an empty universe. And it would not have to be an empty universe,
| it could be anything.
| phoe-krk wrote:
| > What does it look like if you zoom out infinitely often?
|
| Make a sharp backwards roll of your mouse wheel and see for
| yourself - it'll turn on the autopilot mode.
| edwinjm wrote:
| But how long do you have to wait to know it's infinite? ;-)
| consumer451 wrote:
| I am really enjoying this full screen with auto-zoom-out at
| the slowest speed setting. If the controls faded like media
| player controls do in full screen, I would be perfectly
| satisfied.
|
| This inspired a bit of awe in me, especially after I learned
| from another comment here that each game is unique.
|
| edit: Oh wow, of course it's last month's Bubbles creator.
|
| https://news.ycombinator.com/item?id=33566924
| danbruc wrote:
| Already tried that, does not zoom quickly enough to reach
| infinity before I have to go to bed.
| phoe-krk wrote:
| I don't think you need to reach infinity to realize it's
| OTCA metapixels all the way down and OTCA metapixels all
| the way up. In a way, it just loops forever.
| danbruc wrote:
| That is the question I am asking. Zooming out finitely
| often gives you metapixels but what happens in the limit
| at infinity? Just like increasing x by any finite amount
| will always leave you with a small positive number for
| 1/x but in the limit you get 0.
| intrasight wrote:
| Who else had this experience.
|
| Cool - Game Of Life on my phone. Some pretty cool patterns.
| Recursion? Don't see it. But look - I can zoom out. Wow, that's a
| pretty large pattern. Oh shit!
|
| I've not delved into the code. But I am assuming that this is a
| static model and not actually doing the GOL calculations. Is that
| correct?
| [deleted]
| graderjs wrote:
| That is so cool! This person really is a freak, in good way. They
| also created their own physics engine, which was featured here a
| while ago: https://github.com/saharan/OimoPhysics
|
| But it would be cool if we could change the GoL parameters and
| see how that affects the infinite fractal recursion!
| yshklarov wrote:
| The author says:
| (https://twitter.com/shr_id/status/1602691898162184192)
| In the beginning I didn't think it was possible without cheating
| something but finally found a way to "build everything perfectly"
| Due to the inifinite recursion, each level is aperiodic for both
| space and time, and you'll never see the same pattern no matter
| how much you scroll
| fractal618 wrote:
| That is beautiful
| NiceWayToDoIT wrote:
| Mesmerizing, I am interested for the code and how is this built.
| When I said build the entire fractal concept is it emergent or
| deliberate? Who did author envisioned this>
| Cort3z wrote:
| I LOVE how you can set it to scroll forever by itself. This
| website is a true work of art.
| brunorsini wrote:
| I love that too, only wish auto-scrolling speed could be
| adjusted (would like it to be slower).
| thunderrabbit wrote:
| For me there's a horizontal slider in bottom middle of the
| screen which controls the auto-scrolling speed.
| danbruc wrote:
| I did not realize that. If you are not auto-zooming it
| seems to just control the simulation speed but while auto-
| zooming it effects the speed of the zoom. That probably
| makes sense at a deep level because as you zoom in and out
| the simulation speed has to be adjusted to make the new
| level run at the same speed as the old one.
| raldi wrote:
| How do you do that? I only see the speed slider, and it doesn't
| seem to respond to keystrokes.
| fallingfrog wrote:
| This is the coolest thing I've seen in a long time!
| fifilura wrote:
| Mesmerising! And so fast!
|
| @JWZ, can we have a xscreensaver for this please!
| albert_e wrote:
| Has anyone tried this in a 3D cell distribution instead of 2D
| arrangement of cells with similar rules?
|
| Does it simulate life or universe at any scale?
| wufufufu wrote:
| I am enjoying this. Is there a way to pause? I have to verify
| each cell just to boggle my mind at the fact that everything is
| adhering to GOL rules.
| calebm wrote:
| Beautiful
| p-e-w wrote:
| I guessed almost immediately how this is implemented, but I'm
| still amazed by how fast it is.
| anubhav200 wrote:
| WOW
| Aardwolf wrote:
| If you zoom in, you get lower and lower level OTCA metapixels
| forever, very straightforward.
|
| But if you zoom out, at any time it could be possible for them to
| compute a different pattern. But it's OTCA metapixel all the way
| up. What is being computed, other than more OTCA metapixels? What
| is being computed after infinite zoom out steps?
|
| Makes me question the meaning of existence!
| symmetricsaurus wrote:
| Very smooth. Wonder if there are any optimizations like Hashlife
| going on? There's a lot of spatial redundancy to exploit.
|
| https://en.wikipedia.org/wiki/Hashlife
| space_fountain wrote:
| It need not do any simulation at all. Representing this as an
| animation should be very doable. Probably 2^4 animations (1 for
| each potential state of a cell) then you just need to tile the
| animations and replace sub pixels as needed. So you start out
| showing a zoomed in view of the animation. As you zoom out you
| tile based on the animation shown one layer up. The exact
| tiling is probably tough, but easier than actually simulating
| and keeping tons of state
| Cthulhu_ wrote:
| I've also heard that Game of Life can be implemented as a
| pixel shader, so your browser gets to use all that dank GPU
| available.
|
| But a looping animation makes sense too.
| symmetricsaurus wrote:
| The OTCA metapixel has 2048x2048 cells and a period of 35328.
| That's a total of 18.5 GB. And that's not counting the
| different states depending on neighbors and on-off-
| transitioning state.
|
| Even with compression that's a lot of data.
| psychphysic wrote:
| I had a sudden dawning zooming out that really felt like a
| psychedelic "insight".
| sceptically wrote:
| Loading...
___________________________________________________________________
(page generated 2022-12-14 23:02 UTC)