2015-06-29 5 views
1

Я читал различные статьи о том, как писать voxelizer GPU. По моему пониманию, процесс выглядит следующим образом:Как мне начать с voxelizer GPU?

  1. Осмотрите треугольники индивидуально и решите ось, которая отображает треугольник самым большим образом. Назовите это доминирующей осью.
  2. Оденьте треугольник на его доминирующую ось и проведите тексели, которые выходят.
  3. Пишет, что данные тексел на 3D текстуру, а затем делать то, что вы будете с данными

пренебрегая консервативные растеризации, у меня есть много вопросов, касающиеся этого процесса.

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

Что я должен делать в шейдере фрагмента? Как написать в мою 3D-текстуру, чтобы она хранила данные воксела? По моему мнению, из-за выбора доминирующей оси у нас не может быть больше глубины 1 вокселя для каждого фрагмента. Однако, поскольку мы проектировали ортогонально, я не вижу, как это отразится на трехмерной текстуре.

Наконец, мне интересно, где хранить данные текстуры. Я знаю, что неплохо хранить данные со стороны ЦП, так как вам нужно передать все это, чтобы использовать его на графическом процессоре, однако исходный код, который я как бы следую, выбирает для хранения всей его текстуры на стороне процессора, например, для свет карта. Мое предположение заключается в том, что данные, которые будут использоваться только на графическом процессоре, должны храниться там, а данные, используемые для обоих, должны храниться на стороне процессора. Таким образом, я сохраняю свои данные на стороне процессора. Это верно?

Мои основные источники были: https://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-SparseVoxelization.pdf OpenGL Insights https://github.com/otaku690/sparsevoxeloctree SVO с использованием вокселизатора. Проблема в том, что шейдерный код отсутствует в github.

+0

Вы можете ознакомиться с этим Voxelizer CUDA Я написал: https://github.com/Forceflow/cuda_voxelizer –

ответ

0

В моей собственной реализации вся сцена позиционируется и масштабируется в единый куб, центрированный по мировому происхождению. Матрицы проектных проектов являются простыми. И видовое окно - это просто желаемое разрешение воксела.

Я использую двухпроходный подход для вывода этих воксельных фрагментов: 1-й проход вычисляет количество выходных воксельных фрагментов путем накопления единственной переменной с использованием атомного счетчика. Затем я использую информацию для выделения линейного буфера.

Во втором проходе растеризованные фрагменты вокселя хранятся в выделенном линейном буфере, используя атомный счетчик, чтобы избежать конфликта конфликтов.