第一步是将资源转换为符合您需求的格式。为了从 3D 建模应用程序(如 Autodesk® 3ds Max®、Autodesk® Maya®、Blender 和 Houdini)转换到 Unity,建立适当的工作流程非常重要。从 3D 建模应用程序导出资源以便导入 Unity 时,需要考虑以下方面:
项目缩放比例和您偏好的测量单位在制作可信场景时起着非常重要的作用。在许多“真实世界”设置中,我们建议您假设 1 个 Unity 单位 = 1 米(100 厘米),因为许多物理系统都采用此单位大小。有关更多建议,请参阅艺术资源最佳实践指南。
为了保持 3D 建模应用程序与 Unity 之间的一致性,请始终验证导入的游戏对象比例和大小。3D 建模应用程序在 FBX 导出配置中有单位和比例设置(请参阅 3D 建模软件的文档以了解配置建议)。通常情况下,导入 Unity 时匹配比例的最佳方法是将这些工具设置为以厘米为单位并采用自动比例导出 FBX。但是,在启动新项目时,应始终检查单位和比例设置是否匹配。
要快速验证导出设置, 请在 3D 建模应用程序中创建一个简单的 1x1x1m 立方体,并将其导入 Unity。 在 Unity 中,创建默认的立方体 (GameObject > 3D Object > Cube)。此立方体为 1x1x1m。将此立方体用作比例参考,与导入的模型进行比较。 当 Inspector 中的变换组件的 Scale 属性设置为 1,1,1 时,这些立方体应该看起来完全相同:
注意:
通过占位体或草绘几何体阻挡场景时,使用参考点比例模型可能会有所帮助。请选择适合正在制作的场景的参考点比例模型。在 Spotlight Tunnel 示例场景案例中,我们使用了公园长椅:
场景不必使用与现实生活完全相同的比例。使用参考点比例模型可以在游戏对象之间确保相对的比例一致性,即使场景试图使用夸大的比例也没有关系。
纹理内部的信息需要包含正确的信息,以便在添加到材质时提供正确的结果。纹理创作软件(如 Photoshop 和 Substance Painter)在经过正确配置后可输出一致且可预测的纹理。
以下是 Substance Painter 预设配置的示例,此示例将输出与 Unity 标准不透明材质结合使用的纹理:
Unity 标准材质中的纹理分配为:
用于导出的输出映射 | Unity 标准着色器材质中的分配 |
---|---|
$textureSet_Albedo | 分配给 Albedo。 |
$textureSet_MetallicAOGloss | 分配给 Metallic 且 Occlusion.Smoothness Source 设置为 Metallic Alpha。 |
$textureSet_Normal | 分配给 Normal Map 字段。 |
注意:与将环境光遮挡 (AO) 导出为单独的纹理相比,将多个通道打包到单个纹理(例如 MetallicAOGloss)可节省纹理内存。这是使用 Unity 标准材质的最佳方式。
创建纹理时,不得混淆 Alpha 通道。下面的示例显示了因为 Photoshop 处理 PNG Alpha 通道的方式问题(不使用外部插件),PNG 文件中的透明度如何在 Photoshop 中让创作者感到困惑。在这种情况下,具有专用 Alpha 通道的未压缩 32 位 TGA 可能是更好的选择(假设源纹理文件大小不是问题):
上面显示的透明 PNG 文件是在 Photoshop 中创建的,其 Alpha 通道显示为黑色值。具有专用 Alpha 通道的 TGA 显示了预期值。如上所示,当分配给标准着色器材质的每个纹理从 Alpha 通道读取平滑度数据时,具有 PNG 纹理的材质的平滑度意外反转,而具有 TGA 纹理的材质的平滑度是正常的。
Unity 读取切线空间法线贴图时采用以下解释:
例如,Autodesk® 3ds Max® Render to Texture 法线贴图在默认情况下将绿色通道 Y+ 输出为 Down。这会导致沿 Y 轴反转的表面方向,并在照亮时产生错误结果。要验证法线贴图方向,请创建一个带凹形斜面的简单平面(下例中的中间图片)并将其烘焙到平坦平面。然后将烘焙后的法线贴图分配到 Unity 中具有可识别光源方向的平面内,并查看是否有任何轴被反转。
有关轴设置的建议,请参阅 3D 建模应用程序的文档。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.