有没有一种特定的或适合光线追踪的3D场景格式?

10

我正在开发一个光线追踪程序,不想在处理3D场景的文件格式时重复造轮子。同时,我还希望能够使用其他人创建的场景来测试我的程序。我是一名程序员,而不是3D建模师。

是否有一个特定的或适合光线追踪的3D场景格式?


2
相关链接:https://dev59.com/iVLTa4cB1Zd3GeqPaW6C - Marcus Borkenhagen
3个回答

7

当我编写光线追踪器时,我编写了一个导出器用于Blender(它是免费的)。 Blender本身可以加载数十种格式,然后一个简单的20行Python脚本将为您提供所需的点。

最棒的特性是,在Blender中,您可以将所有模型的面转换为三角形。大多数光线追踪器只能使用三角形(或在内部将多边形转换为三角形)。因此,让Blender来处理这些多边形的繁重工作非常好。

首先,20行代码将允许您仅导出多边形。从那里开始,您可以扩展它以输出材质、法线等。我喜欢这种方法,因为我可以获取我想要的数据以我想要的格式,但仍具有导入更复杂模型的选项。

其他方法也可以,但您首先必须找出如何解析文件,然后将其以您想要的格式获取。我宁愿编写光线追踪器而不是解析器。


2
实际上,大多数真正的光线追踪器都能很好地处理几何固体。只有建模软件和基于光栅的渲染器通常只能处理三角形(或四边形)。 - Alnitak
那不是我在评论中说的话,对吧?回去重新读一下我的回答。我在谈论导出三角形,并谈论Blender如何通过将四边形和多边形减少到三角形来简化操作。尽管光线跟踪器很容易支持几何固体,但我从未见过单个光线跟踪器保留多边形格式。相反,它们会首先将其转换为三角形,因为这样可以简化流程。这个问题中从未提到过几何固体。 - Timothy Baldridge
1
你说“大多数光线追踪器仅仅能处理三角形”,这对于大多数读者来说意味着确切的含义(因此排除了几何固体)。 - Alnitak
虽然这段话被脱离了上下文,但请阅读整个以“超级棒的特性是,在Blender中你可以将模型的所有面转换为三角形。”开头的段落。这意味着我们正在讨论面和三角形。 - Timothy Baldridge

6
除了 PovRay 格式之外,实际上并没有针对光线追踪的特定格式。光线追踪是一种渲染图像的方法,可以应用于任何场景。模型制作人员将使用其选择的建模软件,并通常以该建模软件的默认格式保存。
看起来您没有加载特定格式的要求(否则您就不会询问),因此我猜您只想导入来自网络的各种几何体进行测试。如果是这种情况,请访问 ompf 论坛:http://ompf.org/ 他们有一个链接到免费场景的板块。您可以了解常见的内容。
另一个选择是使用 Open Asset Import Library:http://assimp.sourceforge.net/ 它可以为您导入大量文件格式。它将所有文件加载到内部数据结构中,然后您可以根据需要进行处理。它使用 BSD 许可证,因此与您正在进行的任何工作应该具有合理的许可证兼容性。

1

我不相信目前有任何特定的场景格式在使用,因为不同的建模师需要不同的参数和设置指令等。

然而,WaveFront .obj格式非常流行,用于描述场景中的单个对象,并且网络上有许多以这种格式保存的文件可供使用。


WaveFront 格式似乎相当简单,但由于其面向顶点和面的风格,并不特别适合射线追踪。我突然想到我可以使用 POV-Ray 格式。 - Jan Deinhard
1
没错,你无法用OBJ格式来描述一个参数化的实体。然而,POVRay格式是一种“场景描述语言”,具有复杂的编程结构等等。它远不止于简单地“把这个球放在这里”。 - Alnitak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接