VKRay / DXR: Какую информацию вы храните в своей структуре "Payload"? - PullRequest
0 голосов
/ 12 июля 2020

Это будет важным дизайнерским решением в моем следующем проекте по трассировке лучей.

Мы знаем, что структура «Payload» используется для передачи данных от шейдера ближайшего попадания в шейдер Raygen. Для рекурсивной системы PBRT, в основном, у меня есть 2 варианта:

  1. Использовать его для хранения информации о взаимодействии луча и поверхности точки попадания (будь то BRDF или BSDF)
  2. Используйте его для сохранения информации о следующем луче для трассировки

Первый вариант интуитивно понятен. Существует универсальное представление о взаимодействии лучей с поверхностью. Ближайшие шейдеры возвращают эту информацию в шейдер Raygen, и эта информация единообразно обрабатывается в шейдере Raygen для изменения интегрированного цвета и генерации следующего луча. Проблема этой конструкции в том, что представление BSDF может быть большим и сложным в системе PBRT. Для VKRay / DXR мы хотим, чтобы полезная нагрузка была как можно меньше.

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

Какой из них вы предпочитаете и почему?

1 Ответ

0 голосов
/ 18 июля 2020

Короткий ответ: это зависит от того, на каком оборудовании вы работаете, и с этим стоит поэкспериментировать. Мы можем сказать, что метод 1, безусловно, будет иметь меньше памяти и, вероятно, будет иметь лучший сбор лучей и лучшее кэширование, но также может иметь более высокую пропускную способность из-за увеличенного размера полезной нагрузки. Еще одно преимущество метода 1 состоит в том, что вы не будете ограничены глубиной рекурсии.

Конечно, метод 2 более гибкий с точки зрения дизайна. Добавление нового материала / объекта повлечет за собой добавление нового шейдера без изменения определения шейдера / полезной нагрузки Raygen.

Если вы выбираете метод 1, вы также можете изучить использование «запросов лучей», которые будут обходить необходимость в наиболее подходящем шейдере. Вы эффективно закончите операцию с помощью очень громоздкого шейдера Raygen. Он может быть менее гибким, но должен быть быстрее.

...