0

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

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

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

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

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

4

2 回答 2

2

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

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

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

于 2017-05-15T15:00:06.833 回答
1

构造 RTCRay,使用 rtcIntersect,然后将数据复制回来。与光线遍历和原始相交相比,开销可以忽略不计(<0.5%)。

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

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

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

于 2017-05-13T15:41:50.993 回答