指南 · Unity · Godot 4 · three.js
在 Unity、Godot 或 three.js 中使用你的头部。
FaceNinja 头部是 MetaHuman 拓扑上的普通 GLB 或 FBX,带眼睛、牙齿、4K 纹理和 52 个 ARKit 混合变形,所以在 Unreal 之外也能用。下面介绍如何把它导入 Unity、Godot 4 和 three.js,以及如何用代码让面部动起来。
发布于

jawOpen 和两个 mouthSmile 形状。截图来自我们自己的测试页面。哪个引擎用哪个文件
| 引擎 | 文件 | 单位 |
|---|---|---|
| Unity | 带 ARKit 形状的 FBX | 厘米;Unity 会转换为米 |
| Godot 4 | 带 ARKit 形状的 GLB | 米,Y 轴向上 |
| three.js | 带 ARKit 形状的 GLB | 米,Y 轴向上 |
两者都是真人大小。GLB 和 FBX 中都没有头发:在 Unreal 中由 MetaHuman 的毛发(Groom)替代;在其他引擎中,请自行添加头发。
可以在 Unity 中使用 MetaHuman 吗?
FaceNinja 头部是你自己的文件,采用 MetaHuman 拓扑,受我们的条款约束:可以在任何引擎中使用。你在 MetaHuman Creator 中创建的 MetaHuman 受 Epic 的许可约束,自 2025 年 6 月起,该许可也允许在其他引擎和工具中使用(Epic 的许可页面)。
Unity:导入 FBX
导入 FBX
下载带 ARKit 形状的 FBX,拖进项目的 Assets 文件夹。
检查导入设置
在 Model 选项卡中保持 Convert Units 打开,让厘米变为米,并保持 Import BlendShapes 打开(默认如此)。点击 Apply。
提取材质
在 Materials 选项卡中提取纹理和材质,以便编辑。在 URP 或 HDRP 中,把材质转换为该管线的 Lit 着色器。
找到形状
把头部放进场景。Skinned Mesh Renderer 在 BlendShapes 下列出 52 个形状,以 ARKit 形状命名。
用代码驱动
Unity 中的权重范围是 0 到 100。
代码// Unity (C#): the head's SkinnedMeshRenderer; Unity blend shape weights run 0–100 var smr = GetComponentInChildren<SkinnedMeshRenderer>(); var mesh = smr.sharedMesh; for (int i = 0; i < mesh.blendShapeCount; i++) if (mesh.GetBlendShapeName(i).EndsWith("jawOpen")) smr.SetBlendShapeWeight(i, 60f);
更想用 GLB?Unity 可以通过 glTF 导入包(例如 glTFast)读取它。
Godot 4:导入 GLB
导入 GLB
下载带 ARKit 形状的 GLB,复制到你的项目中。Godot 会把它作为场景导入,单位为米。
找到形状
打开场景,选中头部的 MeshInstance3D。检查器在 Blend Shapes 下按 ARKit 名称列出混合变形。
用代码驱动
Godot 中的权重范围是 0 到 1。
代码# Godot 4 (GDScript): the head's MeshInstance3D; weights run 0–1 @onready var head: MeshInstance3D = $Head func _ready(): var i := head.find_blend_shape_by_name("jawOpen") if i >= 0: head.set_blend_shape_value(i, 0.6)
three.js:加载 GLB
用 GLTFLoader 加载
头部会以多个网格打开(皮肤、眼睛、牙齿等);每个网格都带有同样的 52 个形状名称。
按名称设置形状
morphTargetDictionary把每个 ARKit 名称映射到它在morphTargetInfluences中的索引;权重范围是 0 到 1。代码// three.js: every mesh of the head carries the same 52 names; weights run 0–1 import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; const gltf = await new GLTFLoader().loadAsync('head.glb'); gltf.scene.traverse((o) => { const i = o.morphTargetDictionary?.jawOpen; if (i !== undefined) o.morphTargetInfluences[i] = 0.6; }); scene.add(gltf.scene);清澈的眼睛
要在 three.js 中得到清澈、有反光的眼睛,下载时使用
cornea=transmission选项,或在加载文件时替换角膜材质(文档 EN)。
为了写这篇指南,我们在 three.js 中加载了这个样本的 GLB:它以 6 个网格打开,每个网格都列出了全部 52 个 ARKit 名称。
须知
- 同一网格,同一绑定。 每个头部的顶点顺序和 UV 都相同,所以为一个头部做的设置适用于所有头部。
- 尺寸。 每个文件都是真人大小。下载选项
measured会把头部缩放到估算的本人尺寸。 - 更轻的文件。 如果 4K 超出你的需要,可以用下载选项
texture_size请求 2K 纹理。 - 网页预览不适合用于引擎。 请使用 GLB 或 FBX,而不是网页应用显示的压缩预览。
关于在 Unity、Godot 和 three.js 中使用头部的问题
- 01可以在 Unity 中使用 MetaHuman 吗?
- FaceNinja 头部是普通的 FBX 或 GLB,所以可以。自 2025 年 6 月起,按照 Epic 的许可,在 MetaHuman Creator 中创建的完整 MetaHuman 也可以在其他引擎中使用;请查看其条款。
- 0252 个混合变形会一起导入吗?
- 会,并保留 ARKit 名称:在 Unity 中是 Skinned Mesh Renderer 上的 BlendShapes,在 Godot 中是 MeshInstance3D 上的 Blend Shapes,在 three.js 中是变形目标(morph target)。
- 03有头发吗?
- 这些文件里没有。在 Unreal 中由 MetaHuman 的 groom 提供;在其他引擎中,请自行添加头发。
- 04哪种格式更小?
- 带 ARKit 形状的 GLB 在 4K 纹理下约 105 MB,静态 GLB 约 65 MB。用 2K 纹理两者都会更小。