Это будет важным дизайнерским решением в моем следующем проекте по трассировке лучей.
Мы знаем, что структура «Payload» используется для передачи данных от шейдера ближайшего попадания в шейдер Raygen. Для рекурсивной системы PBRT, в основном, у меня есть 2 варианта:
- Использовать его для хранения информации о взаимодействии луча и поверхности точки попадания (будь то BRDF или BSDF)
- Используйте его для сохранения информации о следующем луче для трассировки
Первый вариант интуитивно понятен. Существует универсальное представление о взаимодействии лучей с поверхностью. Ближайшие шейдеры возвращают эту информацию в шейдер Raygen, и эта информация единообразно обрабатывается в шейдере Raygen для изменения интегрированного цвета и генерации следующего луча. Проблема этой конструкции в том, что представление BSDF может быть большим и сложным в системе PBRT. Для VKRay / DXR мы хотим, чтобы полезная нагрузка была как можно меньше.
Второй вариант оставляет оценку взаимодействия лучей с поверхностью ближайшим шейдерам. Каждый из наиболее подходящих шейдеров может иметь собственное представление взаимодействия лучей с поверхностью, которое может быть чрезвычайно простым (в зависимости от представления геометрии). В этом случае полезная нагрузка хранит оцененные результаты, такие как информация о следующем луче, который нужно трассировать. Возможная проблема заключается в том, что шейдеры, которые наиболее близки к успеху, являются расходящимися частями в потоке выполнения, будут ли они менее эффективными, чем шейдер формирования лучей?
Какой из них вы предпочитаете и почему?