AnyPortrait > 메뉴얼 > 여러 방향의 모습을 가진 캐릭터 만들기

여러 방향의 모습을 가진 캐릭터 만들기


1.3.4

게임에 등장하는 캐릭터를 만들 때, 게임의 특성에 따라 정면, 측면, 후면을 바라보도록 만들어야 하는 경우가 있습니다.
이러한 방식의 작업은 탑뷰는 물론이고, 사이드뷰 액션 게임에서도 종종 사용되곤 합니다.
이 페이지에서는 AnyPortrait를 이용해서 여러 방향의 모습을 가진 캐릭터를 만드는 방법을 다룹니다.


기능 위주로 설명을 드리며, 애니메이션을 만드는 세세한 과정이나 이미지를 제작하는 방법은 다루지 않으므로 참고바랍니다.


여러 방향의 모습을 가진 캐릭터를 만드는 방법에는 크게 두가지 방식이 있습니다.
첫번째 방식은 여러개의 루트 유닛들을 만들어서 스크립트로 전환하는 방식입니다.
다른 하나는 여러개의 자식 메시 그룹들을 가진 하나의 루트 유닛을 만들어서 컨트롤 파라미터로 제어하는 방식입니다.
각각 장단점을 가지고 가지고 있으므로, 아래의 설명에서 여러분에게 맞는 방법을 선택하세요.








방법 1. 여러개의 루트 유닛들을 이용하기




여러개의 방향을 가진 캐릭터를 만드는 첫번째 방법은, 각각의 방향에 따른 루트 유닛들을 만드는 것입니다.
애니메이션 도중에 방향을 전환하는 등의 복잡한 애니메이션을 만들지 않는다면, 이 방법은 꽤 직관적이고 스크립트로 다루기도 쉽습니다.




준비한 메시 그룹과 루트 유닛은 위와 같이 "정면 (Front)", "측면 (Side)", "후면 (Back)"입니다.
각각의 메시 그룹들은 서로 독립되어 있습니다.




루트 유닛이 되는 각각의 메시 그룹들은 본들과 "Rigging 모디파이어", "Transform (Animation) 모디파이어"를 가지고 있습니다.




애니메이션들도 각각의 방향에 맞게 만듭니다.
(1) "정면 (Front)"에 대한 애니메이션인 "Walk_Front"을 생성합니다.
(2) 이 애니메이션을 "정면 (Front)" 메시 그룹에 연결합니다.
(3) 정면 메시 그룹에 대한 애니메이션을 만듭니다.






같은 방식으로 "측면 (Side)", "후면 (Back)"에 대한 애니메이션들도 만듭니다.


이제 간단한 스크립트를 작성하여 캐릭터의 방향을 전환하도록 만들어봅시다.



스크립트를 보면 루트 유닛을 전환하는 별도의 코드가 없고, 단순히 애니메이션을 재생하는 코드만 있습니다.
애니메이션에 따라 루트 유닛이 전환되므로, 코드를 정말 간단하게 작성할 수 있습니다.




만든 캐릭터와 작성한 스크립트를 유니티 씬에 배치해봅시다.
(1) AnyPortrait 에디터에서 Bake를 하면 캐릭터가 씬에 배치됩니다.
(2) 새로운 GameObject를 생성합니다.
(3) 생성된 GameObject에 앞서 작성한 스크립트를 추가하고, apPortrait를 할당합니다.




게임을 실행하고 스크립트에서 작성한 것과 같이 숫자 1, 2, 3키를 누르면 해당 루트 유닛으로 전환되면서 애니메이션이 실행됩니다.


여러개의 루트 유닛을 사용하는 것은 기존의 제작 방식에서 크게 다르지 않으며, 캐릭터의 방향에 맞는 애니메이션을 재생하도록 스크립트로 작성하면 됩니다.
작업 과정과 스크립트 작성이 쉽고 직관적이라는 것은 이 방식의 장점입니다.
반면에, 방향이 전환되는 애니메이션을 만들기 어렵다는 것이 단점입니다.
만약 방향이 전환되는 애니메이션을 만들고자 한다면, 각 방향에 대한 애니메이션들을 제작하여 순서대로 재생하도록 스크립트를 작성해야합니다.
이러한 특성에서, 이 방식은 탑뷰의 게임에서 효과적으로 사용될 수 있습니다.




