Unity 검색

아티스트를 위한 워크플로 속도 향상 팁

2021년 9월 1일 엔진 & 플랫폼 | 12 분 소요
Puzzle project
Puzzle project
공유

Is this article helpful for you?

Thank you for your feedback!

Unity 2020 LTS로 생산성을 높이는 70여 가지 팁이 담긴 새로운 전자책을 지금 바로 만나보세요. 무료로 제공되는 전자책 출시와 함께 유니티는 블로그 포스팅 시리즈를 통해서도 시간 절약 팁과 기술 중 일부를 소개하고 있습니다.

첫 번째 블로그 포스팅에서는 에디터에서 워크플로 속도를 높이는 방법을 중점적으로 다루었습니다. 이번 두 번째 포스팅에서는 아티스트에게 특히 유용한 팁을 소개합니다. Unity 2020 LTS에서 제공하는 생산성 향상 기능을 활용하면 모든 아티스트가 시간을 절약하고 중요한 창작 작업에 집중할 수 있습니다.

이번 포스팅에서는 프리팹과 애니메이션 워크플로, 기즈모와 아이콘 활용, 프로그레시브 라이트매퍼 등을 다룹니다. 

프리팹 워크플로로 유연한 씬 제작

씬을 유연하고 효율적으로 제작할 수 있도록 네스티드 프리팹과 배리언트를 최대한 활용하기 바랍니다.  

네스티드 프리팹을 사용하면 프리팹간 부모 지정이 가능하며, 소형 프리팹(예: 방, 가구)으로 구성된 대형 프리팹(예: 건물)을 만들 수 있습니다. 따라서 여러 아티스트와 개발자로 구성된 팀에서 에셋 개발을 분담하여 콘텐츠의 다양한 부분을 동시에 작업할 수 있습니다.

프리팹 배리언트를 사용하면 객체 지향 프로그래밍의 상속과 유사한 방식으로 프리팹에서 다른 프리팹을 파생할 수 있습니다. 특정 부분만 오버라이드하여 원본에 영향을 주지 않고도 배리언트를 변경할 수 있습니다. 또한 언제든지 모든 수정 사항을 제거하고 원래의 프리팹으로 돌아갈 수 있습니다.

모든 배리언트를 한꺼번에 변경하려면, 원본 프리팹에 직접 변경 사항을 적용하세요.

Prefab variants
최신 Unity 2D 데모인 Dragon Crashers의 프리팹 배리언트는 서로 다른 무기와 능력치를 가지고 있습니다.

Apply All to Base를 사용하여 원본(Base) 오브젝트에 변경 사항을 적용할 수 있고, Revert All을 사용하여 오버라이드를 취소할 수 있습니다.

Unity에서 프리팹으로 작업하는 방법에 대한 자세한 내용은 네스티드 프리팹과 개선된 프리팹 워크플로를 참조하세요.

TextMeshPro로 다양해진 스타일링 및 텍스처링 옵션

TextMeshPro는 Unity의 UI 텍스트와 기존 텍스트 메시를 대체하며, 커스텀 셰이더와 고급 텍스트 렌더링 기술을 사용하여 유연한 텍스트 스타일링과 텍스처링을 제공합니다.

TextMeshPro를 통해 문자, 단어, 행, 문단 여백 조정, 커닝(Kerning), 텍스트 정렬, 링크, 30여 개의 리치 텍스트 태그, 멀티 폰트와 스프라이트 지원, 커스텀 스타일 등과 같은 기능을 이용할 수 있습니다.

TextMeshPro example from Dragon Crashers

스내핑으로 신속하게 트랜스폼 설정

그리드로 작업하면 더 정확하고 일관성 있게 프리팹을 결합할 수 있습니다. 각 요소가 유기적으로 연결되도록 레벨을 디자인하면 보다 쉽게 재정렬과 재조합이 가능합니다. 

모듈식 에셋으로 씬을 제작하는 경우, 그리드 평면을 사용하여 게임 오브젝트를 배치하세요. 인스펙터에 어림짐작한 숫자를 직접 입력하기보다, 그리드 스내핑 툴을 사용하여 트랜스폼을 보다 빠르고 정확하게 설정할 수 있습니다. 

Grid and Snap settings
Grid and Snap 설정

