FaceNinja

指南 · Unity · Godot 4 · three.js

在 Unity、Godot 或 three.js 中使用你的頭部。

FaceNinja 頭部是 MetaHuman 拓樸上的普通 GLB 或 FBX,帶眼睛、牙齒、4K 紋理和 52 個 ARKit 混合變形,所以在 Unreal 之外也能用。下面介紹如何把它匯入 Unity、Godot 4 和 three.js,以及如何用程式碼讓臉部動起來。

在 three.js 中渲染的 FaceNinja 頭部,張嘴微笑
樣本 S-16,一位合成人物,在 three.js 中從帶 ARKit 形狀的 GLB 載入,調高了 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

  1. 匯入 FBX

    下載帶 ARKit 形狀的 FBX,拖進專案的 Assets 資料夾。

  2. 檢查匯入設定

    在 Model 分頁中保持 Convert Units 開啟,讓公分變為米,並保持 Import BlendShapes 開啟(預設如此)。點選 Apply。

  3. 提取材質

    在 Materials 分頁中提取紋理和材質,以便編輯。在 URP 或 HDRP 中,把材質轉換為該管線的 Lit 著色器。

  4. 找到形狀

    把頭部放進場景。Skinned Mesh Renderer 在 BlendShapes 下列出 52 個形狀,以 ARKit 形狀命名。

  5. 用程式碼驅動

    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

  1. 匯入 GLB

    下載帶 ARKit 形狀的 GLB,複製到你的專案中。Godot 會把它作為場景匯入,單位為米。

  2. 找到形狀

    開啟場景,選取頭部的 MeshInstance3D。檢查器在 Blend Shapes 下按 ARKit 名稱列出混合變形。

  3. 用程式碼驅動

    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

  1. 用 GLTFLoader 載入

    頭部會以多個網格開啟(皮膚、眼睛、牙齒等);每個網格都帶有同樣的 52 個形狀名稱。

  2. 按名稱設定形狀

    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);
  3. 清澈的眼睛

    要在 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 紋理兩者都會更小。

能試試帶全部 52 個形狀的頭部嗎?

能。免費建立帳號,下載 20 個範例頭部:每個 GLB 和 FBX 都帶有全部 52 個。