절차적 애니메이션은 제게 항상 마법처럼 느껴졌습니다. 캐릭터에 생명을 불어넣는 방식에는 무언가 사로잡는 힘이 있습니다. 모든 움직임이 알고리즘에 의해 계산됨에도 불구하고, 전체적인 결과는 유연하고 자연스럽게 느껴집니다.
생물학적 시뮬레이션에 관심이 있는 사람으로서, 저는 가상 동물을 시각화하기 위해 절차적 애니메이션을 사용하는 것에도 호기심이 많았습니다. 그래서 지난 몇 달 동안 다양한 절차적 애니메이션 기술을 배우고 탐구해왔습니다.
마침내 저는 놀라울 정도로 간단하고 우아하다고 생각하는 몇 가지 기술에 도달했습니다. 오늘 저는 이 기술들을 여러분과 공유하고, 절차적으로 애니메이션된 생물을 만드는 과정을 안내해드리고자 합니다.
먼저 점을 하나 만들고 '앵커(anchor)'라고 부르겠습니다. 이제 앵커로부터 원하는 거리가 있다고 상상해 보세요. 이것은 원으로 표현할 수 있습니다. 만약 다른 점을 이 원하는 거리에 제약하고 싶다면, 즉 원 위에 투영하고 싶다면, 한 가지 방법은 앵커에서 그 점까지 벡터를 그리는 것입니다.
그런 다음 이 벡터를 원하는 거리로 스케일링할 수 있습니다. 그러면 점의 새로운 위치가 나타납니다. 이것을 '거리 제약'이라고 합니다.
앵커를 움직이면서 점을 계속 제약하면 흥미로운 행동이 나타납니다. 점이 본질적으로 앵커를 따라다니게 됩니다.
이것을 여러 개의 점으로 다시 해보겠습니다. 각 점이 다음 점에 제약되도록 거리 제약을 사슬처럼 연결할 것입니다. 첫 번째 점을 움직이면 전체 사슬이 따라오는 것을 볼 수 있습니다.
거리 제약을 평가하는 순서도 중요합니다. 만약 마지막 점에서부터 평가하면, 사슬은 반대 방향에서 움직입니다. 이 사슬은 벌레 같은 생물과 다소 비슷해 보입니다. 점들을 두꺼운 선으로 연결하면 더 나은 근사치를 얻을 수 있습니다.
동물의 몸통으로서 사슬을 사용하는 것은 벌레를 애니메이션하는 데는 좋지만, 더 복잡한 것을 애니메이션하려면 몸의 형태에 대한 더 많은 제어가 필요합니다.
이번에는 각 점에서 몸의 크기를 정의하는 새로운 사슬을 만들어 보겠습니다. 이것을 원으로 시각화하면 동물의 몸통 윤곽을 얻을 수 있습니다. 선택하는 값에 따라 다양한 몸 형태를 가질 수 있습니다. 몸의 각 부분이 사슬의 중앙에 위치하기 때문에, 사슬이 움직여도 몸의 형태는 유지됩니다. 이제 사슬은 동물의 '척추' 역할을 하게 됩니다.
다음 단계는 동물의 윤곽 주위에 연속적인 모양을 그리는 것입니다. 이를 위해 매개변수 방정식에 대해 간단히 이야기해야 합니다.
이것은 원의 매개변수 방정식입니다:
x = r cos θ
y = r sin θ
어떤 반지름(r)과 각도(θ)가 주어지면, 원 위의 해당 좌표를 찾을 수 있습니다. 이 원이 우리 동물의 몸통 한 부분을 나타낸다고 상상하면, 우리가 찾고자 하는 것은 몸의 왼쪽과 오른쪽입니다. 몸통 부분의 반지름과 방향을 사용하여, 양쪽 방향으로 4분의 1 바퀴를 돌리면 몸의 양쪽을 찾을 수 있습니다.
이 기술을 사용하여 동물을 그려봅시다. 이 몸 형태에서 시작하여 각 부분의 왼쪽과 오른쪽, 그리고 머리와 꼬리를 위한 추가 점들을 표시하면 윤곽선에 필요한 모든 점을 갖게 됩니다. 이제 점들을 연결하면 우리 동물의 몸이 완성됩니다.
같은 매개변수 방정식 기술을 사용하여 머리 부분의 왼쪽과 오른쪽에 눈을 그릴 수 있습니다. 이렇게 하면 이전의 벌레 애니메이션보다 훨씬 나아 보이는 뱀 애니메이션이 완성됩니다.
하지만 한 가지 문제가 있습니다. 뱀이 너무 많이 구부러지면 선이 겹쳐서 애니메이션이 이상해집니다. 실제 생물처럼, 동물의 척추는 최대 유연성을 가져야 하고 특정 지점을 넘어서면 더 이상 구부러져서는 안 됩니다.
이 문제를 해결하기 위해 '각도 제약'을 적용할 수 있습니다. 아이디어는 간단합니다. 두 개의 몸통 부분 사이의 각도 차이가 너무 크면, 원하는 임계값으로 다시 축소합니다. 이 수정 후에는 뱀의 움직임이 훨씬 더 자연스러워집니다.
기본적인 형태와 눈으로 물고기 디자인을 시작하겠습니다. 다음으로, 회전된 타원으로 표현되는 지느러미를 추가할 수 있습니다. 지느러미의 위치를 몸통의 특정 부분에 상대적으로 설정하고, 덜 뻣뻣해 보이도록 지느러미의 회전을 앞쪽 부분에 상대적으로 설정합니다. 이렇게 하면 지느러미가 몸의 움직임을 이끄는 것처럼 보입니다.
등지느러미와 꼬리지느러미는 더 복잡한 기술을 사용합니다. 본질적으로, 몸의 각 부분 사이의 각도 차이를 합산하여 몸이 얼마나 구부러졌는지를 나타내는 값을 얻습니다. 두 지느러미 모두, 한쪽 면은 척추의 곡선을 따르고 다른 쪽 면은 총 몸체 곡률 값을 사용하여 오프셋됩니다. 이 오프셋은 몸의 곡률에 비례하기 때문에 두 지느러미 모두 물고기의 움직임에 반응합니다. 이렇게 해서 완전한 물고기 애니메이션이 완성됩니다.
뱀과 물고기를 만들었지만, 아직 탐구하지 않은 것이 하나 있습니다. 바로 다리입니다. 다리를 시뮬레이션하기 위해서는 먼저 운동학에 대해 이야기해야 합니다.
세 개의 부분으로 이루어진 로봇 팔을 상상해 보세요. 각 부분의 길이와 회전 각도가 주어지면, 팔 끝의 위치를 계산하는 것은 매우 쉽습니다. 이 절차를 '순방향 운동학'이라고 합니다.
하지만 문제를 뒤집으면 어떻게 될까요? 목표 위치가 주어졌을 때, 팔 끝을 그 목표 위치로 이동시키기 위해 각 부분의 올바른 회전 각도를 어떻게 찾을 수 있을까요? 이 문제는 '역운동학'이라고 불리며 꽤 복잡할 수 있습니다.
다행히도, 우리가 이전에 사용했던 사슬 시뮬레이션을 사용하는 매우 간단한 근사 기법이 있습니다. 이 기법은 FABRIK (Forward And Backward Reaching Inverse Kinematics)이라고 불립니다.
이 IK 기술을 도마뱀에 적용해 봅시다. 각 다리에 대해, 발이 닿아야 할 목표 위치(타원형 '스텝 존')를 정의합니다. 만약 발이 스텝 존을 벗어나면, 존 안에서 새로운 목표 위치를 찾아 그곳으로 발을 내딛습니다. 다리 움직임은 교차 패턴(예: 왼쪽 앞다리와 오른쪽 뒷다리가 함께)으로 동기화됩니다. 이 IK 다리 움직임을 척추 움직임과 결합하여 완전한 도마뱀 애니메이션을 만듭니다.
이 영상에서는 절차적 애니메이션을 사용하여 생생한 생물 움직임을 만드는 몇 가지 핵심 기술을 다룹니다.
이러한 기술들을 결합하여 간단한 규칙만으로도 뱀, 물고기, 도마뱀과 같은 다양한 생물들의 자연스럽고 역동적인 움직임을 만들어낼 수 있습니다.