유니티에서는 씬을 빠르게 조합할 수 있도록 다음 세 가지 유형의 스내핑을 제공합니다.

  • 월드 그리드 스내핑: Move 툴의 핸들 방향이 Global로 설정되도록 합니다. Ctrl(Windows) 또는 Cmd(macOS)를 누른 상태로 Edit > Grid and Snap Settings에 설정된 월드 그리드 증분에 오브젝트를 스냅합니다. 
  • 표면 스내핑: ShiftCtrl(Windows)/Cmd(macOS)를 누른 상태로 콜라이더의 교차점에 오브젝트를 스냅합니다.
  • 버텍스 스내핑: Move 툴이 활성화된 상태에서 V 키를 누릅니다. 그러면 현재의 게임 오브젝트가 다른 메시의 버텍스 위치로 이동합니다. 이동 전에, 활성화된 게임 오브젝트의 특정 버텍스 위로 마우스를 가져가면 해당 버텍스가 피벗 역할을 하게 됩니다. Shift-V를 사용하여 버텍스 스내핑 모드를 켜거나 끌 수 있습니다.

빠른 배치가 필요한 경우 다음과 같이 버텍스 스내핑과 표면 스내핑을 함께 사용합니다.

  • V 키 또는 Shift-V버텍스 스내핑을 사용하여 게임 오브젝트를 이동합니다. 피벗이 되는 버텍스 위에 커서를 대고, 기존에 하던 것처럼 다른 버텍스로 스냅합니다.
  • ShiftCtrl(Windows)/Cmd(macOS) 키를 함께 누른 채로 타겟 메시의 표면을 따라 오브젝트를 드래그합니다.
  • 오브젝트가 원하는 위치에 놓이면 마우스 버튼과 V 키를 놓습니다.

Edit > Grid and Snap Settings 또는 그리드 가시성 드롭다운 메뉴에서 Grid and Snap 창을 엽니다.

추가 제어 옵션을 사용하려면 스내핑과 그리드 평면을 보다 섬세하게 제어할 수 있는 ProGrids 패키지를 사용해 보세요.

ProGrids
ProGrids

애니메이션 워크플로 관련 추가 팁

애니메이션 창(Window > Animation > Animation)을 사용하면 코드를 전혀 작성하지 않고도 Unity에서 거의 모든 프로퍼티를 애니메이션화할 수 있습니다. 움직임을 수정할 뿐 아니라, 커스텀 스크립트에 정의된 파라미터까지 구동할 수 있습니다.

애니메이션 창에서 애니메이션 클립을 만들거나, Autodesk® Maya®나 Blender 등 선호하는 타사 DCC 패키지에서 작업할 수 있습니다. 각 클립을 개별 모션 단위로 생각하세요.

Animation window
Animation window
애니메이션 창에서 동일한 애니메이션 데이터를 커브나 도프시트로 나타낼 수 있습니다.

창에서 Dopesheet 모드나 Curve 모드로 AnimationClip 에셋을 편집하세요. 단축키 K 또는 C를 사용하여 각 모드로 전환할 수 있습니다. 일반적인 단축키를 사용하여 모든 키프레임(A) 또는 선택한 키프레임(F)을 프레이밍할 수 있습니다.

게임 오브젝트에 애니메이션 클립을 여러 개 만든 후에는 AnimatorControllers가 상태 머신 역할을 하여 클립 간에 플로차트와 같은 그래프를 만듭니다.

이를 통해 아티스트는 프로그래머의 도움 없이 정교한 애니메이션을 제작할 수 있습니다. 2D 또는 3D 릭을 사용하는 경우, 다양한 논리를 사용하여 신체 부위를 애니메이션화할 수 있습니다. 레이어링과 마스킹 기능을 활용하면 보다 정교한 제어가 가능합니다. 비주얼 프로그래밍 툴에서 모션을 프로토타입화하여 클립 간의 전환이나 상호 작용을 섬세하게 조정할 수 있습니다. 

Animation Rigging 패키지를 사용하면 기능을 더욱 확장할 수 있습니다. 이 패키지는 절차적 모션을 생성할 수 있는 역운동학적(inverse kinematic) 제약과 릭의 라이브러리를 제공합니다. 따라서 애니메이션화된 골격이 '런타임 리깅'을 통해 환경과 상호 작용할 수 있으며, 물리 기반 제약으로 동적인 2차 동작을 추가할 수 있습니다.

