2026년 9월에 각 프로그램의 공식 문서와 릴리스 노트로 확인한 기준으로 VSeeFace(v1.13.38c5)는 VRM 0.x만 읽고, Warudo·VNyan·VMagicMirror(v3.0.0 이상)·three-vrm은 두 버전을 모두 읽습니다. 이렇게 갈리는 이유는 VRM 정보를 담는 glTF 확장의 이름이 VRM에서 VRMC_vrm으로 바뀌었기 때문입니다. 0.x만 아는 프로그램은 1.0 파일을 VRM으로 알아보지 못합니다. 쓰려는 프로그램 중 0.x만 읽는 것이 하나라도 있으면 0.x로, 없으면 1.0으로 내보내면 됩니다.
두 버전 모두 확장자는 .vrm이고 속은 glTF 바이너리(GLB)라서 파일 이름으로는 구분되지 않습니다.

0.x와 1.0 비교표: 파일 구조에서 바뀐 것
vrm.dev 변경점 문서와 vrm-c 사양 저장소(0.0 사양, VRMC_vrm-1.0, VRMC_springBone-1.0)를 기준으로 정리했습니다.
| 항목 | VRM 0.x | VRM 1.0 |
|---|---|---|
| 확장 이름 | VRM 하나에 전부 | VRMC_vrm, VRMC_springBone, VRMC_materials_mtoon, VRMC_node_constraint |
| 모델 정면 | -Z | +Z |
| 기본 포즈 | T포즈, 본 로컬 회전 없음(정규화) | T포즈, 본마다 원래 방향 유지 가능 |
| 필수 본 | 17개(chest, neck 포함) | 15개(chest, neck 선택) |
| 엄지 본 | Proximal · Intermediate · Distal | Metacarpal · Proximal · Distal |
| 감정 표정 | Joy, Angry, Sorrow, Fun | happy, angry, sad, relaxed, surprised |
| 입 모양 | A, I, U, E, O | aa, ih, ou, ee, oh |
| 라이선스 | Allow/Disallow + licenseName(CC0 등) | licenseUrl(VPL 1.0) 필수, 항목 세분화 |
| 흔들림 | 루트 본·그룹 단위, 구 콜라이더 | 관절 단위, 구·캡슐 콜라이더 |
| MToon | VRM.materialProperties | 재질마다 VRMC_materials_mtoon |
0.x는 메타·휴머노이드·표정·흔들림·MToon을 모두 VRM 확장 하나에 넣었고, 1.0은 흔들림과 MToon을 별도 확장으로 떼어 냈습니다. 1.0 사양에서 VRMC_vrm이 반드시 갖춰야 하는 것은 휴머노이드와 메타뿐입니다. 컨스트레인트(VRMC_node_constraint)는 1.0에서 새로 생겼습니다.
포즈 규칙도 느슨해졌습니다. 0.0 사양은 T포즈에 더해 본에 로컬 회전이 없어야 한다고 정했지만, vrm.dev 기능 설명에 따르면 1.0은 T포즈만 필수 조건으로 남겼습니다. three-vrm이 v1부터 쉬는 자세의 회전이 0인 “정규화된 본”을 따로 두는 이유입니다.
엄지 본은 이름이 같아도 가리키는 관절이 다릅니다. 0.x의 thumbProximal이 1.0의 thumbMetacarpal, 0.x의 thumbIntermediate가 1.0의 thumbProximal입니다. three-vrm도 0.x 파일을 읽을 때 이 대응표로 이름을 바꿉니다. 이름 문자열만 보고 옮기면 엄지가 한 마디씩 밀립니다. 본 이름을 칸에 맞추는 문제는 Mixamo 리그를 VRM 본에 매핑하는 글에서 다뤘습니다.
버전을 옮길 때 달라지는 네 가지
정면 방향: -Z에서 +Z로
0.0 사양은 모델이 -Z를, 1.0은 +Z를 보도록 정했습니다. three-vrm에는 0.x 모델일 때만 Y축으로 돌려 주는 VRMUtils.rotateVRM0가 따로 있습니다. 버전을 가리지 않고 한 방식으로 배치하는 프로그램에서는 한쪽 버전의 아바타가 등을 보이게 됩니다. 축 기준으로 진단하는 방법은 아바타가 뒤를 보는 문제를 다룬 글에 있습니다.
표정 이름: Joy에서 happy로
1.0 표정 사양은 happy가 joy에서, sad가 sorrow에서, relaxed가 fun에서 바뀐 이름이라고 명시하고, surprised를 1.0에서 새로 추가했다고 적었습니다. 한쪽 눈 감기는 Blink_L에서 blinkLeft로 바뀌었고, 표정 묶음의 이름 자체가 BlendShapeProxy에서 Expressions가 되었습니다. three-vrm은 0.x 프리셋 이름을 읽는 즉시 1.0 이름으로 바꾸므로 코드에서는 setValue('happy', 1.0)처럼 1.0 이름만 쓰면 됩니다. 반대로 “Joy”를 직접 찾는 코드는 1.0 파일에서 아무것도 찾지 못합니다.
라이선스 메타: 항목 구성의 변화
0.x 메타는 아바타를 쓸 수 있는 사람, 폭력·성적·상업 이용의 Allow/Disallow, 그리고 CC0나 CC_BY 같은 라이선스 이름(licenseName)을 고르는 방식입니다. 1.0은 name, authors, licenseUrl이 필수이고, licenseUrl 값은 VRM Public License 1.0 주소입니다. 여기에 commercialUsage(personalNonProfit, personalProfit, corporation 세 단계), 개변, 재배포, 크레딧 표기, 정치·종교 이용, 반사회·혐오 이용 항목이 붙습니다.
0.x의 상업 이용 “Allow” 하나는 1.0에서 세 단계 중 하나를 골라야 하는 항목이 되고, 0.x에 없던 정치·종교·혐오 항목은 옮길 원래 값이 없습니다. 사양상 허용 항목의 기본값은 false(허용 안 함), 상업 이용은 personalNonProfit입니다. 버전을 바꿀 때 작가가 라이선스를 다시 정해야 하는 이유입니다. VMagicMirror도 v3.5.0(2023년 12월 31일)에서 PC의 1.0 모델을 읽을 때 “과도한 폭력 표현” 허용 표시가 틀리던 문제를 고쳤습니다.
흔들림과 MToon: 겉모습에 닿는 차이
0.x의 흔들림은 루트 본만 지정하고 강도·중력·감쇠 값을 그룹 전체에 똑같이 주며, 충돌체는 구만 씁니다. 1.0의 VRMC_springBone은 관절을 하나씩 나열해 관절마다 값을 주고, 구와 캡슐 충돌체를 모두 씁니다. 끝부분도 다릅니다. 사양 문서에 따르면 0.x는 사슬 끝에 7cm 떨어진 관절을 덧붙여 마지막 뼈까지 흔들지만, 1.0에서 마지막 관절은 꼬리(tail)로만 쓰이고 자기 값을 쓰지 않습니다. 1.0에서 마지막 뼈까지 흔들려면 끝에 빈 노드를 하나 더 두라고 사양이 안내합니다.
three-vrm 마이그레이션 가이드는 1.0의 MToon을 사실상 다른 재질로 생각하라고 적었습니다. 그림자 부분을 그리는 방식이 달라져 three-vrm은 옛 방식을 따르는 v0CompatShade 옵션을 둡니다.
프로그램별 지원 현황 (2026년 9월 확인)
각 프로그램의 공식 사이트, 공식 문서, 릴리스 노트에 적힌 것만 옮겼습니다. 이 사이트에서 각 프로그램에 모델을 직접 넣어 본 결과는 아닙니다.
| 프로그램 | VRM 0.x | VRM 1.0 | 근거 |
|---|---|---|---|
| VRoid Studio | 내보내기 | 내보내기 | v1.20.0 공지(2023년 3월 2일) |
| VSeeFace | 읽음 | 못 읽음 | 공식 사이트·FAQ, v1.13.38c5 |
| Warudo | 읽음 | 읽음 | Steam 공지 0.12.16·0.14.3 |
| VNyan | 읽음 | 읽음 | itch.io 공식 페이지 |
| VMagicMirror | 읽음 | v3.0.0부터 | 공식 변경 이력 |
| three-vrm | 읽음 | v1.0.0부터 | 마이그레이션 가이드, 최신 3.5.5 |
| UniVRM | 읽기·쓰기 | 읽기·쓰기 | README, v0.131.2(2026년 7월) |
VSeeFace는 다운로드 안내 옆에 VRM0 표준만 지원하니 VRM0 형식으로 내보내라고 적어 두었습니다. VRoid Studio는 v1.20.0(2023년 3월 2일)에서 1.0 내보내기를 추가하면서 기존 0.0 내보내기도 남겼습니다. 공지에는 1.0 모델 데이터는 1.0을 지원하지 않는 앱에서 쓸 수 없다는 경고가 붙어 있습니다.
Warudo는 2024년 1월~2025년 3월 변경을 묶은 0.12.16 공지(베타 채널)에 1.0 표정·블렌드셰이프 이름과 트랜스폼 컨스트레인트 인식을 포함한 1.0 지원을 적었고, 0.14.3(2026년 2월)에서 1.0 물리 기능을 켜는 토글을 추가했습니다. VNyan은 공식 페이지에 “VRM, VRM 1.0 and VSFAvatar” 모델과 호환된다는 문장까지만 확인했고, 몇 번째 버전부터인지는 찾지 못했습니다. VMagicMirror는 v3.0.0(2022년 11월 30일)에서 1.0을 지원하면서 0.x 모델도 계속 쓸 수 있다고 밝혔습니다. three-vrm은 v1부터 로더 플러그인 하나로 두 버전을 읽고 vrm.meta.metaVersion으로 원래 버전을 알려 줍니다.

