2

我正在开发基于 Embree 的光线追踪器(目前处于开发初期)。如果您不熟悉 Embree,您可以在他们的网页上阅读更多内容。

问题:目前,如果您启动渲染器以每像素和每次迭代使用 1 条光线(从现在开始称为 1 条光线模式),它的渲染器就好了。如果你设置它在一个数据包中跟踪 4 条光线raypacket4

问题截图 截图相机参数为(均在光线包模式下):

  1. 位置 0, 1, 0, 旋转 20, 0, 0
  2. 位置 0, 38, 0 旋转 90, 0, 0
  3. 位置 9.5, 5, 0 旋转 90, 0, 0
  4. 位置 9.5, 38, 0 旋转 90, 0, 0

调查表明,这些线只出现在 pakcet 模式下,并且距离网格有一段距离。我在几个不同的相机位置发布了问题的屏幕(渲染图像)。这里是项目的源代码(在 GitHub 上)Source Code

我敢打赌,问题出在数据包生成(位于camera.cpp/GetRayPacket4)或渲染中(renderer.h/RenderBuffer4, Raytrace4)。模式之间的切换是在 main.cpp 中通过替换RenderToBuffer4RenderToBufferRTC_INTERSECT4完成的RTC_INTERSECT1

非常感谢任何帮助或想法。

编辑:

对于缺少配置文件或场景文件,我深表歉意,它目前处于非常早期的开发阶段(花了 2 天),目前所有内容都经过硬编码以进行测试。

编辑2:

我发现在 GetRayPacket4 中移除光线方向计算中的 + i 可以解决问题,但是 4 条打包光线是相同的。为什么要解决它?

4

1 回答 1

2

解决了。

问题在于 __m128 以相反的顺序保存数据,因此必须进行一些像素交换。

于 2014-10-16T09:09:40.450 回答