говоря о хранении и загрузке моделей и анимаций, что было бы лучше для игрового движка:
1 - Иметь сетку и кость для каждой модели, обе в одном файле, каждая система костей с 10~15 анимациями. (поэтому у каждой модели своя анимация)
2 - Есть много мешей и мало костей, но файлы отделены друг от друга, и одна и та же кость (а также анимация) может использоваться для более чем одного меша, каждый набор костей может иметь много анимаций. (обратите внимание, что в этом случае использование одного и того же набора костей и одной и той же анимации приведет к потере уникальности).
А теперь, если мне нужно показать 120~150 моделей в каждом кадре (анимированных и обработанных GPU), лучше 40 из них однотипных:
1 - Использовать систему создания экземпляров для всех моделей в игре, даже если мне нужна только 1 модель для каждого типа.
2 - Определите, какая модель нуждается в создании экземпляров (если они повторяются более одного раза) и используйте другую систему рендеринга (другие шейдерные программы), используйте не создание экземпляров для других моделей.
3 - Не используйте создание экземпляров, потому что "усиление" будет очень низким для такого количества моделей.
Все «модели», о которых здесь говорится, являются анимированными моделями, в настоящее время я использую файл MD5 со скиннингом графического процессора, но без создания экземпляров, и я хотел бы знать, есть ли лучшие способы выполнить весь процесс анимации.
Если кто-то знает хороший учебник или может направить меня... Я не знаю, как я могу создать интерполированный скелет и использовать для него создание экземпляров, позвольте мне объяснить...:
Я могу сжать все преобразования костей (матрицы) для всей анимации для всех кадров в простой текстуре и отправить ее в вершинный шейдер, а затем прочитать для каждой вершины для каждой модели соответствующее преобразование анимации/кадра. Это нормально, здесь я могу использовать создание экземпляров, потому что я всегда буду отправлять одни и те же данные для одного и того же типа модели, но когда мне нужно использовать скелет интерполяции, должен ли я делать эту интерполяцию и на вершинном шейдере? (большее количество нагрузок от текстуры может привести к некоторой потере производительности). Мне все равно нужно было бы вычислить интерполированный скелет на процессоре, потому что он мне нужен для коллизии...
Есть решения/идеи?
- Я использую DirectX, но я думаю, что это относится и к другим системам.
=> Теперь мне просто нужен ответ на первый вопрос, второй решен (но если кто-то хочет дать какие-либо другие предложения, все в порядке)