Работа над скелеткой завершена!

Столкнулся с тем, что в 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 байта - третья вершина

 


You can leave a comment with "Facebook":
Не забывайте оставлять комментарии при помощи "ВКонтакте":
Яндекс.Метрика