To INFINITY and b e y o n d !
Now the lattice develops as you approach, adding chambers ahead of you using chambers that you've left behind.
Your processors only have to manage 16 total chambers instead of XxYxZ chambers for an XxYxZ sized lattice.
So better frame rate and an infinity of chambers!
PG:-------------- 👉 https://www.babylonjs-playground.com/#USDWIJ#5 👈
For challenge, try to make your way to an exit -- exits are at grid coordinates that are divisible by four: [4, 4, 4], [40,-12,8], etc.
Another challenge: try exit a chamber and return through a different tunnel.
The Code:
My goal was to make a regular labyrinth: uniform sized and spaced chambers with tunnels connected to each nearest neighbor. To avoid sight-lines that extend beyond neighboring chambers, I based the chambers on the tetrahedron. The tetrahedron has four faces, none of which are parallel. Actually, I used the truncated tetrahedron which has hexagon instead of triangle faces. I extended the hexagons to form the tunnels.
[Some of the code is kinda complicated and the commenting is rather sparse: I need to develop vocabulary.]
The following may help.
Some interesting characteristics of this tetrahedral lattice:
Adjacent chambers are mirror images.
The absolute values of the components of a vector between neighboring chambers are equal (opposite corners of a cube).
So with a grid increment gi, a chamber located at [a,b,c], its four neighbors would be at:
[a-gi, b+gi, c+gi],
[a+gi, b+gi, c-gi],
[a-gi, b-gi, c-gi],
and [a+gi, b-gi, c+gi].
Since neighboring chambers are mirrored, the signs of gi must be reversed for alternate chambers. (PG lines 166 - 178)
If the grid increment gi = 1, as it is in the PG, the chamber grid coordinates will all be even or all be odd:
[even, even, even] or [odd, odd, odd].
See nearestLatticePoint() (PG lines 200- 230)
__________________________________________________________________________
Please come back with your questions and suggestions! 💡 👉

@Dad72
Oops! Here it is with much smaller lattice: https://www.babylonjs-playground.com/#USDWIJ#4
My newly acquired refurbished computer has a bit more oomph than I thought!
Edit: I think I'm seeing a mistake -- when viewing the labyrinth from outside, I think I'm seeing two interlaced but unconnected labyrinths. This would also apply to the PG in the OP.
Hopefully not apply to the PGs in my later posts, since they use a different method to generate the lattice. 😐
Edit 2: Fixed it by replacing lattice generator with recursive version.

(Installment one is embodied at https://jounce.space/zoom (infinite field of polyhedra).)
This is installment two towards infinite 3D Terrain.
"Exterior" shot:
Interior shot:
This is not yet "infinite". For now it's a limited 3D lattice.
Go to https://www.babylonjs-playground.com/#USDWIJ#4 and make your way to an exit for an over-all view.
For all the effort I've put into this, I'm now at a loss over what to do with it. Suggestions?
A technique looking for an idea!
Happy Holidays! 🌲 🎅

After
var camera = new BABYLON.... try adding:
camera.minZ = 1;
camera.maxZ = 44;
Also you can add
camera.fov = 2.7 (or something)
to widen or narrow the frustum.
Look over the properties and methods in http://doc.babylonjs.com/api/classes/babylon.camera#maxz
Here's an index of BABYLONjs classes, etc. http://doc.babylonjs.com/api/globals
It's not the easiest thing to browse, but along with GOOGLE I find it valuable.
Good luck with your projects! ☘️

For "camera pan away from a character until that character hits the edge of the screen" try
while ( camera.isInFrustum( character )) { pan }
or while ( camera.isCompletelyInFrustum( character )) { pan }
From the first page of "google babylonjs frustum":
https://doc.babylonjs.com/api/classes/babylon.frustum
https://stackoverflow.com/questions/2866350/move-camera-to-fit-3d-scene

Hey @JCPalmer & @DylanD, well surprisingly, googling "webm to gif" led me straight to it.
But issues:
I repeatedly ran the PG with different time values in recorder.startRecording("test.webm", 2)
in order to eliminate the jump as the vid cycled. (using the converter at https://convertio.co/webm-gif/)
Ended up exceeding their 10/day limit.
Then I went to https://ezgif.com/video-to-gif where they had editing options (trim by frame numbers) for the resulting gif.
I also used those editing options to remove alternate frames to shrink file size to fit avatar requirements.
Good luck, I hope it goes smoothly for you! 😃
Edit: one other issue:
to make the avatar, I put the playground code in a local .html where I set the canvas dimensions to avatar size (128px x 128px).

I keep changing my avatar. A character defect? 🤒
Anyway I created it using BJS:
https://www.babylonjs-playground.com/#SVZL1I#3
https://www.babylonjs-playground.com/#SVZL1I#4
I needed to take a break from long-term projects, so I did this instant gratification stuff. 😁
Take a look, they're short, fun, & tinkerable!

Watch this speedy little app zip through n-queens solutions! N-Queens at Jounce.Space
Simple javascript, no dependencies.
A classic computer science exercise, the n queens puzzle is the problem of placing n chess queens on an nxn chessboard so that no queen threatens any another. Thus no queen shares a row, column, or diagonal with any other queen.
My method does not use recursion and a global variable represents the chess board. [The CS professor frowns.]
Mesmerizing!
👀 🎃 😃