페이퍼 2D 플러그인

페이퍼 스프라이트 액터

외부 이미지 > 페이퍼 2D 텍스처 세팅 적용

- 디테일 패널에서 밉맵 제거

- 바탕 투명하게 만들기 : 크로마키 색상 지정

- 카메라 모드 Orthographic

 

스프라이트 애셋 만들기, 페이퍼 2D 애니메이션 애셋 (플립북) 만들기

- 텍스처 애셋 우클릭 > Sprite Actions > Extract Sprite

- 여러 개의 스프라이트를 생성

- 모두 선택 후 > Create Flipbook

 

타일 세트 액터 생성하기

텍스처 애셋 우클릭 > Sprite Actions > Create Tile Set

- 타일 Size 조절, 타일 별 콜리전 정의

 

타일 맵 생성하기

타일 셋 애셋 우클릭 > Create Tile Map

- 타일 레이어 정의 (Background, Middleground, Foreground), 카메라에서 가장 가까운 레이어가 가장 위에 오도록 해야함

- Middle Layer만 충돌을 일어나게 하자

 

플레이 가능 레벨 만들기

타일맵을 뷰포트에 드래그하고 복제(인스턴스 생성) 후 정렬하는 방법이 있다.

PlayerStart 액터를 Middleground y 좌표에 맞춰줘야 한다.

 

2D 플레이어 캐릭터와 3D 플레이어 캐릭터의 차이

2d 캐릭터를 구성하는 컴포넌트

- 3D캐릭터와 동일한 것들 : 캡슐 컴포넌트, ArrowComponent, SpringArmComponent, CameraComponent, CharacterMovementComponent

- 2D 캐릭터는 캐릭터의 이벤트 그래프에서 애니메이션 state를 처리한다.

- Paper Flipbook Component

 

플레이어 캐릭터 생성하기

PaperCharacter 클래스 상속받는 블루프린트

캡슐 콜라이더 크기 조절 시 viewport의 뷰모드 Right, Unlit으로 작업하면 보기 쉬움

캐릭터에 SpringArm 컴포넌트와 카메라 컴포넌트 추가, 캐릭터의 방향 전환시 카메라가 같이 전환되지 않도록 SpringArm 컴포넌트의 Camera Settings에서 Inherit Yaw 체크 해제

 

캐릭터 움직이기

CharacterMovement 컴포넌트에서 Velocity를 얻어 캐릭터의 이동방향을 조절

이벤트 그래프에서 애니메이션 전환을 구현하기 위해 틱마다 액터의 Velocity를 얻어 Flipbookset한다.

 

순차적으로 이벤트 발생시키기

점프 전환 하강 애니메이션을 순차적으로 재생하기 위해 BeginPlay에서 OnJumpApexReached 델리게이트에 커스텀 이벤트를 바인딩한다. ( 점프 전환 )

OnJump 이벤트에서 bNotifyApex 프로퍼티를 true로 초기화 해줌으로써 이벤트가 일회성으로만 사용되고 비활성화 되지 않도록 해준다.

SpriteOnFinished Playing 델리게이트에 새로운 커스텀 이벤트를 바인딩한다. (전환 애니메이션 종료 후에 하강 애니메이션이 실행되도록)

또 다른 경우의 수 : 점프 안하고 그냥 떨어지는 경우

- Event On Walking Off Ledge 이벤트로 커버

unreal.EditroAssetLibrary

List_assets 메서드 : 디렉터리 경로 아래서 찾는 모든 애셋의 경로를 반환한다.

find_asset_data 메서드 : 애셋의 경로를 입력받아 assetData를 반환한다.

 

EditorUtilityLibrary : 콘텐츠 브라우저 관련 기능에 액세스할 수 있다.

get_selected_assets 메서드 : 콘텐트 브라우저에서 선택한 애셋들에 대한 정보 반환

 

EditorActorSubsystem : 아웃라이너 관련 기능을 제공

- 액터를 복제하거나 소멸시킬 수 있다.

프로젝트 내 특정 클래스의 모든 인스턴스를 수집할 수 있다.

 

에디터 프로퍼티로 오브젝트 데이터 수정하기

에디터 프로퍼티 : 애셋의 수정할 수 있는 모든 데이터

스태틱 메시

get_editor_property, set_editor_property가 있는 클래스는 _ObjectBase를 상속받는 클래스이다.

Asset_import_data 프로퍼티 : 프로젝트의 각 스태틱 메시와 연결된 FBX 파일 경로를 제공

 

lod_group

스태틱 메시의 LOD Group을 세팅해줌으로써 언리얼 엔진이 LOD Group을 자동으로 만들게 할 수 있다. 프리셋이 없는 애셋(None)들에 프리셋을 부여할 수 있다. 외부 애플리케이션에서 LOD를 생성한 경우는 이런 과정이 필요 없다.

 

LOD 최적화 : 프리셋 LOD 그룹이 없고 LOD가 하나만 있는 경우 프리셋을 설정하기

 

스태틱 메시에 대한 상세 정보 수집하기

LOD의 삼각형 개수 확인하기

unreal.EditorStaticMeshLibrary 클래스

get_number_verts 함수 : 스태틱 메시와 LOD 인덱스를 입력받아 버텍스 수를 반환

 

unreal.ProceduralMeshLibrary 클래스

get_section_from_static_mesh 함수 : 스태틱 메시, LOD 인덱스, 섹션 인덱스를 입력받아

vertex, triangle, normal, uv, tangent의 배열을 반환 (배열의 배열을 반환)

섹션 인덱스 정보는 Staticmesh.get_num_sections(lod)로 얻을 수 있다.

 

Static메시의 각 LOD의 트라이앵글 수 확인, LOD 감소에 대한 정보

 

 

스태틱 메시 액터 분석하기

레벨에 있는 모든 스태틱 메시 액터가 가지는 스태틱 메시의 개수 파악, 종류별 개수 정렬 출력

 

각각의 메시가 레벨에서 몇 개의 삼각형을 차지하는 지는 메시 자체가 가지는 삼각형의 개수와 몇 개가 사용되었는지 고려해야 함

StaticMeshActor Instance * StaticMeshLOD1 = 레벨에 배치된 해당 스태틱 메시의 삼각형 수

 

상속, dir(), help()

커맨드라인에 내장된 함수 dir로 메서드를 쉽게 출력하고 필터링할 수 있다

- 메서드가 문서에 없어 찾을 수 없어도 상속받은 메서드까지 표시해 준다.

- 클래스가 가진 모든 메서드를 출력한다. (상속 받은 메서드 포함)

예시) for item in dir(unreal.StaticMeshComponent): print (item)

 

Help 함수는 함수의 사용방법을 출력한다.

예시) help(unreal.StaticMeshComponent.get_materials)

머터리얼 인스턴스를 반환하는 get_materials 함수

머터리얼 인스턴스에서는 scalar, texture, vector 파라미터 값을 얻을 수 있다.

머터리얼 인스턴스 당 여러 개의 Texture parameter = 텍스처 슬롯의 이름 텍스처 경로 정보

텍스처 파라미터 값 얻기

 

레벨에 존재하는 모든 StaticMeshActor에 특정 머터리얼 인스턴스 부여하기

 

언리얼 Python API와 블루프린트의 유사성

레벨 블루프린트에서도 비슷한 방식으로 머터리얼을 스태틱 메시 액터에 적용할 수 있다.

파이썬 API로 진행했을때와 다른 점은 애셋을 직접 변경하지 않고 런타임에서만 확인할 수 있다는 점이다. StaticMeshComponentGetNumMaterials 노드를 사용하여 메시에 몇 개의 머터리얼이 사용되었는지 확인할 수 있고, 이것은 드로 콜이 많은 메시를 시각적으로 파악하는데 사용할 수 있다.

 

'언리얼 5 > 에픽 게임즈 공식 강의' 카테고리의 다른 글

프로그래밍 시작하기  (0) 2023.02.19
페이퍼 2D 프로젝트 시작하기  (0) 2023.02.18
게임플레이 컴포넌트 세분화  (0) 2023.02.16
애니메이션  (1) 2023.02.15
루멘 핵심 개념  (0) 2023.02.14

자주 사용하는 주요 컴포넌트

Actor Component : 액터에 붙일 수 있는 기본 컴포넌트

Scene Component : + 위치 정보

Primitive Component : + 기하 정보

 

컴포넌트의 특징

컴포넌트가 붙은 액터 로드 시 추가 비용이 발생 (하지만 그렇게 크지 않음)

컴포넌트의 틱 함수는 런타임에서 메모리를 차지하기 떄문에 너무 많으면 좋지 않을 수 있다. (Tick이 필요하지 않은 컴포넌트는 Tick을 비활성화 하자)

 

씬 컴포넌트의 프로퍼티에 CreateDefaultSubobject로 새로운 씬 컴포넌트를 만들어도 SetupAttachment를 해주지 않으면 루트 컴포넌트 아래에 자동으로 붙는다.

 

디자이너 편의를 위한 함수

OnComponentDestroyed : 해당 컴포넌트가 파괴될 때 호출되는 함수

- 에디터에서 디자이너가 에디터에서 어떤 씬 컴포넌트를 삭제했을 때, 하위  씬 컴포넌트도 같이 삭제되도록 구현을 해놓으면 편할 것이다.

PostEditChangeProperty : 해당 컴포넌트가 가진 프로퍼티 값이 에디터에서 변경되면 호출된다. 기본 값을 변경하는데 사용할 수 있다. 런타임이 아닌 상태에서도 에디터에서의 변경 사항을 트래킹하여 시각적으로 확인할 수 있게 된다.

 

인터페이스 사용 예시

체력 인터페이스와 체력 컴포넌트를 같이 사용하기

사물, 캐릭터와 같은 다양한 종류의 액터에 체력 인터페이스를 사용할 수 있다.

인터페이스에는 체력 고갈 시에 호출할 함수를 정의 예) HealthDepleted

액터는 인터페이스를 상속받아 BlueprintNativeEvent 속성으로 HealthDepleted를 선언하고 HealthDepleted_Implementation 라는 이름으로 구현한다.

