도서 정리/유니티로 만드는 게임 개발 총론

[유니티로 만드는 게임 개발 총론]3장. 애니메이션 메커니즘

dukh 2023. 8. 30. 11:17
본문의 모든 내용과 이미지의 저작권은 '페니 드 빌' 저자의 유니티로 만드는 게임 개발 총론 도서에 있습니다.

3-1. 게임의 시각적 메커니즘

  • 애니메이션은 컴퓨터 게임에서 시각적 측면의 토대가 되는 하부 메커니즘
    • 조금씩 다른 이미지들을 연속으로 바르게 보여줘서 움직이는 듯한 효과를 주는 기법
  • 전통적 애니메이션은 이미지를 각각 손으로 그려 차례대로 보여주는 방식
    • 움직임이 부드러우려면 초당 24프레임, 한 그림 당 2프레임 차지, 12장의 그림이 필요
  • 현대의 컴퓨터 게임은 보통 30~100, 혹은 그 이상의 프레임률을 수용
  • 컴퓨터 게임 초창기에는 미리 제작한 아트 애셋을 저장할 메모리와 아트 애셋을 제작할 수 있는 드로잉 프로그램이 없었기 때문에 알고리즘을 활용해서 즉석에서 오브젝트를 그렸음

초창기 게임 'Pong'

  • 1974년에 읽기 전용 메모리가 게임에 도입되면서 그래픽을 미리 제작해 저장 가능해 짐
    • 미리 제작한 그래픽을 2차원 비트맵, 스프라이트라고 칭함

1. 스프라이트

  • 다른 요소와 구분되는 2D 텍스처, Material도 이에 해당
    • 많이 사용할수록 실행의 효율성이 떨어짐
    • 유니티에서 Material을 적용하면 추가적인 로드가 발생 - 드로우콜(Draw call)
    • 게임 환경 내에서 메시의 폴리곤 개수가 많아져도 드로우콜이 많아짐

2. 텍스처 아틀라스

  • 텍스처 안에 여러 개의 이미지를 조합해 넣는 것
    • ex) 512x512의 이미지에 32x32의 이미지를 여러 개 조합해 붙임
    • 이미지 각각이 서로 겹치지 않게 배치해야 함
  • 텍스처 아틀라스에서 작은 이미지들은 저마다 픽셀 좌표, 폭, 높이를 갖고 있음
    • 필요한 이미지를 뽑아서 쓰기 편함

텍스처 아틀라스의 예

3. 애니메이션에 사용되는 스프라이트

  • 기술적으로는 게임에서 사용되는 모든 2D 이미지가 스프라이트이지만, 게임 오브젝트의 특정 움직임을 나타내는 2D 애니메이션을 뜻하는 경우가 많음
    • 이 경우, 구체적인 제스처에 움직임을 넣기 위해 조합되는 이미지들의 집합으로 구성

애니메이션에서 사용되는 스프라이트의 예

3-2. 3D 애니메이션

  • 운동학을 이용해 실시간으로 애니메이션을 연산하는 방식은 프로세서에 심한 부하를 줌
    • 애니메이션을 미리 제작해두고 같은 동작을 정확히 같은 방식으로 수없이 반복
    • 애니메이션 재활용을 통해 게임의 성능을 높이고 개발 예산을 줄임
      • ex) 사다리를 오르는 애니메이션을 건물을 오르는 애니메이션으로 재사용
  • 플레이어가 어떤 행동을 취할지 예상할 수 없기 때문에 여러 애니메이션을 따로 만들고 조합
  • 모든 애니메이션의 시작과 끝을 같게 해야 애니메이션이 연결될 때 자연스러움
    • 유니티에서는 3D 환경에서 애니메이션 간의 자연스러운 전환을 위한 기능을 제공

각 애니메이션의 시작과 끝이 다르더라도 자연스럽게 연결해 줌

3-3. 생체 역학

  • 인간과 동식물 같은 생물 시스템의 역학적 운동을 연구하는 학문
  • 생물 시스템의 운동 방법을 묘사하는 애니메이션을 만들려면 생체 역학에 대한 이해가 필요
  • 휴머노이드 애니메이션 워킹 그룹은 인간 골격의 표준 규격을 제공하는 국제적인 프로젝트
    • 다양한 프로그램에서 일관성 있게 사용 가능

최소한의 관절을 보여주는 H.Anim 프로젝트의 일부 사양

  • 유니티에서는 'Ragdoll' 이라는 컴포넌트로 관절의 움직임을 지원
  • 운동학에서는 운동의 원인은 염두에 두지 않고 오브젝트의 운동만을 설명하며 거리, 방향, 속도에 관련된 선형 및 회전 운동을 다룸
  • 운동학에는 정운동학과 역운동학이라는 두 가지 관점이 있음

1. 정운동학(Forward kinematics)

  • 주어진 관절의 각도, 회전, 마디의 길이를 통해 분절된 오브젝트 끝 부분의 최종 위치를 계산
    • ex) 관절의 회전, 각도, 뼈 마디 길이를 통해 캐릭터의 손이 어디에 있는지 계산 가능
    • 계산엔 벡터가 사용 됨

정운동학을 이용한 손의 위치 계산

2. 역운동학(Inverse kinematics)

  • 게임에서 캐릭터를 환경과 연결 시킴
  • 정운동학과 반대로 손의 위치가 특정 위치에 놓이려면 관절의 각도가 몇이어야 하는 지를 구함
    • ex) 게임에서 캐릭터가 물체를 집어 들 때, 물체의 위치에 손이 놓여야 하므로 손의 위치에 맞게 나머지 요소를 계산
  • 관절은 여러 각도를 취할 수 있기 때문에 정운동학에 비해 복잡함

문을 잡는 손의 관절의 움직임

3-4. 애니메이션 관리

  • 2D, 3D에 따라 애니메이션을 관리하는 방법이 달라짐

1. 단일 2D 스프라이트 액션

  • 텍스처 아틀라스를 주로 사용
  • 한 캐릭터에 대한 모든 애니메이션을 하나의 텍스처 아틀라스에 보관하기도 함
    • 정확한 시점에 텍스처의 정확한 부분이 표시되도록 픽셀을 철저하게 관리해야 함

별개의 애니메이션 4개를 합친 스프라이트

2. 단일 3D 애니메이션

  • 텍스처 아틀라스와 동일한 방식으로 다수의 개별 애니메이션을 정의하는 3D 애니메이션 트랙을 사용
  • 2D와는 다르게 오브젝트의 각 부위 별로 다른 애니메이션을 제작하여 관리
    • 어색한 동작이 나올 위험성이 있지만, 훨씬 다양한 애니메이션을 구현할 수 있음

애니메이션 블렌딩

  • 3D 환경에서 서로 다른 애니메이션의 서로 다른 부분을 조합하는 기능
  • 1번 애니메이션과 2번 애니메이션의 시작과 끝 모션이 다르더라도 부드럽게 연결해 줌

3-5. 2차 애니메이션

  • 1차 애니메이션에서 비롯된 움직임, 또는 다른 서브 오브젝트들의 움직임
    • ex) 캐릭터가 걸으면 머리카락이 움직임, 무기를 발사하면 반동이 생김
    • ex) 나무가 바람에 흔들림, 강물이 흐름
  • 2차 애니메이션이 너무 정교하면 프로세서에 부하를 주므로 생략하기도 함