Анимационные и инсценировочные представления

говоря о хранении и загрузке моделей и анимаций, что было бы лучше для игрового движка:

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

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

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

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

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

3 - Не используйте создание экземпляров, потому что "усиление" будет очень низким для такого количества моделей.

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

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

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

Есть решения/идеи?

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

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


person user1900984    schedule 14.03.2013    source источник


Ответы (1)


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

Инстансирование со скинами от NVidia

person alanw    schedule 14.03.2013
comment
но они не используют интерполированный скелет, или они? без интерполированного скелета моя анимация должна быть 60 кадров в секунду, чтобы не было никаких визуальных ошибок, и я не могу интерполировать между анимациями... - person user1900984; 14.03.2013
comment
Вы правы, что они не интерполируются. Однако добавить интерполяцию путем выборки матрицы текущего и следующего кадра, а затем выполнить интерполяцию между ними, чтобы получить интерполированную матрицу, несложно. - person alanw; 15.03.2013
comment
Я беспокоился о стоимости выполнения этой интерполяции в шейдере, но я считаю, что это тоже тривиально, спасибо! - person user1900984; 15.03.2013