ScriptableObject Data Pipeline
Defines level templates, line-art vector masks, star waypoint sequences, and color palettes as modular ScriptableObject assets including LevelDataSO, BrushConfigSO, and PaletteSO.
Engineering Case Study
A 2D interactive educational coloring, tracing, and drawing game for preschool and early-learning audiences.
Role
Gameplay Programmer
Project Status
Educational Game Prototype
Technical Focus
Touch Interaction, Procedural Painting, Guided Tracing, Pixel Evaluation
Section 01

Section 02

Section 03
This project is a 2D interactive educational coloring, tracing, and drawing game built in Unity for preschool and early-learning audiences. Designed around a physical art-easel aesthetic in a playful classroom setting, the game features guided dot-to-dot line tracing, animated tap-to-fill flood coloring, and freehand multi-touch drawing across diverse template categories.
My work focused on engineering the core gameplay systems and rendering pipeline: building a modular, ScriptableObject-driven level and tool architecture, programming real-time procedural canvas painting on dynamic textures, implementing multi-touch input tracking with undo/redo command buffering, and developing a pixel-accurate color-coverage and boundary-spill calculation engine.
Section 04
The primary challenge was building a high-performance, real-time 2D drawing and rasterization pipeline on mobile and touch displays that executes low-latency multi-stroke painting, flood fill, and live pixel analysis without causing frame drops or garbage collection spikes.
Architect a decoupled, ScriptableObject-driven pipeline to rapidly configure templates, star-tracing nodes, and color palettes without code changes.
Implement a responsive procedural texture painting and flood-fill engine supporting simultaneous multi-finger brush strokes.
Engineer a real-time pixel evaluation algorithm that dynamically computes coloring progress and boundary spill percentages.
Build a memory-efficient Undo/Redo history buffer that caches dynamic canvas texture states without inflating runtime RAM.
Section 05
The architecture relies on a data-driven ScriptableObject foundation and a decoupled component structure, isolating data definitions from the rendering canvas, input listeners, and evaluation logic.
Defines level templates, line-art vector masks, star waypoint sequences, and color palettes as modular ScriptableObject assets including LevelDataSO, BrushConfigSO, and PaletteSO.
Manages active RenderTextures and texture pixel buffers, blitting brush stamps, line-renderer meshes, and animated flood-fill shaders onto the easel surface.
Monitors player stroke trajectory against star waypoint nodes, enforcing progressive dot-to-dot connectivity with snap-to-point assistance and visual particle feedback.
Performs asynchronous pixel-mask comparisons against template alpha masks to continuously calculate target coverage and out-of-bounds line spill percentages.
Section 06
Conceptual gameplay flow based on the supplied ChildGame architecture. It connects touch input, data-driven tool configuration, procedural canvas updates, and continuous accuracy evaluation.
The player chooses a drawing template and an available brush, pencil, eraser, or fill tool.
ScriptableObject assets provide the template masks, waypoints, brush configuration, and authorized palette.
Single or simultaneous multi-touch input is converted into canvas coordinates and stroke commands.
The procedural painting pipeline updates the dynamic texture using brush stamps, interpolated strokes, or flood fill.
Pixel-mask comparisons calculate coloring progress and out-of-bounds spill for live feedback.
Tracing feedback, particles, HUD scores, and command-based undo or redo support the next player action.
Section 07
I engineered the gameplay and rendering subsystems needed to deliver an intuitive, responsive, and data-driven drawing experience.
Created a modular asset pipeline where LevelDataSO stores line-art textures, fill masks, star waypoint vectors, and authorized color palettes, allowing rapid level authoring in the Inspector without scene modifications.
Implemented brush-stamp splatting and line-interpolation algorithms that map touch coordinates to UV space on a dynamic RenderTexture, enabling multiple simultaneous pencils to draw smoothly without jagged gaps.
Developed a multi-threaded pixel evaluation routine that compares canvas RGB buffers against pre-rendered stencil masks, outputting live Color % target-fill and Spill % out-of-bounds metrics in the HUD.
Constructed an Undo/Redo stack using compressed texture delta buffers and stroke command objects, capping runtime heap allocations while allowing full history reversal across pencils, brushes, and paint buckets.
Section 07
Problem
Touch input can produce separated samples during fast movement or simultaneous strokes, resulting in jagged or incomplete lines if each sample is painted independently.
Solution
Map touch positions into canvas UV space, interpolate between samples, and apply brush stamps to the dynamic RenderTexture so continuous strokes remain visually connected.
Trade-off: Higher sampling and larger brush buffers improve continuity but increase texture work, so the pipeline must balance stroke quality with mobile rendering budgets.
Problem
A child-friendly drawing game needs immediate feedback about how much of a target is colored and whether the player has crossed outside its boundaries.
Solution
Compare canvas RGB buffers against pre-rendered stencil masks and expose live target coverage and boundary-spill values to the HUD.
Trade-off: Pixel analysis provides useful precision but can become expensive on large textures, making efficient buffers and appropriate evaluation strategies important for touch devices.
Section 08
Method: Trace through star waypoint sequences using slow and fast touch movement.
Result: The evaluator should track progressive waypoint connectivity and provide the intended snap or feedback behavior.
Method: Draw with simultaneous fingers across the dynamic canvas.
Result: Multiple brush strokes should remain responsive without visible gaps or incorrect input ownership.
Method: Color inside and outside template boundaries while observing the live HUD metrics.
Result: Color coverage and out-of-bounds spill percentages should update from the canvas and stencil masks.
Method: Reverse and restore sequences containing pencils, brushes, and paint-bucket actions.
Result: The command history should restore the expected canvas state without unnecessary texture-state duplication.
Section 09
View other projects or get in touch.