Столкнулся с тем, что в 2014 Максе у меня вершины привязывались не к тем костям в то время как в 9 Максе высё было ок.
После того, как Мистер Ф помог мне экспортнуть модель из 2012 и 2013 максов, выяснилось, что баг проявляется только в 2014.
А я-то искал косяк у себя! После гугления выяснилось, что ещё кто-то запалил этот баг в Максскрипте: http://forums.autodesk.com/t5/Autodesk-3ds-Max-3ds-Max-Design/Annoying-Bug-in-SkinOps-in-3ds-Max-2014/td-p/4334935
Пока не ясно, пофиксят ли это или так и задумано. Пришлось исправлять костылём да ещё и детектить версию Макса, используемую в данный момент.
Ещё был такой баг: модельки, импонтнутые их Халвы 2 не сглаживаются:
Тут ситуация такая: импортёр моделек из Халвы не делает группы сглаживания, а лишь записывает инфу о нормалях, что логично. При экспорте у меня делается snapshot as a mesh (аналог модификатора Edit Mesh) чтобы перед экспортом "спечь" все модификаторы воедино. И тут-то Макс обсирается, просрав нормали. Если вручную применить модификатор Edit Mesh (Edit Poly) то будет ровно то же.
Короче, пересгладил группами, убедился, что с ними всё работает. так как выдёргивание моделек из Халвы — не моя приоритетная задача, а так, баловство, то трогать дело это пока не буду. Хотя в перспективе надо б.
На скрине модельки без текстур, чтобы лучше было видно сглаженность. Ниже они же с текстурами.
Напоследок убрал кости. Чтобы это сделать пришлось реализовать экспорт объектов без сетки, для чего пришлось поменять спеку:
Атрибут "isSkinned" переехал в самое начало и превратился во флаги. Теперь он несёт в себе аж 2 флага (в дальнейшем добавим ещё):
1. имеет ли геометрию?
2. заскиннен ли?
Если не имеет геометрию, то вместо mesh создаётся pivot.
Также в экспортёре сделал галку, переключающую экспорт костей как мешей.
На финальном скрине вы видите, что кости скрыты. Возможность их экспортить в виде мешей всё же оставил, мало ль кому надо? Обратная совместимость опять обосралась, ну да и ладно.
За сим я торжественно объявляю, что моя работа с анимацией и скелеткой на данном этапе завершена! Конечно, ещё есть что поделать (в частности, у меня навящевая мысль, что веса некорректно развешиваются), но я придерживаюсь принципа "необходимого минимума". Осталось добить 2Д и спрайты, за одно из этих дел я вскоре возьмусь.
Ура, товарищи!
Ах да, свежая спека:
10 байт - название формата
2 байта - номер версии
2 байта - длина служебной строки
сама служебная строка
2 байта - кол-во объектов
ОБЪЕКТЫ
// Общая инфа
2 байта - флаги (1 - имеет геометрию, 2 - заскиннен)
2 байта - количество чайлдов
2 байта - длина имени объекта
само имя объекта
2 байта - кол-во сурфейсов
// Трансформации
// Позиция
4 байта - X
4 байта - Y
4 байта - Z
// Поворот
4 байта - quat.x
4 байта - quat.y
4 байта - quat.z
4 байта - quat.w
// Масштаб
4 байта - Масштаб X
4 байта - Масштаб Y
4 байта - Масштаб Z
(ЕСЛИ ЗАСКИНЕН)
2 байта - количество костей в системе.
КОСТИ
2 байта - длина имени кости
само имя кости
(КОНЕЦ ЕСЛИ ЗАСКИНЕН)
СУРФЕЙСЫ
4 байта - число вершин
4 байта - число индексов
ВЕРШИНЫ
4 байта - X
4 байта - Y
4 байта - Z
4 байта - U
4 байта - V
4 байта - W
4 байта - NX
4 байта - NY
4 байта - NZ
(ЕСЛИ ЗАСКИНЕН)
2 байта - id кости в системе 0
2 байта - id кости в системе 1
2 байта - id кости в системе 2
2 байта - id кости в системе 3
4 байта - вес кости 0
4 байта - вес кости 1
4 байта - вес кости 2
4 байта - вес кости 3
(КОНЕЦ ЕСЛИ ЗАСКИНЕН)
ИНДЕКСЫ
4 байта - первая вершина
4 байта - вторая вершина
4 байта - третья вершина