본문 바로가기

유니티 개발 정보/기타

[번역] Basics: Animation Blending(애니메이션 블렌딩)



Basics: Animation Blending

June 19th, 2005 — Leave a comment
In the past, animations on videogame characters have played sequentially. When one ends, another begins, regardless of whether the action is fire-and-forget or cyclic, as the cycle ends before playing through again.
과거에ㅡ 비디오게임 캐릭터에 대한 애니메이션은 순차적으로 실행되었다.  그 액션이 자체유도적인지 아니면 순환적인지 상관없이, 하나가 끝이 날때, 다른 하나는 시작한다. 

Seen abstractly, 3D animation is just a series of numbers or values applied to virtual bones within the characters we see on-screen, (actually just 3D co-ordinates around which solid objects or skinned vertices pivot). For years, videogames required the realtime manipulation of numbers in order to simulate lighting, AI, rulesets and other procedural elements within our games, but until now the numbers that comprise animations have remained relatively untouched.
추상적으로 보이겠지만, 3D 애니메이션은 단지 우리가 화면에서 보는 캐릭터 안에 있는, 가상의 뼈에 적용되는 일련의 숫자 또는 값들이다.
(실제로 단지 Soild Objects 또는 Skinned 버텍스들이 회전하는 3D 좌표값이다)
수년 동안, 비디오 게임은 라이팅, 인공지능, rulesets 그리고 게임안에 있는 다른 절차상의 요소들을 시뮬레이션하기 위해 실시간 연산이 필요했다.
그러나 지금까지 애니메이션들로 구성된 다수의 비디오 게임들은 여전히 예전 상태로 머물러 있다.


The Past – Transitioning


The first and most basic use of animation number-crunching was the introduction of linearly interpolating (‘Lerping’) transition between the position/roation values in the last frame of one animation and the first of the next. This overcame to a degree the popping that occurs when the transitions between animationsare player-controlled and/or unpredictable by the animator, (i.e. a character can break from and idle at any point during that animation).
먼저, 애니메이션 대량 고속 처리의 가장 기본적인 방법은 선형적 보간법 전이('Lerping') -  한 애니메이션의 마지막 프레임과 다음 애니메이션의 첫 프레임에 있는 첫 회전/위치 값들을 선형적으로 보간하는 방법 - 이 도입이였다. 이것은 플레이어에 의해 제어되거나 애니메이터가 예측할 수 없는 애니메이션 전이가 발생했을 때, popping(애니메이션이 튀는)되는 정도를 극복하였다.
(예를 들어, 캐릭터는 어떤 애니메이션인 상태에서도 빠져나올 수 있고 idle상태가 될 수 있다.)


While this simple solution has been improved with the introduction of curved interpolation, (again championed foremost by fighting games, such is their reliance on smooth movement), this only smooths out the transition between the same old method of sequentially played animations.
이 간단한 해법은 곡선 보간법의 도입으로 개선되는 반면에, 이것은 오직, 순차적으로 실행되는 애니메이션들의 흔히있는 방법들 사이의 전이의 문제만을 해결하였다.

This essay, however, intends to promote the use of blending (rather than transitioning) animation, that is to say, combining two or more animations simulataneously to produce entirely new animations in realtime.
그러나, 이 글에서는 전이보다는 블렌딩 애니메이션의 사용을 알려줄 생각이다. 다시 말해서, 실시간으로 완전히 새로운 애니메이션을 만들기 위해서 두개 또는 그 이상의 애니메이션을 동시에 조합하는 것에 대해서 말이다.


The Future – Realtime Blending

This method has been used most commonly as a speed-based blend, by playing a walk and run animation on player characters and blending between the two based on how far forward the player is pushing the thumbstick. There are two golden rules that must be adhered to in order to successfuly blend between cycles such as these.
플레이어 캐릭터가 걷고, 달리는 애니메이션을 실행하고, 플레이어가 얼마나 조이스틱을 기울였는지를 기준으로 두개의 애니메이션 사이를 블렌딩할 때, 이 방법은 속도기반 블렌드로써, 가장 흔하게 사용된다.

  • The cycles must be of equal length.
    사이클은 반드시 똑같은 길이여야 한다.
  • The actions themselves must not be too dissimilar.
    그 액션들이 너무 다르지 않아야 한다.

Action Synchronising


In the example of a walk and run, both actions must sync up so that, for example, the half-way point of the walk is always blended with its equivelant frame in the run.
The simplest way to do this is to scale up the run animation before export, (as the run will naturally be faster and therefore shorter). This is, however, an added step in the animator’s pipeline and is not memory-efficient.
걷고 달리는 예에서, 두 동작은 반드시 동기화 되어야 한다. 예를 들어, 걷기의 중간 지점은 항상 달리기에서의 동등한 프레임으로 블렌딩 된다.
이것을 하기위한 가장 간단한 방법은 Export하기전에 달리기 애니메이션을 scale up하는 것이다.(달리기는 자연스럽게 더 빠르고, 그러므로 더 짧다.)
그러나 이것은 애니메이터의 파이프라인에서 추가된 단계이고, 메모리에 효율적이지 못하다.


