Подтвердить что ты не робот

Рекомендуемый способ загрузки (неинтерактивных) анимаций (сделанных с использованием Maya) в OpenGL ES на iOS и Android

До сих пор мы могли успешно загружать статические файлы OBJ (преобразованные в .h) в наше приложение OpenGL.

Затем мы можем применить преобразования к этим объектам, чтобы их анимировать.

Следующим шагом в нашем проекте является создание профессионального аниматора анимации в Maya и создание "Loader" для отображения их в 3D с использованием OpenGL.

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

Важно отметить, что мы не можем отображать это видео, потому что мы строим это поверх библиотеки AR, которая позволит пользователям буквально обойти анимацию, эта часть решена, нам просто нужно, чтобы анимации отображались используя OpenGL.

Я рассмотрел этот вопрос относительно соответствующего формата, который аниматор должен использовать для экспорта из Maya.

Формат файла

.dae(COLLADA), по-видимому, является хорошим способом инкапсулировать информацию о модели и анимации и загружать ее с помощью Assimp но мы не нашли этот загрузчик, скомпилированный для iOS или Android (которые являются платформами, для которых мы разрабатываем).

Еще один подход, который мы рекомендовали в Интернете, заключается в экспорте серии OBJ файлов и загрузке соответствующего OBJ для каждого кадра.

Другим подходом, который мы видим, является использование "Engine", но есть так много, что трудно понять, на какой из них мы должны сосредоточиться.

Мы не против платить за двигатель, но как мы узнаем, какой из них лучше всего работает?

Мы обнаружили эти примеры, но мы не видим ясного "победителя".

Кто-нибудь получил что-то вроде этого, работающего на устройствах iOS или Android?

Какими будут ваши рекомендации?

4b9b3361

Ответ 1

Я сделал 3D-фреймворк для Android, и именно так я думал о анимации:

Скелетную анимацию можно сделать просто с помощью кода: загрузить OBJ для каждой конечности и позволить CPU выполнять скелетные вычисления, а затем преобразовывать каждый OBJ в координаты и углы, заданные CPU.

Анимация ключевого кадра может быть выполнена с использованием OBJ, которые имеют одинаковое количество вершин. Затем вы можете использовать линейную функцию, которая принимает переменную t (время) и дает вам объединенную сетку. Вы также можете использовать кривые Безье для более плавной анимации.

Еще один аспект, который я хотел бы указать, заключается в том, что вы можете импортировать файлы MD5. Файлы MD5 могут содержать данные анимации, и они двоичные, поэтому загрузка их выполняется быстро и не требует синтаксического анализатора.

Подробнее о MD5s здесь.

P.S. Если вы хотите, я могу порекомендовать вам отличную книгу, которая затрагивает множество 3D-проблем при разработке на мобильных устройствах; просто оставьте комментарий. И.. если вы не против тратить деньги, просто купите Единство. Это очень хорошо и очень универсально.

Ответ 2

Ну, OpenGL (-ES) сам по себе является просто API-интерфейсом рисования, он не делает ничего, что связано с анимацией. Воспроизведение анимации управляется собственной системой анимации. Результатом такой системы являются параметры преобразования, которые впоследствии можно использовать для размещения и деформации геометрии при рисовании с помощью OpenGL. Обычным подходом к этому в наши дни является система скелетной анимации, т.е. Вы добавляете некоторый скелет к модели, где каждая вершина привязана к набору костей, причем каждая вершина на единицу веса кости. Кости могут быть представлены как комбинация перевода и кватерниона. Перевод обычно является константой, поэтому то, что дает обычная система анимации, это вектор кватернионов, описывающий позу скелета. Это вы загружаете в однородную (vec4) или GL_RGBA32F 1D текстуру с шириной, являющейся числом костей, которое используется в вершинном шейдере для применения преобразования на вершину, основанного на позе. Вес вершинной кости обычно представляется в виде дополнительных атрибутов вершин.