방법 2. 여러개의 자식 메시 그룹을 이용하기




두번째 방법은 "하나의 루트 유닛이 되는 메시 그룹"에 "여러개의 자식 메시 그룹"을 추가하는 방법입니다.
렌더링 되어야 하는 자식 메시 그룹만 보이게 만들고, 나머지 메시 그룹을 숨겨서 마치 캐릭터의 방향이 바뀌도록 만들 수 있습니다.
(1) 앞의 설명과 동일해보이는 캐릭터이지만, 하나의 메시 그룹에 3개의 메시 그룹들이 자식 메시 그룹으로 등록되어 있습니다.
(2) 각각의 메시 그룹들은 독립적으로 메시들과 본을 가지고 있으며, "Rigging 모디파이어"가 적용된 상태입니다.




부모-자식 메시 그룹들을 이용하여 작업하는 경우, 어느 메시 그룹에 어떤 모디파이어를 추가해야하는지 결정해야합니다.
자식 메시 그룹들이 각각 본을 가지면서 독립적인 움직임을 가지는 경우 특히 주의해야합니다.
저희는 위와 같이 모디파이어를 구성할 것을 권장합니다.


작업의 편의성, 일관성, 성능을 모두 고려할 때, 루트 메시 그룹Morph, Transform, Color Only 모디파이어를 추가하는 것이 좋습니다.
특히 Animation 모디파이어들은 오직 루트 메시 그룹에만 추가할 수 있습니다.
(만약 실수로 Animation 모디파이어를 자식 메시 그룹에 추가하고 애니메이션을 만들었다면 관련 페이지의 해결 방법을 참고해주세요.)


Rigging, Physics 모디파이어는 외부 데이터(컨트롤 파라미터, 애니메이션)에 관계없이 동작하므로 본이나 메시를 가진 자식 메시 그룹에 추가하는 것이 더 편리할 것입니다.
특히 자식 메시 그룹이 본을 가진 경우엔 Rigging 모디파이어를 자식 메시 그룹에 추가하는 것이 편리하게 작업할 수 있습니다.
다만, 대상 메시에 2개 이상의 Rigging 모디파이어가 적용되는 경우 문제가 발생하므로 주의하시길 바랍니다.
부모 메시 그룹에 이 모디파이어들을 추가해서 적용해도 상관은 없습니다.


Controller 모디파이어들(Morph, Transform, Color Only)을 자식 메시 그룹에 추가하는 것은 가능하긴 하지만 저희는 권장하지 않습니다.
저희의 경험상, 부모-자식 메시 그룹에 모디파이어를 복합적으로 등록하였다가 의도치 않은 움직임에 어려움을 겪는 경우가 많이 있었습니다.
그래서 가능하면 외부 데이터들에 의한 변형은 루트 메시 그룹에서 일관적으로 편집하시는 것을 권장합니다.




이 방식에서 가장 중요한 포인트는, "컨트롤 파라미터를 이용해서 보여지는 자식 메시 그룹을 전환하는 것"입니다.
이것은 앞의 첫번째 방식에서 애니메이션을 실행하여 루트 유닛을 전환하는 것에 대응됩니다.
(1) 새로운 컨트롤 파라미터를 추가합니다. 여기서는 "Root Pose"라는 이름의 컨트롤 파라미터를 만들었습니다.
(2) 컨트롤 파라미터의 타입을 Int로 설정합니다.
(3) 값의 범위를 -1 ~ 1로 설정했는데, 이는 각각 "후면 : -1", "측면 : 0", "정면 : 1"로 매핑하기 위함입니다.




(1) 루트 메시 그룹을 선택합니다.
(2) Modifier 탭을 선택하고 Add Modifier 버튼을 누릅니다.
(3) "Color Only (Controller)" 모디파이어를 선택하고 (4) Select 버튼을 누릅니다.




