무엇을 찾고 계신가요?
Engine & platform

메카님 휴머노이드

ROBERTL / UNITY TECHNOLOGIESContributor
May 26, 2014|16 분
메카님 휴머노이드
이 웹페이지는 이해를 돕기 위해 기계 번역으로 제공됩니다. 기계 번역으로 제공되는 콘텐츠에 대한 정확도나 신뢰도는 보장되지 않습니다. 번역된 콘텐츠의 정확도에 관해 의문이 있는 경우 웹페이지의 공식 영어 원문을 참고해 주시기 바랍니다.

이 게시물에서는 메카님 휴머노이드의 기술을 설명합니다. 작동 방식, 장점과 한계, 일부 선택이 이루어진 이유, 그리고 이를 최대한 활용하는 방법에 대한 힌트를 얻을 수 있습니다. 일반적인 설정 및 지침은Unity 문서( )를 참조하세요 .

휴머노이드 릭 및 근육 공간
휴머노이드 릭 및 근육 공간

메카님 휴머노이드 릭과 머슬 스페이스는 휴머노이드 바디와 애니메이션을 표현하기 위한 표준 스켈레톤 노드 계층구조와 지오메트리 트랜스폼의 대안 솔루션입니다.

휴머노이드 릭은 스켈레톤 노드 계층구조 위에 있는 설명입니다. 사람 뼈 집합을 식별하고 각 뼈에 대한 머슬 레퍼런스를 생성합니다. 근육 참조는 기본적으로 각 축에 대한 범위와 부호가 있는 사전 및 사후 로테이션입니다.

팔과 스트레칭

머슬은 한 축의 뼈를 [최소, 최대] 범위 사이에서 이동시키는 정규화된 값[-1,1]입니다. 근육 정규화 값은 [-1,1] 이하 또는 초과하여 범위를 초과할 수 있습니다. 범위는 딱딱한 제한이 아니라 근육의 정상적인 동작 범위를 정의합니다. 특정 휴머노이드 릭은 머슬 레퍼런스의 범위를 늘리거나 줄여 동작 범위를 늘리거나 줄일 수 있습니다.

머슬 스페이스는 휴머노이드 릭의 모든 머슬 노멀라이즈드 값의 집합입니다. 노멀라이즈드 휴머노이드 포즈입니다. 뼈축의 범위가 0(최소=최대)이면 해당 뼈축에 대한 머슬이 없음을 의미합니다.

예를 들어 팔꿈치에는 Y축에 대한 근육이 없는데, 이는 팔꿈치가 뻗었다 펴고(Z축), 구부렸다 펴는(X축) 동작만 하기 때문입니다. 결국 머슬 스페이스는 최대 47개의 머슬 값으로 구성되며, 이는 휴머노이드 바디 포즈를 완벽하게 설명합니다.

팔 뻗기

머슬 스페이스의 아름다운 점 중 하나는 원본 또는 스켈레톤 릭에서 완전히 추상화되었다는 점입니다. 모든 휴머노이드 릭에 바로 적용할 수 있으며 항상 사실적인 포즈를 연출합니다. 또 다른 멋진 점은 Muscle Space가 얼마나 잘 보간되는지입니다. 표준 스켈레톤 포즈와 비교하여 머슬 스페이스는 애니메이션 키 프레임 사이, 스테이트 머신 전환 중 또는 블렌드 트리에서 혼합할 때 항상 자연스럽게 보간됩니다.

계산 측면에서도 머슬 스페이스는 쿼터니언이나 오일러 각과 달리 선형 보간할 수 있는 스칼라 벡터로 취급할 수 있으므로 성능이 뛰어납니다.

인체와 사람의 움직임에 대한 근사치

휴머노이드 캐릭터나 캡처된 애니메이션을 위해 새로 제작되는 모든 스켈레톤 릭은 인체와 사람의 움직임에 대한 근사치가 됩니다. 뼈의 개수나 MOCAP 하드웨어의 성능에 상관없이 결과는 실제와 근사치가 될 것입니다.

