FaceNinja

가이드 · Unity · Godot 4 · three.js

내 헤드를 Unity, Godot, three.js에서 쓰기.

FaceNinja 헤드는 MetaHuman 토폴로지의 평범한 GLB나 FBX이며, 눈, 치아, 4K 텍스처, ARKit 블렌드셰이프 52개가 들어 있어 Unreal 밖에서도 작동합니다. Unity, Godot 4, three.js로 가져오는 방법과 코드로 얼굴을 움직이는 방법을 소개합니다.

입을 벌리고 웃는 모습으로 three.js에서 렌더링한 FaceNinja 헤드
ARKit 블렌드셰이프 포함 GLB로 three.js에 불러온 샘플 S-16. jawOpen과 두 mouthSmile 블렌드셰이프를 올렸습니다. 합성 인물이며, 저희 테스트 페이지의 스크린샷입니다.

엔진별로 쓸 파일

엔진별 파일
엔진파일단위
UnityARKit 블렌드셰이프 포함 FBX센티미터. Unity가 미터로 변환
Godot 4ARKit 블렌드셰이프 포함 GLB미터, Y-up
three.jsARKit 블렌드셰이프 포함 GLB미터, Y-up

둘 다 실물 크기입니다. 헤어는 GLB와 FBX에 들어 있지 않습니다. Unreal에서는 MetaHuman 그룸이 대신하고, 다른 엔진에서는 헤어를 직접 추가하십시오.

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 아래에 ARKit 이름으로 된 블렌드셰이프 52개가 나열됩니다.

  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는 glTFast 같은 glTF 임포터 패키지로 GLB를 읽습니다.

Godot 4: GLB 가져오기

  1. GLB 가져오기

    ARKit 블렌드셰이프 포함 GLB를 다운로드해 프로젝트에 복사합니다. Godot는 미터 단위의 씬으로 가져옵니다.

  2. 블렌드셰이프 찾기

    씬을 열고 헤드의 MeshInstance3D를 선택합니다. Inspector의 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).

이 가이드를 위해 이 샘플의 GLB를 three.js에서 불러왔습니다. 메시 6개로 열리며, 메시마다 ARKit 이름 52개가 모두 있습니다.

알아 두면 좋은 점

  • 같은 메시, 같은 리그. 모든 헤드의 버텍스 순서와 UV가 같아서, 한 헤드용으로 만든 설정이 모든 헤드에 작동합니다.
  • 스케일. 모든 파일은 실물 크기입니다. measured 다운로드 옵션은 헤드를 인물의 추정 크기에 맞춰 조정합니다.
  • 더 가벼운 파일. 4K가 필요 이상이라면 texture_size 다운로드 옵션으로 2K 텍스처를 요청하십시오.
  • 웹 미리보기는 엔진용이 아닙니다. 웹 앱이 보여 주는 압축 미리보기가 아니라 GLB나 FBX를 쓰십시오.

Unity, Godot, three.js에서 쓰는 헤드에 관한 질문

01Unity에서 MetaHuman을 써도 됩니까?
FaceNinja 헤드는 평범한 FBX나 GLB이므로 쓸 수 있습니다. MetaHuman Creator에서 만든 완전한 MetaHuman도 2025년 6월부터 Epic의 라이선스에 따라 다른 엔진에서 쓸 수 있으니, 해당 조건을 확인하십시오.
02블렌드셰이프 52개도 들어옵니까?
네, ARKit 이름 그대로 들어옵니다. Unity에서는 Skinned Mesh Renderer의 BlendShapes, Godot에서는 MeshInstance3D의 Blend Shapes, three.js에서는 모프 타깃입니다.
03헤어가 있습니까?
이 파일들에는 없습니다. Unreal에서는 MetaHuman 그룸이 채워 주고, 다른 엔진에서는 헤어를 직접 추가하십시오.
04어느 포맷이 더 작습니까?
ARKit 블렌드셰이프 포함 GLB는 4K 텍스처 기준 약 105 MB, 정적 GLB는 약 65 MB입니다. 2K 텍스처로 받으면 둘 다 작아집니다.

52개를 모두 가진 헤드를 시험해 볼 수 있습니까?

네. 무료로 가입하고 샘플 헤드 20개를 다운로드하십시오. 모든 GLB와 FBX에 52개가 다 들어 있습니다.