A better yet more complicated method has been pioneered by Ph.D. Graduate (now ILM) Lucas Kovar, involving the use of a time-warp curve stored within each animation, that not only scales the playback rate depending upon the blend-weight between the animations, but also allows the realtime syncing of specific key frames that would not otherwise match up with a more general playback rate scale applied to the entire animation.
더욱이, 더 복잡한 방법은 Ph.D. Graduate Lucas Kovar 에 의해 개척되었고, 각각의 애니메이션에 저장된 시간 왜곡 곡선의 사용에 관련하여
각 애니메이션 사이의 blend-weight에 따라 재생 비율을 확장시킬뿐만 아니라, 특정 키프레임의 실시간 동기화를 가능하게 한다. 
그렇지 않으면 전체 애니메이션에 적용된 더 일반적인 재생 비율 스케일과 맞게 된다.

Kovar’s parameterised walking, punching and kicking motions. Red cubes show target loactions of captured motions and grey cubes show the range of variation accessible through blending.
Kovar는 걷기, 펀치, 발차기 모션을 매개변수화 했다. 빨간 상자는 캡쳐된 모션의 목표 위치를 보여주고, 회색 큐브는 블렌딩을 통해 접근 가능한 변동 범위를 보여준다.




The alsoran was fortunate enough to talk with Mr. Kovar after a conference in San Francisco in late 2004, but disagrees with his stric limitation on the extent to which differing actions can be blended together, in particular regarding successful blends with strafing actions.



Action Similarity


As mentioned earlier, for a blend to be successful the actions must be somewhat similar. A kick blended with a punch will produce nothing of use, however a high kick blended with a low kick will produce a medium kick if the actions are edited to sync correctly.
앞에서 언급했듯이, 좀더 성공적인 블렌드가 되기위해서는 액션은 반드시 어느정도 유사해야 한다. 펀치와 함께 블렌드된 발차기는 전혀 사용할 수 없는 것을 만들어낼 것이다. 만약 그 액션이 올바르게 동기화 되어 있다면, 낮은 발차기와 함께 블렌드된 높은 발차기는 중간 발차기를 만들어 낼 것이다.


In the earlier example, the walk will blend with the run only if both actions begin with the same pose, (the alsoran always uses the right-foot-up passing pose), however you may wish to use the right foot extended forward if your walks/runs always start with a basic transition from idle, allowing for the trans-time to take the equi-distant foot to the extended pose.
앞선 예에서, 오직 두 액션(걷기, 달리기)이 동일한 포즈로 시작할 경우에만, 걷기는 달리기와 블렌드 될 것이다. 그러나 만약 걷기와 달리기가 항상 Idle로 부터의 기본 전이로 시작한다면, 당신은 앞으로 더 확장된 오른 발을 사용하고 싶을지도 모른다.
전이 시간이 동등한 다리가 확장된 포즈를 가지는 것을 가능하게 한다.   

Playback-Rate Scaling

With the run scaled out to sync with the walk, a general playback rate increase will be required in order to play the run at its original pre-scaled rate. Below is an example of a blend between 3 seperate animations, walk, run and sprint, along with a playback rate increase dependant upon the weight of ach animation.
걷기와 동기화 하기 위해서 확장된 달리기 애니메이션으로, 원래의 재생 비율 시점에 달리기를 실행시키기 위해서, 일반적인 재생 비율 증가는 요구될 것이다.
밑에는 각 애니메이션의 weight에 따른 재생 비율 증가와 함께, 걷기, 달리기, 전력질주로 나뉘어진 블렌드에 대한 예이다. 


This example could be improved with the addition of a jog cycle between the walk and run, however blending between walks and jogs causes the character to plane along without a bounce midway between the blend due to the passing pose of a walk being the highest point whereas the equivelant pose is the lowest or weight-taking frame on a jog. Try slowly building up to a jog and you’ll find a speed that is difficult to maintain.
이 예는 걷기와 달리기 사이의 jog cycle의 추가로 개선될 수 있다. 그러나 걷기와 조깅사이의 블렌딩은 캐릭터가 블렌드사이에 중간에 튀는거 없이 평평하게하는 것을 야기시킨다. 걷기 자세는 가장 높은 점을 지나는데 반하여, 조깅에서 동등한 자세는 가장 낮거나 무게를 가지는 프레임이기 때문이다.
천천히 jog로 build되기위해 노력해야 하며, 우리는 유지하기 어려운 속도를 알게 될 것이다.


Conclusion


The walk/run blend is the most basic and common use of blending, and the alsoran is using many more instances extensively on his current project. So be imaginative – this is the first step toward truly procedural movement in videogames, where the animator is providing the raw data to be manipulated by the player and AI to produce a more organic look and avoid the repetetiveness of seeing the same identical animations over and over again.
걷기와 달리기 블렌드는 가장 기본이고 흔히 사용되는 블렌딩이다. 그리고 alsoran은 그의 현재 프로젝트에 더 많은 광범위한 사례를 사용하고 있다.
그러니 창의적이 되어라. 이것은 비디오게임에서의 앞으로 한걸음을 나아가는데 참된 절차이고, 애니메이터는 Player와 AI에 의해 조작될 수 있는 로우 데이터를 생산할 것이다. 이는 더 유기적인 모습과 끝없이 보여지는 동일한 애니메이션을 보는 반복을 피할 수 있게 할 것이다.