리거, 게임 회사, 학교 또는 소프트웨어 회사는 인체와 동작을 가장 잘 표현할 수 있다고 생각하는 버전과 제작 요구 사항에 가장 적합한 버전을 직접 제안할 수 있습니다.

메카님 휴머노이드 릭과 머슬 스페이스의 정교함은 몇 가지 어려운 선택에 직면했습니다. 빠른 런타임과 애니메이션 품질 또는 개방성과 표준 화질 사이에서 타협점을 찾아야 했습니다.

2 척추 뼈
Spine

이것은 어려운 문제입니다. 왜 3개가 아니라 2개일까요? 아니면 척추 뼈의 개수를 임의로 정할 수 있을까요? 최신 정보는 생물의학 연구에 관한 것이 아닙니다. (이 수준의 정밀도가 꼭 필요한 경우 언제든지 일반 릭을 사용할 수 있습니다). 척추 뼈 하나가 명확하게 정의되지 않았습니다.

두 번째를 추가하면 대부분의 방법을 사용할 수 있습니다. 세 번째 또는 네 번째 포즈는 최종 인간 포즈에 약간의 기여를 할 뿐입니다. 왜 그럴까요? 사람의 척추가 어떻게 구부러지는지 살펴보면 흉곽에 있는 척추 부분이 거의 딱딱하다는 것을 알 수 있습니다. 남은 것은 척추 기저부의 주요 굴곡 지점과 흉곽 기저부의 다른 한 지점입니다. 따라서 두 가지 주요 굴곡 지점이 있습니다. 극단적인 포즈를 취하고 있는 비틀기 선수를 보면 이를 명확히 알 수 있습니다. 이 모든 것을 고려하여 휴머노이드 릭에 2개의 척추 뼈를 사용하기로 결정했습니다.

1 목뼈

이것은 스파인보다 쉽습니다. 많은 게임 스켈레톤 릭에는 목뼈가 없고 머리뼈만으로 작업을 수행하는 경우가 많습니다.

회전 DoF

대부분의 스켈레톤 릭과 마찬가지로(게임에서는 더욱 그렇습니다), 메카님 휴머노이드 릭은 회전 애니메이션만 지원합니다. 본은 부모를 기준으로 로컬 번역을 변경할 수 없습니다. 일부 3D 패키지는 관절의 탄성이나 스쿼시 및 스트레치 애니메이션을 시뮬레이션하기 위해 뼈에 일정량의 이동을 유도합니다. 현재 디테일이 덜한 스켈레톤 릭의 애니메이션 퀄리티를 보정하기 위해 계산 성능 측면에서 상대적으로 저렴한 방법인 번역 DoF를 추가하는 방안을 검토 중입니다. 또한 사용자가 리타겟팅 가능한 스쿼시 및 스트레치 애니메이션을 만들 수 있습니다.

트위스트

트위스트 본 없음

트위스트 본은 종종 스켈레톤 릭에 추가되어 팔과 다리를 극단적으로 비틀어 구성할 때 발생하는 피부 변형 문제를 방지합니다.

트위스트 뼈는 팔다리의 시작부터 끝까지 비틀림으로 인한 변형을 분산하는 데 도움이 됩니다.

근육 공간에서 비틀림의 양은 근육으로 표현되며 항상 팔다리의 부모 뼈와 연관됩니다. Ex: 팔뚝의 비틀림은 손목이 아닌 팔꿈치에서 발생합니다.

트위스트

휴머노이드 릭은 트위스트 본을 지원하지 않지만, 메카님 솔버를 사용하면 부모에서 떼어내 팔다리의 자식에게 붙일 트위스트 비율을 지정할 수 있으며, 기본값은 50%로 피부 변형 문제를 방지하는 데 큰 도움이 됩니다.

휴머노이드 루트 및 질량 중심

그렇다면 세계 공간에서 인체의 위치와 방향을 표현하는 가장 좋은 방법은 무엇일까요?

계층구조에서 가장 위쪽에 있는 뼈(보통 엉덩이, 골반 등)는 표준 스켈레톤 릭에서 월드 스페이스 위치와 방향 커브가 있는 곳입니다. 특정 캐릭터에는 잘 작동하지만, 리타기팅을 할 때는 스켈레톤 릭마다 최상단 뼈의 위치와 회전이 나머지 스켈레톤에 비해 다르기 때문에 부적절해집니다.


