Я разрабатываю трассировщик лучей на основе 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 упакованных луча идентичны. Зачем это исправить?
Решаемые.
Проблема заключалась в том, что __m128 хранит данные в обратном порядке, поэтому необходимо было произвести некоторую замену пикселей.