我应该通过 API 还是通过项目的源代码本身使用英特尔 Embree?



我正在考虑在我的渲染器中使用英特尔 Embree,目前正在使用 Embree 教程。

那么,问题是,是否有可能通过API有效地使用Intel Embree?

的意思是,我可以看到<embree2/rtcore.h>, <embree2/rtcore_ray.h>, e.t.c函数使用一些内部数据结构,例如RTCRay。显然,由于我不能重载任何运算符,因此我总是必须将数据结构转换为 Embree 数据结构,反之亦然。这甚至不仅仅是一个类型转换,这是一个新对象的构造。

例如,在调用rtcIntersect(RTCScene scene, RTCRay ray);之前,我从Ray类对象构造RTCRay射线,然后在函数返回一些数据时,我复制了一些值。

它看起来不像是使用Intel Embree的好方法。

我直接从预构建的二进制文件中使用了API。缺点是没有矢量或矩阵功能可以使用,但从好的方面来说,这意味着您可以使用任何其他您想要的库,这不是为您决定的。我使用开源单头文件 linalg.h 来简化事情。

这是我的 EmbreeTest 项目,它有一个 Main.cpp 文件,可以帮助您入门。只需使用Embree安装程序,这就是您所需要的。

至于效率,如果你从这个项目开始,你应该能够确定是否存在任何性能瓶颈,因为它除了调用Embree之外几乎什么都不做。光线投射方法只是将我计算的光线组织和目录复制到堆栈上的 RTCRay 结构中。我认为这不会是太大的开销。重组以一次投射多条光线肯定会比副本对性能产生更大的影响。

构造 RTCRay,使用 rtcIntersect,然后复制回去的数据。与光线穿越和原始交叉相比,开销可以忽略不计(<0.5%(。

我认为 Corona 渲染在内部使用 RTCRay,因此他们节省了 0.5% 的开销。

我知道 V-Ray 确实完全构建了 RTCRay,使用 rtcIntersect,然后将数据复制回来。

一般建议:避免过早优化。实现工作代码,然后使用探查器来指导优化。

相关内容

  • 没有找到相关文章

最新更新