Pull to refresh

Реализация эффектов при помощи рисования вершин

Reading time3 min
Views4.7K
Original author: Koppel Stepan
Какое-то время назад я наткнулся на интересный пост X: Rebirth – Geometric Lensflares на сайте simonschreibt.de

В этом посте автор рассказал о том, как игра X: Rebirth использует техники рисования вершин для создания эффектов lens flare. Почему это интересно? Потому что современные компьютеры отлично справляются с отрисовкой треугольников и геометтрии, но испытывают небольшие сложности с отрисовкой текстур. Именно поэтому вы скорее всего видели примеры плохого текстурирования в играх или низкое качество текстур даже на максимальных настройках — все эти артефакты вызваны сжатием изображений. Текстуры полезны при создании персонажей, предметов и ресурсов, но иногда их недостаточно для создания эффектов. Большинство эффектов в играх представлено в виде простых фигур, например, сияния или мерцания. Если вы попробуете использовать для эффектов текстуры, то столкнётесь с проблемами сжатия. Да, их форма проста, но нам нужно получить максимальное качество этой формы.

Команда разработчиков X: Rebirth столкнулась с этой проблемой, и решила для реализации некоторых эффектов использовать раскрашивание вершин. Единственное их ограничение заключалось в количестве треугольников. Если вы хотите добиться максимально качественного эффекта, то придётся бороться с ограничениями. В случае текстур такими ограничениями являются сжатие, размер файла, а в случае рисования вершин — количество полигонов модели.


Каждая вершина имеет собственный цвет. Рисование вершин в Blender.

Для раскрашивания вершин критически важно количество треугольников. Цвет модели будет математически вычисляться интерполяцией между вершинами. Это создаст градиентный переход от одной вершины к другой, но мы ограничены одним цветом на вершину.

Так как же создавать эффекты при помощи техник рисования вершин? Это достаточно просто, даже если вы не художник. Да, если вы профессионал в рисовании вершин, то сможете создавать эффекты гораздо оптимальнее (как это сделано в X: Rebirth), но это требует очень много времени, и я расскажу, как сделать всё в полуавтоматическом режиме.

Если вы изучили сайт simonschreibt.de, то могли найти ещё один интересный метод раскрашивания вершин, используемый в играх серии Homeworld. Идея создания сложных фонов исключительно при помощи раскрашивания вершин натолкнула меня на мысль о переносе некоторых эффектов при помощи Blender.

Сегодня у Blender есть потрясающие функции, но нам нужна старая версия. Наилучшим выбором будет Blender 2.74, потому что более новые версии не поддерживают старые типы запекания. Также нам понадобится бесплатный плагин Weight-and-Color, созданный chebhou (есть и другая возможность, если вы не хотите использовать плагины или старые версии Blender).

Загрузите изображение в Blender 2.74 и дублируйте модель со своим изображением. Эту модель нам нужно будет разделить при помощи subdivide до довольно плотного меша.


Изображение, загруженное как плоскость при помощи аддона «Images as planes»


Для простого разбиения меша использован модификатор Subdivision surface

После этого нужно добавить мешу высокого разрешения цвета вершин, чтобы инструмент запекания знал, куда записывать данные.


Добавленные данные цветов вершин


Параметры запекания

Запустим процесс запекания, сначала выбрав изображение, а затем модель высокого разрешения. Перейдём во вкладку запекания и нажмём Bake to Vertex color, а затем Selected to Active.


После запекания на модели должны быть запечены красивые цвета вершин. Для улучшения визуализации можно создать материал.

После завершения запекания нажмём Space на клавиатуре и введём «weight & color», используем параметры «Vertex color to weight» и «gray scale».


Чтобы открыть это меню, нажмите «пробел» в object mode


Теперь нам нужно добавить модификатор Displacement и использовать только что созданные данные весов в качестве определителя модификатора. Мы создали карту высот на основании нашей текстуры. Нам нужно было это сделать, потому что Blender использует некие алгоритмы для прореживания геометрии (модификатор Decimate). Таким образом мы сообщили Blender, что в нашей геометрии есть фигуры, и в дальнейшем в процессе прореживания Blender не будет обращаться с мешем как с обычной плоскостью.


Модификатор Displacement


Для понятности можно снова отмасштабировать модель до размеров плоскости

Настало время добавления модификатора Decimate. Этот модификатор уменьшает количество полигонов модели, сохраняя её общую форму. Этот этап требует ручной настройки.


Обычный Decimate


Decimate с определителем

В результате ручной настройки можно получить довольно интересные результаты. Для этого примера я использовал собственную модель высокого разрешения. Я выполнил грубую трассировку форм при помощи инструмента knife, а затем применил subdivide.


Вот так я получил получил эффекты при помощи раскрашивания вершин. Для этого можно и не использовать старый Blender и плагин. Всё это можно сделать в современном Blender, но могут возникнуть проблемы с модификатором Displacement, если попробовать использовать в качестве входных данных изображение, и вам не удастся использовать собственный определитель в процессе прореживания геометрии (модификатор Decimate).
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 15: ↑15 and ↓0+15
Comments6

Articles