Mastodon monoculture problem
At long last, we've created a Torment Nexus, and the people are already lining up for it.
https://torment.nexus/@alm@mastodon.online/110353392302644978
ai bullshit
There have been many words written lately about Neal Stephenson and how he "predicted the forthcoming metaverse" in Snow Crash but the Stephenson prediction I can't stop thinking about is from 2008's Anathem about how generative AI almost destroyed their internet. Most of the jargon doesn't matter just know that "reticulum" means internet and "Ita" are IT support. 🧵
Switched to map and contour generation from quad tree cells. Those are now correctly represent terrain transitions, not only passable regions.
The thing is more costly to construct, but the map filling is much faster than sampling each tile corner - less duplicate work and big chunks of uniform terrain are naturally aggregated and can be dispatched as one job.
Out of 1M tiles only ~75k are 1-tile transitions that are processed sequentially (presumably while some bigger jobs are chugging in background).
I really should do that final tagless retargetable encoding for SDFs and run those on GPU instead.
Okay, the numbers level out (with a slight advantage for the Free) when its sampling function becomes complicated (a primitive SDF vs a stack of 100 primitives). I'm now more sure that I'm measuring some right thing, and not some laziness fluke.
Added bisimulation tests for the Free re-implementation (found 2 bugs ) and got to benchmarking the thing.
I was surprised that a round dance of 3 functors and a ping-pong of functions that pass control around is not only "a little slower" than a tight package, but instead twice as fast!
I had a late night thought that my sparse quad tree structure can be split up into a bunch of functors.
And that is indeed the case:
type SparseQuadTree a = Free Quad (Sparse (Range a))And the scaffold/compact functions are “bring your own algebra” now.
Replace Quad with Binary or Octal and you’d get the matching structure.
Going from a dense (but lazy) scaffold to sparse states that in type:
(a -> Sparse a) -> Free s a -> Free s (Sparse a)And the decider is a simple function that isn’t concerned with structure at all, making it reusable.
Awww yisss! Everything* I wanted feature-wise from this tileset:
- Map declared in Multicolor SDF (lava is the base layer, everything else is boolean'd together)
- 4-corner Wang tiles extracted from TileSetter project (no, I didn't do those 96 tiles by hand) (package pending)
- Per-tile attributes in the "free" vec4 slot. Here - tile speed (also used for passability).
- A* path-finding with per-tile travel costs (the truck on the screenshot prefers flat terrain as ridges are slow to crawl).
* I have unused alternative biome tiles... to spice up the landscape 😏
Toots as he pleases.