FaceNinja

คู่มือ · Unity · Godot 4 · three.js

ใช้ศีรษะของคุณใน Unity, Godot หรือ three.js

ศีรษะ FaceNinja คือ GLB หรือ FBX ธรรมดาบนโทโพโลยี MetaHuman พร้อมดวงตา ฟัน เท็กซ์เจอร์ 4K และ blendshape ARKit 52 แบบ จึงใช้นอก Unreal ได้ด้วย นี่คือวิธีนำเข้า Unity, Godot 4 และ three.js และวิธีขยับใบหน้าด้วยโค้ด

ศีรษะ FaceNinja เรนเดอร์ใน three.js อ้าปากยิ้ม
ตัวอย่าง S-16 บุคคลสังเคราะห์ โหลดใน three.js จาก GLB พร้อม ARKit shape โดยเพิ่มค่า jawOpen และ mouthSmile ทั้งสองแบบ ภาพหน้าจอจากหน้าทดสอบของเราเอง

ไฟล์ไหนสำหรับเอนจินไหน

ไฟล์ตามเอนจิน
เอนจินไฟล์หน่วย
UnityFBX พร้อม ARKit shapeเซนติเมตร Unity แปลงเป็นเมตรให้
Godot 4GLB พร้อม ARKit shapeเมตร, Y-up
three.jsGLB พร้อม ARKit shapeเมตร, Y-up

ทั้งคู่เป็นขนาดจริง ไม่มีผมใน GLB หรือ FBX: ใน Unreal groom ของ MetaHuman ทำหน้าที่แทน ในเอนจินอื่นให้เพิ่มผมเอง

ใช้ MetaHuman ใน Unity ได้ไหม

ศีรษะ FaceNinja เป็นไฟล์ของคุณเอง บนโทโพโลยี MetaHuman ภายใต้เงื่อนไขของเรา: ใช้ในเอนจินใดก็ได้ ส่วน MetaHuman ที่สร้างใน MetaHuman Creator อยู่ภายใต้ไลเซนส์ของ Epic ซึ่งตั้งแต่มิถุนายน 2025 อนุญาตให้ใช้กับเอนจินและเครื่องมืออื่นได้ด้วย (หน้าไลเซนส์ของ Epic)

Unity: นำเข้า FBX

  1. นำ FBX เข้ามา

    ดาวน์โหลด FBX พร้อม ARKit shape แล้ววางลงในโฟลเดอร์ Assets ของโปรเจกต์

  2. ตรวจการตั้งค่านำเข้า

    ในแท็บ Model ให้เปิด Convert Units ไว้ เพื่อให้เซนติเมตรเป็นเมตร และเปิด Import BlendShapes ไว้ (ค่าเริ่มต้น) แล้วกด Apply

  3. แยก material ออกมา

    ในแท็บ Materials ให้ extract เท็กซ์เจอร์และ material ออกมาเพื่อแก้ไขได้ ใน URP หรือ HDRP ให้แปลง material เป็น Lit shader ของไปป์ไลน์นั้น

  4. หา shape

    วางศีรษะในซีน Skinned Mesh Renderer แสดง 52 shape ใต้ BlendShapes ตามชื่อ 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 เข้ามา

    ดาวน์โหลด GLB พร้อม ARKit shape แล้วคัดลอกลงในโปรเจกต์ Godot นำเข้าเป็นซีน หน่วยเมตร

  2. หา shape

    เปิดซีนแล้วเลือก MeshInstance3D ของศีรษะ Inspector แสดง blend shape ตามชื่อ ARKit ใต้ Blend Shapes

  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

    ศีรษะเปิดออกมาเป็นหลายเมช (ผิว ตา ฟัน และอื่นๆ) แต่ละเมชมีชื่อ shape 52 ชื่อชุดเดียวกัน

  2. ตั้ง shape ตามชื่อ

    morphTargetDictionary จับคู่ชื่อ ARKit แต่ละชื่อกับ index ใน 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 หรือเปลี่ยน material ของกระจกตาตอนโหลดไฟล์ (เอกสาร EN)

เราโหลด GLB ของตัวอย่างนี้ใน three.js สำหรับคู่มือนี้: เปิดออกมาเป็น 6 เมช และแต่ละเมชมีชื่อ ARKit ครบทั้ง 52 ชื่อ

สิ่งที่ควรรู้

  • เมชเดียวกัน rig เดียวกัน ศีรษะทุกตัวมีลำดับเวอร์เท็กซ์และ UV เดียวกัน การตั้งค่าที่ทำไว้สำหรับศีรษะหนึ่งตัวจึงใช้กับทุกตัวได้
  • สเกล ทุกไฟล์เป็นขนาดจริง ตัวเลือกดาวน์โหลด measured ปรับสเกลศีรษะตามขนาดโดยประมาณของคนคนนั้น
  • ไฟล์เบาลง ขอเท็กซ์เจอร์ 2K ด้วยตัวเลือกดาวน์โหลด texture_size เมื่อ 4K มากเกินความจำเป็น
  • พรีวิวบนเว็บไม่ได้มีไว้สำหรับเอนจิน ใช้ GLB หรือ FBX ไม่ใช่พรีวิวแบบบีบอัดที่เว็บแอปแสดง

คำถามเรื่องศีรษะใน Unity, Godot และ three.js

01ใช้ MetaHuman ใน Unity ได้ไหม
ศีรษะ FaceNinja เป็น FBX หรือ GLB ธรรมดา จึงใช้ได้ ส่วน MetaHuman เต็มรูปแบบที่สร้างใน MetaHuman Creator ก็ใช้ในเอนจินอื่นได้ภายใต้ไลเซนส์ของ Epic ตั้งแต่มิถุนายน 2025 โปรดตรวจดูเงื่อนไข
02blendshape 52 แบบมาด้วยไหม
มา ตามชื่อ ARKit: เป็น BlendShapes บน Skinned Mesh Renderer ใน Unity, Blend Shapes บน MeshInstance3D ใน Godot และ morph target ใน three.js
03มีผมไหม
ไม่มีในไฟล์เหล่านี้ ใน Unreal groom ของ MetaHuman ให้ผม ในเอนจินอื่นให้เพิ่มผมเอง
04รูปแบบไหนเล็กกว่า
GLB พร้อม ARKit shape และเท็กซ์เจอร์ 4K มีขนาดราว 105 MB ส่วน GLB แบบ static ราว 65 MB เท็กซ์เจอร์ 2K ทำให้ทั้งคู่เล็กลง

ลองศีรษะที่มีครบ 52 shape ได้ไหม

ได้ สมัครได้ฟรีแล้วดาวน์โหลดศีรษะตัวอย่าง 20 ตัว: GLB และ FBX ทุกไฟล์มีครบ 52 แบบ