How 3D ASCII rendering works
Under the hood, each solid is a tiny 3D renderer. On each frame, the shape's points are rotated, projected onto the character grid and shaded by how much light each surface catches. The brightness of each surface picks a character from a ramp, light marks for dim surfaces and dense symbols for bright ones, and depth sorting keeps near surfaces in front of far ones. That is how Torus Knot passes cleanly over and under itself.
Because the shading is a ramp, the look options change the whole feel. Halftone dots turn a shape into printed dots, Blocks makes it chunky, and Numbers or Binary give it a data-like texture. You can also pass your own ramp with the chars attribute, ordered light to dark.
