Version: 2017.4
网格组件
材质

Meshes

__网格__构成了 3D 世界的很大一部分。除了一些 Asset Store 插件外,Unity 不提供建模工具。然而,Unity 与大多数 3D 建模软件包之间有很好的交互性。Unity 支持三角形或四边形的多边形网格。Nurbs、Nurms、Subdiv 曲面必须转换为多边形。

3D formats

Unity supports importing Meshes from two different types of files:

  1. Exported 3D file formats, such as .fbx or .obj. You can export files from 3D modeling software in generic formats that can be imported and edited by a wide variety of different software.
  2. Proprietary 3D or DCC (Digital Content Creation) application files, such as .max and .blend file formats from 3D Studio Max or Blender, for example. You can only edit proprietary files in the software that created them. Proprietary files are generally not directly editable by other software without first being converted and imported. An exception to this is SketchUp .skp files, which both by SketchUp and Unity can read.

Unity 可以导入和使用这两种类型的文件,每种文件都有各自的优缺点。

Exported 3D files

Unity can read .fbx, .dae (Collada), .3ds, .dxf, .obj, and .skp files. Refer to your 3D modeling software documentation for information about exporting 3D files.

优点:

  • Instead of importing the whole model into Unity, you can import only the parts of the model you need.
  • 导出的通用文件通常小于专有的同等文件。
  • 使用导出的通用文件有利于采用模块化方法(例如,为碰撞类型或交互使用不同的组件)。
  • 可以从 Unity 不直接支持的软件导入这些文件。
  • Exported 3D files (.fbx, .obj) can be reimported into 3D modeling software after exporting, to ensure that all of the information has been exported correctly.

缺点:

  • Models must be re-exported manually if changes are made to the original file.
  • Extra care must be taken to keep track of versions between the source file and the files imported into Unity.

Proprietary 3D application files

Unity can import proprietary files from the following DCC software: Max, Maya, Blender, Cinema4D, Modo, Lightwave & Cheetah3D. Files imported this way are converted into .fbx files by Unity during the import process.

优点:

  • Updates made to the original model are automatically imported into Unity.
  • This is initially simple - but it can become more complex later in development.

缺点:

  • A licensed copy of the software used must be installed on all machines using the Unity project.
  • Software versions should be the same on each machine using the Unity project. Using a different software version can cause errors or unexpected behavior when importing 3D models.
  • 文件可能会因不必要的数据而变得臃肿。
  • Big files can slow down Unity project imports or Asset re-imports, because you have to run the DCC software you use as a background process when you import the model into Unity.
  • 在导入过程中,Unity 会在内部将专有文件导出到 .fbx。因此难以验证 .fbx 数据和进行故障排除。

Note: Assets saved as .ma, .mb, .max, .c4d, or .blend files fail to import unless you have the corresponding DCC software installed in your computer. This means that everybody working on your Unity project must have the correct software installed. For example, if you use Maya to create ExampleModel.mb and copy it into your project, anyone else opening that project also needs to have Maya installed on their computer.

Here are some guidelines for directly supported 3D applications, others can most often export file type listed above.

Textures

Unity 将尝试通过遵循特定的搜索计划在导入时自动查找网格使用的纹理。首先,导入器将在与网格相同的文件夹中或任何父文件夹中查找名为 Textures 的子文件夹。如果此过程失败,将对项目中的所有纹理执行穷尽搜索。虽然速度只是稍慢,但穷尽搜索的主要缺点是项目中可能有两个或多个同名的纹理。在这种情况下,不能保证找到合适的纹理。

纹理放置在资源级别或更高级别的 Textures 文件夹中
纹理放置在资源级别或更高级别的 Textures 文件夹中

FBX importer options for the model

Material Generation and Assignment

对于每种导入的材质,Unity 将应用以下规则:

如果禁用材质生成(即取消选中 __Import Materials__),则会分配 Default-Diffuse 材质。如果启用该选项,则执行以下操作:

  • Unity 将根据 Material Naming 设置,为 Unity 材质选择一个名称
  • Unity 将尝试查找具有该名称的现有材质。材质搜索范围由 Material Search 设置进行定义。
  • 如果 Unity 成功找到现有材质,则会将该材质用于导入的场景,否则将生成新材质

Colliders

Unity 使用两种主要类型的碰撞体:__网格碰撞体__和__原始碰撞体。网格碰撞体是使用导入网格数据的组件,可用于环境碰撞。在 Import Settings 中启用 Generate Colliders__ 后,将网格添加到场景时会自动添加网格碰撞体。就物理系统而言,网格碰撞体被认为是实体的。

如果对象正在移动(例如汽车),则无法使用网格碰撞体。必须改用原始碰撞体。此情况下应禁用 Generate Colliders 设置。

Animations

Animations are automatically imported from the scene. For more details about animation import options see the section on asset preparation and import in the Mecanim animation system.

Normal mapping and characters

如果一个角色具有从模型的复杂多边形版本生成的法线贴图,则应导入__平滑角__为 180 度的游戏质量版本。这样将防止由于切线分裂而导致光照中出现看起来奇怪的接缝。如果使用这些设置后仍然存在接缝,请启用 Split tangents across UV seams

如果是将灰度图像转换为法线贴图,则无需担心这一点。

Blendshapes

Unity 支持 BlendShape(也称为变形目标或顶点级动画)。Unity 可从 .FBX(BlendShape 和控制动画)和 .dae(仅 BlendShape)导出的 3D 文件导入 BlendShape。Unity BlendShape 支持顶点、法线和切线上的顶点级动画。网格可能同时受到皮肤和 BlendShape 的影响。使用 BlendShape 导入的所有网格都将使用 SkinnedMeshRenderer(无论其是否有皮肤)。BlendShape 动画作为常规动画的一部分导入,仅对 SkinnedMeshRenderer 上的 BlendShape 权重进行动画化。

有两种方法可以导入带法线的 BlendShape:

1.将 Normals 导入模式设置为 __Calculate__,这样就会使用相同的逻辑来计算网格和 BlendShape 上的法线。 1.将平滑组信息导出到源文件。这样,Unity 就会通过网格和 BlendShape 的平滑组计算法线。

如果需要 BlendShape 上的切线,则应将 Tangents 导入模式设置为 Calculate

提示

  • 尽可能将网格合并在一起。让它们共享材质和纹理。这种做法可大幅提升性能。
  • 如果需要在 Unity 中进一步设置对象(添加物理设置、脚本或其他酷炫功能),为了给自己减少麻烦,请在 3D 应用程序中妥善命名对象。处理大量 pCube17Box42 之类的对象可一点都不好玩。
  • 使网格在 3D 应用程序中的世界原点居中。这样将使网格更容易在 Unity 中定位。
  • 如果网格没有顶点颜色,Unity 将在第一次渲染网格时自动将全白色顶点颜色数组添加到网格。

The Unity Editor shows too many vertices or triangles (compared to what my 3D app says)

这是正常的。您正在查看的是实际发送到 GPU 进行渲染的顶点/三角形数量。除了材质要求发送两次这些顶点/三角形的情况之外,其他诸如硬法线和非连续 UV 的元素与建模应用程序显示的情况相比会显著增加顶点/三角形数量。三角形在 3D 和 UV 空间中都需要处于连续状态以形成条带,因此当有 UV 接缝时,必须使三角形退化以形成条带,而这会增加计数。

网格组件
材质