(1) 컨트롤 파라미터에 3개의 키를 등록합니다.
(2) 자식 메시 그룹들을 모디파이어에 등록합니다.




컨트롤 파라미터에 따라서 보여지는 자식 메시 그룹이 바뀌도록 만듭니다.
값이 -1일 때는 후면, 0일 때는 측면, 1일 때는 정면만 보이도록 설정합니다.
이제 "Root Pose" 컨트롤 파라미터를 제어하여 캐릭터의 방향이 바꿀 수 있게 되었습니다.




이어지는 과정을 설명 하기에 앞서서, 여러개의 자식 메시 그룹을 이용한다면 다음의 기능들에 대한 설명을 먼저 확인해주세요.








본 애니메이션을 만들어 봅시다.
(1) 루트 메시 그룹을 선택하고, Modifier 탭에서 Add Modifier 버튼을 누릅니다.
(2) Transform (Animation) 모디파이어를 선택하고 (3) Select 버튼을 누릅니다.




(1) 새로운 애니메이션을 추가합니다.
(2) 애니메이션에 이름을 지정한 후, Select Mesh Group 버튼을 누릅니다.
(3) 메시 그룹들이 나타나는데, 루트 유닛이 될 수 없는 자식 메시 그룹은 선택할 수 없음을 볼 수 있습니다. 루트 메시 그룹을 선택합니다.
(4) Select 버튼을 누릅니다.




(1) Add Timeline 버튼을 누릅니다.
(2) 자식 메시 그룹을 전환하기 위해 Control Parameters 타임라인을 먼저 추가합니다.




(1) 추가된 Control Parameters 타임라인을 선택합니다.
(2) 앞서 생성한 "Root Pose" 컨트롤 파라미터를 선택합니다.
(3) Add Timeline Layer to Edit 버튼을 눌러서 타임라인에 컨트롤 파라미터를 등록합니다.




(1) 다시 Add Timeline 버튼을 누릅니다.
(2) 본 애니메이션을 만들기 위해 Modifier : Transform (Animation)을 선택하여 추가합니다.




(1) 추가된 Transform (Animation) 타임라인을 선택합니다.
(2) Bones 탭을 선택합니다.
(3) All Bones to Layers 버튼을 누릅니다.
(4) 안내 메시지에서 Okay 버튼을 눌러서 모든 본들을 타임라인에 등록합니다.




이제 애니메이션을 만들어봅시다.
본 애니메이션을 만들기에 앞서, 보여지는 자식 메시 그룹, 즉 캐릭터의 방향을 먼저 키프레임으로 설정해봅시다.
(작업자의 스타일에 따라서는 이 페이지의 설명과 다르게 메시 그룹의 렌더링 여부와 본 애니메이션을 동시에 편집할 수도 있습니다.)
(1) 애니메이션 편집 모드를 켜고, Control Parameters 타임라인의 "Root Pose"를 선택합니다.
(2) 키프레임들을 추가합니다.




(1) 키프레임을 선택하고 (2) 컨트롤 파라미터의 값을 지정합니다.
(3) 위와 같이 "정면 > 측면 > 후면 > 측면"이 반복해서 보여지도록 키프레임을 설정했습니다.
(4) 애니메이션을 재생시켜보면 작업 공간에서 "Root Pose"의 값에 따라 캐릭터의 방향이 전환되는 것을 볼 수 있습니다.




다음은 본 애니메이션을 만드는 작업입니다.
(1) Transform (Animation) 타임라인을 선택하고 편집 모드를 켭니다.
(2) 그런데 이 상태에서는 "Root Pose" 컨트롤 파라미터가 적용이 안되서 작업 공간에 모든 메시 그룹들이 보여지는 문제가 발생합니다.




이 페이지의 앞에서 설명한 방법으로 이 문제를 해결합니다.
(1) 보기 메뉴 > Edit Mode Options > Apply Multiple Modifiers if no conflict (단축키 : D )를 활성화합니다.




이제 편집 대상이 아닌 타임라인도 동작하여, 현재 상태에 맞는 자식 메시 그룹만 작업 공간에 보여집니다.