backflip

머슬 스페이스는 휴머노이드의 질량 중심을 사용하여 월드 스페이스에서의 위치를 나타냅니다. 질량 중심은 인간의 평균 신체 부위 질량 분포를 사용하여 근사치를 구합니다. 스케일 조정 후 휴머노이드 포즈의 질량 중심은 모든 휴머노이드 캐릭터에서 동일하다고 가정합니다. 큰 가정이지만 다양한 애니메이션과 휴머노이드 캐릭터에 매우 잘 작동하는 것으로 나타났습니다.

일어서거나 걷는 애니메이션의 경우 무게 중심이 엉덩이 주변에 위치하지만, 뒤로 젖히기와 같은 보다 역동적인 동작에서는 몸이 무게 중심에서 어떻게 멀어지는지, 애니메이션을 통해 무게 중심이 가장 안정된 지점처럼 느껴지는지 확인할 수 있습니다.

신체 방향

머슬 스페이스 월드 스페이스 위치에서 질량 중심이 하는 일과 유사하게, 월드 스페이스 방향에는 평균 몸의 방향을 사용합니다. 평균 몸 방향 위쪽 벡터는 엉덩이와 어깨 중간 지점에서 계산됩니다. 그런 다음 앞쪽 벡터는 위쪽 벡터와 평균 왼쪽/오른쪽 엉덩이/어깨 벡터의 교차 곱입니다. 또한 휴머노이드 포즈의 평균 몸 방향은 모든 휴머노이드 릭에 대해 동일하다고 가정합니다. 무게중심의 경우, 걷거나 뛸 때 하체와 상체의 방향이 자연스럽게 보정되므로 평균적인 몸의 방향이 안정적인 기준이 되는 경향이 있습니다.

루트 모션

루트 모션에 대한 자세한 내용은 다음 백서에서 자세히 설명할 예정이지만, 소개를 위해 질량 중심과 평균 몸체 방향의 투영을 사용하여 루트 모션을 자동으로 생성합니다. 무게 중심과 평균 몸체 방향이 휴머노이드 애니메이션의 안정적인 속성이라는 사실은 내비게이션이나 동작 예측에 사용할 수 있는 안정적인 루트 모션으로 이어집니다.

규모

머슬 스페이스에서 완전히 정규화된 휴머노이드 포즈가 되기 위해 아직 한 가지 빠진 것이 있습니다... 바로 전체적인 크기입니다. 이번에도 우리는 릭마다 일정하지 않기 때문에 머리뼈 위치와 같은 특정 지점에 의존하지 않는 휴머노이드의 크기를 설명하는 방법을 찾고 있습니다. T 자세에서 휴머노이드 캐릭터의 질량 중심 높이가 스케일로 직접 사용됩니다. 근육 공간의 질량 중심 위치를 이 스케일로 나누어 최종 정규화된 휴머노이드 포즈를 생성합니다. 다른 방식으로 말하면, T자 자세에서 질량 중심 높이가 1인 휴머노이드의 경우 근육 공간이 노멀라이즈됩니다. 근육 공간의 모든 위치는 정규화된 미터 단위로 표시됩니다.

원래 손과 발의 위치

머슬 스페이스를 휴머노이드 릭에 적용할 때, 휴머노이드 릭의 비율 차이로 인해 손과 발의 위치와 방향이 원본 애니메이션과 달라질 수 있습니다. 이로 인해 발이 미끄러지거나 손이 제대로 닿지 않을 수 있습니다. 그렇기 때문에 근육 공간에는 손과 발의 원래 위치와 방향이 선택적으로 포함되어 있습니다. 손과 발의 위치와 방향은 근육 공간에서 휴머노이드 루트(질량 중심, 평균 신체 회전 및 휴머노이드 스케일)를 기준으로 정규화됩니다. 이러한 원래 위치와 방향을 사용하여 리타기팅된 스켈레톤 포즈를 원래 월드 스페이스 위치와 일치하도록 IK 패스를 사용하여 수정할 수 있습니다.

