I have a habit of building displays that are just a confusing flickery mess on video.
The slat based collimators are such a pain, I've decided to go for it and try making lenses instead. I think a 3D printed mould will be good enough - the layer height is very much smaller than the LED size, and a bit of scattering is actually desirable. I'm printing this vertically so the lens profile gets the high resolution. It's going to be precarious when it reaches the top.
I had to turn the print 90 degrees - it wiggles rapidly doing the lens profiles, and when that was on the bed slinging axis it shook the whole room. It's a lot less dramatic when it's just moving the head.
Bah.
I think I can live with it. I printed it vase mode for speed, so I was expecting it to need a stiffer structure to hold it flat.
I did have another swing at it. The first one I’d hoped to slip intact around a stiffer carrier. This one I made wider, and corrugated, so it printed better.
I’ll chop the front off that, and stick it into this to make the mould.
How can I be out of silicone?
Following a series of poor decisions, I now have both a mould and a vacuum chamber coated in uncured silicone.
Well I got a lens out of it in the end. It does make it more directional, but there’s more light off axis than I need.

I went back to the slats, and finally got all the bits hooked up together.

It sort of works?

You can see what's going on a bit more clearly with a simpler shape. It looks better when you can use both eyes on it!
The depth is smeared more than I want because the collimators are too shallow (because I don't like prints that take more than 16 hours to complete). I want to make them tighter, and spin the whole thing faster to compensate.
The nice thing about these LED panels is that they're very high framerate (and cheap!). I'm updating these at 1.5 KHz - with 3 of them in a ring, that's 4.5 KHz. Just driven in software from a (somewhat dizzy) Raspberry Pi.
Just realised that I can increase the resolution by progressively offsetting each panel by 1/3 the LED pitch.
That should contain or possibly create any shrapnel.
Making parts for this has been a real saga, so while I wait for a faster printer to arrive I tried removing the collimators and running it as a swept volume display. Now I’m thinking maybe that’s what I should have built in the first place.

The thing I've been trying to make creates its 3D effect by displaying a whole different view in every direction, which means it can handle occlusion and fancy lighting at the cost of vertical parallax.

To turn that setup into a swept volume (where it's lighting up the LEDs according to where they are in space - full 3D, but glowy and transparent) I keep everything but the collimators, and just render each view with the near & far clip planes set really close together.

I'll probably make two displays now - finish off the autostereoscopic one, but then rearrange the geometry so that I can sweep through more than just a thickish-walled cylinder.
A quirk of these LED matrix panels is that they simultaneously update two rows at once, separated by half the panel. So on a 64x64 panel, you update rows 0 & 32, 1 & 33, 2 & 34 etc.
However, if you want to sweep one around an axis, you ideally want to update the outer LEDs at a faster rate than the inner ones, and this layout prevents that.
Inaction shot.
The Ring of Power from Harry Potter.
I’ve mentally moved on from this design, but I went ahead and built it to the point I can call it finished.
The advantages of this approach - occlusion and view-dependent lighting - are undermined by the fact that too much of the colour depth is sacrificed to hitting the necessary framerate. The sort of simple scenes it can display could be displayed better by a swept volume.
Most of the time we don't move our heads up and down very much, so the lack of vertical parallax seemed like it wouldn't be a big limitation. But one of the situations where we do move our heads quite a lot is when presented with a neat little 3D effect sitting on a desk.
Anyway, the new display is going to be amazing.
I even remembered to take some pictures before I put it all together.

Scouring Aliexpress for LED panels for the new display, and it seems the higher resolution ones tend to be flexible. I spent a while investigating developable surfaces* to see how I could take advantage of this, but couldn't come up with a layout that offers any advantages over a flat square centred on the axis. Seems disappointingly pedestrian.

(*Twisting a sheet of paper in my hands)

I'm arranging it as two rectangular panels arranged with their bottom edges touching on the axis, which lets me update columns at the same radius simultaneously. The outer columns need to be updated more frequently than the inner columns, and one of the nice things about these LED panels is that you choose your own update strategy - you're not stuck with scanning a whole frame each time.
If the lines were completely independent, you could evenly scan a sector with half the number of line updates compared to updating the whole frame. As it is, each line has to be updated in parallel with one that's half a panel further down, so it ends up taking 3/4 of the line updates instead (because some updates have to update the outer line while scanning out black to the inner line).
Display 1 currently serving as convenient rotating testbed.
The thing about voxels is that even when they’re not working, they look cool.
New display, new panels. I'm driving these ones using DPI on a Raspberry Pi, which is a handy way of wiggling 24 GPIO lines with precise timing and no CPU involvement.
The results I was getting with the new display were so much better than the original that I went back for another pass at it. Turns out there were a couple of stupid bugs limiting the refresh rate. The colour depth is now vastly improved.
This is still using software bit banging. I'm going to switch it to using DPI, but the current interface board wasn't designed with that in mind, and the GPIO mapping doesn't put all 3 displays on valid DPI pins.

If you squizz your eyes at this, you can see the 3D.

If you have difficulty converging it, it helps to make the image really small and gradually enlarge it once your eyes have locked on.

I had the opportunity to give some live demos of this thing recently. It went over well, but the noise was a real killer.
I've reworked it to use a belt drive instead of the horrible 3D printed gear - before, it screamed; now it whirrs.
The new platform now has enough bits to display an image while spinning.
I massively overestimated how much lead would be needed to counterbalance the small amount of slightly off-axis electronics.
Slowly turning up the dial at arm’s length.
It would be convenient to address the voxel data as a stack of horizontal slices, because that's how it's exported from lots of existing tools. I have to rotate it 90 degrees though, because scanning out is faster if each column's data can be addressed as consecutive bytes.
It's a small change, but there's a 6.5x difference in speed between the two orientations, which directly translates into voxel density in the final output.
Trademark flickery mess
I really need to get a hobby where missing my framerate target doesn't make me physically nauseous.
Help me Obi-Wan Clownobi
I am having so much fun with this thing.
I've implemented parts of a content pipeline for rendering a scene on the PC and streaming it to this display, but writing video streaming code is so much less fun than playing with voxels that it may take a while to finish.
Here, I've stored the animation uncompressed on the display itself, and am updating it as fast as the Pi's SD card can handle. (Not very fast.)
My target for this display is 600 rpm - lower than that and it's too flickery; higher than that and I can't refresh fast enough to get 400 voxels around the circumference without dropping to 1 bpc. I'm nudging 400 rpm here, and it's still pretty unfilmable and absolutely terrifying to be close to. I have to decide whether the overall approach is worthwhile enough to start spending money on aluminium and polycarbonate.
Slightly higher rpm, slightly longer shutter.
The other problem I have is that to sell the 3D effect I need to move the camera around a lot, so I'm going to have to put some effort into building a studio backdrop.
Incidentally, those models are from Cheello's voxel Doom: https://www.moddb.com/mods/doom-voxel-project/addons/voxel-doom - It's a lovely mod, and makes Doom feel more like my memories of playing it than the real thing does.
Voxel Doom v. 1.0 addon

Voxel Doom is an ambitious new graphics mod that replaces all monsters, weapons, props and items with fully 3d voxel models. It currently replaces all monsters from Doom 1. Doom 2 monsters will be completed in the very near future.

ModDB
Latest flickery mess
I had a panel left over, and I thought I should have another stab at an oscillating display. I wanted to give it an undulating motion and came up with what seemed like a nice linkage, but the end result looks like it was designed by Trevithick.
It's a nice fluid motion on the panel, but overall it doesn't bring me joy.
Shiny! (Maybe too shiny. )
Guess I’m doing a cone next.
There must be at least 6D here.
I rewired the back of the panel to tidy up all the loose flappy cables. It now manages 600 rpm, which is not too flickery.
I mean, you should have seen it before.
In the continuing quest for higher rpm, I've moved the controller down below the screen and across the axis of rotation. It's a lot harder to get at if I need to rewire anything, but it does improve the balance.
It feels as though I'm endlessly rebuilding it, for diminishing improvements. But in the most recent rebuild I finally solved a mystery that has been bugging me. When the display had been running for a while, it would quite abruptly lose balance and start vibrating. After the last occurrence, it was never quite the same. On stripping it down I found this.
@ancientjames Sorry for the fav spamming, but saw this in the public feed and had to check the whole thread!
@ancientjames
This is the coolest thing I have ever seen. @maddiefuzz have you seen this
@ancientjames that looks really superb.
@ancientjames
Are the scanning effects an artifact from the phone camera or does it really look like that? Because this glitch box has won my heart, its beautiful
@jonny Mostly the camera. That was a particularly long exposure, because it was running at low(ish) rpm. Part of the drive to spin it faster is to make it filmable.
@ancientjames wow that sphere looks incredible
@gsuberland @ancientjames that sphere looks very credible. You should listen to the voice in it that tells you how much power you can gain by following the words and will of the dark lord..
#palantirvibes
@gsuberland I'm so happy with how it turned out!
@ancientjames i want to play Doom on this
Voxatron 0.3 Release Trailer

YouTube
@ancientjames
Are the individual pixels this visible in real life too ?
If so, maybe a bit of cloudiness in the glass of the sphere would help diffuse a tiny bit the light, making it more… full.
@Cqoicebordel They really need to be diffused at the point where they're emitted, which would also help a little with the dimming along the direction of view. I haven't yet come up with a good approach for that.
@ancientjames
Just something silly : have you tried to cover the displays with some tracing paper ? At least, it's a cheap and easy test :)
@Cqoicebordel yes, and frosted privacy films. What I really want is a coating that will form little beads on each LED.

@ancientjames
I feel like I've seen this somewhere : a sheet of rigid plastic, with regularly spaced tiny magnifying glass in it. But I can't remember where. And they weren't Fresnel length, just clear domed plastic bubbles.

In another way, there is a liquid latex thingy which is called "anti slip for socks". It's a liquid, easily applied, and when dry, it's mostly transparent. It could work.

@Cqoicebordel @ancientjames some kind of nail varnish maybe?
@ancientjames The stuff they use to form beads on the rel. new WS2818 LED strings for LED curtains (like this: https://aliexpress.com/item/1005006141398254.html) would probably be perfect, only I can’t say what it is. It diffuses very nicely, and is certainly applied as a drop of liquid stuff at production, but cures to a hard almost glassy bead.
@luz @ancientjames It is IP rated Silicone glue.
@ancientjames What's it look like in the dark?
@jeffluszcz I'll find out in about 3 hours.
@ancientjames the paint shop has a machine like that for shaking the cans!
@ancientjames That could make some interesting long exposure shots.
@ancientjames This is a wild machine - incredible!
@Jo It's hard to get across on video, but it's eye-popping in the flesh.

@ancientjames I’ve been watching your project in fascination for a while now, without knowing a heap about it. Thanks for your selfless exposure to masses of dangerously whirling homebrew plastic and electronics in the name of cool posts 🫡

Out of curiousity: what is the current limiting factor for the rotation speed? Concern for the strength of the panel?

@tom_armstrong The balance in general is quite poor - the design is fundamentally asymmetric, and relies on lumps of lead to keep it from shaking itself apart. I've been pretty haphazard in my approach to getting that right. It also flexes. There's one bearing under the turntable, and a bunch of off-axis weight above it. It has a tendency to lean outwards with increasing speed, which I've tried to address with a counterweight sticking out above it. It needs to be stiffer overall.
@ancientjames Oh yeah. Balance does seem like a huge challenge, lacking access to commercial-scale fabrication facilities, and/or the means to get things built to a custom spec (or so I would imagine, as a near-total electronics and hardware neophyte)
@ancientjames Very impressive! The soundtrack moves it right into spacepunk sci-fi territory.

@ancientjames Looks amazing! This whole project has been one of my favorite things to follow here.

Any chance of a video of doom guy?

@ancientjames

It's a shame all the Star Wars holochess models appear to be untextured for 3d printing

@ancientjames proof the moon landing was fake
×
In the continuing quest for higher rpm, I've moved the controller down below the screen and across the axis of rotation. It's a lot harder to get at if I need to rewire anything, but it does improve the balance.
It feels as though I'm endlessly rebuilding it, for diminishing improvements. But in the most recent rebuild I finally solved a mystery that has been bugging me. When the display had been running for a while, it would quite abruptly lose balance and start vibrating. After the last occurrence, it was never quite the same. On stripping it down I found this.

That's the mount for the slip ring. A cylinder carrying a couple of copper bands fits over the pillar, and an M4 bolt goes own the middle to hold it all together. It has very clearly become bent, and without any signs of cracking. Presumably, as it spins, it heats up enough to soften the PLA, and the spring loaded brushes push it out of alignment.

I've reprinted it in ABS; going to see how well that lasts.

Pi 4 model A
I continue to fail to shoot footage of it that does it justice.
This feels like a good match of style and content.
I’m now suspicious of all the PLA parts. The little pit with the Pi in it is getting very warm.
kind of feels like it needs monsters?
Voxel Doom

YouTube
I do like an ample window and natural light, but it makes it hard to see the leds. Hence this pirate astronaut.
Doom running at a larger scale. Easier to make out what's going on, harder to see what's shooting at you.
https://youtu.be/bRe1OSkeiQg
Voxel Doom

YouTube
This display works by spinning a matrix display rapidly about a vertical axis, lighting up each LED as it passes through part of a 3D image. The way you update the displays has a big impact on the quality of the image.
In this gif, each dot represents a column of LEDs - we're looking at the device from above. Here the panel is treated like a 2D display which just happens to be moving. Each scan line is repeatedly visited in turn, sweeping out a set of slices where the image can be displayed.
If you turn the panels 90 degrees so their scan lines are now columns, you can do a bit better. The update doesn't have to be sequential - instead of stepping one column at a time, you can skip a few each time. As long as you pick a number which is coprime with the number of columns, and you wrap around once you go past the last one, you'll still visit each of them but spread out more evenly throughout the volume.
The real improvement comes when you adjust the update rate for each column to match the length of the track they have to sweep out. Instead of wrapping around when you reach the last column, you wrap around when your counter reaches the square of the number of columns, and you update the column corresponding to the integer square root of the counter. This gets rid of the bright dense region in the middle, and adds more updates out at the edges making them less sparse.
In practice it's complicated by the fact that these panels update two lines at once. Every time you update a column in the outer half, you're also updating one in the inner half. I couldn't find a simple procedural update strategy to spread these evenly, so I ended up generating a lookup table for it using simulated annealing.
First test of the new design, and already I’m happy. Quiet, high refresh rate, and doesn’t feel like it’s seconds away from embedding itself in my face.
Dynamic balancing using a tray of marbles and iPhone slowmo.
These guys.
- YouTube

Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.

So many complaints about the framerate on that last video, so I decided to upload one with a shorter exposure and more flicker. But I still ended up keeping it below 30 fps, so I suspect the complaints will be about both framerate and flicker. Just have to hope the algorithm doesn’t go so large on this one. https://youtu.be/gBfclb9hXCI
- YouTube

Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.

New dome!
There are many advantages to moving to smaller panels in the new design (momentum etc), but the price drop going to a 300mm dome from 400mm would be justification enough.
@ancientjames love everything about this project, so inspiring. You probably already have a good voxelizer, but if you need another, I wrote this: https://github.com/Forceflow/cuda_voxelizer
GitHub - Forceflow/cuda_voxelizer: CUDA Voxelizer to convert polygon meshes into annotated voxel grids

CUDA Voxelizer to convert polygon meshes into annotated voxel grids - Forceflow/cuda_voxelizer

GitHub
@ancientjames I can’t stop thinking about this display. Even if it’s bare bones please document this. It’s so beautiful.
@ancientjames What is the actual framerate of the 3D display? i.e. how much time between re-draws of the same point in space?
@ancientjames That's spectacular. I hope to see it in person one day
@ancientjames that‘s bonkers. amazing work!!
@ancientjames I love seeing the updates to this project. One day you should get hold of a 3D camera rig to film it with depth - it's so hard to imagine how it looks from these video clips & images. I hope you end up commercialising it!
@ancientjames I'd like to write your spinner thing up for Hackaday, especially the Doom video, cos who wouldn't like that? Oh, and it runs doom therefore I MUST write it up. Do you have any more concrete details like construction pics, schematics? A github? A website? Looking forward to some details!
@ancientjames Looks amazing! Can't wait to see more!
@ancientjames
It looks like the Myst Imager!
@ancientjames I love how persistently you stay with the project and keep iterating. That’s how real progress is made. Are you think of selling these eventually?
@tommythorn I don't see it as a product, but it may end up as an installation.
@ancientjames Just read through most of this thread, your work is great! Loving watching the evolution of it.
@ancientjames could you add radar indicators to show the direction of enemies?
@ancientjames dump question, but why not having a 1st person view?
@raspberryswirl that would be a good fit for the stereoscopic display, but on this one everything has to fit inside the volume and 3rd person seems natural.
@ancientjames I am also making a kind of voxel display, but it is the mirror that is rotating, not the led screen. Detail: https://mastodon.social/@hikaricai/112274863270477644
@hikaricai @ancientjames oh, nice! Do you have any more pictures?
@ancientjames some detail is on https://hackaday.io/project/194714-volumetric-display-using-rotating-mirror. I do not have a 3d printer so currently this mirror based voxel display is made by hand, with three p2 64x64 led displays. And of course the view angle is so limited that I can only view from the top. Later I am going to transplant nds emulator to paly real 3d game.
Volumetric Display using Rotating Mirror

Volumetric Display by periodically changing the optical path with mirrors

@ancientjames delta T of 11 degrees doesn't sound as "very". Is there a fan to suck away the hot air?
By the way, love the project!
@JHBonarius That's not where the Pi is - I just liked the picture.
@ancientjames A picture of a sphere of material with "the pit is getting very warm" had me double take for a moment. DIY Los Alamos vibes.
@ancientjames pretty good pic for an album cover tho
@ancientjames
I wonder if adding weight to the rotating part would help :
- Using metal, it would dissipate heat more easily.
- Would help the stability, if the weight are movable.
- Would stabilize the rotating speed : it would be harder to start and stop, true, but it will avoid small variations at full speed.
@ancientjames is it loud? This is the coolest physical object I’ve seen all year.
@ancientjames ist there any GitHub repo or something like that. To replicate what you did? that's amazing!!! 🤩
@ancientjames watching this come together and evolve is incredible! Fantastic work
@ancientjames oh my gosh this is BEAUTIFUL! I've seen some kids' toys that use this same sort of display tech, but it's always like 12px high. Your high res version is amazing!