체력 컴포넌트에서는 오너 액터, 체력, 최대체력 프로퍼티를 만들고 커스텀 TakeDamage 함수를 정의한다. 오너 액터의 OnTakeAnyDamage 델리게이트에 커스텀 TakeDamage를 바인딩한다.

바인딩한 커스텀 TakeDamage에서는 체력 업데이트 후 Clamp작업, 오너 액터의 인터페이스 구현 여부 확인(형변환으로), 체력 고갈 시에 형변환한 인터페이스의 Execute_HealthDepleted를 호출하도록 한다.

 

TakeDamage 함수

액터에는 기본적으로 TakeDamage 함수가 내장되어 있지만 체력 프로퍼티를 가지고 있지 않기 때문에 사용자가 체력 프로퍼티를 어딘가에 두고 변경할 것을 가정하고 있다.

예를 들어 Health 컴포넌트를 사용하지 않고 액터에서 관리한다면 커스텀 액터에서 TakeDamage를 직접 오버라이드하여 체력 업데이트를 해야 할 것이다.

애니메이션 툴의 목표

1. 다용도성 확보

2. 레이어화된 애니메이션 플로우

- 다양한 애니메이션 레이어에서 벌어지는 일들을 쉽게 분리해서 레이어 별로 반복 처리하고 다듬을 수 있다.

- 재사용성도 있어서 애니메이션 속의 다양한 요소를 다른 캐릭터들과 애니메이션과 공유할 수 있다.

- 애니메이션 작업자들이 엔진 내에서 진행하는 전체 애니메이션 작업에 걸쳐서 외부의 도움이 전혀 필요 없게 만든다. 

 

Skeleton and Skeletal Mesh

- FBX 파일에는 애니메이션 여러 개, 리깅 스켈레톤, 메시가 포함되어 있다.

임포트하여 스켈레톤이 생성되면 피직스 애셋도 생성할 수 있다. 피직스 애셋은 스켈레톤이 피직스 환경에 반응하는 방식(콜리전)을 정의한다.

 

- 스켈레톤은 에디터에서 가상 본이나 소켓을 추가할 수 있다.

다른 스켈레톤에 애니메이션을 적용하고 싶으면 리타게팅을 하면 된다.

 

- 스켈레탈 메시는 폴리곤 정보만 저장하는게 아니라 머터리얼 정보도 저장한다.

스켈레탈 메시 에디터에서 머터리얼의 LOD 시스템을 통해 LOD를 생성할 수 있다.

스켈레탈 메시는 피직스 애셋과 Clothing을 프로퍼티로 가지고 있다.

 

Sequence

Live Link 플러그인과 다양한 DCC를 사용할 수 있다. Live Link 플러그인은 DCC에서의 애셋 변경을 즉시 런타임 에디터에서 보여주는 플러그인이다.

 

애니메이션의 메타 데이터 (이벤트 그래프에서 읽을 수 있음)

1. Anim Curves : 예시) 애니메이션에서 루트 모션을 제거하고 걷는 거리를 애니메이션에 맞춰 직접 계산하여 커브로 저장하고, 그 정보를 게임 플레이에 사용할 수 있다.

2. Anim Notifies : 애니메이션 특정 순간에 게임플레이 블루프린트에 노티파이를 보내서 정확한 순간에서 판정을 내리도록 할 수 있다.

3. Sync Markers : 서로 다른 애니메이션의 싱크를 맞추기 위해 사용 애님 블 루프린트 에디터에서 그룹 이름, 리더 등을 설정할 수 있다.

 

시퀀스로 사용될 수 있는 것들

1. blend space : 변수 값에 따라 에니메이션을 자연스럽게 합칠 수 있다.

2. montage : 다양한 애니메이션 시퀀스를 그룹화하거나 합친다.

3. Pose Asset : 애니메이션을 정지한 뒤에 쉽게 만들 수도 있다. 포즈들을 블렌딩하여 새로운 애니메이션을 만들 수 있다. :

 

Anim Graph

Flow Control 노드

Flow editing nodes

Slots : 플로우에 레이어링 기능을 추가한다.

Pose caching : 애님 그래프를 깔끔하게 유지하거나 포즈를 재사용하기 위해 사용한다.

Animation Operations : 애니메이션에 BlendAdditive 연산을 적용할 수 있다.

 

Procedural Animations

Physics behaviour nodes

1. Rigid Body Node : 피지컬 비헤이비어를 현재 실행중인 애니메이션과 블렌딩할 수 있다.

포니테일이나 체인 등 달려있는 본에 쓰면 좋다.

2. Anim Dynamics : 리지드 바디 구성을 사용하지 않고 본 별로 그 작업을 할 수 있다.

3. IK Nodes : 캐릭터의 두 발을 땅 밑으로 꺼지지 않도록 하는 데 사용할 수 있다.

 

Control Rig Possibilities

Control Rig : 엔진에서 rig 애니메이션 작업을 할 수 있다.

 

Final Pose

- Animation Sharing Manager를 통해 다양한 스켈레톤 간에 포즈를 공유할 수 있다. 동일한 스켈레톤을 사용하는 서로 다른 캐릭터들이 있다면 포즈를 공유할 수 있다.

군대, 군집을 표현하는데 사용할 수 있다.

- Sequence Recorder : 애니메이션을 녹화하여 확인할 수 있다. 인게임에서 시뮬레이션 장면을 녹화할 수도 있다.

 

Performance                          

- LODs capabilities            

스켈레탈 메시 에디터 > LOD 설정하여 멀리 있는 캐릭터가 갖춘 본의 양을 줄여준다.

 

- Optimizations

되도록 Fast Path Nodes 사용하기 : C++ 직접 컴파일 된 함수 노드는 빠르다.

 

Project Settings > General Settings > Anim BluePrint > Allow Multi Threaded Animation Update 체크 : 보다 많은 애니메이션 작업을 워커 스레드에서 돌릴 수 있도록 해줌 (기본 활성화)

애니메이션 블루프린트 클래스 세팅에도 동일한 옵션이 켜져 있는 지 확인

 

Animation Budget Allocator : 각 애니메이션에 사용할 시간의 예산을 설정할 수 있다.

 

Advice

AnimBP Retargeting

- 애니메이션 시퀀스뿐만 아니라 애니메이션 블루프린트도 리타게팅이 가능하다.

- 모든 캐릭터가 공유하는 글로벌 비헤이비어를 가지는 베이스 AnimBP를 만들자

Layering

- 스테이트 머신을 최대한 단순하게 유지하자. 스테이트 머신 속에 스테이트 머신을 넣는 방법도 있다.

 

Flow Control

- 최대한 게임플레이에 기반한 애니메이션만 슬롯에 넣자. ) 공격

 

Ticking and Performance

- 애니메이션 블루프린트 티킹은 줄일 수 있다. 캐릭터나 특정 액터에서 업데이트 비율 최적화 옵션을   활성화할 수 있다. 애니메이션 캐릭터로부터 멀리 떨어질수록 애니메이션 블루프린트의 티킹도 점점 적어지게 한다.

 

Physics Behavior

피직스 애셋에서 설정

여성형 캐릭터의 경우 머리카락을 Simulated로 설정하면 물리 법칙을 따른다.

 

Animation Sharing Manager

군중 몇몇에 무작위 애니메이션을 끼워 넣을 수 있다.

공유되는 애니메이션 위에는 반응 애니메이션을 추가할 수도 있다.

피직스를 추가할 수도 있다.

 

https://dev.epicgames.com/community/learning/courses/QLa/unreal-engine-550606/7xan/unreal-engine-5427f2

 

애니메이션 시작하기 | Course

언리얼 엔진의 애니메이션 파이프라인을 에픽게임즈의 Sjoerd de Jong과 Mario Palmero와 함께 역사, 발전 과정, 그리고 현재의 프로세스까지 살펴봅니다. 언리얼 엔진에서의 애니메이션 작업에 도움이

dev.epicgames.com

 

루멘

다이나믹 글로벌 일루미네이션과 리플렉션을 제공하는 새로운 솔루션

- sky Lightingshadow는 루멘에서 파이널 게더의 일부가 됨, 야외보다 훨씬 어두운 실내 공간을 표현할 수 있게 해줌

- 낮은 퀄리티의 일루미네이션을 반투명 및 볼류메트릭 포그에 제공한다.

- 이미시브 머터리얼은 루멘의 파이널 게더를 통해 추가 비용 없이 라이트를 전파할 수 있다.

- 간접 스페큘러나 리플렉션을 머터리얼 러프니스 값의 제한 없이 해결한다.

- 더 이상 라이트맵을 구울 필요가 없다.

- 모바일을 지원하지 않음

 

루멘을 사용하면 스태틱 라이팅에서 사전 연산된 라이팅이 제거된다.

사전 연산 라이팅 비활성화 : 프로젝트 세팅 > 스태틱 라이트 허용 체크 해제

- 셰이더 퍼뮤테이션(셰이더 분리)으로 스태틱 라이팅 오버헤드를 줄일 수 있다.

또한 머터리얼 앰비언트 오클루전 입력을 지원하고 머터리얼 bent 노멀이 루멘 글로벌 일루미네이션과 연동된다.

 

1. Surface Cache : 루멘은 주변 씬의 표면에 대한 자동 파라미터화를 생성한다.

씬에서 레이가 히트되는 지점의 라이팅을 빠르게 확인할 때 사용한다. 카드들로 구성된다.

카드 : 각 메시의 머터리얼 프로퍼티를 여러 각도에서 캡처한다. 캡쳐 포지션을 카드라고 부른다. 기본적으로 메시 하나당 카드를 12개만 배치하지만 스태틱 메시 에디터에서 Max Lumen Mesh Cards 세팅으로 조정할 수 있다. 복잡한 인테리어에서 늘리면 유용하다.

각 메시에 대하 오프라인으로 생성된다.

2. 스크린 트레이싱 : 스크린에 대해 레이 트레이싱, 루멘 씬과 트라이앵글 씬 간의 불일치 해소

- 히트가 발견되지 않거나 표면 뒤로 지나가면 안정적인 메서드를 사용한다.

