Продолжаю душить бесполезной инфой трёх с половиной людей, заглядывающих в блоги.

Вступление

Как все знают, сцена битвы Артаса с Иллиданом из финала Фрозен Трона является одной моделью, с соответствующими анимациями и камерами. Но есть там кое-что ещё.
Некие файлы с расширением .mrf. И они не просто лежат мёртвым грузом в архиве, а действительно используются в модели, и не самым очевидным способом.
Вот они, сверху вниз:

А здесь в текстовом виде
EventObject "MRFX0000" {
	ObjectId 173,
	EventTrack 1 {
		19300,
	}
}
EventObject "MRDX0000" {
	ObjectId 174,
	EventTrack 1 {
		22300,
	}
}
EventObject "MRFX0001" {
	ObjectId 175,
	EventTrack 1 {
		28133,
	}
}
EventObject "MRFX0002" {
	ObjectId 176,
	EventTrack 1 {
		49833,
	}
}
EventObject "MRFX0003" {
	ObjectId 177,
	EventTrack 1 {
		55933,
	}
}
EventObject "MRFX0004" {
	ObjectId 178,
	EventTrack 1 {
		60633,
	}
}
EventObject "MRFX0005" {
	ObjectId 179,
	EventTrack 1 {
		72867,
	}
}
EventObject "MRDX0001" {
	ObjectId 180,
	EventTrack 1 {
		36067,
	}
}
EventObject "MRDX0002" {
	ObjectId 181,
	EventTrack 1 {
		52433,
	}
}
EventObject "MRDX0003" {
	ObjectId 182,
	EventTrack 1 {
		58333,
	}
}
EventObject "MRDX0004" {
	ObjectId 183,
	EventTrack 1 {
		62500,
	}
}
EventObject "MRDX0005" {
	ObjectId 184,
	EventTrack 1 {
		74633,
	}
}
Да, это событийные объекты. Но они имеют коды, которые не указаны в официальной документации Blizzard.

Ковыряем

Я тупо скопипастил эти событийные объекты в другую модель, с изменением номеров кадров срабатывания, и... ничего не произошло. Ни в редакторе, ни в игре никакого эффекта данные событийные объекты не произвели.
UPDT. Нет, воспроизвести эффект в игре у меня получилось, прошу прощения за дезинформацию. Подробнее в комментарии.
Модель битвы воспроизводится из карты через нативку SetCinematicCameraForPlayer. Можно попробовать также. Но я сделал ещё проще и использовал возможность импорта кастомного экрана кампании.
Сделал камеру над ивентами, накидал побольше света.

И импортировал в кампанию...
Вот оно! Эти событийные объекты выводят (либо удаляют) в нужный кадр плащи Артаса, которые хранятся в виде mrf файлов. И эта технология работает только при выводе на экран моделей через камеру.
UPDT. Внутри обычной игры тоже работает. Подробнее в комментарии.
Если открыть файл в хекс-редакторе, то можно найти ссылку на текстуру плаща:
Да, если здесь поменять путь, то текстура поменяется. Но сама форма mrf будет испорчена. Скорее всего, это просто из-за того, что длина пути должна быть точно такой же, чтобы не испортить структуру файла в hex-формате. Но я сделаю по-человечески: возьму текстурку Textures/DungeonDoodad0.blp и импортирую её в кампанию по пути Doodads\Cinematic\ArthasIllidanFight\ArthasCloakFight.blp.
Результат:
Работает! Текстура поменялась.

UPDT. А ещё можно создать фрейм типа SPRITE с этой моделью, и посмотреть на анимации плаща.

Резюмируя

К нам в редакцию пришло много вопросов
  1. Работает ли это в рефе?
Да.
  1. Что такое mrf?
Понятия не имею. На хайве есть только одно толковое упоминание этих файлов, где автор предположил, что это monochrome recursive format. Я скачал две программы для просмотра изображений, в которых была заявлена поддержка mrf, но они эти файлы не открыли. Мне кажется, что это либо 3д-модель, либо анимация для неё, либо файл, содержащий внутри что-то из этого. Если открыть файлы в хекс-редакторе, то можно увидеть, что они начинаются со слова Morf, что бы это не значило.
Это 3D-модель с анимированными позициями вершин? Я разобрал этот формат, и даже написал скрипт-импортёр для Blender
  1. Можно ли из этого извлечь пользу обычному варкрафтеру?
Нет Не знаю.
P.S. файлик с моделью приложил к посту
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
poisoNDealer, Вручную крайне тяжело. Тут скорее всего что то типа конверта физики объекта в скелет, а потом собственно экспорт скелета.
31
Как? Тридешники, это реально сделать на обычной костной анимации?
да.
тут же примитив.
Берется плоскость, подразделяется на меньшие квадраты.
К каждой вершине прикрепляется кость.
Создается симуляция ткани, переносится и запекается за скелет.
А дальше только конвертирование скелетной анимации в варик.
Вот нашел пример с флагом.
38
В нормальном 3d мире анимировать можно не только костно, но и вершинно
31
В нормальном 3d мире анимировать можно не только костно, но и вершинно
Это то понятно, но что делать если модель предназначена для программы, не умеющей работать с анимацией вершин.
Приходиться изворачиваться.
26
Когда варкрафтеру нечего делать, он начинает байты считать

Таблица оффсетов

Готов спорить на деньги, что это описание треугольников

Чётное количество флоатов от 0 до 1, может быть UV развёртка?
26
Короч я разобрал бОльшую часть данных .mrf файлов, и почти написал простенький скрипт-импортёр для блендера. "Почти" потому что пока ещё не в курсе как в блендер апи воспроизвести эту анимацию. В общем, это рили тупо покадровая перестройка меша, путём смены координат вершин.
Плащ артаса в блендере:
Загруженные файлы
26
Берги, три недели без варкрафта: пациент научился реверсить бинарники и писать аддоны для блендера. Развитие попёрло.
38
Mrf очень похоже на moving reference frame

Скорее всего это оно и есть, потому что moving reference frame это не брендовое имя, а геометрическое определение (перемещение множества векторов в пространстве относительно другого множества)
Загруженные файлы
26
ScorpioT1000, формат выглядит так, будто сделали симуляцию ткани, и прям в лоб запекли позиции вершин покадрово.
Я мб потом распишу подробнее, но если вкратце, то ключевой кадр здесь выглядит так:
(float x, float y, float z) --позиция вершины 0
(float x, float y, float z) --нормаль вершины 0
(float x, float y, float z) --позиция вершины 1
(float x, float y, float z) --нормаль вершины 1
...
(float x, float y, float z) --позиция вершины N
(float x, float y, float z) --нормаль вершины N
В каждом кадре расписана каждая вершина.
38
Это и ожидаемо, так и создаётся анимация soft body при симуляции движком, можешь поиграться с havok в 3ds max
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.