The minicanvas app provides all of the necessary tools to learn how to draw. A unique split-screen interface provides the customer with step-by-step video lessons on the upper-half while the lower-half enables the customer to draw along on a custom digital drawing canvas using their finger.
The customer completes a variety of lessons at their leisure and may save and exit at any time knowing that they will be able to pick up where they left off.
The convenience of this experience enables the customer to learn how to draw without the need for art supplies or workbooks. The provided lessons and tools teach the necessary skills in such a way that they translate to pencil and paper.
There are many paths to learning how to draw. The minicanvas app presents a learning track that can take an inexperienced customer from basic drawing fundamentals through drawing figures and portraits.
In the beginning, the customer is only provided with the tool to draw a simple line, but as their skill improves, more tools like erasing and line opacity are introduced.
Similarly, video lessons start at a basic level with simple and fun compositions, gradually introducing terminology and concepts that culminate with the completion of complex figure poses.
It is a commonly held belief that the ability to draw is a skill you're born with, but minicanvas challenges that assumption by asserting that anyone can learn to draw if provided with the right environment.
The minicanvas app creates a nurturing environment by introducing fun characters and positive reenforcement throughout the customer's journey.
There is never any pressure to draw well or experience a critique. Consistent practice and concept repetition is the best way to learn for a beginner.
We chose to use Unity to develop minicanvas because of its ability to compile to multiple platforms and to leverage its utility as a game engine to power our drawing canvas and create a fun environment.
Using a game engine to develop a mobile application provided a unique challenge for us. We pushed Unity's UI to its limits by creating custom interface controls to produce the desired functionality.
We took special care to ensure performance out of our complex UI and to achieve a consistent interface between iOS and Android across mobile phones and tablet devices.
One of my responsibilities was to organize and deliver the lesson content in such a way that was highly configurable and delivered remotely to the reduce app's size.
First, I established a data hierarchy composted of Units, Lessons, and Steps with their associated metadata like images and video clips.
Next, I created a system where lesson content could be created and tested locally and uploaded to Firebase. The app could be pointed to any desired configuration and it would fetch content as necessary.
This system allowed us to iterate and test quickly by producing builds with different lesson content to test with different groups of customers as well as update lessons remotely without releasing a new build.
Unity provides a video player, but its features are significantly lacking. I developed a custom video player to provide us with additional functionality and create an improved user experience.
The improved video player is able to fetch remote videos from Firebase and preload them so that there is no delay between switching steps within a lesson.
Because of the difference in hardware performance across devices and variability in the quality of the network connection, significant effort was spent to improve seeking through a video.
Finally, a custom interface was created to match customers' expectations of a mobile video player like YouTube.
The majority of my time on minicanvas was spent creating the digital drawing canvas. I leveraged two Unity Asset Store packages: a vector line utility known as Vectrosity and a touch gesture utility known as Fingers. The Procreate app was my guiding light.
Using one finger, the customer can draw a line by dragging on the screen. Using two fingers, the customer can scale, pan, and rotate the canvas.
The line's width and color can be controlled through the user interface. The canvas uses custom textures, end-capping, and point smoothing to create beautiful lines.
I wrote two custom shaders that allow the customer to create erasure and adjust the line's opacity. Additionally, I wrote functionality to allow undoing and redoing lines.
Eventually, I created a layer system that is invisible to the customer that allows groups of lines to be layered on top of other lines. This allowed lessons to have starting content that could be drawn upon. It also improved performance by reducing the number of calls to render changing content on the screen.
Finally, I added smaller utilites to draw gridlines and add other static content like images to the drawing canvas.
As a side project, I developed a technology for the drawing canvas that I call an accuracy map.
Using a target image of the drawing and an image of the customer's drawing, an image consisting of red-yellow-green gradients is produced that identifies areas of the customer's drawing that are or are not accurate.
This accuracy feedback is provided to the user in real-time for each line that the user draws. It results in the ability of the customer to evaluate their drawing and improve areas that are not correct to produce a very accurate composition.
This technology was planned to be put into minicanvas at a later date.
Fabric - Basic metrics, app performance, and crash reports.
Facebook SDK - Basic analytics, attribution, and targeted advertising.
Mixpanel - Analytics, retention, and funnel analysis.
Build Report Tool - App bundle size and asset usage analysis.
UTNotifications - Simple cross-platform push notifications.