我正在开发基于 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
调查表明,这些线只出现在 pakcet 模式下,并且距离网格有一段距离。我在几个不同的相机位置发布了问题的屏幕(渲染图像)。这里是项目的源代码(在 GitHub 上)Source Code
我敢打赌,问题出在数据包生成(位于camera.cpp/GetRayPacket4
)或渲染中(renderer.h/RenderBuffer4, Raytrace4
)。模式之间的切换是在 main.cpp 中通过替换RenderToBuffer4
和RenderToBuffer
来RTC_INTERSECT4
完成的RTC_INTERSECT1
。
非常感谢任何帮助或想法。
编辑:
对于缺少配置文件或场景文件,我深表歉意,它目前处于非常早期的开发阶段(花了 2 天),目前所有内容都经过硬编码以进行测试。
编辑2:
我发现在 GetRayPacket4 中移除光线方向计算中的 + i 可以解决问题,但是 4 条打包光线是相同的。为什么要解决它?