IK 솔버
IK 솔버

팔과 다리에 대한 IK 솔버의 주요 목표는 근육 공간에서 선택적으로 찾을 수 있는 원래 손과 발의 위치와 방향에 도달하는 것입니다. Mecanim 컨트롤러 상태에서 '발 IK' 토글이 활성화되면 발에 대한 후드 내부에서 일어나는 일입니다.

이러한 경우 리타겟팅된 스켈레톤 포즈는 원래 IK 목표에서 크게 벗어나지 않습니다. 수정해야 할 IK 오류는 휴머노이드 릭의 비율 차이로 인해 발생하는 것이므로 그 크기가 작습니다. IK 솔버는 리타기팅된 스켈레톤 포즈를 약간만 수정하여 원래 위치와 방향과 일치하는 최종 포즈를 생성합니다.

IK는 리타깃팅된 스켈레톤 포즈만 약간 수정하므로 무릎이나 팔꿈치가 튀어나오는 등의 애니메이션 아티팩트가 거의 발생하지 않습니다. 그럼에도 불구하고 IK 솔버의 일부인 스쿼시 및 스트레치 솔버가 있어 팔이나 다리가 최대로 확장될 때 튀어나오는 것을 방지할 수 있습니다. 기본적으로 스쿼시 및 스트레칭 허용량은 팔 또는 다리 전체 길이의 5%로 제한됩니다. 팔꿈치나 무릎이 튀어나오는 것은 팔이나 다리가 5% 이하로 늘어나는 것보다 더 눈에 띄고 보기 흉합니다. 스쿼시 및 스트레치 해결은 0%로 설정하여 끌 수 있습니다.

IK 리그에 대한 더 자세한 내용은 다음 백서에서 확인할 수 있습니다. 소품 처리, 다중 IK 패스 사용, 환경과의 상호작용 또는 휴머노이드 캐릭터 간의 상호작용 등을 설명합니다.

선택적 뼈대

휴머노이드 릭에는 선택 사항인 뼈대가 몇 가지 있습니다. 가슴, 목, 왼쪽 어깨, 오른쪽 어깨, 왼쪽 발가락, 오른쪽 발가락이 이에 해당합니다. 기존 스켈레톤 릭에는 일부 옵션 뼈대가 없는 경우가 많지만, 저희는 여전히 유효한 휴머노이드를 만들고 싶었습니다.

휴머노이드 릭은 왼쪽 눈과 오른쪽 눈 옵션 본도 지원합니다. 눈 뼈에는 위아래로 움직이는 근육과 안팎으로 움직이는 근육이 각각 두 개씩 있습니다. 눈 본은 척추, 가슴, 목, 머리, 눈에 룩앳 조정을 분배할 수 있는 휴머노이드 릭 룩앳 솔버와도 작동합니다. 룩앳 솔버에 대한 자세한 내용은 곧 공개될 휴머노이드 IK 릭 백서에서 확인할 수 있습니다.

손가락

마지막으로 휴머노이드 릭은 손가락을 지원합니다. 각 손가락의 숫자는 0~3자리일 수 있습니다. 0 숫자는 단순히 이 손가락이 정의되지 않았음을 의미합니다. 첫 번째 숫자는 두 개의 근육(스트레치 및 스프레드), 두 번째와 마지막 숫자는 하나의 근육(스트레치)입니다. 손에 대해 손가락이 정의되지 않은 경우 손가락에 대한 솔버 오버헤드가 없다는 점에 유의하세요.

스켈레톤 리그 요구 사항

뼈 사이

대부분의 경우 스켈레톤 릭은 휴머노이드 릭에 정의된 뼈대보다 더 많은 뼈대를 갖습니다. 중간 뼈는 휴머노이드가 정의한 뼈 사이에 있는 뼈입니다. 예를 들어, 3DSMAX 바이페드의 세 번째 척추 뼈는 중간 뼈로 처리됩니다. 휴머노이드 릭은 이러한 기능을 지원하지만, 중간 본에는 애니메이션이 적용되지 않는다는 점에 유의하세요. 휴머노이드 릭에 정의된 부모를 기준으로 기본 위치와 방향을 유지합니다.