최적화 팁

AnimatorControllers를 사용하면 편리하지만, 몇 가지 유의할 점이 있습니다.

  • 특히 UI 요소와 함께 사용하는 경우, 과도한 애니메이터 사용을 지양하세요. 애니메이터를 사용하면 애니메이션이 재생되지 않는 경우에도 UI 캔버스가 각 프레임을 재구성하게 됩니다. 가능하면 UI나 단순한 애니메이션에는 항상 레거시 Animation 컴포넌트를 사용하세요. 트위닝(tweening) 함수를 만들거나, 타사 라이브러리(예: DOTween)를 사용하는 것도 고려해 보세요. 
  • Unity는 기본적으로 제네릭 릭을 사용하여 애니메이션화된 모델을 임포트하지만, 개발자는 캐릭터를 애니메이션화할 때 휴머노이드 릭으로 전환하는 경우가 많습니다. 휴머노이드 릭은 사용 중이지 않을 때에도 역운동학과 애니메이션 리타게팅을 프레임마다 계산합니다. 그러므로 특정 기능이 필요하지 않을 때는 제네릭 릭을 사용하고 CPU 시간을 절약하세요.

AnimationClipsAnimationController 사용법에 대한 자세한 내용은 매뉴얼 페이지를 참조하세요. 애니메이션 컴포넌트 최적화에 대한 자세한 내용은 Unity의 베스트 프랙티스를 참조하시기 바랍니다.

커스텀 기즈모와 아이콘으로 에디터 기능 200% 활용

기즈모는 게임 오브젝트와 관련된 작은 오버레이 그래픽스로 뷰포트를 탐색하거나 특정 오브젝트를 찾는 데 사용할 수 있습니다.

Select Icon 메뉴를 사용하여 게임 오브젝트용 아이콘을 수정할 수 있습니다. 나만의 아이콘을 정의하려면 Other를 선택합니다.

기즈모를 전환하려면 인스펙터(Inspector)의 드롭다운 메뉴를 사용합니다.

Other… 옵션을 사용하여 커스텀 기즈모를 선택합니다.

스크립트를 사용하여 인터랙티브 기즈모를 만들 수도 있습니다. 일례로 기즈모를 통해 커스텀 컴포넌트에 대한 영향의 범위와 영역을 정의할 수 있습니다.

이 예시에서는 스크립트에서 선택사항에 따라 기즈모를 변경합니다.

씬 컨트롤 바에서 Gizmos 다이얼로그를 사용하여 특정 기즈모를 켜고 끄거나, 모든 기즈모를 전체적으로 활성화/비활성화할 수 있습니다.

사용 예제를 보려면 개발을 위한 커스텀 기즈모 만들기를 참조하세요. 기즈모핸들에 대한 API도 살펴보시기 바랍니다. 

라이트매핑 속도 향상

라이트매핑을 통해 직접 조명과 간접 조명을 사전에 계산하고, 나중에 사용할 수 있도록 해당 결과를 라이트맵이라는 텍스처에 저장할 수 있습니다. 유니티에서는 고품질의 조명과 그림자를 제작하기 위해 다양한 GI(전역 조명) 기술을 제공합니다. 라이트맵이 적용된 지오메트리는 런타임에서 뛰어난 성능을 보이지만, 라이트맵을 베이크하려면 많은 리소스가 필요합니다.

The final scene with lightmaps applied
라이트맵을 적용한 최종 씬
The same scene without lightmapping
라이트맵을 적용하지 않은 동일한 씬

프로그레시브 라이트매퍼는 빠른 패스 트레이서(path tracer)로, 결과를 신속하게 생성한 다음 렌더를 점차적으로 미세 조정합니다. 따라서 최종 베이크가 완료될 때까지 기다릴 필요 없이 프로세스 도중에 변경 작업을 수행할 수 있으므로, 더 빠른 반복 작업이 가능합니다. 

