光线追踪网格上的伪影黑线(使用Embree)



我正在开发一种基于Embree的光线跟踪器(目前处于开发早期)。如果你不熟悉Embree,你可以在他们的网页上阅读更多。

问题:目前,如果启动渲染器以每像素和每次迭代使用1条光线(从现在起称为1条光线模式),则渲染器会很好。如果将其设置为在一个数据包(raypacket4)中跟踪4条光线,则会将网格渲染为精细的,除非将其移动一些距离,否则会出现一些黑线。

问题屏幕截图屏幕截图相机参数为(均为射线包模式):

  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

研究表明,只有在离网格一定距离的情况下,这些线才会出现在帕克塞特模式下。我在几个不同的摄像头位置张贴这个问题的屏幕(渲染图像)。以下是项目的源代码(在GitHub上)源代码

我敢打赌,问题出在数据包生成(在camera.cpp/GetRayPacket4中找到)或渲染(renderer.h/RenderBuffer4, Raytrace4)中。模式之间的切换在main.cpp中完成,只需将RenderToBuffer4替换为RenderToBuffer,将RTC_INTERSECT4替换为RTC_INTERSECT1

任何帮助或想法都将不胜感激。

编辑:

我为缺少配置文件或场景文件而道歉,它目前处于非常早期的开发阶段(花了2天时间),目前一切都是硬编码的以供测试。

编辑2:

我发现,在GetRayPacket4中重新处理光线方向计算中的+I,消除了这个问题,但4条打包的光线是相同的。为什么这样可以解决问题?

已解决。

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

相关内容

  • 没有找到相关文章

最新更新