- 다수의 트레이싱 메서드 중 먼저 사용된다.

3. 레이 트레이싱 : 소프트웨어 레이트레이싱은 다양하게 동작, 하드웨어는 특정 기기에서만 동작

소프트웨어 레이 트레이싱 : Signed Distance Field에 사용됨 프로젝트 세팅에서 Generate Mesh Distance Field가 활성화 되어있으면 됨

하드웨어 레이 트레이싱 : 다양한 종류의 지오메트리 타입을 지원

 

루멘으로 작업하기

루멘과 소프트웨어 레이 트레이싱의 요구 사항 : 셰이더 모델5, Direct3D 11 이상을 지원하는 디바이스

루멘은 언리얼5 프로젝트에 기본으로 활성화되어 있다. 프로젝트 세팅 > 렌더링 > Global illumination

하드웨어 레이 트레이싱은 기본 활성화가 아니라서 수동으로 켜줘야 함

- 하드웨어 레이 트레이싱에서의 리플렉션 : Ray Lighting Mode를 선택할 수 있음, Surface Cache vs Hit Lighting for Reflections 전자 성능 후자 퀄리티

소프트웨어 레이 트레이싱을  사용할 떄 어디에 사용할 지 고를 수 있음 Detail Tracing vs Global Tracing 전자 퀄리티 후자 성능

포스트 프로세스 볼륨이 GI와 리플렉션 방식을 오버라이드 할 수 있다는 점을 주의해야 한다.

 

루멘의 한계

라이트맵의 스태틱 라이팅과 함께 사용할 수 없다. 

폴리지도 제대로 지원되지 않는다.

루멘의 파이널 게더는 이동 오브젝트에 상당한 노이즈 현상이 발생한다.

반투명에 대한 리플렉션 지원X

 

소프트웨어 레이 트레이싱의 한계

스태틱 메시, 인스턴스드 스태틱 메시, 계층형 인스턴스드 스태틱 메시, 랜드스케이프만 루멘 씬에 표시될 수 있다.

폴리지는 디스턴스 필드 라이팅과 함께 사용해야 한다.

머터리얼 내 작업에서 월드 포지션 오프셋은 작동하지 않는다.

디스턴스 필드는 컴포넌트를 오버라이드하지 않고 스태틱 메시 에셋에 할당된 머터리얼 프로퍼티에서 빌드된다.

소프트웨어 레이 트레이싱은 모듈식으로 제작된 레벨을 필요로 한다. (산 같은 대규모 메시는 제대로 표현이 안된다.)

라이트 누수를 방지하기 위해서는 벽 두께가 10cm보다 두꺼워야 한다.

메시 디스턴스 필드 해상도는 스태틱 메시의 임포트 스케일을 기준으로 할당된다.

작게 임포트된 뒤에 레벨에 배치된 인스턴스의 스케일을 크게 조절할 떄는 스테틱 메시 에디터에서 디스턴스 필드 해상도를 조절해줘야 한다.

 

하드웨어 레이 트레이싱의 한계

스킨과 같이 다이나믹하게 변형되는 메시를 매 프레임마다 업데이트하게 된다면 스킨이 적용된 트라이앵글 수에 비례하여 막대한 비용을 초래한다.

오버랩되는 메시가 많으면 트레이싱 비용이 높아진다.

나나이트 스태틱 메시에는 프록시 메시에만 작용한다.

 

간접광에 문제를 유발하는 메시를 루멘 씬에서 제거하기

메시의 프로퍼티에서 체크 해제

Affect Distance Field Lighting : 소프트웨어 레이 트레이싱의 일부가 되지 않음

Visible in Ray Tracing : 하드웨어 레이 트레이싱을 사용하고 있다면 보이지 않게 만듬

 

작은 메시가 거울 반사에서 검게 표시되는 문제

- 포스트 프로세스 볼륨 > 루멘 글로벌 일루미네이션 > 루멘 씬 디테일 값 조절

 

작은 물체를 루멘 Surface Cache를 포함시키기 위해 물체의 Emissive Light Source 항목을 체크하는 트릭을 사용할 수 있다.

 

루멘 시각화하기

메시 디스턴스 필드 시각화하기

- 특정 메시의 퀄리티 조절을 위해 디스턴스 필드 해상도 스케일을 조절할 수 있다.

 

Lit > Lumen에서 Lumen Scene, Reflection View, Surface Cache를 확인할 수 있다.

- Surface Cache에서 노란색 사용되지 않는 것 분홍 – Surface Card가 없거나 부족한 경우

r.Lumen.Visualize.CardPlacement 1 으로 활성화하면 카드가 켜지면서 카드들의 표면 캐시에 대한 최적화된 표현 방식을 시각적으로 확인할 수 있다.

 

 

 

https://docs.unrealengine.com/5.0/ko/lumen-technical-details-in-unreal-engine/

 

루멘의 기술적 디테일

루멘 글로벌 일루미네이션 및 리플렉션 시스템의 기술적 기능과 사양 개요입니다.

docs.unrealengine.com

 

'언리얼 5 > 에픽 게임즈 공식 강의' 카테고리의 다른 글

게임플레이 컴포넌트 세분화  (0) 2023.02.16
애니메이션  (1) 2023.02.15
나나이트 핵심 개념  (0) 2023.02.14
렌더링 시작하기  (0) 2023.02.14
Multiplayer Programming Quick Start Guide  (0) 2022.10.23

나나이트

언리얼 엔진5의 가상화 지오메트리 시스템

영화급 퀄리티의 소스 아트를 직접 임포트할 수 있다.

LOD는 자동으로 처리된다. 개별 메시를 위해 수동으로 설정할 필요가 없다.

 

나나이트 메시

나나이트는 임포트될 때 메시가 삼각형 그룹의 계층형 클러스터로 나눠진다.

렌더링되는 동안 클러스터는 카메라 뷰를 기준으로 하여 다양한 LOD로 즉시 교체되므로 동일한 오브젝트 내에서 균열 없이 완벽하게 인접 클러스터에 연결된다. 데이터는 요청 시 스트리밍되므로 표시되는 디테일만 메모리에 올라온다.

나나이트는 자체 렌더링 패스에서 실행된다. 기존 드로 콜을 완전히 우회하는 렌더링 패스이다.

시각화 모드를 사용하여 나나이트 파이프라인을 검토할 수 있다.

나나이트가 활성화된 스태틱 메시는 더 빠르게 렌더링되고 메모리를 덜 차지한다.

- 많은 LOD, 압축 데이터

- 매우 효율적인 방식으로 데이터 포맷을 렌더링

- 다수의 UV와 버텍스 컬러 지원

- 머터리얼은 셰이더에서 처리할 수 있는 메시의 여러 섹션으로 할당되며, 동적으로 교체될 수 있다.

- 나나이트는 머터리얼을 굽는 프로세스를 거치지 않아도 된다.

 

나나이트 메시 vs 스태틱 메시

차지하는 디스크 크기는 비슷하더라도 나나이트가 차지하는 메모리 크기가 더 작다.

- 필요한 데이터만 사용하고 압축률이 높기 때문에

스태틱 메시의 LOD를 미리 굽지 않는경우 나나이트 메시는

 

 

 

나나이트 사용하기

메시 임포트 시 Build Nanite 항목 체크

스태틱 메시 에디터에서 직접 활성화하기

 

나나이트의 한계

- 나나이트 메시는 스켈레탈 메시에 사용할 수 없다. 커스텀 depth / stencil 버퍼도 사용할 수 없다.

- 나나이트 메시의 인스턴스에 버텍스 페인팅을 사용할 수 없다.

- 머터리얼의 블렌드 모드는 Opaque (불투명)만 사용 가능

- 디퍼드 데칼 사용 불가능

- 와이어 프레임 모드에서 머터리얼 출력에는 World Position OffsetPixel Depth Offset이 지원되지 않는다. 양면 렌더링도 사용할 수 없다.

- 포워드 셰이딩 렌더링 X, 스테레오 렌더링 X, MSAA지원 X 메시 내의 라이팅 채널 하나만 사용가능, 레이 트레이싱 X (프록시 메시는 가능)

프록시 메시 : Nanite Fallback (낮은 퀄리티의 메시, 예비 메시) 모바일에서 대신 사용, 나나이트 세팅에서 삼각형 유지 비율 조절 가능 (너무 안 좋은 경우를 대비)

 

나나이트 시각화하기

뷰포트에서

Show -> Advaned -> Nanite Mesh (나나이트 메시 활성화 / 비활성화)

Lit -> Nanite Visualization

콘솔 명령

- r.Nanite.Visualize.Advanced 1 : Nanite Visualization의 고급 옵션 켜기

- nanitestats : 씬에서 나나이트가 작동하는 방식과 최적화할 필요가 있는 부분을 한 번에 확인할 수 있다.

나나이트 툴

Tools -> Nanite Tool

- 씬 내에서 현재 나나이트가 사용되거나 사용되지 않는 부분을 확인할 수 있는 툴

 

디퍼드 렌더러는 GBuffer로 렌더링된다.

 

모든 로직

Cpu가 렌더링 1프레임 전에 계산을 다 해놓는다.

CPU – draw 스레드 – GPU 가 각각 1프레임씩 차지한다.

 

계산 (프레임 0)

렌더링과 관련 없는 모든 것을 계산 (모든 버텍스의 위치, 렌더링 정보

)

Visibility 프로세스 (프레임 1)

Visibility Culling에서 수행해야 할 연산의 수를 줄이기 위해 아래의 작업들을 수행한다.

1. Distance Culling (기본 활성화)

- Cull Distance Volume을 사용하면 사이즈에 따른 Cull Distance 거리를 설정할 수 있다. 사이즈는 2의 제곱수가 좋다 (512같은)

2. Frustum Culling (기본 활성화)

 

3. Precomputed Visibility (기본 활성화 X)

- 모바일 디바이스나 특정 콘솔에서 좋은 효과를 보인다.

- 카메라가 셀에 진입하면 자신이 셀에 진입했다는 것을 셀에 통보하고 현재 셀에 저장된 배열에서 어떤 걸 표시할지 물어본다. 그러면 셀이 카메라에게 보이는 요소들을 알려준다.

