我正在开发一种基于Embree的光线跟踪器(目前处于开发早期)。如果你不熟悉Embree,你可以在他们的网页上阅读更多。
问题:目前,如果启动渲染器以每像素和每次迭代使用1条光线(从现在起称为1条光线模式),则渲染器会很好。如果将其设置为在一个数据包(raypacket4
)中跟踪4条光线,则会将网格渲染为精细的,除非将其移动一些距离,否则会出现一些黑线。
问题屏幕截图屏幕截图相机参数为(均为射线包模式):
- 位置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:
我发现,在GetRayPacket4中重新处理光线方向计算中的+I,消除了这个问题,但4条打包的光线是相同的。为什么这样可以解决问题?
已解决。
问题是__m128以相反的顺序保存数据,因此必须进行一些像素交换。