FaceNinja

Poradnik · Unity · Godot 4 · three.js

Użyj swojej głowy w Unity, Godot lub three.js.

Głowa FaceNinja to zwykły plik GLB lub FBX w topologii MetaHuman, z oczami, zębami, teksturami 4K i 52 blendshape’ami ARKit, więc działa też poza Unreal. Oto jak przenieść ją do Unity, Godot 4 i three.js i jak poruszać twarzą z kodu.

Głowa FaceNinja wyrenderowana w three.js, z otwartymi ustami w uśmiechu
Przykład S-16, osoba syntetyczna, wczytany w three.js z GLB z kształtami ARKit, z podkręconym jawOpen i oboma kształtami mouthSmile. Zrzut ekranu z naszej strony testowej.

Który plik do którego silnika

Pliki według silnika
SilnikPlikJednostki
UnityFBX z kształtami ARKitCentymetry; Unity zamienia je na metry
Godot 4GLB z kształtami ARKitMetry, Y-up
three.jsGLB z kształtami ARKitMetry, Y-up

Oba w naturalnej wielkości. Włosów nie ma w GLB ani w FBX: w Unreal zastępują je groomy MetaHuman; w innych silnikach dodaj własne włosy.

Czy mogę użyć MetaHumana w Unity?

Głowa FaceNinja to twój własny plik, w topologii MetaHuman, na naszych warunkach: używaj jej w dowolnym silniku. MetaHumana zbudowanego w MetaHuman Creator obejmuje licencja Epic, która od czerwca 2025 dopuszcza też inne silniki i narzędzia (strona licencji Epic).

Unity: zaimportuj FBX

  1. Dodaj FBX

    Pobierz FBX z kształtami ARKit i upuść go do folderu Assets w projekcie.

  2. Sprawdź ustawienia importu

    Na zakładce Model zostaw włączone Convert Units, żeby centymetry stały się metrami, oraz Import BlendShapes (domyślnie). Kliknij Apply.

  3. Wyodrębnij materiały

    Na zakładce Materials wyodrębnij tekstury i materiały, żeby móc je edytować. W URP lub HDRP przekonwertuj materiały na shader Lit danego potoku.

  4. Znajdź kształty

    Umieść głowę na scenie. Skinned Mesh Renderer wymienia 52 kształty w sekcji BlendShapes, nazwane jak kształty ARKit.

  5. Steruj nimi z kodu

    Wagi w Unity mają zakres od 0 do 100.

    Kod
    // 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);

Wolisz GLB? Unity czyta go przez pakiet importera glTF, na przykład glTFast.

Godot 4: zaimportuj GLB

  1. Dodaj GLB

    Pobierz GLB z kształtami ARKit i skopiuj go do projektu. Godot importuje go jako scenę, w metrach.

  2. Znajdź kształty

    Otwórz scenę i zaznacz MeshInstance3D głowy. Inspector wymienia blend shapes pod nazwami ARKit w sekcji Blend Shapes.

  3. Steruj nimi z kodu

    Wagi w Godot mają zakres od 0 do 1.

    Kod
    # 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: wczytaj GLB

  1. Wczytaj go przez GLTFLoader

    Głowa otwiera się jako kilka siatek (skóra, oczy, zęby i tak dalej); każda ma te same 52 nazwy kształtów.

  2. Ustawiaj kształty po nazwie

    morphTargetDictionary przypisuje każdej nazwie ARKit jej indeks w morphTargetInfluences; wagi mają zakres od 0 do 1.

    Kod
    // 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. Przejrzyste oczy

    Aby mieć w three.js przejrzyste, odbijające światło oczy, pobierz plik z opcją cornea=transmission albo podmień materiały rogówki przy wczytywaniu (dokumentacja EN).

Na potrzeby tego poradnika wczytaliśmy GLB tego przykładu w three.js: liczba siatek po otwarciu to 6, a każda zawiera wszystkie 52 nazwy ARKit.

Dobrze wiedzieć

  • Ta sama siatka, ten sam rig. Każda głowa ma tę samą kolejność wierzchołków i te same UV, więc konfiguracja zrobiona dla jednej głowy działa dla wszystkich.
  • Skala. Każdy plik jest w naturalnej wielkości. Opcja pobierania measured skaluje głowę do szacunkowego rozmiaru osoby.
  • Lżejsze pliki. Poproś o tekstury 2K opcją pobierania texture_size, gdy 4K to więcej, niż potrzebujesz.
  • Podgląd webowy nie jest dla silników. Używaj GLB lub FBX, nie skompresowanego podglądu z aplikacji webowej.

Pytania o głowy w Unity, Godot i three.js

01Czy mogę użyć MetaHumana w Unity?
Głowa FaceNinja to zwykły plik FBX lub GLB, więc tak. Pełnego MetaHumana zbudowanego w MetaHuman Creator można od czerwca 2025 używać na licencji Epic także w innych silnikach; sprawdź jej warunki.
02Czy 52 blendshape’y się importują?
Tak, pod nazwami ARKit: jako BlendShapes na Skinned Mesh Renderer w Unity, Blend Shapes na MeshInstance3D w Godot i morph targety w three.js.
03Czy są włosy?
Nie w tych plikach. W Unreal dostarczają je groomy MetaHuman; w innych silnikach dodaj własne włosy.
04Który format jest mniejszy?
GLB z kształtami ARKit ma około 105 MB z teksturami 4K, a statyczny GLB około 65 MB. Tekstury 2K zmniejszają oba.

Czy mogę wypróbować głowę ze wszystkimi 52 kształtami?

Tak. Załóż konto za darmo i pobierz 20 przykładowych głów: każdy plik GLB i FBX ma wszystkie 52.