- PreComputedVisibilityVolume 사용        

- 라이팅을 구워야 함, 월드세팅에서 precomputedVisibilty 체크

- PC에서도 설정하면 오클루전에 걸리는 시간을 조금이라도 줄일 수 있다.

 

4. Visibility Culling

- 가려지는 액터를 컬링

- 하드웨어 오클루전은 모든 디바이스에서 작동하는 것이 아니다.

- 소프트웨어 오클루전은 메시 LOD를 사용한다. 오클루더 메시로 사용할 LOD를 정의해 오클루더로 사용한다. 메시 LOD는 잘 사용하지는 않는 기능이다.

 

GPU (프레임 2)

ByPass

1. Early Z Pass

- 씬 뎁스를 렌더링

2. Basepass

- 그려야할 목록을 만든다 (보통 3D 사물)

- RenderDoc을 사용하면 GPU가 특정 프레임에서 렌더링하는 방식과 데이터를 캡처해줘서 드로 콜, 셰이더, 머터리얼이 렌더링되는 지점을 정확히 파악할 수 있게 된다. 렌더링은 드로콜 하나당 발생한다.

- GPU Visualizer에서 각각의 드로 콜을 렌더링하는데 얼마나 걸리는지 파악할 수 있다.

- 다이나믹 인스턴싱 (기본 활성화) : 비슷한 메시를 한 번의 드로우 콜로 일괄 처리, 렌더링 + 메모리에 하나만 로드

- 스태틱 메시도 메모리에 하나만 올라감

- Lightmass라는 개별 애플리케이션에 의해 Lightmap이 만들어진다.

- Volumetric Light maps vs Volume Lighting Sample 라이팅 맵 계산 방법 (고수준 vs 저수준)

- Volumetric Light maps : 월드에 격자로 구체를 배치, 구체에 색을 저장, 돌아다니는 캐릭터에는 캐릭터에 가장 가까이 있는 구체에서 얻은 색을 사용하여 셰이더 처리  

 

GBUFFER

베이스 패스를 다양한 버전으로 렌더링한 것

1. 노멀

2. Specular/Roughness/Metallic

3. 베이스 컬러

4. 베이스 컬러 + 라이팅

 

Dynamic Lighting / Shadow

상황에 따라 특화된 방법(실내, 야외)이 있기 때문에 다양한 솔루션이 존재한다.

Direct / Indirect, Light/Shadow로 분리하여 4가지 집합으로 묶인다.

 

1. Direct / Light

- IES Profiles : 빛의 세기, 굴절 텍스처, 스태틱 라이트에도 적용 가능

- Light Functions 머터리얼 : 구름이 월드에 그림자 드리우게, 물 반사에 사용, 퍼포먼스 비용 높음

 

2. Direct / Shadow

- Dynamic Shadow (구형 시스템) - Cache Shadow가 기본적으로 켜져 있어서 라이트가 가만히 있는 경우에는 좋다.

- Cascaded Shadow Maps (Outdoor 전용) : 3개의 다른 섀도우 맵에 저장됨, low medium high quality, 일정 거리 이상 떨어지면 천천히 사라진다.

- Distance Field Shadow (중요) (기본 활성화 X) :

Distance Field = 모델의 모양을 함수로 저장 = 표면으로부터 얼마나 떨어져 있는지에 대한 정보

멀리 떨어져 있는 그림자에 보통 사용

Cascaded보다 정밀하지는 않지만 비용이 저렴함, 대신 메모리를 사용

Distance Field Mesh는 머터리얼 이펙트, 앰비언트 오클루전에도 사용된다.

- 레이 트레이싱 섀도우

- Object Shadow, Inset Shadow : 한정된 크기의 섀도우 맵을 사용하는 것 (캐릭터의 그림자)

- Contact Shadows : 표면 뒤쪽에 미세 접촉면 그림자를 만드는 스크린 스페이스 이펙트 (매우 작은 물체에 드리우는 그림자에 사용)

 

3. Indirect / Light (보통 게임에서 사용 안함)

- Light Propagation (구형 시스템): 실시간 글로벌 일루미네이션을 표현해주는 수단

- Lay Tracing GI : 비용이 매우 비쌈

 

4. Indirect / Shadow

- Capsule Shadow : 모든 스켈레탈 메시에는 그 주위를 둘러싼 간소화된 콜리전이 있다. 이걸 사용한다. 많은 유닛이 등장할 떄 적용할 수 있다. 라이트가 강하지 않은 경우에 유용하다.

- DFAO : 큰 규모의 앰비언트 오클루전, 스카이라이트가 Static이거나 Movable인 경우,

디스턴스 필드에 의존도가 높은 경우, 액터들 의 스케일을 일관되게 유지해야 한다.

- Raytraced AO

 

 

Reflection (반사)

-> 방향으로 중첩되는 구성, 갈수록 비용 비쌈,  비용이 가장 비싼 마지막 단계로 보낼 픽셀을 최소화

Reflection Captures -> Planar Reflections -> Screen Space Reflections

Reflection Captures (레벨에 배치): 스태틱 싱글 큐브맵 캡처, 반경이 작은 부분에 적용하기 좋음

Planar Reflections (레벨에 배치): 평평한 표면, 실시간으로만 작동하기 떄문에 비싼 비용

Screen Space Reflection (기본 활성화) : 이미 렌더링된 부분을 보고 Screen SpaceReflection을 입힘, 포스트 프로세스 볼륨, SSR 세팅으로 퀄리티를 설정할 수 있다.

Raytraced Reflections

 

Additional

Atmosphere

Sky

Atmosphere

Exponential height Fog : 멀리 떨어지면 사라지는 안개 Volumetric Fog를 구현할 수 있다.

Volumetric Fog : 볼류메트릭 라이트맵을 사용해 안개에 색을 입힘, Static Light에 의존한다.

Atmospheric Fog : 복잡한 안개를 렌더링하는 시스템

 

Translucency(반투명)

Refraction

두가지 렌더링 방식 - 머터리얼의 Refraction 프로퍼티에서 Refraction Mode 설정

- Pixel Normal Offset : 물의 표면처럼 평평한 경우

- Index of Refraction : 3D 오브젝트

 

 

셰이딩 모델 Default Lit, Translucency 프로퍼티에서 LightingMode 설정

1. Volumetric NonDirectional: 가장 저렴

2. Volumetric PerVertex NonDirectional : 비슷?

3. Surface ForwardShading : 비싸지만 퀄리티 좋음

 

PostProecessing

대부분이 기본으로 활성화되어 있음

 

포스트 프로세스 볼륨을 제일 많이 사용

1. 톤 매핑 맵에 톤을 더해 색을 보정, Sharpen 커맨드

2. Standard Bloom vs Convolution bloom, Convolution은 비싸서 게임에 X

다수의 bloom(다수의 레이어)을 캡처하고 블렌딩하여 최종 이미지를 만듬

3. SSAO (Screen Space Ambient Occlusion) (기본 활성화)

4. SSSSS (Screen Space Sub Surface Scattering) : 피부에 사용하는 스크린 스페이스 이펙트

5. SSGI (Screen Space Global illumination) (기본 비활성화) : 포토샵 효과

6. Depth of Field : Gaussian(low) / Bokeh(비쌈) / Circle Cinematic(좋음)

7. Exposure (기본 활성화) : 빛에 눈이 적응하는 변화 정도

8. Blendables (PostProcess Material) (중요) : 머터리얼 에디터로 포스트 프로세싱을 수정하는 방법

물속을 포스트 프로세스 볼륨으로 만들고 포스트 프로세스 머터리얼(머터리얼 도메인이 Post Process)을 적용

머터리얼 에디터에서는 최종 렌더링된 프레임(화면)을 얻어 수정한 뒤 다시 적용할 수 있다.

플레이어가 피격당했을 때의 효과

9. Camera Effects

 

Performance

에디터 툴, 검증 툴, 도구 등

CVars (중요): 콘솔로 입력할 수 있는 것들

r.XXXXXXXXXXX

다양한 디바이스에서의 프로젝트와 게임의 퍼포먼스를 제어할 수 있다 디바이스마다 설정을 다르게 할 수 있다.

모르겠으면 Help 치면 된다.

Quality 다루는 것들은 0을 입력할 경우 기능이 꺼진다. 에디터 재시작하면 복구된다.

런타임중에 설정을 바꾸고 확인할 수 있다.

 

Scalability Example

Window -> Developer Tools -> Device Profiles 에서 직접 수정 혹은

Config 폴더 -> DefaultDeviceProfiles.ini 파일 수정

 

Rendering Advice (중요)

삼각형과 드로우콜 최적화

1. Window -> Statistics  

- 드로우 콜과 삼각형 개수에 대한 정보 제공

2. 내장 플러그인을 사용해 메시를 병합할 수 있다.

- 3가지 방식 (애셋 병합해서 하나의 스태틱 메시 액터 만들기 / 프록시 : 새 텍스처를 만들어서 머터리얼을 병합, 메시 결합 후 폴리곤 수 감소 (멀리 떨어져 있는 물체에 적절) / 합친 후 인스턴트 스태틱 메시 컴포넌트로 사용하기)

3. Hitting the right balance

지나치게 많은 메시를 한 데 합치지 않도록 균형을 잡기

4. Lods / Force Lod / Reduction

- Lod 고정 / 디바이스에 따른 퀄리티 설정

5. Detail Mode

- 게임의 월드 디테일이 낮게 설정되어 있다면 StaticMesh에 설정된 LOD Detail Mode가 높게 설정된 액터를 제거해준다. (작은 물체는 LOD Detail을 높게 설정하자)

 

그림자 렌더링

1. Cascaded Shadow MapDistance Field Shadow 간의 밸런스 조절하기

- CasCaded는 더 빨리 사라진다.

2. Far Shadow (구형)

3. Toggling / Light Range

- Light Range를 줄이거나, 블루프린트를 사용하여 카메라와 광원 사이의 거리를 1초마다 재서 그림자를 비활성화하기

4. PolyCount / LODs

5. Large Meshes / Foliage Shadows

