본문 바로가기
공부공부/2025 쌓아가는 나의 지식~

[BVH] bvh 파일 유니티 애니메이션으로 적용시키기 (Blender 포함)

by Lee_story_.. 2025. 4. 18.
728x90

 

매번 하는게 자꾸 바뀌는거 같..긴 한데.
이번에는 행동 추적관련 연구를 진행하면서,

bvh파일를 유니티에서 사용하게 되었습니다

 

 

 

먼저 BVH 파일이란?

BVH (Biovision Hierarchy) 파일은 다음 두 가지 정보를 포함하는 텍스트 기반 파일입니다.

  1. 스켈레톤 계층 구조(Hierarchy)
  2. 애니메이션 데이터(Motion)

원래는 Biovision이라는 회사의 모션 캡처 시스템을 위해 만들어졌지만,

지금은 여러 툴(Blender, Unity, Maya 등)에서 널리 사용되고 있다고 합니다!

 

 

 

기본구조는 관절 구조와 기본 위치에 대한 HIERARCHY와  Motion 파트로 이루어져있는데,

HIERARCHY
ROOT Hips
{
    OFFSET 0.000 0 0.000
    CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation
    JOINT RightUpLeg
    {
        OFFSET -10.280 -1.737 0.000
        CHANNELS 3 Zrotation Xrotation Yrotation
        JOINT RightLeg
        {
            OFFSET 0.000 -45.650 0.000
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT RightFoot
            {
            
            ....

 

HIERARCHY에서는 CHANNELS 에 따른 값들을 저장합니다.

위의 bvh에서는 Root인 Hips의 위치값 회전값을 저장하고,
나머지는 CHANNELS에서 3개의 회전값을 지정하여, 각 관절의 기본 회전값을 저장할것! 이라고 알려줍니다.

 

 

 

 

다음 Motion파트에서는 모션의 정보 - 총 Frame 수 + 프레임 시간,

그리고 프레임당 위에서 지정한 형식에 따른 각 관절의 정보가 들어갑니다. 

MOTION
Frames: 275
Frame Time: 0.0333
5.166587 100.687195 0.378665 0.520190 -4.245720 .......

 

여기서는 [Hips의 위치 3개 회전 3개] +  [하위 RightUpLeg의 회전값 3개] + [하위 RightLeg의 회전값 3개] + ......

이런식으로 각 프레임당 값들이 저장됩니다. 

 

 

기본적으로는 위와 같은 형식으로 이루어져 있습니다!

 

 

 

이렇게 만들어진 Bhv데이터는

 

Blender나 Unity에서의 애니메이션을 제작할때 사용합니다. 

사람의 모션을 캡쳐해서, 그대로 게임이나 컨텐츠속으로 넣는게 가능!

 

그리고 이러한 데이터를 분석하거나 학습하여 사람의 행동 패턴이나, 행동 분류에 대해서도 많이 사용한다고 합니다.

 

 

여기까지가 소개 끝!

그럼 이제 본론으로!

 

 

Bvh파일을 유니티에서 사용하려면?

일단 Bvh파일은 일반적인 txt 파일로, 유니티에서 자동으로....는 못읽는거 같더라구요

그래서 저는 컴퓨터에 깔려있는 Blender를 이용해 보기로 하였습니다. 

 

 

 

우선 Blender....(고양이다..)

 

 

일단 작업을 진행하기전, 씬을 깨끗이 청소해줍시다.

 

그리고 상단에 Scripting이라는걸 클릭하면,  아래처럼 Python 코드입력칸이 나오는데, 

 

New를 눌러서 하나생성해줍시다. 

 

 

 

저는 일단 다음과 같이 한 디렉토리에 여러개의 bvh를 넣어두고 다 바꾸려고 코드를 작성했습니다.

 

 

 

경로 : C:\Users\ICLAB\Desktop\bvhTest

 

 

 

이제 위에서 봤던 코드창에 (따로 코드를 만들어서 실행해도됨)

bvh파일을 Import했다가 Export하는 코드를 작성해 줍시다.

import bpy
import os
import glob

bvh_dir = "C:/Users/ICLAB/Desktop/bvhTest"
bvh_files = glob.glob(os.path.join(bvh_dir, "*.bvh"))

for bvh_path in bvh_files:
    print(f"\n변환 중: {bvh_path}")

    # ── 모든 오브젝트 삭제 ──
    bpy.ops.object.select_all(action='SELECT')
    bpy.ops.object.delete(use_global=False)

    # ── 모든 액션(Action) 삭제 ──
    for action in bpy.data.actions:
        bpy.data.actions.remove(action)

    # ── BVH 임포트 ──
    try:
        bpy.ops.import_anim.bvh(
            filepath=bvh_path,
            filter_glob="*.bvh",
            global_scale=1,
            frame_start=1,
            use_fps_scale=False,
            use_cyclic=False,
            rotate_mode='NATIVE',
            axis_forward='-Z',
            axis_up='Y'
        )
    except Exception as e:
        print(f"임포트 실패...? {bvh_path}")
        print(e)
        continue

    # ── FBX 경로 및 익스포트 ──
    fbx_path = bvh_path.replace(".bvh", ".fbx")
    try:
        bpy.ops.export_scene.fbx(
            filepath=fbx_path,
            axis_forward='-Z',
            axis_up='Y',
            bake_anim=True,
            use_selection=False
        )
        print(f"Export 완료: {fbx_path}")
    except Exception as e:
        print(f"export 실패...: {fbx_path}")
        print(e)

 

굳굳

 

실행은 아래의 버튼중에 실행버튼 누르시면 됩니다!

 

 

굳!

 

 

이제 다시 유니티로!

FBX파일은 유니티로 임포트하는게.... 익숙하니까!

 

오... 내부에는 Hips라는 객체와 애니메이션이 추가되어있습니다!

 

 

이 애니메이션을 바로 추가! 하면 안되긴합니다....

bvh파일의 관절과 아바타의 관절 형태가 다르니....까

 

그래서 이걸 통일 시켜줄껀데 우선 이걸 적용시켜줄 아바타 부터!

아마 아바타 마다 리깅구성이 다를텐데, 이걸 유니티에서 지원해주는 Humanoid로 변경!

 

그리고 애니메이션도 동일하게 변경해줍시다.

 

 

오.... 아바타가 생김..

 

이제 적용시켜 주러갑시다!

 

일단은 확인차 간단하게 아래처럼 구성해주었습니다.

 

 

 

실행!

 

 

 

 

 

 

 

그래도 이와 관련된 툴이 하나 있어서 사용하면? 될것 같긴한데, 아직 사용은 안해보았습니다...

 

BVH Tools | 애니메이션 도구 | Unity Asset Store

Use the BVH Tools tool from Emiliana on your next project. Find this & more animation tools on the Unity Asset Store.

assetstore.unity.com

 

 

 

아래는 참고 블로그!

 

unity animation clip generation for the humaniod rig

거의 한주간 조사한 결과물을 정리해본다. 내가 하려던 작업은 1. 영상을 준비 2. 영상에서 모션을 추적 3. 모션 추적 결과를 편집 4. 편집 결과를 애니메이션 파일로 저장 의 단계를 거친다. 그 과

talesoff.tistory.com

 

 

 

 

 

여기까지  BVH 관련 사용법 끝!


틀린점이 있다면 댓 달아주세요!

728x90

댓글