2013-03-14 5 views
1

говорить о хранении и загрузке моделей и анимации, который будет лучше для Game Engine:Анимация Instancing выступления

1 - Иметь сетку и кости для каждой модели, как в том же файле, каждый костную систему с 10 ~ 15 анимациями. (так что каждая модель имеет свои собственные анимации)

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

И теперь, если мне нужно, чтобы показать 120 ~ 150 моделей в каждом кадре (анимированный и кожурой ГПУ), 40 из них имеют одинаковый тип, лучше:

1 - Используйте систему инстансов для все модели в игре, даже если мне нужна только одна модель для каждого типа.

2 - Обнаружить, что модель требует инстанцирования (если они повторяются более одного раза) и использовать другую систему визуализации (другие программы шейдеров), используйте неинструментацию для других моделей.

3 - Не используйте instancing, потому что «коэффициент усиления» будет очень низким для этого количества моделей.

Все «модели», которые здесь обсуждаются, являются анимированными моделями, в настоящее время я использую MD5-файл с обрезкой графического ядра, но без instancing, и я бы знал, есть ли лучшие способы сделать весь процесс анимации.

Если кто-нибудь знает хороший учебник или может поставить меня на пути ... Я не знаю, как я мог бы создать интерполированное скелет и использовать инстансов для этого, позвольте мне объяснить ..:

Я могу сжать все преобразования костей (матрицы) для всей анимации для всех кадров в простой текстуре и отправить ее в шейдер вершин, а затем прочитать для каждой вершины для каждой модели предполагаемое преобразование анимации/кадра. Это нормально, я могу использовать instancing здесь, потому что я всегда буду отправлять одни и те же данные для одного и того же типа модели, но когда мне нужно использовать интерполяционный скелет, должен ли я делать эту интерполяцию на вершинном шейдере тоже? (больше нагрузок от текстуры может привести к некоторым потерям производительности). Мне тоже нужно вычислить интерполированный скелет на процессоре, потому что он мне нужен для столкновений ...

Любые решения/идеи?

  • Im используя Directx, но я думаю, что это относится и к другим системам

=> Теперь мне просто нужен ответ на первый вопрос, то второй является решена (но если кто-то хочет дать любые другие предложения в порядке)

ответ

2

Лучший пример, который я могу придумать, и тот, который я лично использовал, - это один из NVidia под названием Skinned Instancing. В этом примере описывается способ отображения многих экземпляров одной и той же костной сетки. Существует код и официальный документ доступен тоже :)

Skinned Instancing by NVidia

+0

но Dont использовать интерполированное скелет, или они? без интерполированного скелета моя анимация должна быть 60 кадров в секунду, чтобы не иметь визуальных ошибок, и я не могу интерполировать между анимациями ... – user1900984

+0

Вы правы, что не интерполируют. Однако тривиально добавлять интерполяцию путем выборки текущей и следующей матриц кадра, а затем интерполировать между ними для получения в интерполированной матрице. – alanw

+0

Я был обеспокоен стоимостью этой интерполяции на шейдере, но я считаю, что это тоже тривиально, спасибо! – user1900984

 Смежные вопросы

  • Нет связанных вопросов^_^