Есть ли общая мудрость о том, сколько математической матрицы должно быть выполнено на процессоре и графическом процессоре для обычных 3D-операций?Матричная математика на процессоре или графическом процессоре для обычных 3D-операций
Типичный трехмерный шейдер может потребовать нескольких матриц. Мировая матрица для вычисления вычислений поверхности на свет. Мировая обратная матрица транспонирования для нормальных вычислений. Матрица проекции мировоззрения для 3D-проекции. И т. Д.
Есть два основных способа приблизиться к этому.
Вычислить матрицы на CPU и загрузить вычисленные матрицы в ГПУ
В некотором языке CPU
worldViewProjection = world * view * projection worldInverseTranspose = transpose(inverse(world)); upload world, worldViewProjection, worldInverseProjection to GPU
на использовании графического процессора
world,
worldViewProjection,worldInverseProjection
, где это необходимо.Pass различных компонентов матрицы к GPU (мир, вид, проекции) и вычислить необходимые матрицы на GPU
В некотором языке CPU
upload world, view, projection to GPU
На GPU
worldViewProjection = world * view * projection worldInverseTranspose = transpose(inverse(world));
Я понимаю, что на каком-то уровне я, вероятно, просто должен профилировать на diffe арендные машины и графические процессоры, и для рисования миллиона вершин в 1 обратном вызове могут быть разные потребности, чем рисование 4 вершин в 1 призыве на рисование, но ... Мне интересно ...
Есть ли общая мудрость о том, когда делать математика на графическом процессоре и процессоре для матричных вычислений.
Другой способ задать этот вопрос: каким должен быть мой номер по умолчанию: # 1 или # 2, после чего позже я смогу профилировать те случаи, когда по умолчанию это не лучшая производительность.
Это, как правило, не так много узкого места, потому что одна матрица (если она предоставлена предварительно умноженной) может служить миллионам точек, но отправка готовых материалов в шейдеры должна быть намного более эффективной.Кроме того, если у вас есть буквально тысячи экземпляров для рендеринга, то наиболее экономичным методом будет Hardware Instancing и единая матрица предварительного умножения проекции *. Также хорошо держать все вычисления в одном и том же пространстве. Например, обеспечьте представление X proj и мир отдельно. Обеспечить световые координаты непосредственно в поле зрения X proj X world и т. Д. –
Imho есть хороший ответ в [этом очень подобном вопросе] (http://stackoverflow.com/questions/16620013/should-i-calculate-matrices-on- заместитель ГПА-или-на-CPU). –
Когда вы делаете это на GPU, вы будете делать это для каждой вершины, пикселя, ... снова и снова. CPU вычисляет его один раз. Для меня я делаю все, что предсказывает процессор. – kaiser