본문 바로가기
tips/유니티 & 개발

유니티 2D 애니메이션 2 - Bone, Geometry, Weight

by 디지털 수공업자 2020. 9. 4.
반응형

1. 2D 애니메이션 패키지 설치

1편에서는 유니티에 이미지파일을 더 수월하게 가져오기 위해 2D PSD importer를 설치했고, 이번에는 2D 애니메이션을 하기 위해 필요한 2D Animation 플러그인을 설치한다. 2D PSD importer는 필수가 아니지만, 스켈렉톤 애니메이션을 하기위해 2D Animation 플러그인은 필수이다.

Window > Package Manager를 열고 2D Animation을 설치한다.

 

2. Bone 생성

bone은 우리몸의 뼈와 관절의 관계를 스프라이트에 구성할 때 뼈의 역할을 하는 것이며, 본을 여러개 사용하여 적당한 회전을 주면 관절처럼 꺽이는 동작을 만든다. 우리몸의 뼈와 다른점은 스프라이트에 심은 본은 길이스케일 조절이 가능하다는 것으로 우리몸으로 치면 팔이 굵어지거나 팔이 늘어나는 동작도 할 수 있다.

스프라이트 에디터의 좌측 상단 메뉴에서 Skinning Editor로 변경하고, 바로 아래 나타난 Bones 메뉴에서 Create Bone을 선택한다.

 본이 생성될 위치에 마우스 왼쪽 클릭을 하고 드래그하여 본을 적당한 길이로 생성한다. 다음 본을 같은 방법으로 만드는데 앞서만든 본에 꼭 붙어있지 않아도 무방하다. 앞에 만든 본에 연결되지 않은 새로운 루트 본을 만들려면 마우스 오른쪽  클릭을 하여 연결을 해제하고, 다시 처음 본을 만들 때 처럼 왼쪽 클릭하고 드래그 하여 본을 생성한다.

스프라이트 갯수와 본의 개수는 같을 필요가 없고, 스프라이트를 구부리기 위해 필요한 개수 만큼 본을 생성한다. 하나의 스프라이트에 본을 여러개 사용하면 스프라이트를 구부리거나 찌그러뜨릴 수 있다. 반대로 여러개의 스프라이트에 본을 하나만 사용하면 스프라이트 자체는 찌그러지게 할 수 없게 된다.

본을 하나 선택하여 우측 아래 Bone의 Name에 본의 이름을 만들어준다. 필요한 모든 본을 설치하고 이름 설정도 끝났으면 Sprite Editor창 우측 상단의 Apply를 눌러 적용한다. 생성한 본의 위치를 재조정하려면 좌측 상단 Bones메뉴에서 Edit Bone을 누르고 수정한다. 

 

3. Geometry

스프라이트 내부를 임의의 크기로 조각내어 각 조각마다 본의 영향을 받는 크기를 다르게 조절해야 한다. 조각을 많이 낼수록 그리고, 조각의 모양이 구부러지는 형태에 적당할수록 스프라이트를 부드럽게 구부리거나 찌그러뜨릴 수 있고, 조각을 적게낼 수록 섬세하게 찌그러뜨리는것이 힘들어진다. 

Sprite Editor창의 왼쪽 Geometry 메뉴에서 Auto Geometry를 누르고, 우측 하단에서 Generate For All Visible 버튼을 누른다. Generate For All Visible 버튼의 위에 있는 수치만큼 각각의 스프라이트가 조각나게 된다. 조각을 내어놓고 보면 면적이 큰 스프라이트는 조각의 크기도 크게 보인다. 조각이 크던 작던 상관은 없으며, 구부러저야할 부분의 조각밀도가 높은 것이 부드럽게 구부리는데에 유리하다. 우리몸의 피부 중 팔꿈치 부분이 팔뚝부분보다 축소와 팽창량이 훨씬 크다. 따라서 팔꿈치처럼 크게 축소 또는 팽장이 되어야 할 곳의 조각 밀도와 조각의 모양을 적당하게 조절하는 것이 중요하다.

각각의 스프라이트를 개별 선택(더블 클릭)하고 Generate하면 각각 값을 달리 할 수 있다. 생성된 점들의 위치나 양을 수동으로 조절하려면 Geometry메뉴의 Edit, Create 등을 이용한다.

4. Weights

생성한 bone과 geometry를 연결시키는 비중을 정하는 단계이다. 하나의 스프라이트에 여러 개의 본이 사용될 때 각 각의 본이 스프라이트의 지오메트리로 조각난 영영마다 어느정도의 영향을 미칠지를 정한다.