표준 계층 구조

스켈레톤 릭은 휴머노이드 릭과 호환되려면 표준 계층구조를 준수해야 합니다. 스켈레톤은 휴머노이드 뼈 사이에 몇 개의 중간 뼈를 포함할 수 있지만 다음 패턴을 준수해야 합니다:

엉덩이 - 위쪽 다리 - 아래쪽 다리 - 발 - 발가락

엉덩이-척추-가슴-목-머리

가슴 - 어깨 - 팔 - 팔뚝 - 손

손 - 근위 - 중간 - 원위

T-스탠스
T 자세

T-스탠스는 머슬 설정이 이를 기반으로 하기 때문에 휴머노이드 릭 제작에서 가장 중요한 단계입니다. T자 자세는 개념화하기 쉽고 해석의 여지가 많지 않다는 점에서 참고 자세로 선택했습니다:

- Z축을 향하여 똑바로 세우기

- 머리와 눈이 Z축을 향함

- Z축과 평행하게 바닥에 발을 딛습니다.

- X축을 따라 지면과 평행하게 팔을 벌립니다.

- 손은 평평하게, 손바닥은 X축을 따라 지면과 평행하게 내려놓습니다.

- 손가락을 X축을 따라 지면과 평행하게 똑바로 세웁니다.

-엄지손가락을 X축과 Z축의 중간 지점(45도)에서 지면과 평행하게 똑바로 세웁니다.

"똑바르다"는 말은 뼈가 반드시 완벽하게 정렬되어야 한다는 의미는 아닙니다. 피부가 골격에 부착되는 방식에 따라 다릅니다. 일부 릭은 스킨이 똑바로 보이지만 그 아래 골격은 그렇지 않을 수 있습니다. 따라서 최종 스킨을 입힌 캐릭터의 T 자세를 설정하는 것이 중요합니다. 휴머노이드 릭을 생성하여 MOCAP 데이터를 리타기팅하는 경우, MOCAP 제품군에서 액터가 수행한 T 스탠스의 몇 프레임 이상을 캡처하는 것이 좋습니다.

근육 범위 조정

기본적으로 근육 범위는 사람의 근육 범위를 가장 잘 나타내는 값으로 설정됩니다. 대부분의 경우 수정해서는 안 됩니다. 좀 더 만화 같은 캐릭터를 원한다면 팔이 몸에 들어가지 않도록 범위를 줄이거나 다리 동작을 과장되게 표현할 수 있습니다. 휴머노이드 릭을 생성하여 MOCAP 데이터를 리타기팅하는 경우, 생성된 애니메이션 클립은 기본값을 따르지 않으므로 범위를 수정해서는 안 됩니다.

리타겟팅 및 애니메이션 클립

메카님 리타겟팅은 두 단계로 나뉩니다. 첫 번째 단계는 표준 스켈레톤 트랜스폼 애니메이션을 정규화된 휴머노이드 애니메이션 클립(또는 머슬 클립)으로 변환하는 것으로 구성됩니다. 이 단계는 애니메이션 파일을 가져올 때 편집기에서 발생합니다. 내부적으로 "RetargetFrom"이라고 합니다. 두 번째 단계는 플레이 모드에서 머슬 클립을 평가하고 휴머노이드 릭의 스켈레톤 본에 적용할 때 발생합니다.

근육 클립

리타겟팅을 두 단계로 나누면 두 가지 큰 이점이 있습니다. 첫 번째는 해결 속도입니다. 리타겟팅 프로세스의 절반은 오프라인에서 수행되고 나머지 절반만 런타임에 수행됩니다. 또 다른 장점은 씬의 복잡성과 메모리 사용량입니다. 머슬 클립은 원본 스켈레톤에 대해 완전히 추상화되어 있으므로 리타기팅을 수행하기 위해 소스 스켈레톤을 런타임에 포함할 필요가 없습니다.

두 번째 단계는 간단합니다. 유효한 휴머노이드 릭이 있으면, 리타겟투 솔버로 머슬 클립을 적용하기만 하면 됩니다. 이 작업은 내부에서 자동으로 수행됩니다.

