Full Stack Dev
1 week
I wanted to design an application that would allow a user to create 8bit-style graphics using 3D voxels in an interactive environment. The first step was defining the core feature of "painting"— how would the user draw in the first place? I ultimately wanted to make an app where the user could effectively enjoy the following features.
Most of the features were relatively straightforward in implementation. The finished program allowed for the user to draw in a free environment with few restraints. However, there were a few logical roadblocks in the implementation. To avoid issues later on, I created a rough mockup with all the features I wanted to include so I knew exactly what I needed to design for and build. ​
After creating a mockup of the program's UI and general style, I had to figure out how exactly to implement drawing functionality in the way I had originally desired. The primary issue was how to handle blocks that had already been drawn. Because the user would presumably draw over these blocks to add detail and color, it was important to find a solution to account for this. ​
I decided it would make most sense to have different modes: 2D and 3D drawing modes. The 2D mode would allow users to draw on the canvas with voxels and overwrite the color of preexisting blocks they draw over, while the 3D mode uses a ray tracer to determine which face of a preexisting block is being hovered on so that the user can draw on top of the block in 3D. ​
The final result was a lightweight program that allowed users to draw using 3D voxels, so the main goal was met. However, there is still room for improvement. The UI of the program is still quite rough due to the short project timeline.
The 3D and 2D drawing modes are also not distinguished in the UI and are controlled by a toggle handled via keyboard bindings. Overall, here are some possible improvements for a future version of this project:
Overall, this project was a great learning experience. It allowed me to equally balance functionality and user expoerience, as well as teaching me how to bring big ideas to life as prototypes in the Unity engine. Thanks for reading!