다음은 라이트매핑 속도를 높이는 몇 가지 팁입니다.

  • Prioritize View를 활성화하여 프로그레시브 라이트매퍼가 현재 씬 뷰에 표시되는 텍셀부터 작업한 후에 뷰 밖에 있는 텍셀을 변경하도록 합니다.
  • 불필요한 샘플(직접 샘플 및 간접 샘플)과 바운스(대개 2개로 충분하며 필요한 경우에만 늘리기)를 줄입니다.
  • 조명 요건에 따라 라이트맵 해상도와 텍셀 개수를 최적화합니다. 텍셀 개수는 라이트매퍼가 수행해야 할 작업량을 나타냅니다. 라이트맵은 2D 텍스처이므로 라이트맵 해상도를 두 배로 높이면 작업량은 네 배로 늘어납니다.
  • 가려진 표면, 작거나 얇은 오브젝트, 라이트매핑이 그다지 큰 영향을 미치지 않는 곳에서는 텍셀 개수를 줄이세요. 전역 조명에 기여하는 각 MeshRenderer에 있는 Scale in Lightmap 옵션을 통해 라이트맵에서 상대적 UV 크기를 줄일 수 있습니다. 
  • Lighting Mode에서 Baked Indirect, Subtractive, ShadowMask 중 적절한 옵션을 선택합니다. 아트 방향과 맞지 않다면 그림자를 베이크할 필요는 없습니다.     

현재의 프로그레시브 CPU 라이트매퍼는 컴퓨터의 CPU와 RAM을 사용합니다. 하지만 차기 프로그레시브 CPU 라이트매퍼(프리뷰 단계) 는 GPU와 VRAM을 사용하므로 베이크 속도를 현저하게 높일 가능성이 있습니다. 컴퓨터가 하드웨어 및 소프트웨어 요구 사항을 충족하면, 조명 워크플로를 (경우에 따라 10배까지) 획기적으로 가속화할 수 있습니다.

Preview of a baked lightmap
베이크된 라이트맵 프리뷰

라이트 프로브를 사용하여 조명 최적화

전역 조명은 아름다운 간접 조명을 생성하지만, 이를 계산하고 디스크에 저장하는 데 많은 리소스가 들 수 있습니다. 라이트매핑을 반드시 필요로 하지 않는 세트 배치나 기타 정적 메시가 있는 경우, 이를 라이트맵 베이크에서 제거하고 대신 라이트 프로브를 사용해 보세요. 

이 예시에서는 라이트 프로브가 작은 오브젝트의 직접광과 반사광을 예측하여, 좀 더 눈에 띄는 곳에서만 고품질 라이트매핑을 사용합니다. Viking Village 프로젝트에 적용된 라이트맵은 다음과 같습니다.

동적 오브젝트에 적용되던 라이트 프로브가 정적 메시에 적용될 수도 있습니다. MeshRenderer 컴포넌트에서 Receive Global Illumination 드롭다운 메뉴를 찾아 LightmapsLight Probes로 전환합니다.

라이트 프로브 조명은 적절한 UV를 필요로 하지 않기 때문에 메시를 언래핑하는 추가 단계를 수행할 필요가 없습니다. 스피리컬 하모닉 기초 함수를 사용하는 프로브 조명은 라이트 매핑에 비해 계산 속도가 빠릅니다. 씬에서 라이트 프로브와 라이트 프로브 그룹을 공간적으로 배열합니다. 프로브 조명은 일반적으로 라이트 맵핑보다 빠르게 베이크됩니다. 라이트 프로브가 포함된 라이트 프로브 그룹이 레벨 전체로 분산됩니다.

라이트 프로브를 사용하여 씬 오브젝트에 선택적으로 조명을 적용하는 방법은 라이트 프로브와 정적 조명을 참조하세요.

Unity의 조명 워크플로에 대한 자세한 내용은 Unity에서 사실적인 비주얼 만들기를 참조하세요.

생산성 향상을 위한 팁을 소개하는 최신 전자책 다운로드

지금 바로 모든 팁을 확인하고 싶다면, Unity 2020 LTS로 생산성을 높이는 70여 가지 팁이 담긴 전자책을 무료로 다운로드하세요. 간단한 양식을 작성하고 이메일로 전자책을 받아 보실 수 있습니다. 포스팅에서 다룬 팁을 살펴보고 위의 링크를 눌러 나머지 팁도 확인하세요. 그리고 팁이 유용했는지, 다음에 다뤘으면 하는 기능이 있는지 댓글로 알려주세요.

2021년 9월 1일 엔진 & 플랫폼 | 12 분 소요

Is this article helpful for you?

Thank you for your feedback!

관련 게시물