첫 번째 단계인 스켈레톤 애니메이션을 머슬 클립으로 변환하는 과정은 조금 더 까다로울 수 있습니다. 스켈레톤 애니메이션 클립은 고정된 속도로 샘플링됩니다. 각 샘플에 대해 스켈레톤 포즈가 근육 공간 포즈로 변환되고 근육 클립에 키가 추가됩니다. 모든 스켈레톤 릭이 다 맞는 것은 아니며, 스켈레톤 릭을 제작하고 애니메이션을 적용하는 방법은 매우 다양합니다. 일부 스켈레톤 릭은 유효한 출력을 생성하지만 정보가 손실될 수 있습니다. 이제 무손실 정규화된 휴머노이드 애니메이션, 즉 머슬 클립을 만드는 데 필요한 사항을 살펴보겠습니다.

참고: 무손실이란 스켈레톤 릭에서 머슬 클립으로 리타기팅한 다음 다시 같은 스켈레톤 릭으로 리타기팅하면 애니메이션이 그대로 유지된다는 뜻입니다. 사실, 거의 그대로 유지됩니다. 팔과 다리의 원래 트위스트는 사라지고 트위스트 솔버가 계산한 값으로 대체됩니다. 이 문서의 앞부분에서 설명했듯이 근육 공간에는 트위스트 재분할이 표현되지 않습니다.

- 뼈의 로컬 위치는 휴머노이드 릭과 애니메이션 파일에서 동일해야 합니다. 휴머노이드 릭을 만드는 데 사용된 스켈레톤이 애니메이션 파일에 있는 스켈레톤과 다른 경우가 있습니다. 정확히 동일한 스켈레톤을 사용해야 합니다. 그렇지 않은 경우 가져오기 시 콘솔에 경고가 전송됩니다.

- 뼈 사이에는 애니메이션이 없어야 합니다. 3번째 척추 뼈에 이동 및 회전 애니메이션이 모두 있는 3DSMAX 스켈레톤의 경우 종종 이런 일이 발생합니다. 또한 Bip001을 엉덩이로 사용하고 해당 골반에 애니메이션이 있는 경우에도 발생합니다. 그렇지 않은 경우 가져오기 시 콘솔에 경고가 전송됩니다.

- 중간 본의 로컬 방향은 휴머노이드 릭과 애니메이션 파일에서 동일해야 합니다. 스킨 바인드 포즈에 의존하는 휴머노이드 자동 구성을 사용하여 T 스탠스를 생성할 때 이러한 문제가 발생할 수 있습니다. 중간 본의 스킨 바인드 포즈 회전이 애니메이션 파일에 있는 것과 동일한지 확인합니다. 그렇지 않은 경우 가져오기 시 콘솔에 경고가 전송됩니다.

- 엉덩이를 제외한 뼈에는 번역 애니메이션이 지원되지 않습니다. 3DSMAX 바이페드는 때때로 척추 뼈에 번역 애니메이션을 적용합니다. 그렇지 않은 경우 임프에서 콘솔로 경고가 전송됩니다.

여기서 3DSMAX 바이페드는 문제가 있는 장비로 지적되고 있습니다. 아마도 그 인기와 메카님에 사용되는 많은 사례를 지원해야 했기 때문일 것입니다. 메카님 휴머노이드 릭에 사용할 새 애니메이션을 만들려면 처음부터 위에 명시된 규칙을 따라야 합니다. 일부 규칙을 위반하는 기존 애니메이션을 사용하려는 경우에도 Mecanim 리타겟 솔버는 강력하고 유효한 출력을 생성하지만 무손실 변환을 보장할 수는 없습니다.

메카님 휴머노이드 릭에 사용할 새 애니메이션을 만들려면 처음부터 위에 명시된 규칙을 따라야 합니다. 일부 규칙을 위반하는 기존 애니메이션을 사용하려는 경우, 메카님 리타겟 솔버가 강력하고 유효한 출력을 생성하므로 여전히 가능하지만 무손실 변환을 보장할 수는 없습니다.