【问题标题】:Python (or not...) framework for GPU / parallel ray tracing?用于 GPU / 并行光线追踪的 Python(或不...)框架?
【发布时间】:2021-02-06 13:31:44
【问题描述】:

我正在为我的下一个项目做技术研究,但还没有找到合适的东西,所以我试试看。

我要解决的问题如下:

  • 我有很多(成百上千)个程序生成的场景,每个场景都包含大约 10k 个立方体。
  • 我想在每一个中检查 1k-10k 射线并获取命中距离的统计数据。
  • 这不是渲染问题 - 光线并非都来自同一位置。 (所以基于深度通道的光线追踪不太适合)
  • 性能很重要。我希望底层代码是基于 GPU 或可并行化的 C。

是否有允许我做这些事情的框架?我查看了游戏引擎,但大多不进行光线追踪。 我更喜欢找到一个可以做到这一点的 python 框架框架,但也会选择其他语言(C# / C++)。

解决此类问题的最佳方法是什么?

【问题讨论】:

  • 您可以在 Unity 中轻松完成此操作。我们支持光线追踪。您也可以在场景中自己实现它。有许多在线示例展示了如何从计算着色器填充纹理。
  • 谢谢!我发现的最接近的情况是:github.com/superdump/unity-compute-shader-ray-tracer 但是它通过对每个对象进行测试来进行光线追踪(警告有超过几百个三角形的场景),我不确定它是否可并行化(发射 10000 条光线,等待结果,处理)。我希望有一些算法可以预处理场景以创建更有效的光线路径解决方案,然后使用它......也许我过于乐观了。

标签: python graphics 3d simulation raytracing


【解决方案1】:

您在寻找哪些游戏引擎?因为市场上最流行的两个引擎 Unreal 和 Unity 已经有了支持。在 Python 中找到一个好的库或框架可能更难,因为 Python 没有围绕游戏引擎的良好生态系统。

https://docs.unrealengine.com/en-US/Engine/Rendering/RayTracing/index.html

https://docs.unrealengine.com/en-US/Engine/Rendering/RayTracing/RayTracingSettings/index.html

https://developer.nvidia.com/blog/introducing-ray-tracing-in-unreal-engine-4/

https://unity.com/ray-tracing

https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@7.1/manual/Ray-Tracing-Getting-Started.html

更新:

Python 中有一个名为 PyGame 的引擎,它是开源的,可能有一些支持,但我不确定它是否稳定。

https://www.pygame.org/project/4743/6980

经过一番研究,我还发现了一个 Python 包,可以在没有游戏引擎的情况下运行,你可以试试

https://pypi.org/project/ntracer/

【讨论】:

  • 感谢您的资源!我很了解游戏中的光线追踪。我的用例与游戏中流行的用例之间的区别在于,游戏引擎光线追踪始终用于单源(相机)用例。整个采样策略都基于此。在我的例子中,我将从每个场景约 100 个源点发射 30-50 条光线,这使得这些方法表现不佳。
【解决方案2】:

回答我自己的问题。经过大量研究,我们最终选择了 Trimesh (https://trimsh.org/trimesh.html)。

包括

  • 与流行几何格式(gltf、obj、dae)的互操作性
  • 使用 pyembree 支持快速光线追踪(基于 Intel 的 embree 项目)
  • 支持批量查询(发送 X 射线查询,返回 X 射线答案)以避免 pythonC 通信瓶颈。

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 2017-08-20
    • 2021-04-12
    • 2016-10-28
    • 2015-03-21
    • 2021-07-24
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多