- 커다란 단일 메시나 폴리지의 그림자를 드리우는 건 비용이 크니 필요하다면 꺼야 한다.

6. Toggling Shadows on detail meshes (DF + Regular)

- Distance Field는 멀리 떨어진 그림자를 볼 수 있게 도와주는 기능이기 때문에 멀리 있는 작은 물체에 Distance Field Shadow를 드리울 필요는 없다. 레벨뿐만이 아니라 스태틱 메시 애셋 자체에서 설정할 수 있다.

 

Material Cost

- Noise와 같은 비싼 연산이 존재한다.

- Instruction Counts / Shader complexity

 

Translucency

- 되도록이면 Unlit 사용하기

- Instruction count가 다른 머터리얼에 비해 더 중요함

- Lit을 사용한다면 Volume NonDirectional mode + CVars를 사용하여 흐린 섀도우를 미세조정

- Forward, Reflection은 매우 비쌈

- 디더링된 오파시티 마스크를 사용하여 반투명 흉내낼 수 있다.

 

Baking Light

- 규모가 큰 월드에 서로 다른 레벨이 여러 개 있다면 라이트를 굽는 동안 모두 활성화되어야 한다. 라이트는 레벨별로 구울 수 없다.

- 볼류메트릭 라이트맵의 셀 크기를 조절

- Lightmap Density Viewmode를 사용하여 특정 메시들에 라이트맵을 직접 오버라이드하여 밀도를 수정 또는 메시의 라이트맵 해상도를 수정

- Volumetric Lightmap Density Volume을 사용하여 수정할 수 있다. 라이팅 빌드 정보, 레벨 라이팅 스케일

- 빌드 시간 = 라이트맵 해상도 + 라이트 수 + 메시 수 + Source Radius + Radius

 

Reflection

- 디테일이 필요한 부분에 Sphere Reflection Capture를 두자

 

Forward / Mobile

- 프로젝트 세팅에서 활성화

- CVar로 실험하여 퀄리티와 퍼포먼스 조화시키기

 

포워드 렌더링

디퍼드 렌더링

모두 지원

디퍼드 렌더러는 GBuffer로 렌더링된다.

 

모든 로직

Cpu가 렌더링 1프레임 전에 계산을 다 해놓는다.

CPU – draw 스레드 – GPU 가 각각 1프레임씩 차지한다.

 

계산 (프레임 0)

렌더링과 관련 없는 모든 것을 계산 (모든 버텍스의 위치, 렌더링 정보

)

Visibility 프로세스 (프레임 1)

Visibility Culling에서 수행해야 할 연산의 수를 줄이기 위해 아래의 작업들을 수행한다.

1. Distance Culling (기본 활성화)

- Cull Distance Volume을 사용하면 사이즈에 따른 Cull Distance 거리를 설정할 수 있다. 사이즈는 2의 제곱수가 좋다 (512같은)

2. Frustum Culling (기본 활성화)

 

3. Precomputed Visibility (기본 활성화 X)

- 모바일 디바이스나 특정 콘솔에서 좋은 효과를 보인다.

- 카메라가 셀에 진입하면 자신이 셀에 진입했다는 것을 셀에 통보하고 현재 셀에 저장된 배열에서 어떤 걸 표시할지 물어본다. 그러면 셀이 카메라에게 보이는 요소들을 알려준다.

- PreComputedVisibilityVolume 사용        

- 라이팅을 구워야 함, 월드세팅에서 precomputedVisibilty 체크

- PC에서도 설정하면 오클루전에 걸리는 시간을 조금이라도 줄일 수 있다.

 

4. Visibility Culling

- 가려지는 액터를 컬링

- 하드웨어 오클루전은 모든 디바이스에서 작동하는 것이 아니다.

- 소프트웨어 오클루전은 메시 LOD를 사용한다. 오클루더 메시로 사용할 LOD를 정의해 오클루더로 사용한다. 메시 LOD는 잘 사용하지는 않는 기능이다.

 

GPU (프레임 2)

ByPass

1. Early Z Pass

- 씬 뎁스를 렌더링

2. Basepass

- 그려야할 목록을 만든다 (보통 3D 사물)

- RenderDoc을 사용하면 GPU가 특정 프레임에서 렌더링하는 방식과 데이터를 캡처해줘서 드로 콜, 셰이더, 머터리얼이 렌더링되는 지점을 정확히 파악할 수 있게 된다. 렌더링은 드로콜 하나당 발생한다.

- GPU Visualizer에서 각각의 드로 콜을 렌더링하는데 얼마나 걸리는지 파악할 수 있다.

- 다이나믹 인스턴싱 (기본 활성화) : 비슷한 메시를 한 번의 드로우 콜로 일괄 처리, 렌더링 + 메모리에 하나만 로드

- 스태틱 메시도 메모리에 하나만 올라감

- Lightmass라는 개별 애플리케이션에 의해 Lightmap이 만들어진다.

- Volumetric Light maps vs Volume Lighting Sample 라이팅 맵 계산 방법 (고수준 vs 저수준)

- Volumetric Light maps : 월드에 격자로 구체를 배치, 구체에 색을 저장, 돌아다니는 캐릭터에는 캐릭터에 가장 가까이 있는 구체에서 얻은 색을 사용하여 셰이더 처리  

 

GBUFFER

베이스 패스를 다양한 버전으로 렌더링한 것

1. 노멀

2. Specular/Roughness/Metallic

3. 베이스 컬러

4. 베이스 컬러 + 라이팅

 

Dynamic Lighting / Shadow

상황에 따라 특화된 방법(실내, 야외)이 있기 때문에 다양한 솔루션이 존재한다.

Direct / Indirect, Light/Shadow로 분리하여 4가지 집합으로 묶인다.

 

1. Direct / Light

- IES Profiles : 빛의 세기, 굴절 텍스처, 스태틱 라이트에도 적용 가능

- Light Functions 머터리얼 : 구름이 월드에 그림자 드리우게, 물 반사에 사용, 퍼포먼스 비용 높음

 

2. Direct / Shadow

- Dynamic Shadow (구형 시스템) - Cache Shadow가 기본적으로 켜져 있어서 라이트가 가만히 있는 경우에는 좋다.

- Cascaded Shadow Maps (Outdoor 전용) : 3개의 다른 섀도우 맵에 저장됨, low medium high quality, 일정 거리 이상 떨어지면 천천히 사라진다.

- Distance Field Shadow (중요) (기본 활성화 X) :

Distance Field = 모델의 모양을 함수로 저장 = 표면으로부터 얼마나 떨어져 있는지에 대한 정보

멀리 떨어져 있는 그림자에 보통 사용

Cascaded보다 정밀하지는 않지만 비용이 저렴함, 대신 메모리를 사용

Distance Field Mesh는 머터리얼 이펙트, 앰비언트 오클루전에도 사용된다.

- 레이 트레이싱 섀도우

- Object Shadow, Inset Shadow : 한정된 크기의 섀도우 맵을 사용하는 것 (캐릭터의 그림자)

- Contact Shadows : 표면 뒤쪽에 미세 접촉면 그림자를 만드는 스크린 스페이스 이펙트 (매우 작은 물체에 드리우는 그림자에 사용)

 

3. Indirect / Light (보통 게임에서 사용 안함)

- Light Propagation (구형 시스템): 실시간 글로벌 일루미네이션을 표현해주는 수단

- Lay Tracing GI : 비용이 매우 비쌈

 

4. Indirect / Shadow

- Capsule Shadow : 모든 스켈레탈 메시에는 그 주위를 둘러싼 간소화된 콜리전이 있다. 이걸 사용한다. 많은 유닛이 등장할 떄 적용할 수 있다. 라이트가 강하지 않은 경우에 유용하다.

- DFAO : 큰 규모의 앰비언트 오클루전, 스카이라이트가 Static이거나 Movable인 경우,

디스턴스 필드에 의존도가 높은 경우, 액터들 의 스케일을 일관되게 유지해야 한다.

- Raytraced AO

 

 

Reflection (반사)

-> 방향으로 중첩되는 구성, 갈수록 비용 비쌈,  비용이 가장 비싼 마지막 단계로 보낼 픽셀을 최소화

Reflection Captures -> Planar Reflections -> Screen Space Reflections

Reflection Captures (레벨에 배치): 스태틱 싱글 큐브맵 캡처, 반경이 작은 부분에 적용하기 좋음

Planar Reflections (레벨에 배치): 평평한 표면, 실시간으로만 작동하기 떄문에 비싼 비용

Screen Space Reflection (기본 활성화) : 이미 렌더링된 부분을 보고 Screen SpaceReflection을 입힘, 포스트 프로세스 볼륨, SSR 세팅으로 퀄리티를 설정할 수 있다.

Raytraced Reflections

 

Additional

Atmosphere

Sky

Atmosphere

Exponential height Fog : 멀리 떨어지면 사라지는 안개 Volumetric Fog를 구현할 수 있다.

Volumetric Fog : 볼류메트릭 라이트맵을 사용해 안개에 색을 입힘, Static Light에 의존한다.

Atmospheric Fog : 복잡한 안개를 렌더링하는 시스템

 

Translucency(반투명)

Refraction

두가지 렌더링 방식 - 머터리얼의 Refraction 프로퍼티에서 Refraction Mode 설정

- Pixel Normal Offset : 물의 표면처럼 평평한 경우

- Index of Refraction : 3D 오브젝트

 

 

셰이딩 모델 Default Lit, Translucency 프로퍼티에서 LightingMode 설정

1. Volumetric NonDirectional: 가장 저렴

2. Volumetric PerVertex NonDirectional : 비슷?

3. Surface ForwardShading : 비싸지만 퀄리티 좋음

 

PostProecessing

대부분이 기본으로 활성화되어 있음

 

포스트 프로세스 볼륨을 제일 많이 사용

1. 톤 매핑 맵에 톤을 더해 색을 보정, Sharpen 커맨드

2. Standard Bloom vs Convolution bloom, Convolution은 비싸서 게임에 X

다수의 bloom(다수의 레이어)을 캡처하고 블렌딩하여 최종 이미지를 만듬

3. SSAO (Screen Space Ambient Occlusion) (기본 활성화)

