3D
Turning 3D models into oscilloscope audio — projection, hidden-line removal as a sonic optimisation, path routing, and vertex budgets.
3D is just projection
There is no third dimension in a stereo signal, and there does not need to be one. Compute the shape in 3D, project it to 2D the way a camera does, and route the projected X and Y to left and right. What you see is the shadow, and the shadow is a perfectly good drawing.
This generalises upward without any new machinery: compute in four dimensions, project down to three, then to two. The mathematics does not care, and 4D figures are a legitimate and under-explored corner of the form.
Two practical notes:
- Transform order matters. Translate-then-rotate and rotate-then-translate give different results — the first orbits, the second spins in place.
- Rotation is your best friend for legibility. A static wireframe is hard to read as a solid object. A slowly rotating one is immediately legible, because the motion carries the depth information that the flat projection lost.
Hidden-line removal is a sonic optimisation
This is the most underrated idea in the whole technique set, and it is the reason to turn hidden-line removal on even when you like the see-through look.
Removing occluded and back-facing edges does not just clean up the picture. Those edges were in the audio, and removing them removes them from the waveform too. One lap of the figure now covers less distance, so:
- The pitch drops — often to a half or a third of what it was.
- The object's usable frequency range widens, because you can now draw it faster before it gets too high, or slower before it flickers.
- Every remaining line gets brighter, because the same beam time is spread over less path. See Brightness.
- Corners get sharper, because you freed up points in the budget. See Fidelity.
Four benefits from one toggle, only one of which is visual.
In OSC-1 this is Hide Hidden Lines under Import Shapes → 3D Import, on by default. Turn it off and on while a model rotates and listen as well as look.
How it is done, in increasing correctness
Worth knowing because the approaches have visibly different failure modes:
- Distance falloff — hide geometry beyond a depth threshold. Cheap, ignores view direction, and fails whenever the object is not conveniently arranged front-to-back.
- Normal test — hide polygons whose facing exceeds roughly 90 degrees from the viewer. Solves backfaces properly. Does not solve one object occluding another.
- Depth probing — for each edge, test whether anything is in front of it. Solves backfaces and inter-object occlusion, and can split an edge so the visible span survives while the hidden span is dropped. This is what OSC-1 uses.
Path routing: cover every edge
Once you know which edges to draw, something has to decide the order. The beam draws one continuous path, so the ordering determines how much time is wasted travelling versus drawing.
This is commonly called the travelling salesman problem. It is not. TSP asks for the shortest tour visiting every vertex. Drawing a wireframe asks for the shortest route covering every edge without lifting the pen — the route inspection problem, sometimes called the postman problem.
The distinction is not pedantry. A vertex-visiting framing is happy to leave an edge out; an edge-covering framing has to draw all of them and minimises the doubling-back required. The second is what preserves a wireframe's fidelity.
Path Optimization in the 3D Import panel does this ordering. Leave it on.
Vertex budget
Model complexity is a hard gate, not a soft one. Past a certain edge count the figure cannot be drawn in the time available and the result is a mess, a blank, or a very low, very ugly note.
Budget deliberately:
- Decide the brightness before the detail. Edge count is a light budget, spent before you touch anything else.
- Cut what is not seen — hidden lines first, then decorative geometry below the resolution you can actually achieve.
- Prefer fewer, longer edges to many short ones. The beam's travel between segments is the expensive part.
- Watch the readouts. The point count and refresh rate tell you when the budget is gone.
The continuous-squiggle alternative
There is a different approach worth knowing: rather than drawing edges, walk the surface from nearest point to nearest point, producing one continuous squiggle that suggests the form.
Because it has no discontinuous jumps, it sounds notably smoother than a wireframe — no fly lines, no hard transitions. The catch is that on a deforming or rotating mesh the path can change substantially between frames, so it jitters. It is best on static or slowly changing forms.
Related
- Hidden line removal makes your 3D model sound better — the illustrated version
- Converting a 3D model to oscilloscope or laser art — full walkthrough
- Animated GLTF to XY audio and laser art — the animated version
- 3D Import — the panel reference
- Fidelity — the budget this all spends