Я разрабатываю трассировщик лучей на основе Embree (в настоящее время находится на очень ранней стадии разработки). Если вы не знакомы с Embree, вы можете узнать больше на их веб-странице.
Проблема: в настоящее время, если вы запускаете рендерер для использования 1 луча на пиксель и на итерацию (отныне это называется режимом 1 луча), он рендерится просто отлично. Если вы установите трассировку 4 лучей в пакете (raypacket4
), он отрисовывает сетку нормально, но если вы отодвинете ее на некоторое расстояние, появятся черные линии.
Скриншоты выпуска Параметры камеры скриншота (все в пакетном режиме):
- положение 0, 1, 0, вращение 20, 0, 0
- положение 0, 38, 0 поворот 90, 0, 0
- положение 9.5, 5, 0 вращение 90, 0, 0
- положение 9.5, 38, 0 вращение 90, 0, 0
Исследование показало, что линии появляются только в пакетном режиме и при некотором удалении от сетки. Выкладываю скрины выпуска (рендеринг изображений) в нескольких разных положениях камеры. Вот исходный код проекта (на GitHub) Исходный код
Могу поспорить, что проблема либо в генерации пакета (находится в camera.cpp/GetRayPacket4
), либо в рендеринге (renderer.h/RenderBuffer4, Raytrace4
). Переключение между режимами осуществляется в main.cpp простой заменой RenderToBuffer4
на RenderToBuffer
и RTC_INTERSECT4
на RTC_INTERSECT1
.
Любая помощь или идеи очень ценятся.
Редактировать:
Я прошу прощения за отсутствие файлов конфигурации или файлов сцен, в настоящее время они находятся на очень ранней стадии разработки (затрачено 2 дня), и на данный момент все жестко запрограммировано для тестирования.
Редактировать 2:
Я обнаружил, что удаление + i в расчете направления луча в GetRayPacket4 устраняет проблему, но тогда 4 упакованных луча идентичны. Зачем это исправлять?