DirectX 11 для данных о лицах

Мой вопрос в теории прост: как лучше всего вводить данные для каждого лица в пиксельный шейдер? Если бы он был введен через простой массив cbuffer, я мог бы получить доступ к данным, используя значение SV_PrimitiveID. Однако ограничение в 8096 чисел с плавающей запятой на cbuffer, очевидно, будет проблемой для любой умеренно детализированной модели.

Есть ли альтернатива этому методу? Возможно, используя отдельный поток вершин?

В идеале я бы вводил данные для каждой вершины, но данные для каждой грани содержат индекс текстуры, используемой для каждой грани, которую нужно искать в массиве текстур. Интерполяция данных texcoord между вершинами испортит этот индекс, если использовать его для каждой вершины, верно? Однако, если есть возможность сделать это для каждой вершины, я весь внимание!

Большое спасибо за любую помощь, которую вы можете предоставить.


person Mrfence    schedule 17.02.2014    source источник


Ответы (1)


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

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

Геометрические шейдеры в MSDN

person Adam Miles    schedule 17.02.2014
comment
Теперь я чувствую себя довольно глупо из-за того, что не понимаю, что многое можно сделать с помощью шейдера геометрии! Спасибо за Ваш ответ. - person Mrfence; 18.02.2014