在3ds Max中准备模型

来自Light Stream (CN)
LumiBot讨论 | 贡献2026年9月2日 (三) 19:28的版本 (Перевод с русской вики (задача №983, LS Dev Hub))
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

本文说明模型应具备怎样的条件,才能以正确的尺寸、正确的朝上方向、且不产生数据损失地导入到 Light Stream 的场景中。这里讲的是 3ds Max,但对任何三维编辑器而言要求都是一样的:对程序来说重要的不是模型是用什么软件制作的,而是 *.obj 文件里记录了什么内容。导入过程本身在文章 导入OBJ模型 中有介绍。

为 Light Stream 准备模型,追求的不是「更好看」,而是「更清楚」。这里不会有精美的渲染效果:程序只用简单的填充色和单一贴图来显示物体。但吸附功能(Snap)是基于模型的顶点工作的,而模型中的物体会成为列表中的一行——你会在整个项目周期内不断翻阅这个列表,因此最重要的是正确的比例、干净的几何体和有意义的命名。

哪些内容会带入 Light Stream,哪些不会

会带入 不会带入
  • 几何体——三角形和四边形
  • 物体的划分及其名称
  • 法线(明暗与平滑)
  • 线条——会变成样条(spline)
  • 展开图(贴图坐标,UV)
  • 材质的基础颜色和基础贴图
  • 修改器、构建历史、骨骼与动画
  • 图层、编组、「父—子」关系
  • 单独存在的平滑组(smoothing group)
  • 除基础贴图外的所有贴图:凹凸、反射、透明、自发光
  • 同一物体的第二个及后续材质
  • 光源与摄像机——它们不会从 *.obj 中传入
  • 顶点颜色

单位与比例

坐标是按文件中原样读取的:导入时没有缩放窗口,所以无法在「导入时」调整大小。

Light Stream 场景以毫米为单位:文件中的一个长度单位等于一毫米。一座高30米的立面在文件中应占30000个单位,而LED灯条的单个像素应为三十到四十个单位。检查比例最简单的方法是用程序本身创建的立方体:一个尺寸为 1000 × 1000 × 1000 的立方体就是一个一米见方的立方体——把它放在模型旁边比较即可。

在 3ds Max 中,最方便的工作方式是:将系统单位设置为毫米,并按实际尺寸建模——这样导出时就不需要重新换算,缩放系数始终保持为 1。如果场景是用其他单位搭建的,请在导出时设置缩放系数:从米换算——1000,从厘米换算——10,从英寸换算——25.4

单位错误是导入后「什么都看不到」最常见的原因。以米为单位导出的模型会缩小一千倍,淹没在固定装置(fixture)之中;而不小心放大一千倍的模型则会跑到离坐标原点几公里之外,摄像机看到的只是一片空白。

朝向

Light Stream 场景中朝上的是 Z 轴——与 3ds Max 中一致。因此在 OBJ 导出设置中,应取消勾选 Flip YZ-axis(Y轴朝上时的轴交换)复选框:如果勾选了它,模型在场景中会侧倒。如果模型确实侧倒了,切换这个复选框后重新导出即可。

导出前,最好重置变换,并在 3ds Max 中把模型放到它相对坐标原点应处的位置:物体彼此之间的相对位置以及文件中的坐标,在导入时会被完整保留。

物体划分与命名

文件会被解析为若干独立的物体,每一个都会在 3D Objects(3D对象)窗口中成为一行,各自拥有自己的可见性复选框、材质和锁定状态。规则很简单:

  • 所有几何体都必须位于命名物体内。写在第一个物体之前的内容不会被导入。
  • 每个物体都必须有名称。未命名的物体或组会中断文件的读取:写在它下面的内容将无法进入场景,模型只会导入一半。
  • 名称必须使用拉丁字母,不能使用西里尔字母。物体名称和文件名中的俄文字母,在导入时会变成一串问号。
  • 按含义划分:如「facade」(立面)、「roof」(屋顶)、「column_left」(左立柱)。由整块实体构成的模型在列表中只会是一行——之后就无法隐藏或单独改变其中一部分的颜色。
  • 也不要走向另一个极端:几百个细小的物体会把 3D Objects 列表变成一条无穷无尽、难以查找的长条。

多边形

Light Stream 只读取三角形和四边形。五个及以上顶点的面会被静默跳过——场景中相应位置会出现破洞。

因此在导出设置的 Faces(面)分组中,应选择 Triangles(三角形)或 Quads(四边形),而不是 Polygons(多边形)。导出前请塌陷修改器,并将物体转换为多边形网格:NURBS、面片(patch)、带布尔运算的实体以及其他未经三角化/四边化处理的物体,要么无法进入 OBJ 文件,要么进入后的样子会与视口中显示的不同。

对几何体还有一项要求:不要导出顶点颜色。如果导出插件在顶点坐标之外还附加了顶点颜色,这样的顶点将无法被正确读取,引用它的面也会基于错误的点构建——模型会以内外翻转的状态到达。

法线

必须将法线写入文件——在导出设置中对应 Normals(法线)复选框。程序依据法线计算明暗:没有法线,物体就会以背景光颜色的单一平面填充来绘制,也就是看起来像一个没有立体感的扁平深色剪影。

平滑组(smoothing group)本身不会被读取,但也不需要单独设置:导出插件会把平滑处理的结果写入法线,物体进入场景后会保持与编辑器中相同的平滑或分面效果。

Light Stream 没有背面剔除(backface culling)——面从两侧都可见,因此内外翻转的部件不会消失。但是背向光源的法线会抵消明暗效果:这样的面会明显比周围的面暗。如果导入后模型上出现暗斑,请检查编辑器中法线的方向。

固定装置用的线条

