Blender adventures

The last few days I focused on trying different animations on our simulation, I also tried to animate a bouncing ball as suggested by Alexis. However as you will see my blender animation skills are very limited, and the ball has some difficulties respecting the laws of physics. Nevertheless I tried with different animations, and it allowed us to discover some flaws/limitations in our program:

With the cat, the voxelization was quite fast, however i tried voxelizing 500 frames of a moving dragon, and I couldn’t finish it because it was way too long. I then found a feature on blender that allows to automatically reduce the number of triangles without ruining the model, which is very convenient because with our display we can hardly see the difference between a high poly and a low poly model.… Read more

Voxelization: the end?

The last two days I continued debugging the voxelization along with Guillaume, now we finally have a clean and fully functioning version with the animation. Turns out most of the problems I had were due to how C++ handles floating values, especially when I need to round them to an int value, which is essential with voxelization. With rounding functions such as int() or floor(), the program behaved differently on my computer and on Guillaume’s so I found a way to avoid using those rounding functions, and now everything works as expected, on my computer as well as on Guillaume’s.

Now we are trying the voxelizer with various animations, but some of them have too much triangles and frames an the process is quite long.… Read more

The program has unexpectedly finished

Yesterday was not the most interesting day I’ve had. While Guillaume was busy implementing the animation, I spent most of the day doing some debugging and rewriting some parts of the voxelization code. Indeed we noticed that on the ppm files generated by the voxelization, some lines and columns when systematically black, even when the original 3D model was supposed to color every voxel. Moreover, on some models the app kept crashing with a segmentation fault. For the black lines, most of the problem lies in the way i round the values in order to decide which voxel should light up.… Read more

Voxelization update

Last time I showed you how I managed to voxelize an obj file and display it on our simulator. However, I had a few issues with the cube, because it wouldn’t detect the vertical faces. This week after battling with geometry for longer than I’d like to admit, I finally managed to add horizontal rays that are orthogonal to each voxel located on the side of the cylindrical grid. As expected, we can now see the coloured vertical faces of the cube:

However, more unexpectedly, even the other models looked better on the simulator, for example the Charmander I used in my previous post:

Without horizontal rays
With horizontal rays

It is quite visible on thin forms, if you look at the tail for example it has much more volume and it more visible on the second version.… Read more

Let me hear your vox

For nearly two weeks now I’ve been working on a voxelizer, to convert a 3D model into an image that can be displayed by LitSpin. The goal of voxelization is simple: we need to display an image on a grid of leds, which means that the input image needs to be divided into voxels (3D pixels), each voxel representing a led.

Our grid looks like this:

The number of voxels corresponds to our desired resolution (20 circles, 128 angles and 32 leds from top to bottom).

The voxelization algorithm consists in tracing rays across the model to detect intersections with the triangles of the model.… Read more