Krita: четырехточечные перспективные трансформации

в 6:31, , рубрики: open source, Анимация и 3D графика, Блог компании Krita Foundation, компьютерная графика, художники

Krita: четырехточечные перспективные трансформации
Примерно месяц назад проект Крита успешно завершил кампанию по сбору средств на Кикстартере (см. прошлый пост), теперь разработчики полностью погружены в процесс написания обещанных плюшек. Первой реализованной целью стали четырехточечные перспективные трансформации. В этой статье я расскажу об их реализации и применении.

Вообще, «выглядящие трехмерными» преобразования существовали в Крите довольно давно, однако пользоваться ими было неудобно. Дело в том, что стандартный инструмент трансформаций позволял лишь вращать объект вокруг трех осей. Что весьма плохо подходит для самого востребованного пользовательского сценария: добавить текстуру на объект нарисованный с учетом перспективы. Самый простой пример — поместить окна на стены здания.

Наиболее простым решением этой задачи является задание перспективы по четырем точкам: выделяем окно, перетаскиваем его углы в нужную позицию и готово! Этот метод и был реализован.

Математика преобразования

Как известно, перспективная трансформация на плоскости задается матрицей преобразования однородных координат.

Krita: четырехточечные перспективные трансформации

Эта матрица состоит из восьми значащих элементов (масштабы-повороты (Krita: четырехточечные перспективные трансформации), смещения (Krita: четырехточечные перспективные трансформации), перспектива (Krita: четырехточечные перспективные трансформации)) и одного масштабного коэффициента. Таким образом, чтобы однозначно задать преобразование, нам нужно иметь 8 уравнений, связывающих эти значения. Четыре точки, каждая с двумя координатами, как раз и зададут эти уравнения, при условии, что любые три из них не лежат на одной прямой.

Пусть имеются четыре точки (x1,y1)… (x4,y4) в координатах исходного изображения. Выразим четвертую точку через линейную комбинацию первых трех:

Krita: четырехточечные перспективные трансформации

Решим систему и запишем матрицу преобразования, которая будет переводить (1,0,0) в кратное (x1,y1,1), (0,1,0) в кратное (x2,y2,1), (0,0,1) в (x3,y3,1) и (1,1,1) в (x4,y4,1)

Krita: четырехточечные перспективные трансформации

Теперь повторим эти шаги для координат точек в конечном пространстве и получим матрицу B в штрихованных координатах.

Krita: четырехточечные перспективные трансформации

Тогда искомая матрица преобразования будет иметь вид

Krita: четырехточечные перспективные трансформации

Матрица Krita: четырехточечные перспективные трансформации будет преобразовывать исходные координаты точек в промежуточные фиктивные точки (1,0,0), (0,1,0), (0,0,1) и (1,1,1), а матрица Krita: четырехточечные перспективные трансформации, в свою очередь, преобразует их к желаемым значениям.

Искомая матрица получена!

Преобразование точек схода

Точкой схода называется точка, в которой сходятся на перспективном изображении параллельные линии предмета. Одним из требований художников была возможность перетаскивать эти точки напрямую. Сначала было не совсем понятно, как реализовать такой функционал, однако вскоре выяснилось, что в однородных координатах точки схода выражаются элементарно:

Krita: четырехточечные перспективные трансформации

Дальнейшие преобразования никак не изменяются.

Вместо заключения

Описанный функционал доступен в последний сборках Криты под Windows и в репозитариях Krita Lime для Ubuntu. Можно обновляться и рисовать!

Напоследок видео от Павла Гераськина, демонстрирующее возможности нового инструмента:

Автор: dkazakov-dev

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js