Sprite Editor창의 좌측 Weights메뉴에서 Auto Weights를 선택하고 우측하단에서 Generate All 버튼을 누르면 자동을 본에 근접한 지오메트리에 영향을 끼치도록 weight를 설정해준다. 자동으로 생성된 것이기 때문에 본을 선택하여 원하는 동작이 되도록 회전시키는 등의 움직임을 만들어보면 스프라이트가 원하는 것과 다르게 찌그러지는 경우가 대부분이다.

그러므로 본 마다 영향을 끼칠 지오메트리의 영역을 재설정해주기 위해 Sprite Editor창의 좌측 Weight Brush를 선택하고나서, 수정하고자 하는 스프라이트를 더블클릭하여 해당 스프라이트의 지오메트리만 보이는 상태에서 영향력을 끼칠 본을 선택하고 지오메트리의 각 점(버텍스)에 드래그하여 색상을 칠해준다. 이때 칠해지는 컬러는 해당 본의 컬러와 동일하다. 하나의 스프라이트 또는 다수의 스프라이트마다 각 본의 weight에 따른 색상이 알록달록 표시된다.

독립적으로 움직여야 할 스프라이트들이 많이 중첩되어 있는 경우에는 이 글 아래쪽의 5. Bone Influence를 먼저 적용하고 Weight Brush를 사용하는 것이 나을 수 있다. 물론 Influence를 끊어냈어도 브러쉬질을 다시 포함해서 하게되면 Influence에 자동으로 Bone이 추가된다.

브러쉬 크기는 우측하단에서 size 값으로 조절하고, 브러쉬의 농도는 그 아래 Step 값으로 조절한다. step 값이 크면 브러쉬가 연하게, step값이 작으면 강하게 칠할 수 있다.

이때, 본을 회전시키거나 이동시켜서 스프라이트가 어떻게 영향을 받는지 확인하면서 조절한다. 본을 클릭하여 드래그하면 회전, 본의 굵은쪽 검은 점을 클릭하여 움직이면 이동이 된다.

위의 스크린샷에서 회전시킨 본이 보라색을 가진 어깨에서 팔꿈치사이 부분이다. 어깨부위의 지오메트리는 하늘색으로 나타나며, 하늘색 bone인 목의 weight가 높기때문에 보라색 bone이 회전하였음에도 전혀 회전하지 않고 있다. 팔꿈치 부위에 해당하는 노란 지오메트리는 척추뼈인 노란 bone의 영향을 받고 있기 때문에 역시 팔이 회전하였으나 팔꿈치는 움직임이 없는 상태로 남은 것.

움직였던 본을 원래자리로 되돌리려면 Sprite Editor창의 좌측 상단 Reset Pose버튼을 눌러준다.

5. Bone Influence

influence는 weight보다 더 강하게 스프라이트에 영향을 주냐 안주냐를 결정한다. 특정 스프라이트에 영향을 줄 bone을 등록하여 등록되지 않은 bone의 영향을 받지 않도록 제한하게 된다.

스프라이트 하나가 아닌 여러개로 구성을 할 때, 위와 같이 스프라이트가 겹쳐진 채로 본을 박고 자동으로 지오메트리와 웨이트를 생성하면 원하지 않는 본스프라이트에 영향을 주게 된다. 스프라이트를 아틀라스처럼 펼쳐놓고 본을 박으면 이 문제가 덜 할 수 있는데, 그 경우에는 아틀라스 파일을 만드는데 별도로 시간이 들어가기 때문에 그 부분은 선택의 문제.

의도하지 않은 본이 스프라이트에 영향을 주지 않도록 브러쉬로 잘 그려서 설정 해도 되지만, influence에서 더 깔끔하게 규정할 수 있다. Sprite Editor창의 좌측 Weights Bone Influence에서 각 스프라이트에 영향을 주고 있는 본의 목록을 확인한 뒤, bone을 추가하거나 삭제할 수 있다. 삭제를 했어도, Weight Brush를 사용해 다시 칠을 해주면 Influence목록에 bone이 다시 자동으로 추가된다.

여기까지 정리가 되었으면 유니티 에디터에서 스프라이트를 꺼내어 사용할 수 있다.


스프라이트 레이어 순서 SortingGroup : https://boxwitch.tistory.com/239
유니티 2D 라이트 설정, 유니버설 렌더 파이프라인 : https://boxwitch.tistory.com/12
유니티 2D 애니메이션 1편 PSB파일 : boxwitch.tistory.com/16
유니티 2D 애니메이션 3편 Sprite Skin, IK : boxwitch.tistory.com/20
유니티 2D 애니메이션 4편 Swap sprite : boxwitch.tistory.com/21

 

반응형

댓글