이 사이트의 FBX→VRM 변환기는 1.0으로 내보냅니다
이 사이트의 FBX→VRM 변환기는 브라우저 안에서 three.js r160 FBXLoader로 FBX를 읽어 VRM 1.0(VRMC_vrm)으로 내보냅니다. 파일은 서버로 올라가지 않습니다. 출력이 1.0이므로 VSeeFace에는 그대로 넣을 수 없고, 1.0을 읽는다고 밝힌 Warudo·VNyan·VMagicMirror·three-vrm 기반 도구가 대상입니다.
변환기는 VRMC_springBone과 VRMC_materials_mtoon을 쓰지 않고 재질을 glTF 표준 PBR(metallic-roughness)로 내보냅니다. 그래서 결과물에는 흔들림 설정이나 툰 음영이 없고, 위의 흔들림·MToon 차이도 해당하지 않습니다. 정면은 1.0 규칙대로 +Z를 봐야 하므로 변환기가 정면 방향을 자동으로 감지하고, 도구 화면에 파란 화살표로 표시합니다. 시험 모델 Character_0726.fbx(3ds Max 리그)는 “Collar”가 어깨, “Shoulder”가 위팔인 이름 규칙 때문에 처음에는 위팔 칸이 비었지만, 팔 규칙 감지와 계층 사이 빈칸 채우기를 넣은 뒤 휴머노이드 55칸이 모두 자동 매핑되었습니다.
어느 버전으로 내보낼지 정하는 순서
- 쓸 프로그램을 먼저 적습니다. VSeeFace처럼 0.x만 읽는 것이 있으면 0.x로 내보냅니다.
- 모두 1.0을 읽는다면 1.0을 고릅니다. 관절별 흔들림 값, 캡슐 충돌체, 컨스트레인트, 세분화된 라이선스 항목은 1.0에만 있습니다.
- 누가 쓸지 모르는 배포용 모델이라면 원본에서 0.x와 1.0을 각각 내보내 두는 방법이 있습니다.
- 버전을 바꿀 때는 원본에서 다시 내보냅니다. VSeeFace FAQ는 팔이나 머리카락이 뒤틀리는 문제를 다루면서, VRM을 다시 내보내는 것으로는 모델이 제대로 정규화되지 않으며 원본(보통 FBX)을 올바른 설정으로 내보내야 한다고 적고 있습니다.
- 라이선스를 다시 확인합니다. 상업 이용 단계와 0.x에 없던 항목은 자동으로 정해지지 않습니다.
두 버전 모두 T포즈를 요구합니다. 원본이 A포즈라면 버전을 고르기 전에 포즈부터 맞춰야 하는데, 그 과정은 VRM의 T포즈와 A포즈를 비교한 글에 적었습니다.
자주 묻는 질문
내 VRM 파일이 0.x인지 1.0인지 어떻게 확인하나요?
.vrm 파일은 GLB라서 앞부분에 JSON 텍스트가 들어 있습니다. 텍스트 편집기로 열어 VRMC_vrm과 "specVersion": "1.0"이 보이면 1.0, 확장 목록(extensionsUsed)에 VRMC_vrm 없이 "VRM"이 있으면 0.x입니다.
VSeeFace에서 NotVrm0Exception 오류가 납니다.
1.0 파일을 넣었다는 뜻입니다. VSeeFace FAQ는 VRM0X로 내보내라고 안내합니다. VRoid Studio라면 내보낼 때 VRM0.0 형식을 고르면 됩니다.
1.0 파일을 0.x로 되돌릴 수 있나요?
UniVRM README에는 가져올 때 0.x 파일을 1.0으로 옮기는 마이그레이션만 적혀 있고, 반대 방향은 2026년 9월 기준 공식 문서에서 찾지 못했습니다. 원본 프로젝트에서 0.x로 다시 내보내는 쪽이 확실합니다.
1.0으로 바꾸면 표정 설정이 사라지나요?
프리셋 표정은 이름만 바뀌고 대응 관계는 사양에 정해져 있습니다. three-vrm은 0.x 이름을 자동으로 바꿔 읽습니다. 다만 surprised는 1.0에만 있는 프리셋이라 0.x로 내보내면 프리셋 자리가 없습니다.