写入文件的线条会作为现成的样条(spline)进入场景——可以直接沿着它们放置固定装置(Fixtures),无需手动描边。这是将灯条、灯串和轮廓灯的走线路径带入 Light Stream 最方便的方法:在 3ds Max 中按实际位置用样条画出它们,到程序里只需把它们与映射(mapping)关联即可。

要让线条顺利导入:

  • 打开线条导出——在 OBJ 导出设置中勾选 Shapes/Lines(形状/线条);
  • 将样条转换为具有所需点数的折线:曲线在文件中是按线段记录的,步长越小,进入场景的点就越多;
  • 把各段合并成一条完整的线。文件中的每条线都会成为一个独立的样条,因此由未连接的线段拼成的走线,导入后会变成一堆零散的短样条;
  • 如果样条没有出现,请关闭贴图坐标的导出:有些导出插件也会把贴图坐标写入线条数据中,而这样的线条会被 Light Stream 跳过。

不需要为固定装置单独建一个物体:3ds Max 中的光源根本不会保存到 OBJ 里。如果还想把已经摆放好的灯具带入程序,可以把模型导出为 *.fbx——从这种格式中,除了物体和样条之外,单个固定装置也能一并导入。

材质与贴图

OBJ 会把材质存储在模型旁边的一个单独文件中,而贴图则是另外的图片文件,因此请启用材质导出,并始终把整个模型连同整个文件夹一起转移。

关于材质,需要提前了解:

  • 一个物体——一种材质。多组件材质(Multi/Sub-Object)只有其中一部分会被带入。如果一个部件的不同部分需要不同颜色,请按材质把该部件拆分成多个物体。
  • 材质中只会取用基础颜色和基础贴图。透明度、反射、凹凸、自发光以及任何程序化贴图都会被忽略——最好把它们「烘焙」进普通图片,或者干脆不要依赖它们。
  • 贴图应为普通的 JPG、PNG、BMP 或 GIF 图片。请把它们放在模型旁边或子文件夹中:程序会按文件名在相邻文件夹中查找。文件名必须使用拉丁字母。
  • 贴图需要展开图(UV unwrap)。没有展开图的物体,贴图会被拉伸成单一颜色。
  • Light Stream 没有自发光材质。如果某个部件应该看起来是发光的——例如招牌、屏幕、光线——请在导入后,在 Properties(属性)窗口的 Material(材质)部分为它打开 Glow(发光)复选框。

颜色、贴图和发光效果也完全可以在程序里手动指定,因此对于辅助性几何体,完全可以不在编辑器里设置材质:没有材质的物体导入后会是白色的。

模型复杂度

模型会被整体带入项目文件,因此它的体积就是项目的体积、影响打开时间,并且每一帧预览都会占用显卡资源。而且在程序中网格占用的空间比在编辑器中更大:每个面都连同自己的顶点一起存储。

导出前合理的最低限度准备工作:

  • 删除物体上看不见的部分:内部结构、背面、隐藏的细节、辅助物体、重复的副本;
  • 去掉预览中看不到的细小部件:螺栓、型材、纹理细节、一毫米的倒角;
  • 减少圆角和管道的分段数——平滑度的代价很高;
  • 在需要的地方保留顶点:Snap to Vertices(吸附到顶点)依赖这些顶点工作,固定装置才能精确落在角点和棱边上。如果一排灯具需要沿平整的墙面排列,请在模型上沿其边缘添加棱边。

导出流程

  1. 在 3ds Max 场景中只保留应带入 Light Stream 的内容:模型本身以及固定装置用的线条。
  2. 塌陷修改器,将物体转换为多边形网格,删除隐藏和多余的内容。
  3. 检查物体名称:必须存在名称,且必须是拉丁字母。
  4. 检查尺寸,并把模型换算到「一个单位——一米」的比例。
  5. 将选中的内容导出为 *.obj
  6. 在导出设置中:Faces(面)——选择 Triangles(三角形)或 Quads(四边形);Normals(法线)——启用;Texture coordinates(贴图坐标)——如有贴图则启用;Shapes/Lines(形状/线条)——如场景中有固定装置用的线条则启用;Flip YZ-axis——取消勾选;材质导出——启用。
  7. 把模型、材质文件和贴图保存到同一个文件夹中,并从那里导入。

导出插件会把结果文件的第一行留给关于自身的服务性记录——如果你要手动编辑文件,请不要删除这一行:导入时不会读取第一行,你放在这个位置的任何内容都会随之丢失。

导入后应检查的内容

  1. 3D View(3D视图)窗口中不选中任何物体的情况下按 Z 键——摄像机会把整个场景纳入视野。在旁边创建一个尺寸为 1000 × 1000 × 1000 的立方体并进行比较:如果立面旁边的一米立方体看起来确实是一米见方,说明比例正确。
  2. 查看 3D Objects(3D对象)列表:所有部件是否齐全,名称是否清晰可读,线条生成的样条是否已导入。
  3. 用摄像机环绕模型查看,寻找复杂面处可能出现的破洞,以及法线翻转处可能出现的暗斑。
  4. 如果你导出了材质,请确认物体不是白色或灰色的。

凡是对不上的地方,更可靠的做法是在 3ds Max 中修正后重新导入:几何体无法用 Light Stream 自身的工具来修正,而在编辑器中修正好的模型也可以在其他项目中复用。

还有哪些内容会有帮助

  • 导入过程本身是如何进行的,以及导入后如何处理场景中的模型——参见 导入OBJ模型
  • 已导入物体的名称、可见性、锁定和材质——参见 3D对象
  • 吸附到顶点以及 3D View(3D视图)窗口的其他按钮——参见 3D 工具栏
  • 如何沿已完成的模型放置固定装置——参见 添加3D样条2D 与 3D 的关联