Умножение матрицы мировоззрения в DirectX - GPU или CPU - место - PullRequest
3 голосов
/ 17 июня 2011

Я новичок в Directx, но был удивлен, что большинство примеров, которые я видел, мировая матрица и матрица представления умножаются как часть вершинного шейдера, а не умножаются на процессор и результат передается в шейдер.

Для жестких объектов это означает, что вы умножаете две одинаковые матрицы один раз для каждой отдельной вершины объекта. Я знаю, что GPU может делать это параллельно по нескольким вершинам (не знаю, сколько их), но разве это не совсем неэффективно, или я просто что-то упускаю? Я все еще новичок и невежественен.

Ответы [ 2 ]

5 голосов
/ 18 июня 2011

В общем, вы хотите сделать это на процессоре.Тем не менее, DirectX 9 имеет концепцию « preshaders », что означает, что это умножение будет выполняться на ЦП заранее.Это было удалено для более новых API, но это может быть очень уместно для примеров, которые вы просматриваете.

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

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

1 голос
/ 18 июня 2011

Что ж, для меня это не звучит бестолково, вы абсолютно правы!

Я не знаю точно, на каких примерах вы смотрели, но в целом вы бы проходили как можно больше предварительно рассчитанных матриц , вот какова семантика типа WORLDVIEW ( и даже больше подходит для простых шейдеров, WORLDVIEWPROJECTION) для .

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

...