Building the Foundation
Tomaytile has been in development for about two years, mostly in spare time between other projects. This year it became my university FMP (Final Major Project), so I've had proper time to focus on it. A lot of features have landed in a short window as a result. This first devlog covers everything in version A(lpha).0.1 rather than going week by week.
The Editor
The application is a single window with a custom title bar, a 3D viewport with fly camera, and an ImGui-based interface. You place tiles on a grid using a crosshair, move them with vertex-level control, and texture them with tileset spritesheets. Everything is C++ and OpenGL from scratch.
Tile Placement and Editing
Tiles snap to a grid and can be placed on any axis. In edit mode you can drag individual vertices, select whole faces with connected or disconnected movement, select and manipulate edges, extrude geometry, or use sticky tile placement to quickly extend surfaces. There's full undo/redo with a visual history window.
Tileset System
Multiple tilesets can be loaded at once with tab switching. Each supports rotation, flipping, 3D rotation, and placement modes like stamp, cycle, and random. There's a per-tile UV editor for adjusting texture mapping on individual faces, and selection presets for saving tile groups you use often.
Texture Mesh Creator
The newest feature and probably my favourite. You click points on a texture to draw a polygon, and each click defines both the vertex position and UV coordinate. The shape is triangulated with ear-clipping and placed into the scene as textured geometry. It supports extrusion for depth, a live viewport preview that follows the placement plane, and mouse placement. After placing, you can send the mesh to the UV Map tab to adjust the mapping.
Texture Editor
A full image processing pipeline built into the app. Perspective correction with a draggable quad selector, brightness/contrast/saturation/hue/gamma/levels, PBR map generation (height, normal, AO, roughness), seamless blending for tileable textures, retro downscaling with dithering and palette quantisation, 3D material preview, and atlas packing. It grew well beyond what I originally planned.
Pixel Art Mode
A 3-pass rendering pipeline that pixelates the entire viewport in real-time. Colours quantise to classic palettes like NES, Game Boy, and CGA, or custom ones. Selected geometry can be voxelised into blocky pixel-art shapes, and the scene can be exported as a GIF with the filter applied.
Scene and Export
Objects can be named, grouped, transformed with a gizmo, locked, hidden, and colour-coded. The gizmo supports translate, rotate, and scale, and works on vertex selections too. Models export to OBJ, GLTF, GLB, and FBX with textures saved as PNGs alongside the file.
Everything Else
Project files with backward-compatible versioning, session persistence for layouts and keybinds, a primitives window for basic shapes, topology analysis with health scoring and auto-repair, customisable keybinds, appearance presets, wireframe mode, a grid with fade, auto-save, recent files, and screenshot to clipboard. A lot of small things that add up.
What's Next
Next up is reworking the diorama builder, more dithering options for pixel art mode, and outline rendering. Animation and rigging are the longer-term goals.