4. SSSSS (Screen Space Sub Surface Scattering) : 피부에 사용하는 스크린 스페이스 이펙트

5. SSGI (Screen Space Global illumination) (기본 비활성화) : 포토샵 효과

6. Depth of Field : Gaussian(low) / Bokeh(비쌈) / Circle Cinematic(좋음)

7. Exposure (기본 활성화) : 빛에 눈이 적응하는 변화 정도

8. Blendables (PostProcess Material) (중요) : 머터리얼 에디터로 포스트 프로세싱을 수정하는 방법

물속을 포스트 프로세스 볼륨으로 만들고 포스트 프로세스 머터리얼(머터리얼 도메인이 Post Process)을 적용

머터리얼 에디터에서는 최종 렌더링된 프레임(화면)을 얻어 수정한 뒤 다시 적용할 수 있다.

플레이어가 피격당했을 때의 효과

9. Camera Effects

 

Performance

에디터 툴, 검증 툴, 도구 등

CVars (중요): 콘솔로 입력할 수 있는 것들

r.XXXXXXXXXXX

다양한 디바이스에서의 프로젝트와 게임의 퍼포먼스를 제어할 수 있다 디바이스마다 설정을 다르게 할 수 있다.

모르겠으면 Help 치면 된다.

Quality 다루는 것들은 0을 입력할 경우 기능이 꺼진다. 에디터 재시작하면 복구된다.

런타임중에 설정을 바꾸고 확인할 수 있다.

 

Scalability Example

Window -> Developer Tools -> Device Profiles 에서 직접 수정 혹은

Config 폴더 -> DefaultDeviceProfiles.ini 파일 수정

 

Rendering Advice (중요)

삼각형과 드로우콜 최적화

1. Window -> Statistics  

- 드로우 콜과 삼각형 개수에 대한 정보 제공

2. 내장 플러그인을 사용해 메시를 병합할 수 있다.

- 3가지 방식 (애셋 병합해서 하나의 스태틱 메시 액터 만들기 / 프록시 : 새 텍스처를 만들어서 머터리얼을 병합, 메시 결합 후 폴리곤 수 감소 (멀리 떨어져 있는 물체에 적절) / 합친 후 인스턴트 스태틱 메시 컴포넌트로 사용하기)

3. Hitting the right balance

지나치게 많은 메시를 한 데 합치지 않도록 균형을 잡기

4. Lods / Force Lod / Reduction

- Lod 고정 / 디바이스에 따른 퀄리티 설정

5. Detail Mode

- 게임의 월드 디테일이 낮게 설정되어 있다면 StaticMesh에 설정된 LOD Detail Mode가 높게 설정된 액터를 제거해준다. (작은 물체는 LOD Detail을 높게 설정하자)

 

그림자 렌더링

1. Cascaded Shadow MapDistance Field Shadow 간의 밸런스 조절하기

- CasCaded는 더 빨리 사라진다.

2. Far Shadow (구형)

3. Toggling / Light Range

- Light Range를 줄이거나, 블루프린트를 사용하여 카메라와 광원 사이의 거리를 1초마다 재서 그림자를 비활성화하기

4. PolyCount / LODs

5. Large Meshes / Foliage Shadows

- 커다란 단일 메시나 폴리지의 그림자를 드리우는 건 비용이 크니 필요하다면 꺼야 한다.

6. Toggling Shadows on detail meshes (DF + Regular)

- Distance Field는 멀리 떨어진 그림자를 볼 수 있게 도와주는 기능이기 때문에 멀리 있는 작은 물체에 Distance Field Shadow를 드리울 필요는 없다. 레벨뿐만이 아니라 스태틱 메시 애셋 자체에서 설정할 수 있다.

 

Material Cost

- Noise와 같은 비싼 연산이 존재한다.

- Instruction Counts / Shader complexity

 

Translucency

- 되도록이면 Unlit 사용하기

- Instruction count가 다른 머터리얼에 비해 더 중요함

- Lit을 사용한다면 Volume NonDirectional mode + CVars를 사용하여 흐린 섀도우를 미세조정

- Forward, Reflection은 매우 비쌈

- 디더링된 오파시티 마스크를 사용하여 반투명 흉내낼 수 있다.

 

Baking Light

- 규모가 큰 월드에 서로 다른 레벨이 여러 개 있다면 라이트를 굽는 동안 모두 활성화되어야 한다. 라이트는 레벨별로 구울 수 없다.

- 볼류메트릭 라이트맵의 셀 크기를 조절

- Lightmap Density Viewmode를 사용하여 특정 메시들에 라이트맵을 직접 오버라이드하여 밀도를 수정 또는 메시의 라이트맵 해상도를 수정

- Volumetric Lightmap Density Volume을 사용하여 수정할 수 있다. 라이팅 빌드 정보, 레벨 라이팅 스케일

- 빌드 시간 = 라이트맵 해상도 + 라이트 수 + 메시 수 + Source Radius + Radius

 

Reflection

- 디테일이 필요한 부분에 Sphere Reflection Capture를 두자

 

Forward / Mobile

- 프로젝트 세팅에서 활성화

- CVar로 실험하여 퀄리티와 퍼포먼스 조화시키기

 

포워드 렌더링

디퍼드 렌더링

모두 지원

디퍼드 렌더러는 GBuffer로 렌더링된다.

 

모든 로직

Cpu가 렌더링 1프레임 전에 계산을 다 해놓는다.

CPU – draw 스레드 – GPU 가 각각 1프레임씩 차지한다.

 

계산 (프레임 0)

렌더링과 관련 없는 모든 것을 계산 (모든 버텍스의 위치, 렌더링 정보

)

Visibility 프로세스 (프레임 1)

Visibility Culling에서 수행해야 할 연산의 수를 줄이기 위해 아래의 작업들을 수행한다.

1. Distance Culling (기본 활성화)

- Cull Distance Volume을 사용하면 사이즈에 따른 Cull Distance 거리를 설정할 수 있다. 사이즈는 2의 제곱수가 좋다 (512같은)

2. Frustum Culling (기본 활성화)

 

3. Precomputed Visibility (기본 활성화 X)

- 모바일 디바이스나 특정 콘솔에서 좋은 효과를 보인다.

- 카메라가 셀에 진입하면 자신이 셀에 진입했다는 것을 셀에 통보하고 현재 셀에 저장된 배열에서 어떤 걸 표시할지 물어본다. 그러면 셀이 카메라에게 보이는 요소들을 알려준다.

- PreComputedVisibilityVolume 사용        

- 라이팅을 구워야 함, 월드세팅에서 precomputedVisibilty 체크

- PC에서도 설정하면 오클루전에 걸리는 시간을 조금이라도 줄일 수 있다.

 

4. Visibility Culling

- 가려지는 액터를 컬링

- 하드웨어 오클루전은 모든 디바이스에서 작동하는 것이 아니다.

- 소프트웨어 오클루전은 메시 LOD를 사용한다. 오클루더 메시로 사용할 LOD를 정의해 오클루더로 사용한다. 메시 LOD는 잘 사용하지는 않는 기능이다.

 

GPU (프레임 2)

ByPass

1. Early Z Pass

- 씬 뎁스를 렌더링

2. Basepass

- 그려야할 목록을 만든다 (보통 3D 사물)

- RenderDoc을 사용하면 GPU가 특정 프레임에서 렌더링하는 방식과 데이터를 캡처해줘서 드로 콜, 셰이더, 머터리얼이 렌더링되는 지점을 정확히 파악할 수 있게 된다. 렌더링은 드로콜 하나당 발생한다.

- GPU Visualizer에서 각각의 드로 콜을 렌더링하는데 얼마나 걸리는지 파악할 수 있다.

- 다이나믹 인스턴싱 (기본 활성화) : 비슷한 메시를 한 번의 드로우 콜로 일괄 처리, 렌더링 + 메모리에 하나만 로드

- 스태틱 메시도 메모리에 하나만 올라감

- Lightmass라는 개별 애플리케이션에 의해 Lightmap이 만들어진다.

- Volumetric Light maps vs Volume Lighting Sample 라이팅 맵 계산 방법 (고수준 vs 저수준)

- Volumetric Light maps : 월드에 격자로 구체를 배치, 구체에 색을 저장, 돌아다니는 캐릭터에는 캐릭터에 가장 가까이 있는 구체에서 얻은 색을 사용하여 셰이더 처리  

 

GBUFFER

베이스 패스를 다양한 버전으로 렌더링한 것

1. 노멀

2. Specular/Roughness/Metallic

3. 베이스 컬러

4. 베이스 컬러 + 라이팅

 

Dynamic Lighting / Shadow

상황에 따라 특화된 방법(실내, 야외)이 있기 때문에 다양한 솔루션이 존재한다.

Direct / Indirect, Light/Shadow로 분리하여 4가지 집합으로 묶인다.

 

1. Direct / Light

- IES Profiles : 빛의 세기, 굴절 텍스처, 스태틱 라이트에도 적용 가능

- Light Functions 머터리얼 : 구름이 월드에 그림자 드리우게, 물 반사에 사용, 퍼포먼스 비용 높음

 

2. Direct / Shadow

- Dynamic Shadow (구형 시스템) - Cache Shadow가 기본적으로 켜져 있어서 라이트가 가만히 있는 경우에는 좋다.

- Cascaded Shadow Maps (Outdoor 전용) : 3개의 다른 섀도우 맵에 저장됨, low medium high quality, 일정 거리 이상 떨어지면 천천히 사라진다.

- Distance Field Shadow (중요) (기본 활성화 X) :

Distance Field = 모델의 모양을 함수로 저장 = 표면으로부터 얼마나 떨어져 있는지에 대한 정보

멀리 떨어져 있는 그림자에 보통 사용

Cascaded보다 정밀하지는 않지만 비용이 저렴함, 대신 메모리를 사용

Distance Field Mesh는 머터리얼 이펙트, 앰비언트 오클루전에도 사용된다.

- 레이 트레이싱 섀도우

- Object Shadow, Inset Shadow : 한정된 크기의 섀도우 맵을 사용하는 것 (캐릭터의 그림자)