본들이 작업 공간에 보여지지 않도록 설정한 상태였습니다.
B  키를 누르거나 보기 메뉴 > Show Bones를 켜서 본들을 보이게 해봅시다.
그런데 출력되는 자식 메시 그룹과는 별개로 모든 본들이 보여집니다.
너무 많은 본들이 어지럽게 작업 공간에서 보여지므로 편집을 하기가 어렵습니다.




보기 프리셋을 이용해봅시다.
(1) 보기 메뉴 > Visibility Preset > Settings를 선택합니다.




(1) 새로운 규칙을 추가합니다.
(2) 이 규칙의 방식을 "Show Bones If Mesh Group Visible"로 설정합니다.
이 옵션은 본들이 속한 메시 그룹이 렌더링 될 때만 본들이 작업 공간에 렌더링되도록 만듭니다.




생성된 규칙을 적용합니다.
(1) 보기 메뉴 > Visible Preset에서 생성한 규칙을 선택하고 (2) Enable Preset을 눌러서 활성화 합니다. (단축키 : I )
(3) 애니메이션을 재생하면 보여지는 자식 메시 그룹에 대한 본들만 작업 공간에 보여집니다.




모든 준비가 끝났으니 이제 본 애니메이션을 만들 차례입니다.
한 애니메이션 클립 내에서 캐릭터가 방향을 바꿔가면서 움직이도록 모션을 만들 수 있습니다.


이 과정은 캐릭터가 어떤 모션을 가지는지, 여러분이 애니메이션을 어떻게 만드는지에 따라 차이가 있을 것입니다.
다음의 작업 과정을 참고하여 모션을 만들어보세요.




(1) Transform 타임라인 및 타임라인 레이어를 선택하고 키프레임을 생성한 후, (2) 캐릭터의 포즈를 수정합니다.




(1) 캐릭터의 방향이 바뀌기 직전에 키프레임들을 생성합니다.
(2) 캐릭터의 이어지는 다음 방향의 포즈와 최대한 비슷하게 포즈를 수정합니다.




다음 프레임으로 이동하여 캐릭터의 방향이 바뀌었을 때, 이전 프레임과 포즈의 차이가 적을 수록 애니메이션이 자연스럽습니다.


이전 캐릭터 방향의 마지막 키프레임들과 다음 방향의 첫번째 키프레임들의 위치가 같아진다면, 더 자연스러운 방향 전환이 됩니다.




본 애니메이션과 컨트롤 파라미터를 조합하여 캐릭터가 회전하는 것 같은 애니메이션을 위와 같이 간단히 만들어보았습니다.
더 많은 키프레임, Morph 모디파이어, 회전에 적합한 캐릭터 이미지 등이 보태진다면 훨씬 높은 퀄리티의 작품을 만들 수 있을 것입니다.


캐릭터의 방향이 자연스럽게 전환되도록 컨트롤 파라미터와 포즈를 설정하는 것은 많은 노하우를 필요로 합니다.
기능에 대한 저희의 설명 이외에도 애니메이션을 직접 만들어보시면서 많은 경험을 쌓고 멋진 작품을 만들어보세요.




완성된 캐릭터 애니메이션을 유니티 씬에 확인해봅시다.
(1) 루트 유닛을 선택한 화면에서 애니메이션 클립을 선택하고 Auto Play를 활성화하여 자동으로 애니메이션이 재생되도록 만듭니다.
(2) Bake를 실행합니다.




완성된 애니메이션이 유니티 씬에서 재생되는 것을 볼 수 있습니다.


여러개의 자식 메시 그룹을 이용하는 방법은 설명에서 보듯이 수많은 객체들을 동시에 편집해야합니다.
작업이 다소 어렵고 설정해야하는 것들이 많은 것이 필연적인 단점입니다.
하지만 이러한 어려움을 이겨내면 하나의 애니메이션 내에서 캐릭터 방향이 바뀌는 것을 표현할 수 있다는 큰 장점을 얻을 수 있습니다.
사이드뷰 액션 게임에서 캐릭터가 달려가거나 싸우고 점프하고 뒤돌아보는 등의 복합적인 모션을 만들기에 적절한 기법입니다.