Хейкки Лотвонен потратил большую часть декабря на создание Mr. Baby Paint — радикально простого приложения для совместного рисования с малышами. Идея родилась из практики: его трёхлетний сын хочет участвовать во всём, что делает отец за компьютером, но стандартные Wordpad и MS Paint для этого не подходят. Ребёнок случайно тыкает в меню, панели инструментов и кнопки, что требует постоянного вмешательства взрослого. Это ломает игру.
Лотвонен решил сделать приложение с нуля. Главное правило: весь экран — это холст без элементов интерфейса. Ребёнок управляет мышью, а родитель — клавиатурными шорткатами (CMD+S для сохранения, CMD+E для очистки). Левая кнопка рисует, правая заливает, скролл сыплет «песок». Чем быстрее движение мыши, тем больше брызг краски. Но у детских движений есть особенность: они очень резкие. Компьютер фиксирует позиции мыши дискретно, а соединять их прямыми линиями — слишком угловато. Лотвонен решил это через Catmull-Rom spline, который строит плавную кривую, а кисть штампуется вдоль неё через каждый пиксель.
Вместо точного управления настройки меняются движением мыши к краям экрана. Левый край регулирует размер кисти и шрифт (16 сегментов), нижний — цвет, верхний — символы (буквы, цифры, знаки препинания), правый — форму кисти (круг или квадрат). Для маленьких детей, которые не могут удерживать кнопку мыши, родитель зажимает Alt — и рисование включается от движения.
Самая интересная находка — случайное открытие клеточного автомата на основе заливки. В Mr. Baby Paint заливка работает не мгновенно, а распространяется постепенно, как в Mario Paint. Лотвонен разрешил запускать несколько заливок одновременно. Когда новая заливка начинается рядом с растущей границей старой, они начинают сталкиваться. Бюджет роста (1000 пикселей за кадр) делится между ними, поэтому маленькие заливки растут быстрее и «врезаются» в старые. Если поставить третью заливку того же цвета, они начинают схлопываться. Возникают органичные, пульсирующие узоры, которые могут жить тысячи «поколений». Лотвонен оставил это как фичу.
Ещё одна задача — утолщение пиксельных шрифтов. Лотвонен хотел сделать несколько шрифтов для рисования, но 1px штрихи слишком тонкие. Он перепробовал с дюжину алгоритмов: от простого увеличения каждого пикселя до JFA (Jump Flooding Algorithm), SDF (Signed Distance Field), 16- и 8-направленного рейкастинга и точного Euclidean distance transform. Лучшим оказался метод #4 — JFA distance field с детекцией угловых зазоров и пост-обработкой дыр. Его пришлось дорабатывать вручную в Aseprite. В итоге получился толстый, сочный шрифт, который отлично вписался в приложение.
Mr. Baby Paint — первая продаваемая программа автора. Он продал около 30 копий на itch.io за $4.99. Приложение доступно для Mac, Windows и Linux.