WWolves Den

애니메이션 · 약 4분

Cached Pose로 애니메이션 계산을 재사용하기

Save Cached Pose와 Use Cached Pose의 연결을 읽고, 같은 포즈 계산을 여러 곳에서 공유합니다.

Wolfgadeok · 업데이트

선이 끊겨 보여도 연결이 없는 것은 아니다

AnimGraph에서 이동 동작을 선택하는 Locomotion 상태 머신이 Output Pose와 직접 연결되지 않고 이름이 붙은 캐시 노드로 이어질 수 있다. 이때 그래프가 잘못 끊어진 것이 아니라 다른 위치에서 해당 캐시를 사용하고 있는지 찾아야 한다. 예를 들어 Locomotion 결과를 이름 붙여 저장하고, 다른 상태 머신의 특정 상태에서 가져올 수 있다. 그 상태 머신을 Main States라고 부를 수 있지만 이는 예제용 이름이지 엔진의 필수 이름은 아니다.

Save Cached Pose와 그 이름의 Use Cached Pose를 함께 읽으면 구조가 드러난다. 캐시 이름을 일반 변수처럼 이해하는 비유는 도움이 되지만, 임의의 과거 시점 포즈를 영구 저장해 놓는 저장 파일이나 게임 상태 변수와 동일한 것으로 생각해서는 안 된다. 애니메이션 그래프의 평가와 재사용 맥락에서 다루는 장치다.

Locomotion 포즈 저장과 Main States, Slot, Control Rig 출력 흐름을 보여주는 AnimGraph
이동 포즈(Locomotion)를 저장하고 최종 출력 경로를 구성한 그래프입니다. 저장한 포즈를 실제로 사용하는 노드와 각 상태 내부 연결도 함께 확인합니다. 이전 버전의 에디터 화면으로, 현재 버전과 메뉴 배치가 다를 수 있습니다. 이미지를 누르면 크게 볼 수 있습니다.

왜 같은 포즈를 공유하는가

기본 이동 포즈를 여러 블렌드 가지에서 사용한다고 가정해 보자. 이동 상태 머신을 복제하면 규칙이 여러 곳에 퍼지고 한쪽만 수정될 위험이 생긴다. 공통 출력을 캐시로 두면 각 가지는 같은 기본 포즈를 받아 필요한 연출이나 보정을 추가할 수 있어 의도가 분명해진다.

다만 캐시 노드를 늘리면 무조건 성능이 좋아진다는 뜻은 아니다. 중복 평가를 줄이는 이점과 별개로 현재 그래프에서 무엇을 공유하는지 확인해야 한다. 이미 한 번만 사용하는 간단한 흐름을 불필요하게 캐시로 감싸면 읽기만 어려워질 수 있다. 성능 수치는 프로파일링 없이 단정하지 않는다.

기존 그래프를 읽고 정리하는 절차

먼저 Output Pose부터 거꾸로 추적해 최종 결과에 필요한 가지를 찾는다. 캐시를 발견하면 저장 지점과 사용 지점을 함께 열어 봐야 한다. 이름만 보고 Locomotion이 항상 특정 상태 머신을 가리킨다고 가정하지 않는다.

  1. Output Pose로 들어오는 노드부터 따라가며 Use Cached Pose 노드의 이름을 기록한다.
  2. 같은 이름을 저장하는 Save Cached Pose를 찾아 입력에 어떤 상태 머신이나 블렌드가 연결되어 있는지 확인한다.
  3. 여러 사용 지점에서 정말 같은 기본 포즈가 필요한지 확인한다. 서로 다른 캐릭터 상태를 공유한다고 착각하지 않는다.
  4. 캐시 이름을 역할 중심으로 정리하되 기존 연결이 깨지지 않았는지 컴파일 결과를 확인한다.
  5. 정지·이동·점프와 추가 블렌드가 모두 정상인지 비교하고, 성능 목적의 변경이면 평가 비용도 측정한다.

캐시와 서브 상태 머신은 동일하지 않다

Locomotion 출력을 다른 상태 머신에서 사용한다고 해서 Cached Pose 자체가 상태 머신의 부모·자식 관계를 만드는 것은 아니다. 한쪽은 포즈의 저장·재사용 경로이고 다른 쪽은 상태 선택 구조다. 캐시를 통해 연결된 상태 머신을 설명할 때 '서브 머신'이라고 부르더라도, 실제 중첩 구조인지 포즈 재사용 관계인지는 그래프에서 따로 확인해야 한다.

작은 그래프에서는 직접 선으로 연결하는 편이 명확할 수 있다. 큰 그래프에서는 공통 포즈의 경계를 드러내는 캐시가 유용하다. 노드 수를 줄이는 것보다 같은 규칙이 여러 곳에 중복되지 않고, 최종 포즈가 어디서 오는지 쉽게 설명할 수 있는지를 기준으로 정리한다.

참고 자료