- Contact Shadows : 표면 뒤쪽에 미세 접촉면 그림자를 만드는 스크린 스페이스 이펙트 (매우 작은 물체에 드리우는 그림자에 사용)

 

3. Indirect / Light (보통 게임에서 사용 안함)

- Light Propagation (구형 시스템): 실시간 글로벌 일루미네이션을 표현해주는 수단

- Lay Tracing GI : 비용이 매우 비쌈

 

4. Indirect / Shadow

- Capsule Shadow : 모든 스켈레탈 메시에는 그 주위를 둘러싼 간소화된 콜리전이 있다. 이걸 사용한다. 많은 유닛이 등장할 떄 적용할 수 있다. 라이트가 강하지 않은 경우에 유용하다.

- DFAO : 큰 규모의 앰비언트 오클루전, 스카이라이트가 Static이거나 Movable인 경우,

디스턴스 필드에 의존도가 높은 경우, 액터들 의 스케일을 일관되게 유지해야 한다.

- Raytraced AO

 

 

Reflection (반사)

-> 방향으로 중첩되는 구성, 갈수록 비용 비쌈,  비용이 가장 비싼 마지막 단계로 보낼 픽셀을 최소화

Reflection Captures -> Planar Reflections -> Screen Space Reflections

Reflection Captures (레벨에 배치): 스태틱 싱글 큐브맵 캡처, 반경이 작은 부분에 적용하기 좋음

Planar Reflections (레벨에 배치): 평평한 표면, 실시간으로만 작동하기 떄문에 비싼 비용

Screen Space Reflection (기본 활성화) : 이미 렌더링된 부분을 보고 Screen SpaceReflection을 입힘, 포스트 프로세스 볼륨, SSR 세팅으로 퀄리티를 설정할 수 있다.

Raytraced Reflections

 

Additional

Atmosphere

Sky

Atmosphere

Exponential height Fog : 멀리 떨어지면 사라지는 안개 Volumetric Fog를 구현할 수 있다.

Volumetric Fog : 볼류메트릭 라이트맵을 사용해 안개에 색을 입힘, Static Light에 의존한다.

Atmospheric Fog : 복잡한 안개를 렌더링하는 시스템

 

Translucency(반투명)

Refraction

두가지 렌더링 방식 - 머터리얼의 Refraction 프로퍼티에서 Refraction Mode 설정

- Pixel Normal Offset : 물의 표면처럼 평평한 경우

- Index of Refraction : 3D 오브젝트

 

 

셰이딩 모델 Default Lit, Translucency 프로퍼티에서 LightingMode 설정

1. Volumetric NonDirectional: 가장 저렴

2. Volumetric PerVertex NonDirectional : 비슷?

3. Surface ForwardShading : 비싸지만 퀄리티 좋음

 

PostProecessing

대부분이 기본으로 활성화되어 있음

 

포스트 프로세스 볼륨을 제일 많이 사용

1. 톤 매핑 맵에 톤을 더해 색을 보정, Sharpen 커맨드

2. Standard Bloom vs Convolution bloom, Convolution은 비싸서 게임에 X

다수의 bloom(다수의 레이어)을 캡처하고 블렌딩하여 최종 이미지를 만듬

3. SSAO (Screen Space Ambient Occlusion) (기본 활성화)

4. SSSSS (Screen Space Sub Surface Scattering) : 피부에 사용하는 스크린 스페이스 이펙트

5. SSGI (Screen Space Global illumination) (기본 비활성화) : 포토샵 효과

6. Depth of Field : Gaussian(low) / Bokeh(비쌈) / Circle Cinematic(좋음)

7. Exposure (기본 활성화) : 빛에 눈이 적응하는 변화 정도

8. Blendables (PostProcess Material) (중요) : 머터리얼 에디터로 포스트 프로세싱을 수정하는 방법

물속을 포스트 프로세스 볼륨으로 만들고 포스트 프로세스 머터리얼(머터리얼 도메인이 Post Process)을 적용

머터리얼 에디터에서는 최종 렌더링된 프레임(화면)을 얻어 수정한 뒤 다시 적용할 수 있다.

플레이어가 피격당했을 때의 효과

9. Camera Effects

 

Performance

에디터 툴, 검증 툴, 도구 등

CVars (중요): 콘솔로 입력할 수 있는 것들

r.XXXXXXXXXXX

다양한 디바이스에서의 프로젝트와 게임의 퍼포먼스를 제어할 수 있다 디바이스마다 설정을 다르게 할 수 있다.

모르겠으면 Help 치면 된다.

Quality 다루는 것들은 0을 입력할 경우 기능이 꺼진다. 에디터 재시작하면 복구된다.

런타임중에 설정을 바꾸고 확인할 수 있다.

 

Scalability Example

Window -> Developer Tools -> Device Profiles 에서 직접 수정 혹은

Config 폴더 -> DefaultDeviceProfiles.ini 파일 수정

 

Rendering Advice (중요)

삼각형과 드로우콜 최적화

1. Window -> Statistics  

- 드로우 콜과 삼각형 개수에 대한 정보 제공

2. 내장 플러그인을 사용해 메시를 병합할 수 있다.

- 3가지 방식 (애셋 병합해서 하나의 스태틱 메시 액터 만들기 / 프록시 : 새 텍스처를 만들어서 머터리얼을 병합, 메시 결합 후 폴리곤 수 감소 (멀리 떨어져 있는 물체에 적절) / 합친 후 인스턴트 스태틱 메시 컴포넌트로 사용하기)

3. Hitting the right balance

지나치게 많은 메시를 한 데 합치지 않도록 균형을 잡기

4. Lods / Force Lod / Reduction

- Lod 고정 / 디바이스에 따른 퀄리티 설정

5. Detail Mode

- 게임의 월드 디테일이 낮게 설정되어 있다면 StaticMesh에 설정된 LOD Detail Mode가 높게 설정된 액터를 제거해준다. (작은 물체는 LOD Detail을 높게 설정하자)

 

그림자 렌더링

1. Cascaded Shadow MapDistance Field Shadow 간의 밸런스 조절하기

- CasCaded는 더 빨리 사라진다.

2. Far Shadow (구형)

3. Toggling / Light Range

- Light Range를 줄이거나, 블루프린트를 사용하여 카메라와 광원 사이의 거리를 1초마다 재서 그림자를 비활성화하기

4. PolyCount / LODs

5. Large Meshes / Foliage Shadows

- 커다란 단일 메시나 폴리지의 그림자를 드리우는 건 비용이 크니 필요하다면 꺼야 한다.

6. Toggling Shadows on detail meshes (DF + Regular)

- Distance Field는 멀리 떨어진 그림자를 볼 수 있게 도와주는 기능이기 때문에 멀리 있는 작은 물체에 Distance Field Shadow를 드리울 필요는 없다. 레벨뿐만이 아니라 스태틱 메시 애셋 자체에서 설정할 수 있다.

 

Material Cost

- Noise와 같은 비싼 연산이 존재한다.

- Instruction Counts / Shader complexity

 

Translucency

- 되도록이면 Unlit 사용하기

- Instruction count가 다른 머터리얼에 비해 더 중요함

- Lit을 사용한다면 Volume NonDirectional mode + CVars를 사용하여 흐린 섀도우를 미세조정

- Forward, Reflection은 매우 비쌈

- 디더링된 오파시티 마스크를 사용하여 반투명 흉내낼 수 있다.

 

Baking Light

- 규모가 큰 월드에 서로 다른 레벨이 여러 개 있다면 라이트를 굽는 동안 모두 활성화되어야 한다. 라이트는 레벨별로 구울 수 없다.

- 볼류메트릭 라이트맵의 셀 크기를 조절

- Lightmap Density Viewmode를 사용하여 특정 메시들에 라이트맵을 직접 오버라이드하여 밀도를 수정 또는 메시의 라이트맵 해상도를 수정

- Volumetric Lightmap Density Volume을 사용하여 수정할 수 있다. 라이팅 빌드 정보, 레벨 라이팅 스케일

- 빌드 시간 = 라이트맵 해상도 + 라이트 수 + 메시 수 + Source Radius + Radius

 

Reflection

- 디테일이 필요한 부분에 Sphere Reflection Capture를 두자

 

Forward / Mobile

- 프로젝트 세팅에서 활성화

- CVar로 실험하여 퀄리티와 퍼포먼스 조화시키기

https://docs.unrealengine.com/5.0/ko/animation-in-lyra-sample-game-in-unreal-engine/

 

라이라의 애니메이션

라이라의 애니메이션 시스템에 관한 개요입니다

docs.unrealengine.com

대부분의 프로젝트에서 그렇듯이 라이라의 캐릭터 애니메이션은 애니메이션 블루프린트 시스템을 사용하여 만들어진다.

 

ABP_Mannequin_Base 블루프린트에 적혀있는 코멘트에 따르면 해당 Anim Graph는 Montage와 애니메이션 레이어의 시작점을 제공하여 혼합하여 재생할 수 있게 해준다. 이러한 접근으로 무기가 로드될 때 애니메이션을 로드하도록 할 수 있다. 예를 들어 Weapon은 필요한 Montage와 애니메이션 레이어에 대한 참조를 갖고 있기 때문에 Weapon이 로드될 때 애니메이션 데이터들이 같이 로드되도록 한다. 

 

블루프린트 스레드 세이프 업데이트 애니메이션 

 

최적의 퍼포먼스를 위해 라이라에서는 이벤트 그래프 대신 멀티 스레드 애니메이션을 사용하여 애니메이션 값을 계산한다.

C++를 통해 애니메이션 업데이트 방법이나 발생 시기를 제어할 수 있도록 해주면, 퍼포먼스를 향상시킬 수 있다.

많은 애니메이션 작업을 워커 스레드에서 돌릴 수 있도록 해주는 프로젝트 세팅

프로젝트 세팅 > Engine > General Settings > Anim Blueprints > Allow Multi Threaded Animation Update 체크

 

ABP_Mannequin_Base의 함수 목록, 모두 블루프린트에 정의되어 있다.

