Накидал тут не большой список разных вариантов GPU скиннинга и хотел поглядеть у кого как работает каждый.
Если не сложно, вот тут архив. Все что надо - это распаковать в любое место, запустить start.bat. После этого поочередно запустятся разные способы скиннинга. После запуска каждого из них, просто посмотрите секунд 5-10 нет ли каких артефактов или еще чего и просто закройте приложение (F10 или как обычно). Следом сразу запустится следующий тест и так до конца 8 вариантов. В конце откроется файл с результатами. Если не открылся, то он в корне - result.txt. Его содержимое прошу сюда, вместе с кратким описанием железа. Достаточно имя вендора и модель.
Краткое описание тестов:
mat_* - использование полноценных 4х4 матриц для костей (16 флоатов) quat_* - вместо матриц используются кватернион + позиция (8 флоатов) *_const - трансформы заливаются в качестве массива униформов *_tex - трансформы - это 1D текстура *_buf - заливка через TBO *_block - используется UBO
Тест призван выявить какой из способов быстрее (просто разница). Пока (тестил у себя) вижу, что AMD и NV имеют довольно разные результаты.
Обновление данных, в случае буферов, происходит путем glBufferData. Без маппинга и без инвалидации. С ними вообще все на много веселей у разных вендоров.
Всем спасибо за участие.
ЗЫ. *.pdb положил рядом на случай падения программы что бы отследить.
Данные лучше обновлять через glBufferSubData, если правильно понимаю.
Чет не работает скиннинг. Окна перестартовуют, но во всех вариантах человек и динозавр стоят и не двигаются.
Видюха HD5870 если чо.
P.S. Вот лог:
Matrix - Constant - 265
Matrix - Texture - 168
Matrix - Buffer - 241
Matrix - Block - 264
Quaternion - Constant - 273
Quaternion - Texture - 167
Quaternion - Buffer - 244
Quaternion - Block - 268
AMD 7870 - все стоят на месте.
Matrix - Constant - 410 Matrix - Texture - 238 Matrix - Buffer - 367 Matrix - Block - 387 Quaternion - Constant - 425 Quaternion - Texture - 234 Quaternion - Buffer - 371 Quaternion - Block - 413
GTX 560 - все стоят не двигаются.
Matrix - Constant - 229 Matrix - Texture - 217 Matrix - Buffer - 220 Matrix - Block - 225 Quaternion - Constant - 207 Quaternion - Texture - 226 Quaternion - Buffer - 237 Quaternion - Block - 228
GT 640M 2 GB DDR3
Matrix - Constant - 67
Matrix - Texture - 93
Matrix - Buffer - 94
Matrix - Block - 67
Quaternion - Constant - 90
Quaternion - Texture - 108
Quaternion - Buffer - 108
Quaternion - Block - 90
Matrix - - 264
Intel HD 4000
Matrix - Constant - 41
Matrix - Texture - 27
Matrix - Buffer - 28
Matrix - Block - 29
Quaternion - Constant - 42
Quaternion - Texture - 40
Quaternion - Buffer - 42
Quaternion - Block - 44
Matrix - - 82
Пардон. Забыл предупредить, что скиннинг там... эмм... ну только скиннинг. Анимацию пока убрал. Т..е. просто пересчет вершин без движения, но каждый кадр.
Анимация будет слегка влиять на результат.
И да... обновление через glBufferSubData. Много экспериментил и запутался уже.
Спасибо за тесты. Примерно подтверждается то, что я видел у себя. На NV лучше юзать текстуру или TBO (суть одно). А вот на AMD лучше юзать константы или UBO.
При это NV почти пофиг на количество данных и способ их "добычи". А вот AMD к этому довольно чувствительна.
Хотелось бы еще владельцов интеллов (которые умеют в OGL 3.3).
Надо наверно еще добавить мешей, а то я смотрю тут народ over200 ФПС имеет.
Вот версия с 256 персами. Просто распакуйте в корень. В принципе соотношение не должно сильно поменяться, но пусть будет более нагруженная сцена.
HD5870
Matrix - Constant - 61
Matrix - Texture - 40
Matrix - Buffer - 55
Matrix - Block - 60
Quaternion - Constant - 62
Quaternion - Texture - 40
Quaternion - Buffer - 55
Quaternion - Block - 60
GTS 250
Matrix - Constant - 27 Matrix - Texture - 28 Matrix - Buffer - 28 Matrix - Block - 28 Quaternion - Constant - 28 Quaternion - Texture - 27 Quaternion - Buffer - 28 Quaternion - Block - 28
GF480GTX
Matrix - Constant - 357
Matrix - Texture - 314
Matrix - Buffer - 321
Matrix - Block - 329
Quaternion - Constant - 365
Quaternion - Texture - 317
Quaternion - Buffer - 323
Quaternion - Block - 331
HD 6850
Matrix - Constant - 216
Matrix - Texture - 139
Matrix - Buffer - 190
Matrix - Block - 209
Quaternion - Constant - 217
Quaternion - Texture - 138
Quaternion - Buffer - 193
Quaternion - Block - 213
GeForce GTX 580
для насыщенной :
Matrix - Constant - 77
Matrix - Texture - 67
Matrix - Buffer - 70
Matrix - Block - 67
Quaternion - Constant - 79
Quaternion - Texture - 69
Quaternion - Buffer - 72
Quaternion - Block - 71
для простой версии - та что в начале поста:
Matrix - Constant - 327
Matrix - Texture - 290
Matrix - Buffer - 304
Matrix - Block - 299
Quaternion - Constant - 305
Quaternion - Texture - 264
Quaternion - Buffer - 307
Quaternion - Block - 301
GeForce GTS 450
первая версия:
Matrix - Constant - 99
Matrix - Texture - 92
Matrix - Buffer - 95
Matrix - Block - 99
Quaternion - Constant - 99
Quaternion - Texture - 98
Quaternion - Buffer - 97
Quaternion - Block - 92
вторая версия:
Matrix - Constant - 26
Matrix - Texture - 25
Matrix - Buffer - 25
Matrix - Block - 26
Quaternion - Constant - 26
Quaternion - Texture - 26
Quaternion - Buffer - 26
Quaternion - Block - 26
DeadMeat
Отличный тест ты придумал. Очень интересно!
ATI 5670:
тест из первого поста:
-----------------------------------
06.05.2013 20:43:08,63
-----------------------------------
Matrix - Constant - 93
Matrix - Texture - 85
Matrix - Buffer - 95
Matrix - Block - 99
Quaternion - Constant - 130
Quaternion - Texture - 120
Quaternion - Buffer - 132
Quaternion - Block - 135
Насыщенная версия
-----------------------------------
06.05.2013 20:48:10,34
-----------------------------------
Matrix - Constant - 24
Matrix - Texture - 22
Matrix - Buffer - 28
Matrix - Block - 29
Quaternion - Constant - 34
Quaternion - Texture - 31
Quaternion - Buffer - 36
Quaternion - Block - 36
На работе есть Intel HD 4000. Завтра обязательно запущу!
7870 второй тест
Matrix - Constant - 96
Matrix - Texture - 55
Matrix - Buffer - 82
Matrix - Block - 95
Quaternion - Constant - 98
Quaternion - Texture - 54
Quaternion - Buffer - 83
Quaternion - Block - 95
Тема в архиве.