问题标签 [embree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
200 浏览

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

我正在开发基于 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 条打包光线是相同的。为什么要解决它?

0 投票
3 回答
991 浏览

math - 当相机远离圆环时,射线和圆环方程相交的数值错误

我试图在不对环面进行三角剖分的情况下,仅通过与射线和环面解析方程相交来对环面进行射线追踪。我使用以下代码做到了这一点:

求解SolveP4函数方程的代码取自求解三次和二次函数

问题是当我们仔细观察环面时,它的效果非常好,如下所示:

光线从附近追踪圆环

但是当我缩小相机时,相机正看着远离它的圆环,它突然变得如此嘈杂,并且它的形状没有很好地识别。我尝试使用每个像素超过 1 个样本,但我仍然遇到同样的问题。如下:

光线追踪时从远处看不清楚圆环

看来我面临一个数值问题,但我不知道如何解决它。任何人都可以帮助我吗?

另外,值得一提的是,我正在使用英特尔的 Embree Lib 对圆环进行光线追踪。

更新(单色):

单色校正光线追踪环面 单色不正确的光线追踪环面 非常远单色不正确的光线追踪环面

0 投票
1 回答
184 浏览

linker - 同时使用 OpenCL 和 embree

我想将英特尔库 embree 与 OpenCL 结合使用,但它对我不起作用。为了向您展示问题,我创建了一个小代码来获取所有 OpenCL 设备:

如果我编译这段代码:

我得到以下输出:

如果我编译相同的代码:

我无法再找到我的 CPU 作为可用的 OpenCL 设备,因为我得到以下输出:

谁能帮我把我的 CPU 重新作为 OpenCL 设备?

0 投票
2 回答
556 浏览

c++ - 我应该通过 API 还是通过项目的源代码本身来使用 Intel Embree?

我正在考虑在我的渲染器中使用 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 的好方法。

0 投票
1 回答
145 浏览

windows - 无法将 Embree 添加到我的项目中,出现 LNK1104 错误

我正在尝试将 Embree 添加到已经工作的解决方案中,在此资源之后,我已将以下内容添加到我的CMakeLists.txt文件中:

我还embree_DIR使用我的 Embree 安装文件夹(“C:\Program Files\Intel\Embree3 x64”)创建了一个 Windows 环境变量。

CMake 可以很好地配置解决方案,但是当我构建时,我得到一个fatal error LNK1104: impossible to open 'embree3.lib'.

只是让你知道,我实际上有一个C:\Program Files\Intel\Embree3 x64\lib\embree3.lib文件。

任何人都知道为什么会发生这种情况?

0 投票
1 回答
176 浏览

windows - `pyembree` 的 CMake 构建帮助

我正在寻找pyembree使用 CMake for Windows 从源代码构建的帮助。GitHub 上列出了有关此问题历史的更多详细信息。刚刚删除了对 conda-forge 的 Windows 支持pyembree,因此非常感谢您提供任何帮助!

安装说明

系统

测试:

操作系统: Windows 10 x64 专业版,内部版本 1909 Python: 3.8.10

脚步

  1. 安装Microsoft Visual C++ 14.X 和 Windows 10 SDK。这些是构建cython代码所必需的。

注意: Microsoft Visual Studio 的版本与 Microsoft Visual C++ 的版本不同。Visual Studio 2015、2017 和 2019 都有 MSVCv14X 构建工具。在撰写本文时,安装 Visual Studio 2019 构建工具

MSVCv142 - VS 2019 C++ x64/x86 build toolsWindows 10 SDK (10.0.18362.0)

组件就足够了(Desktop development with C++如果安装 Visual Studio 2019,请选择工作负载)。

  1. 安装vcpkgC:\\vcpkg并将路径添加到您的System Environment Variables
  1. 安装embree2 64-bit

注意: 迄今为止,pyembree 仍然依赖于 Embree 2,并且尚未针对 Embree 3 进行更新。

  1. 安装cmake

  2. venv创建您的项目文件夹并使用(使用)初始化虚拟环境Python 3.6 - 3.8。在此示例中,Python 3.8.5 x64-bit选择它是因为它是Miniconda py38_4.9.2.

  3. 安装以下软件包:

  1. 将以下cmake 模块添加到您的系统 cmake 模块文件夹(例如C:\Program Files\CMake\share\cmake-3.21\Modules\)。

  2. 导航到<virtual environment folder>\Lib\site-packages并克隆pyembreerepo:

  1. 将目录更改为pyembree文件夹并创建以下顶级CMakeLists.txt
  1. 移动到子文件夹pyembree并创建以下子级别CMakeLists.txt

替换<system python path>(例如C:/Program Files/Python38)并<virtual environment folder>相应地。

  1. 移回顶级pyembree文件夹并创建以下setup.py文件:
  1. 将以下行添加到每个*.pyx*.pxd文件的顶部pyembree
  1. pyembree通过从顶级文件夹运行以下命令来构建和安装pyembree
  1. 最后,安装rtreetrimesh

当前挑战

我被困在py setup.py build.

  1. 目前,我需要将embree标头和库(.lib.dll)复制并粘贴到源文件夹(<virtual environment folder>/Lib/site-packages/pyembree)和生成的构建文件夹(<virtual environment folder>\Lib\site-packages\pyembree\_skbuild\win-amd64-3.8\cmake-build\pyembree

我可以在 CMake 中使用复制文件命令吗?

  1. 运行时py setup.py build,我收到、和LNK201: unresolved external symbol的链接器错误。我相信这是一个 DLL 构造,它仅适用于 C 语言和共享库(不是静态库),所以我有点困惑。__imp_rtcMapBuffer__imp_rtc_NewTriangleMesh__imp_rtcUnmapBuffer__imp_

对此错误的任何帮助也将不胜感激!

0 投票
1 回答
25 浏览

c++ - Embree: stream mode - how does gather and scatter work and what are pid and tid?

I'm trying to upgrade my application from single ray intersection to stream intersection.

What I don't quite understand is how it's possible that the gather and scatter functions shown in the tutorials are even working

The example defines a custom extended ray struct Ray2

then it defines an array of these Ray2structs:

this array is set as the userRayExt before calling the intersection method:

now, for each ray bundle that embree intersects with geometry, the filter callback is invoked:

the last line of this method is what I don't understand

I understand what it is SUPPOSED to do. It should update the transparency property of the Ray2 that corresponds to the traced ray with T. But I don't get why/how this works, since the implementation of scatter looks like this:

I will reformulate this function a bit to better ask my question (but it should be completely equivalent if I'm not mistaken):

So, the first line still makes sense for me. A pointer to the transparency field of the first Ray2 struct is constructed and then incremented by tid * sizeof(Ray2) - this makes sense as it will land on another transparency field, since it is incremented by a multiple of sizeof(Ray2)

but then the next line

I don't get at all. uptr is a float pointer, pointing to a transparency field. So unless rid itself is a multiple of sizeof(Ray2), this won't point to a transparency field of one of the rays at all.

pid and rid are calculated as

which I find weird. Isn't that always the same as

?

what are pid and rid and why are they computed like this?

0 投票
1 回答
68 浏览

c++ - 与 MakeFile 等效的 cmake

我按照这个答案为一个简单的 Makefile 创建了一个 CMakeLists.txt

生成文件

CMakeLists.txt

Makefile 正确编译并且可执行文件运行没有任何问题。并使用 cmake 文件,我执行以下操作(假设我在源目录中)

  1. mkdir 构建
  2. 光盘构建
  3. 制作..
  4. 制作

make步骤 4 中抛出以下错误

我通过克隆 git repo 从源代码安装了embree 。我正在使用 Macbook M1 (MacOS Big Sur 11.5.1)。

我对 cmake 很陌生(一天前开始使用它),所以如果这是一个相当愚蠢的问题,我深表歉意。