你好!这个问题确实比较常见,主要是因为 MMD (PMX) 模型的一些特性与 UE5 (以及 VRM4U 插件) 的处理方式不完全兼容,特别是涉及到材质和复杂的表情(Morph Target/Blend Shape)实现方式时。
你在 Blender 中观察到的现象非常关键:眼睛前面的那个网格确实很可能就是 MMD 模型用来实现各种眼部表情(比如闭眼、笑眼、惊讶等)的“备用零件”或者说“变形目标” (Morph Target)。
问题分析:
眼珠没有材质(变成肉色):
- 原因: VRM4U 在导入 PMX 并转换材质到 UE5 材质系统时,可能未能正确识别或分配眼球部分的材质。它可能错误地将身体皮肤的材质应用到了眼球的网格体上,或者未能成功创建/链接眼球的专属材质。PMX 的材质定义方式与 UE5 不同,转换过程中可能丢失信息或出错。
- Blender 为何正常: Blender 的 MMD 导入插件(如
mmd_tools
或 cats Blender plugin
)是专门为处理 PMX/PMD 格式设计的,能更好地理解其独特的材质和贴图指定方式。
眼睛前面奇怪的网格体:
- 原因: 这正是你猜想的,与表情系统(Morph Targets / Blend Shapes / 形变目标)有关。MMD 模型实现表情的方式有时比较“暴力”,可能包含多个独立的、预先变形好的网格部件(比如不同状态的眼睛、嘴巴),通过 Morph 控制它们的显示/隐藏或顶点位置来实现表情切换。Blender 的 MMD 插件能够理解这种机制,并可能将其正确转换为 Blender 的 Shape Keys(形态键),只在激活特定表情时显示对应的网格。而 VRM4U 在将这种复杂的 PMX Morph 结构转换为 UE5 的 Morph Target 系统时,可能无法正确处理这些“备用”或“覆盖式”的表情网格,导致它们在默认状态下(未激活任何表情时)也错误地显示了出来,或者未能正确将其设置为 Morph Target 的一部分。
- Blender 为何正常: MMD 插件正确解析了 PMX 的 Morph 数据,知道哪些网格是基础模型,哪些是用于特定表情的变形,并将其转换为 Blender 的 Shape Key 系统,默认只显示基础网格。
解决方案:
你提出的“删掉眼睛前面的黑体,再让眼珠子上材质”是一个直接的修复方法,但可能会破坏原有的表情系统。这里提供几个方案,优先级从高到低(推荐度从高到低):
方案一:通过 Blender 进行中转和清理(推荐)
这是最常用且效果最好的方法,能最大程度地保留模型功能并适配 UE5。
- 在 Blender 中导入和检查:
- 使用 Blender 的 MMD 导入插件(如
mmd_tools
)将 PMX 模型导入 Blender。确认在 Blender 里显示正常,包括材质和表情(在 Shape Keys 面板查看)。
- 清理和优化模型:
- 处理表情网格: 检查你看到的那个“眼睛前面的网格”。
- 理想情况: 它应该已经被 MMD 插件正确地转换为了一个或多个 Shape Keys。在 Blender 的物体数据属性(绿色三角形图标)下的 Shape Keys 列表中,你应该能看到类似“眨眼”、“笑”等条目。拖动这些 Shape Key 的值,观察眼睛是否按预期变形。如果工作正常,那么这个“奇怪的网格”本身可能只是基础状态下需要被隐藏,或者它就是通过 Shape Key 控制顶点移动来实现变形的。
- 问题情况: 如果这个网格是作为一个独立的、始终显示的物体,或者没有被正确关联到 Shape Keys,那么你可能需要手动处理。
- 如果是独立的覆盖网格: 尝试将其设置为只在特定 Shape Key 激活时才显示(这在 Blender 里可能比较复杂,通常 MMD 插件会处理好)。或者,如果确认它是多余的(比如基础眼睛模型已经完整,这个只是覆盖层),可以考虑隐藏(H键)或删除它。删除前请务必确认不会影响你需要的表情! 先尝试隐藏,看导出后是否正常。
- 确认基础眼睛: 确保模型本身有一个完整的、基础状态的眼球网格。
- 修复/确认材质: 检查眼球的材质分配是否正确。如果需要,在 Blender 里手动指定正确的眼球贴图和材质设置。MMD 材质可能需要转换为 Blender 的标准 Principled BSDF 材质节点,以便更好地导出为 FBX 或 GLTF。
- 导出为 FBX 或 GLTF:
- 完成清理和检查后,将模型从 Blender 导出为
.fbx
或 .gltf
/.glb
格式。这两种是 UE5 支持得更好的标准格式。
- 导出设置(重要!):
- FBX: 确保勾选导出 "Armature"(骨架)、"Mesh"(网格),并且在 "Geometry"(几何体)设置里启用 "Apply Modifiers"(应用修改器,如果用了的话),在 "Bake Animation"(烘焙动画)部分通常不需要勾选,但要确保导出了骨骼权重。最重要的是,要查找与 "Morph Targets" 或 "Shape Keys" 相关的选项并确保勾选,这样表情数据才能被导出。
- GLTF/GLB: 确保在导出选项中勾选 "Include -> Custom Properties"(自定义属性)、"Mesh -> Morph Targets"(形变目标)等相关选项。
- 导入 UE5:
- 将导出的 FBX 或 GLTF 文件直接导入 UE5。这次不要使用 VRM4U 插件导入这个 FBX/GLTF 文件,而是使用 UE5 内建的标准导入器。
- 在 UE5 的导入选项中,确保勾选 "Import Morph Targets"(导入形变目标)。
- 检查导入后的模型,理论上材质和 Morph Targets(表情)应该会更正常。
方案二:直接在 UE5 中修复(你的想法的完善版)
如果不想经过 Blender,可以尝试直接在 UE5 里处理,但风险是可能无法完美还原所有表情。
- 处理多余网格:
- 选中导入到 UE5 场景中的 Skeletal Mesh Actor。
- 在 UE5 的模型编辑器(双击 Skeletal Mesh 资产打开)中,仔细检查模型的各个部分。找到眼睛前面那个多余的网格。
- 尝试隐藏: 最安全的方法是尝试找到控制这个部分显隐的方式。检查 Morph Targets 列表(在 Skeletal Mesh 编辑器里),看是否有控制这个网格显隐的 Morph。将其默认值设为 0 或不启用。
- 如果无法通过 Morph 控制: 你可以尝试在 3D 建模软件(如 Blender)中删除这个特定的面片,然后重新导入。或者,在 UE5 中,如果这个网格是独立的材质槽(Material Slot),你可以尝试给它分配一个完全透明的材质。
- 直接删除(谨慎): 如果你确定这个网格完全是多余的,并且不参与任何你需要的表情变形,可以在 Blender 中将其删除后重新导出导入,或者在 UE5 中(如果它是分离的元素)尝试隐藏。直接在 UE5 编辑器里“删除”面片通常比较困难,一般推荐在源头(Blender)处理。
- 修复眼球材质:
- 在 UE5 的 Skeletal Mesh 编辑器中,找到 "Asset Details"(资产详情)面板下的 "Materials"(材质)部分。
- 识别出哪个材质槽(Material Slot)对应的是眼球(可能需要逐个尝试替换材质来确定)。
- 找到或创建正确的眼球材质(可能需要手动导入眼球的纹理贴图,创建一个新的 Material Instance),然后将其拖拽到对应的材质槽上。
方案三:检查 VRM4U 导入设置
在重新导入 PMX 文件时,仔细检查 VRM4U 插件提供的所有导入选项。虽然可能性不大,但也许存在某些关于材质处理或 Morph Target 导入模式的设置,调整它们可能会改善结果。
总结:
- 最佳实践: 强烈推荐使用方案一(Blender 中转)。这是处理 MMD 模型导入游戏引擎最可靠的方法,可以让你在导入 UE5 之前彻底检查、清理和优化模型,确保兼容性。
- 直接修复: 方案二可以作为快速尝试,但可能无法完美解决表情问题,且手动修复材质比较繁琐。
- 表情丢失风险: 直接删除眼睛前的网格体很可能会导致相关的眼部表情失效。在 Blender 中处理可以更好地保留或重建这些表情。
希望这些方案能帮助你解决问题!祝你成功!