【问题标题】:Fast way to render a small preview of a complex 3D model.快速渲染复杂 3D 模型的小预览。
【发布时间】:2016-03-01 18:00:11
【问题描述】:

我正在寻找一种非常快速的方法来渲染复杂 3D 模型的小预览。

  • Modell 以 stl 或 ply 的形式出现。
  • 一个模型将有 300.000 到 500.000 个面。
  • 渲染过程将在没有 GPU 的无头 linux 服务器上运行。
  • 渲染进程只能使用一个内核/线程。
  • 所需时间应小于 15 秒。

生成的图像会很小,大约 300x300 像素。 它不需要有阴影或其他伪逼真的特征。

到目前为止我尝试了什么:

stl2pov.py (stltools) -> povray: 结果看起来不错,渲染时间低于 15s,但 Povray 需要一分钟来解析 stl2pov 创建的 pov 文件。如果我使用mesh2格式解析要快得多,但结果是乱码。我相信这是由 stl2pov 中的错误引起的。是否有另一个产生mesh2的stl/ply to pov转换器?

带有循环渲染器的搅拌机: 这完全取决于样本的数量。样本数 150 给出了一个相当嘈杂但还可以的结果,但仍需要 30 秒。但由于我是 Blender 新手,而且这个野兽相当复杂,也许我确实忽略了一些技巧。

似乎光线追踪解决方案太慢了,而且无论如何都是矫枉过正。 我发现的所有其他解决方案都依赖 GPU 来提高速度。

你有什么想法可以解决这个问题吗?

【问题讨论】:

  • 我投票结束这个问题,因为它与编程无关 - 它实际上只是一个通用的计算机图形问题。

标签: 3d render mesh raytracing


【解决方案1】:

对于像 300x300 这样的渲染大小,使用 300k+ 三角形没有多大意义,因此您可以尝试将网格简化为更少的三角形数量,而不会出现明显的视觉差异,并尝试使用您已经尝试过的解决方案来渲染此网格。这应该会显着降低渲染时间。

您也可以尝试忽略小于某个值的三角形,看看这是否适用于您和您的模型。

如果您需要编写整个渲染代码并希望使其尽可能简单(或尽早获得一些工作代码),您可以尝试仅将网格顶点绘制为单个像素。使用如此密集的模型,它可能会工作得很好并且很容易实现,即使使用 Z-buffer 也是如此。

【讨论】:

  • 将面数减少到 50% 确实有帮助。现在 povray 只需要原来的 25% 的时间。几乎所有的改进都来自解析部分。我没想到会这样,因为我认为这将是 O(n)。生成的网格现在有一个糟糕的表面,但结构仍然很好,并且在预览尺寸的模型上看不到表面变形。
【解决方案2】:

您可能想要使用光线追踪器的原因是光线追踪器是 O(n log n) 而光栅化器是 O(n^2) 操作.所以光线追踪器最终会击败光栅化器。在这种情况下,因为您有这么多三角形,所以几乎可以肯定跟踪速度更快。 Povray 是一个光线追踪器,但不是最好的。

在这种情况下。因为无论如何您都需要分析网格,而您只有一个线程。它不是那么明确的交易。 @koledas 想法不错,只渲染点云。很可能任何制造网格都具有足够的密度以使其工作。它比任何其他替代品都便宜。

但是,您需要一个可以直接从 stl 发出数据的渲染器。如果您正在寻找光栅化器,那么您可以使用:

【讨论】:

  • 感谢您向我提示光栅化器的方向。将不得不考虑将此作为我的 povray 解决方案的替代品。关于一般的光线追踪器,如果速度比质量更重要,您认为哪一个是最好的?有很多好看的选择。
【解决方案3】:

您始终可以使用“渲染边框”打开按 n,在视图部分标记渲染边框框并使用 ctrl+b 在您要渲染的位置上绘制一个矩形。

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 2020-03-29
    • 2017-08-05
    • 2013-03-25
    • 1970-01-01
    • 2016-12-22
    • 2016-07-30
    • 2019-07-02
    • 1970-01-01
    相关资源
    最近更新 更多