Раздел:
Моделлинг

Предисловие

Blizzard знали, что нужно игрокам, поэтому обильно сдобрили Warcraft III роликами. Часть роликов сделана прямо во внутриигровом редакторе, в виде, так называемых, машиним. Другая часть представлена в виде встроенных видео, отснятых с помощью относительно высокобюджетной компьютерной графики. Но один небольшой роличек выпал из этой классификации, оказавшись где-то посередине. Это знаменитый ролик битвы Артаса и Иллидана из классического варкрафта. Он, очевидно, делался во внешнем 3D-редакторе, но при этом был экспортирован в Warcraft.
Многие знают, что этот ролик сделан в виде одной цельной MDX модели (на самом деле, не совсем, см. далее), но мало кто в курсе, что в этой модели присутствует один уникальный вид анимации, которого нет больше нигде в игре. Ни до, ни после, ни в Reforged, нигде больше эта технология в игре не использовалась. Реалистично развевающийся на ветру плащ Артаса — это вертексная анимации меша! Желание использовать симуляцию ткани в этом ролике привело к тому, что в Варкрафт был вкостылен ещё один формат 3D-модели, помимо MDX/MDL.
В папке doodads\cinematic\arthasillidanfight можно найти 6 файлов с расширением .mrf, и каждый из них хранит одну анимацию плаща. В MDX-сцене находятся ссылки на MRF-файлы, и в нужный ключевой кадр игра подтягивает анимированный меш в общее пространство.
Вот как выглядят все запечённые анимации накидки Артаса:

Как это работает?

Формат MRF простой как пять копеек. В файле находится типовое представление трёхмерной сцены: позиции, нормали и UV-координаты вершин, а также данные о треугольниках в виде ID вершин (и ещё ссылка на текстуру всего этого добра). Но с одним нюансом: позиции и нормали можно записывать более одного раза. Совокупность этих записей является ничем иным, как набором ключевых кадров. Да, игра будет перестраивать меш, от кадра к кадру меняя положения и нормали вершин с заданным временным промежутком, и интерполируя промежуточные значения. Это и позволяет использовать MRF для хранения анимации формы. Именно вертексной анимации. Никаких костей нет, только деформация меша путём изменения координат его вершин.
Хранение ссылок на MRF устроено крайне костыльно, через событийные объекты (Event Objects (EVTS)). Существует два незадокументированных типа событийных объектов: MRF (начинает проигрывание анимации из файла) и MRD (останавливает анимацию, и скрывает меш). Они записываются в формате MRFXSTRING и MRDXSTRING, где STRING — произвольная строка, которая, будет приклеена к концу строки doodads\cinematic\arthasillidanfight\arthascape. То есть, в данном случае, игра будет искать файл doodads\cinematic\arthasillidanfight\arthascapeSTRING.mrf.
В треке событийного объекта записывается номер ключевого кадра, в котором произойдёт проигрыш или скрытие MRF файла. Что интересно, положение и треки анимаций (перемещение, масштабирование, поворот) событийного объекта полностью игнорируются.
MRF можно подгрузить везде, где грузится MDX, но есть проблема. Анимация воспроизводится только в некоторых пространствах, а именно:
  • Вывод на экран модели, содержащей MRF, в виде фрейма типа SPRITE. И обязательно с использованием внутримодельной камеры.
  • Использование нативной функции PlayModelCinematic(model).
  • Использование модели в качестве портрета.
В мировом пространстве карты и в 3D-экранах меню MRF будет отрендерен как статичный объект, при этом координаты вершин будут взяты из нулевого кадра.
Кстати, в HD-шейдере Reforged меш рендерится некорректно. Настолько некорректно, что я бы назвал этот приём SD only фишкой.
Более подробную информацию об MRF, включающую в себя также спецификацию бинарника, можно найти здесь.

А оно прям правда работает?

Ну, в общем да. Вот несколько примеров в видео.
В первом и втором случаях я создал простые примеры симуляции ткани. При этом, шарик и флагшток это старый-добрый MDX-меш, а вот сама ткань запечена в MRF, то есть это примерно то же самое, что сделали Blizzard. В случае с шариком анимация экспортирована прямо из результата симуляции, а флаг зациклен с помощью NLA треков.
Третий пример — это анимированная деформация меша с помощью кривой и другого меша.
В четвертом случае форма объекта анимирована с помощью Shape Keys. Можно увидеть, что на объекте присутствует динамическая тень, это происходит благодаря тому, что в качестве родителя спрайт использует World Frame, и подхватывает модель глобального освещения.
Эти анимации объединят одно: число вершин остаётся неизменным, меняются только их координаты.
Карты с примерами можно скачать в этом ресурсе, для Reforged достаточно запустить карту и посмотреть на проигрываемые по очереди спрайты, в карте для 1.26 нужно прокликать юнита и посмотреть на портрет, где видна симуляция ткани.

Как это сделать?

Когда-то я подумывал о том, чтобы написать подробный гайд, но в один момент я устал считать костыли, которыми нужно подпирать всю эту технологию, чтобы она работала. Я просто не готов расписать полный объём информации, которую придётся иметь ввиду. Да и ну серьёзно, найдётся ли второй такой же шиз, как я, который будет этим заниматься? Поэтому ограничусь небольшим обзором.
Существует аддон для Blender, который позволяет побаловаться с импортом и экспортом MRF-файлов. Скачать тут, краткая инструкция тут.
Помимо создания и экспорта вертексной анимации, придётся также создать модель, содержащую камеру и необходимый событийный объект, типа MRF. Камеру можно создать прямо в Blender и экспортировать в MDX, ну или воспользоваться Retera’s Model Studio, только в этом случае для прицела камеры придётся ставить какие-то вспомогательные объекты, так как рендерить MRF программа не умеет.
Как я уже упоминал выше, к ресурсу приложены карты-примеры для Reforged и 1.26, где можно пощупать готовые кастомные MRF-ки, и MDX модели для них, а также код для вывода на экран.
Я однажды записал небольшой видосик с процессом создания MRF, с тех пор я несколько оптимизировал этот процесс для себя, но в целом это актуальная история. В конце можно увидеть баги с блендингом на углах ткани, это происходит из-за HD-режима, в SD такого не будет.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
3 месяца назад
0
Но теперь главный вопрос... Зачем это нужно?
1
23
3 месяца назад
1
Но теперь главный вопрос... Зачем это нужно?
Можно Артасу в ролике плащ поменять
2
19
3 месяца назад
2
poisoNDealer, наконец-то ролики про артасов
0
35
3 месяца назад
0
Классная технология. Жаль забросили. В итоге нам приходится видеть кампании от васянов и 6 слотов у героев Артаса и малганисов
0
23
3 месяца назад
0
Кек. Разбираем варик по косточкам :D
0
23
3 месяца назад
0
Кек. Разбираем варик по косточкам :D
Не, по косточкам это к Унрузе, а мы тут так, по верхам проходим.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.