Krita: координаты Грина или как сделать из дракона кенгуру

    На днях была выпущена уже вторая бета-версия Криты 2.9. Этой статьей я хотел бы начать рассказ о том новом функционале, который ждет пользователей в предстоящем релизе.

    Одной из самых интересных функций этого релиза является преобразование клеткой. Оно позволяет изменять форму объектов без внесения искажений в изображение. О нем и пойдет сегодня речь…




    Координаты Грина


    Изначально интерес к инструментам преобразования клеткой возник как к средствам трансформации трехмерных объектов. Обычно такая «клетка» представляла собой многогранник с небольшим количеством полигонов, в который заключался интересующий объект. Передвигая вершины многогранника, пользователь мог деформировать выбранный объект, получая требуемые изгиб и форму. В нашем случае мы работаем не с трехмерными моделями, а с плоскими изображениями, поэтому задача сильно упрощается: клетка становится обычным многоугольником, а деформируемый объект — набором пикселей внутри его. Манипулируя вершинами этого многоугольника, можно получать требуемые деформации изображения.

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

    Чтобы обойти этот недостаток, разработчики из университета Тель-Авива придумали другой способ. Дабы избавиться от сдвиговых деформаций и сохранить форму объекта, они предложили использовать для расчета координат пикселов не только координаты вершин клетки, но и ориентацию нормалей ее ребер. Полученные координаты получили название координат Грина в честь теории функций Грина, используемых при выводе.

    Ниже приведено сравнение разных методов преобразования клеткой: a) исходное изображение; b) преобразование с использованием координат Грина; c) классический метод гармонических координат. Источник: [1]


    Метод с использованием координат Грина обладает множеством приятных свойств:
    • он позволяет получить явные выражения для новых координат пикселов, т.е. нам не требуется решать уравнения или использовать другие итеративные методы
    • так же как и другие «клеточные» алгоритмы он работает в две стадии, разделенные во времени: на первой стадии рассчитываются координаты Грина для каждого пиксела изображения с учетом начальной конфигурации клетки, а на второй полученные координаты просто перемножаются на модифицированные пользователем значения координат вершин и реберных нормалей новой клетки. Таким образом, первую стадию, самую ресурсоемкую, требуется просчитывать лишь один раз, вначале работы, а все последующие модификации будут пересчитываться быстрым алгоритмом
    • в отличие от всех остальных алгоритмов, координаты Грина обладают свойством конформности, т.е. отображение любой точки изображения можно представить в виде перемещения и поворота, при этом в полученном отображении будут отсутствовать сдвиговые деформации (shear). Это означает, что любая бесконечно малая окружность будет трансформирована в окружность, а не в эллипс, как бы это произошло с обычными методами


    Реализация в Крите и проблемы


    При реализации алгоритма в Крите разработчики столкнулись с некоторыми интересными особенностями алгоритма. Как уже было сказано выше, по изначальной задумке авторов преобразование разделялось на две стадии, первая из которых, медленная, должна была считаться лишь один раз при инициализации инструмента, а вторая, быстрая, при каждой модификации клетки пользователем. Проблема в том, что «быстрая» стадия алгоритма оказалась не такой уж и быстрой. Преобразование объектов реальных размеров (> 2k пикселов по длинной стороне) занимало несколько секунд, поэтому в результате, поверх оригинального алгоритма была добавлена интерполяция. Изображение разбивается сеткой с шагом 8 пикселов, значения координат Грина считаются для ее узлов, а остальные пикселы интерполируются. Как выяснилось, для реальных изображений, разница практически незаметна.


    Pepper and Carrot by David Revoy

    ...
    Чтобы ощутить всю степень быстроты оригинального алгоритма, читателю предлагается открыть редактор The Gimp, создать там изображение размером 640х480 пикселов и попробовать применить к нему инструмент «Преобразование клеткой».


    Выводы и планы на будущее


    Трансформация клеткой уже доступна в последних сборках Криты 2.9 Beta2. Вместе с переписанным инструментом Деформация (Warp Transform) она позволяет изменять позу и мимику двумерного персонажа без дополнительного создания и привязывания скелета.

    Однако кроме базового алгоритма, у трансформации клеткой есть еще интересное расширение. Сейчас изменение всего одной вершины способно привести к изменениям всей выделенной области, причем даже в тех частях, которые находятся на другой стороне картинки. Это не всегда удобно, т.к., чтобы изменить, например, руку персонажа потребуется занести его в клетку целиком (см. видео). Для исправления этой ситуации существует метод, позволяющий закреплять выделенные ребра клетки и редактировать части персонажа отдельно. Это как раз и будет темой для будущей работы разработчиков!

    Бета-версию Криты 2.9 под Windows и Linux можно скачать на официальном сайте проекта.

    В заключение видео о том, как создавалась заглавная иллюстрация:

    Krita Foundation

    34,00

    Компания

    Поделиться публикацией

    Похожие публикации

    Комментарии 21
      +5
      Фантастика какая-то.
        +6
        А вот ещё больше фантастики...

          +1
          Захотелось научиться рисовать что-бы работать с такими клёвыми штуками!
        0
        Это только в 2D? Я имею ввиду, можно это использовать с Unity3D или Unreal Engine?
          +3
          Крита работает только с 2D, поэтому мы реализовали только эту часть. Теория для 3D существует, но чтобы это реализовали, нужно обращаться к самим разработчикам Unity и Unreal.
            0
            Ясно, спасибо за информацию.
            +1
            В 3D помешает теорема Лиувилля. Из-за неё конформных отображений там почти нет.
              +5
              Да, поэтому это преобразование там становятся псевдоконформным. Т.е. бесконечно малая сфера становится всего-лишь немного приплюснутым эллипсоидом. Определению не удовлетворяет, зато глаз радует.

              Из оригинальной статьи:
              0
              начинается, минусить… такое ощущение, что тут нельзя вообще никаких вопросов задавать.
                0
                Ну, справедливости ради, надо сказать, что большинство мобильных игр, выпущенных на Unity выполнены в 2D. Так что в теории можно использовать этот инструмент для подготовки арта для 2дешной игры.
                Другое дело, что найти кого то, кто хотя бы что то слышал о некой крите, не говоря уже о том что бы умел пользоваться — это занятие не для слабонервных.
                  0
                  Замечательный пример: SuperCity. Все текстуры выполнены в некой Крите, рендеринг в каком-то Блендере. И между прочим входит в список Facebook's 2014 Best New Games. Студия из Питера, если что.

                  Если нужно найти знающих людей, обращайтесь!
                +1
                Не совсем в тему вопрос, но как обстоят дела с mac-версией?
                  +2
                  Пока ею занимаемся лишь на энтузиазме, этого хватает, только чтобы обеспечить, что она под маком собирается и вроде даже запускается. Но там есть какие-то специфичные баги. Потестить можно скачать здесь: files.kde.org/krita/osx/krita-2.8.91.1.dmg
                • НЛО прилетело и опубликовало эту надпись здесь
                    +1
                    Тот факт, что Вы здесь, говорит сам за себя.
                    +1
                    (оффтопик) несколько раз пробовал начать пользоваться krita, но каждый раз ломался. В нём СТОЛЬКО интерфейса, что просто рисовать негде. На фоне mypaint выжигает глаза и ломает любое настроение.
                      +2
                      так вы вроде можете скрыть большую часть и пользоваться шорткатами, нет? Или в чем-то еще проблема?
                        +1
                        Видимо хочется как в BlackInk — жманул h и все поскрывалось, жманул снова и интерфейс автомагически явился взад.
                          +3
                          Так а такая штука есть, только она по-умолчанию на Tab висит ;) А список, что конкретно скрывать, а что нет, есть в настройках.
                      +1
                      Кстати, такой инструмент уже несколько лет доступен в Гимпе (с версии 2.8).
                        +1
                        В Гимпе этот инструмент реализован ровно так, как описано с статье Липмана, поэтому просчет каждой модификации клетки занимает около 3-4 секунд. В Крите есть промежуточная интерполяция, так что с клеткой можно работать в реальном времени. Сравните сами ;)

                        PS:
                        Да, размер дракона на видео около 2000х1500пикс.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое