相关文章推荐
不要命的帽子  ·  在Power Apps 中使用3D ...·  1 年前    · 
OBJ文件是一种常见的3D模型格式,由WavefrontTechnologies创建,用于存储几何信息和3D数据。它支持多边形面、顶点、法线、纹理映射等,且是开源和跨平台的。在instant-ngp中,可以将NeRF结果保存为OBJ格式的mesh。OBJ文件由顶点、法线、纹理坐标等数据定义,并可通过CAD或3D图形软件如Blender、MeshLab等打开编辑。 摘要生成于 ,由 DeepSeek-R1 满血版支持,

instant-ngp 中使用NeRF时,保存的mesh可指定为obj,这里对obj文件格式进行说明。

OBJ文件(.obj)包含有关3D对象的几何体的信息 。OBJ文件可以支持无限的颜色(unlimited colors),一个文件可以定义多个对象。
OBJ文件中的对象由多边形面(它们本身由顶点或点定义)和法线、曲线、纹理映射和曲面(polygon faces(which themselves are defined by vertexes, or points) and normals, curves, texture maps, and surfaces)定义. OBJ是一个矢量文件 ,它使定义的对象具有可伸缩性。没有最大文件大小限制。
OBJ文件格式由Wavefront Technologies创建,用于定义、存储几何对象和3D数据。文件扩展名OBJ全称为Wavefront OBJect。
在Windows、Mac或Linux上需要一个CAD或3D图形/建模程序查看、打开或编辑OBJ文件,可用于处理OBJ文件的软件如:Adobe Photoshop CC、Autodesk Maya、Blender、MeshLab、Microsoft 3D Viewer(3D 查看器)等。
OBJ文件是一种文本文件,可以使用编辑器直接打开进行查看和编辑修改
与其它3D文件格式相比,OBJ文件具有一些优势:
(1).OBJ拥有庞大的用户群和支持系统;
(2).OBJ具有简单的文件结构;
(3).OBJ是开源的;
(4).OBJ文件可以导入和导出到3D和CAD程序;
(5).OBJ文件可以近似复杂的表面几何形状,而不需要很大的文件大小;
(6).OBJ文件支持多种颜色;
(7).OBJ文件包括位置,法线(normals)和UV(vt)数据,并允许精确的表面细分(surface subdivisions).

一个OBJ文件由几个语句类型组成,当它们组合在一起时,就定义了一个3D对象 。这些语句描述了形状(shapes)并将它们彼此定位:
1. 注释语句以#开头 ,该语言忽略#之后的任何内容,直到下一行。
2.Vertex(顶点) data: 顶点是面或多边形的角相交的点。顶点语句以v开头 ,包含以下内容:
(1).三个必需变量: x,y和z;
(2).一个可选变量: w;
(3).变量值的范围为0到1,默认值为1.
注意:
(1). 某些应用程序支持颜色;如果可用,请在变量后添加RGB值,颜色值的范围为0到1
(2).如果为形状中的一个顶点定义了UV(vt)或顶点法线(vn),则必须为所有顶点定义它们。
UV定义如何将3D模型映射到2D表面(例如计算机显示器),并确定如何将纹理应用到3D对象;它们有时被称为纹理(贴图)顶点(texture vertexes)。 UV语句以vt开头 ,包含以下内容:
(1).一个必需变量:u;
(2).两个可选变量:v和w;
(3).变量值的范围为0到1,默认值为0.
顶点法线(vertex normal)通过指示光源的方向来定义阴影和亮度(shading and brightness)。 顶点法线语句以vn开头 ,包含以下内容:
(1).三个必需变量:x、y和z.
参数空间顶点(parameter space vertices)是自由形式的曲线或表面(surface)属性/控制点。 参数空间顶点语句以vp开头 ,包含以下内容:
(1).三个必需变量:u、v和w;
(2).使用u表示曲线点(curve points);
(3).用u和v表示曲面点和非合理裁剪曲线控制点(use u and v for surface points and non-rational trimming curve control points);
(4).使用u、v和w进行合理裁剪曲线控制点(use u, v, and w for rational trimming curve control points).
3.Surface(曲面) data:自由形式曲线(free-form curve)或曲面类型包括基矩阵、贝塞尔曲线、B样条、基数曲线和泰勒曲线。定义包含如下内容:
(1).度数(用deg表示);
(2).基矩阵(用bmat表示);
(3).步长(用step表示);
(4).曲线类型(用cstype表示);
(5).自由曲面之间的连接(用con表示).
曲线或曲面主体的定义包含以下内容:
(1).参数值(用parm表示);
(2).外饰(outer trimming)(用trim表示);
(3).内部修剪环(inner trimming loop)(用hole表示);
(4).特殊曲线(用scrv表示);
(5).特殊点(用sp表示);
(6).结束语句(用end表示).

4.Element data:可以包括的其它元素包括点(p)、线(l)、面(f)、曲线和2d曲线(分别为curv和curv2D)以及曲面(surf)。
注意:
(1). 每个面(f)可以包含三个或更多顶点 ;
(2).可以使用三个以上的顶点/纹理/法线索引来定义多边形。
在描述一个面(f)的时候 :
(1).纹理坐标索引作为可选项用于描述该顶点相关的纹理坐标。为了描述纹理坐标索引,必须在顶点坐标索引之后紧接着添加一根斜线(/),之后再紧接着添加纹理坐标索引。在斜线的前后都不能有空格。
(2).要添加顶点法线索引,必须在纹理索引之后添加第二根斜线(/),然后在之后添加法线索引。斜线前后不能有空格。
(3).可以在定义几何图元的时候忽略纹理坐标索引,但是必须在顶点坐标索引后加上两根斜线(//),然后添加法线索引。
5.Grouping data:你可以使用分组语句连接各种元素。组使用以下指示符,后面跟着名称来定义每个组:
(1).Group name: g;
(2).Smoothing group: s;
(3).Merging group: mg;
(4).Object name: o;
6.Material Template Library(MTL, 材质模版库)files: OBJ文件不包含可视(颜色)信息,但是你可以通过引用支持文件将这些信息添加到OBJ文件中的对象中。 材质模板库(.mtl) 是一种广泛使用的ASCII文件格式,它决定OBJ文件中定义的对象如何使用Phong反射模型反射光线。

注:以上内容全部来自网络整理,主要参考: https://www.marxentlabs.com/obj-files/

以下是instant-ngp中将mesh保存为obj时的部分内容:

mtllib nerf.mtl
v 1.02146 -8.25844 -8.53257 0.690 0.659 0.674
v 1.06285 -8.25844 -8.53257 0.722 0.706 0.722
# v ...
vn -1.00000 0.00000 -0.00000
vn 1.00000 0.00000 0.00000
# vn ...
vt 0.00007 0.99991
vt 0.00101 0.99859
# vt ...
g default
usemtl nerf
f 1974/3/1974 6320/2/6320 2452/1/2452
f 6320/6/6320 2358/5/2358 2452/4/2452
# f ...

下图是使用MeshLab打开lego的obj文件时的结果:

OBJ 文件 是Alias|Wavefront公司为它的一套基于工作站的 3D 建模和动画软件"Advanced Visualizer"开发的一种标准 3D 模型 文件格式 ,很适合用于 3D 软件模型之间的互导,也可以通过Maya读写。比如你在 3d sMax或LightWave中建了一个模型,想把它调到Maya里面渲染或动画,导出 OBJ 文件 就是一种很好的选择。目前几乎所有知名的 3D 软件都支持 OBJ 文件 的读写,不过其中很多需要通过插件才能实现。 OBJ 文件 是一种文本 文件 ,可以直接用写字板打开进行查看和编辑修改。另外,有一种与此相
OBJ 文件 是一种标准的 3D 模型 文件格式 ,很适合用于 3D 软件模型之间的互导。比如在 3d sMax或LightWave中建了一个模型,想把它调到Maya里面渲染或动画,导出 OBJ 文件 就是一种很好的选择。目前几乎所有知名的 3D 软件都支持 OBJ 文件 的读写,不过很多软件需要通过插件才能做到这一点。 OBJ 文件 特点 (1) OBJ 是一种 3D 模型 文件 ,因此不包含动画、材质特性、贴图路径、动力学、粒子等信息
原文链接:https://www.jianshu.com/p/f7f3e7b6ebf5 加载 3D 模型的时候,遇到. obj 格式的模型 文件 。之前有专门看过相关的资料,可惜没有总结,一下就忘了。再次用到,又去搜索了一番,发现网上很多文章讲的不是很全面。于是就找到百科上的文档,总结一下。 Obj (或者. obj )是一种几何定义 文件格式 ,第一次是 Wavefront Technologies在他们的可视化加强动画包里面使用的。 文件格式 是公开的,并能很好的在其他的 3D 应用中被支持。 Obj 文件格式 是一种简单的单独表示 3D
OBJ 是一种几何定义 文件格式 ,Wavefront Technologies 公司在可视化加强动画包中第一次使用了这个格式, 文件格式 是公开的,并具有及其优质的兼容性和跨平台、跨行业的通用性,在所有 3D 应用软件中被支持。 OBJ 文件 可以以 ASCII 编码也可以以二进制格式编码,以 ASCII 格式编码的后缀名为. obj ,以二进制格式编码的后缀名为.mod。 OBJ 格式的三维网格模型储存了模型的顶点、面片、法向量纹理等几何信息。 OBJ 文件 使用标准的 Polygon(多边形) 储存格式,直接储