스레드 세이프 함수를 사용할 때는 이벤트 그래프에서와 달리 직접 데이터에 액세스할 수 없다. 대신에 Property Access를 사용하여 데이터에 접근하는 편이 낫다.

 

서브 애니메이션 인스턴스 / 애니메이션 레이어 / 애니메이션 블루프린트 링크

캐릭터의 애니메이션 블루프린트가 복잡해지기 시작하면서, 다른 애니메이션 블루프린트 안의 애니메이션 블루프린트 일부를 재사용하고플 수가 있습니다. 그럴 때 노드 망을 다시 만들기 보다는, 망을 별도의 애니메이션 블루프린트로 나눈 뒤 Sub Anim Instance (서브 애님 인스턴스)를 사용하여 필요할 때 그 애니메이션 블루프린트에 접근하도록 할 수 있습니다.

 

애니메이션 블루프린트 링크(Animation Blueprint Linking) 시스템은 서브 애님 인스턴스의 익스텐션입니다. 이 익스텐션은 애니메이션 그래프의 서브섹션을 동적으로 전환하도록 지원하여 멀티 유저 협업 및 메모리 절감을 실현합니다. 애니메이션 블루프린트가 사용하지 않는 애니메이션 에셋을 더 이상 로드하지 않게 되기 때문입니다.

 

애니메이션 블루프린트 링크(Animation Blueprint Linking) 시스템은 애니메이션 그래프의 여러 하위 섹션이 동적으로 전환되게 합니다. 링크된 레이어 애니메이션 블루프린트(Linked Layer Animation Blueprints)를 통해 메인 애니메이션 블루프린트의 여러 곳을 오버라이드할 수 있습니다.

라이라에서 이는 플레이어가 들고 있는 무기에 따라 로코모션 행동, 애니메이션 에셋, 포즈 수정이 달라질 수 있음을 뜻합니다. 

 

서브 애님 인스턴스 사용

다른 애니메이션 블루프린트 안에서 서브 애니메이션 블루프린트 인스턴스를 사용하는 방법을 안내합니다.

docs.unrealengine.com

 

1. 애니메이션 레이어 인터페이스 애셋 : 레이어 수, 이름, 속하는 그룹, 레이어 Input 등을 정의할 수 있다.

2. 링크할 애니메이션 블루프린트에서 애니메이션 레이어 인터페이스를 추가한다.

3. 마스터 애니메이션 블루프린트에도 애니메이션 레이어 인터페이스를 추가한다.

4. 마스터 애니메이션 블루프린트에서 Input Pose 노드를 Output Pose 노드에 연결한다. (링크된 애니메이션 블루프린트 포즈를 그대로 받아서 사용)

 

디폴트(Default) 스테이트 머신이 포즈를 링크된 애니메이션 레이어를 통해 Output Pose 노드로 전달할 것입니다. 애님 클래스 레이어 링크(Link Anim Class Layers) 를 호출하면 기저 애니메이션 블루프린트가 실행됩니다.

Linked Anim Layer 노드는 인스턴스 클래스(Instance Class) 프로퍼티를 가지며 이를 사용하여 디폴트 레이어 오버라이드를 지정할 수 있습니다. 이는 로직을 다수의 애니메이션 블루프린트로 나누고 싶을 때 특히 유용합니다. 예를 들어 자주 변경되는 IK 로직이 있는 경우 이를 별도의 애니메이션 블루프린트로 옮기고 메인 애니메이션 블루프린트에서 기본으로 실행되도록 설정할 수 있습니다.

 

캐릭터의 메시 컴포넌트에서 Anim Class Layer를 Link, Unllink할 수 있다. 

  

애니메이션 레이어 및 링크된 애니메이션 블루프린트는 복잡한 캐릭터 내에서 확장성과 조직을 유지하는 데 유용할 수 있습니다. 레이어와 링크된 애니메이션 블루프린트를 사용하면 로직을 애니메이션 블루프린트 내에서 레이어로 분리하거나 아예 다른 애니메이션 블루프린트로 나누고 마스터 애니메이션 블루프린트 내에서 링크할 수 있습니다.

 

ALI_ItemAnimLayers 는 애니메이션 블루프린트에서 애니메이션을 오버라이드할 수 있는 곳을 지정하는 애님 레이어 인터페이스(Anim Layer Interface)입니다. 라이라에서 이 작업은 에임과 스켈레톤 제어를 위한 레이어뿐 아니라 로코모션 스테이트에 대해서도 수행됩니다.

 

ABP_ItemAnimLayersBase 는 모든 무기가 사용하는 링크된 레이어 애니메이션 블루프린트의 베이스입니다. 

ㄴ ALI_ItemAnimLayers 인터페이스를 상속받는다.

 

Anim Node 함수

라이라에서는 애님 노드 함수를 사용하여 스테이트별 로직을 생성한다.

애니메이션 포즈 출력 노드에서는 3가지 종류의 함수를 설정할 수 있다.

 

1. OnInitialUpdate : 노드가 처음 업데이트되기 전에 호출되는 함수

2. OnBecomeRelevant : 노드에 연관성이 생길 때 호출되는 함수 

3. OnUpdate : 노드가 업데이트될 때 호출하는 함수

 

예시로 Idle state의 최종 출력 포즈를 계산하는데 Update Idle State 함수를 OnUpdate에 등록한다.

 

State Aliases

캐릭터가 다수의 애니메이션 스테이트로 트랜지션되어야 할 수 있는데, 트랜지션 로직을 단순화(트랜지션 수 Line 수를 줄여준다.) 하는 동시에 스테이트 사이의 개별 트랜지션을 각각 제어할 수 있게 해준다.

 

디테일 패널에서 Jump State로 직접 트랜지션될 수 있는 로코모션 스테이트를 볼 수 있다.

 

상단 / 하단 바디 레이어링

블렌드 노드(Blend Nodes)는 애니메이션을 블렌딩하는 데 사용됩니다. 라이라에 사용되는 로코모션 애니메이션은 대부분 풀 바디입니다. 즉, 애니메이션이 전체 스켈레톤에서 재생되고(jog_fwd 애니메이션 등), 플레이어가 언제든지 사용할 수 있는 다양한 상단 바디 액션과 결합됩니다(무기 발사 또는 재장전 애니메이션 등).

이 작업은 AnimBP_Mannequin_Base > AnimGraph 를 연 다음 상단 바디/하단 바디 분할(Upper/Lower Body Split) 코멘트로 가서 볼 수 있는 본 별로 레이어드 블렌딩(Layered Blend Per Bone) 노드를 사용하여 수행됩니다.

 

Layered blend per bone 노드의 디테일 패널에서 블렌드와 관련된 개별 본의 가중치를 명시적으로 제어할 수 있는 블렌드 마스크를 볼 수 있다.

 

메인 애니메이션 블루프린트에서 데이터 액세스하기

ABP_ItemAnimLayersBase 애니메이션 블루프린트에는 메인 애님 블루프린트 스레드 세이프 얻기(Get Main Anim BPThreadSafe) 라는 커스텀 함수가 있습니다. 메인 애니메이션 블루프린트(AnimBP_Mannequin_Base )에 대한 레퍼런스를 얻는 데 사용되는 함수입니다.

 

이렇게 하면 프로퍼티 액세스를 사용하여 모든 데이터에 액세스할 수 있다.

 

애니메이션 선택을 위해 애님 노드 함수 사용하기

 

Linked Layer Child Animation Blueprint

라이라의 모든 무기에는 ABP_ItemAnimLayersBase 로부터 상속받는 자손 애니메이션 블루프린트가 있습니다. 애니메이터는 아래 있는 ABP_PistolAnimLayers 애니메이션 블루프린트 이미지에 보이는 것처럼 애니메이션을 삽입하고 무기별로 모든 변수를 편집할 수 있습니다.

 

디스턴스 매칭, 스트라이드 워핑, 오리엔테이션 워핑

디스턴스 매칭(Distance Matching) 은 애니메이션 에셋과 게임플레이 간에 모션을 일치시키기 어려운 경우(시작, 중지, 착지 애니메이션과 같은 로코모션 애니메이션 에셋 등)에 애니메이션의 재생 속도를 조절합니다

싱크를 맞춰 플레이어가 미끄러지는 것처럼 보이지 않게 한다.

 

Stride Warping(스트라이드 워핑)은 캐릭터가 달리기(Jog) 스테이트에 들어갈 때처럼 재생 속도로 캐릭터의 보폭을 조절할 수 없는 경우에 보폭을 동적으로 조절하기 위해 사용됩니다.

 

이 두 가지 기법을 결합하면, 한 기법을 다른 기법보다 우선하도록 동적으로 선택할 수 있습니다. start 스테이트에 먼저 디스턴스 매칭을 사용하여 포즈를 유지한 후, jog 스테이트에 가까워지면 스트라이드 워핑을 사용하여 블렌딩합니다.

 

스트라이드 워핑

오리엔테이션 워핑(Orientation Warping)은 캐릭터 움직임의 루트 모션 각도와 함께 사용하며, 캐릭터의 바디 하단을 구부려 루트 모션 각도에 일치시킵니다. 라이라에서는 네 가지 기본 방향에 대하여 횡이동 애니메이션이 생성됩니다. 플레이어가 360도로 자유롭게 움직일 수 있으므로 오리엔테이션 워핑을 사용해 캐릭터의 포즈를 프로시저럴 방식으로 조절했습니다. 애니메이션의 범위가 제한되기 때문에 이 기법은 start 스테이트에서 사용됩니다.

 

게임플레이 태그 바인딩

라이라는 대부분의 플레이어 행동에 대해 게임플레이 어빌리티 시스템(Gameplay Ability System)을 사용합니다. 애니메이션 블루프린트의 이러한 이벤트에는 게임플레이 태그(Gameplay Tag) 바인딩을 사용해 응답할 수 있습니다. AnimBP_Mannequin_Base 블루프린트 안에서 게임플레이 태그로 이동하려면 클래스 디폴트(Class Defaults) > 디테일(Details) > 게임플레이 태그(Gameplay Tags) > 게임플레이 태그 프로퍼티 맵(Gameplay Tag Property Map) 으로 갑니다.

+ Recent posts