머터리얼 인스턴스에서는 scalar, texture, vector 파라미터 값을 얻을 수 있다.
머터리얼 인스턴스 당 여러 개의 Texture parameter = 텍스처 슬롯의 이름 – 텍스처 경로 정보
텍스처 파라미터 값 얻기
레벨에 존재하는 모든 StaticMeshActor에 특정 머터리얼 인스턴스 부여하기
언리얼 Python API와 블루프린트의 유사성
레벨 블루프린트에서도 비슷한 방식으로 머터리얼을 스태틱 메시 액터에 적용할 수 있다.
파이썬 API로 진행했을때와 다른 점은 애셋을 직접 변경하지 않고 런타임에서만 확인할 수 있다는 점이다. StaticMeshComponent의 GetNumMaterials 노드를 사용하여 메시에 몇 개의 머터리얼이 사용되었는지 확인할 수 있고, 이것은 드로 콜이 많은 메시를 시각적으로 파악하는데 사용할 수 있다.
- sky Lighting과 shadow는 루멘에서 파이널 게더의 일부가 됨, 야외보다 훨씬 어두운 실내 공간을 표현할 수 있게 해줌
- 낮은 퀄리티의 일루미네이션을 반투명 및 볼류메트릭 포그에 제공한다.
- 이미시브 머터리얼은 루멘의 파이널 게더를 통해 추가 비용 없이 라이트를 전파할 수 있다.
- 간접 스페큘러나 리플렉션을 머터리얼 러프니스 값의 제한 없이 해결한다.
- 더 이상 라이트맵을 구울 필요가 없다.
- 모바일을 지원하지 않음
루멘을 사용하면 스태틱 라이팅에서 사전 연산된 라이팅이 제거된다.
사전 연산 라이팅 비활성화 : 프로젝트 세팅 > 스태틱 라이트 허용 체크 해제
- 셰이더 퍼뮤테이션(셰이더 분리)으로 스태틱 라이팅 오버헤드를 줄일 수 있다.
또한 머터리얼 앰비언트 오클루전 입력을 지원하고 머터리얼 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
소프트웨어 레이 트레이싱의 한계
스태틱 메시, 인스턴스드 스태틱 메시, 계층형 인스턴스드 스태틱 메시, 랜드스케이프만 루멘 씬에 표시될 수 있다.
대부분의 프로젝트에서 그렇듯이 라이라의 캐릭터 애니메이션은 애니메이션 블루프린트 시스템을 사용하여 만들어진다.
ABP_Mannequin_Base 블루프린트에 적혀있는 코멘트에 따르면 해당 Anim Graph는 Montage와 애니메이션 레이어의 시작점을 제공하여 혼합하여 재생할 수 있게 해준다. 이러한 접근으로 무기가 로드될 때 애니메이션을 로드하도록 할 수 있다. 예를 들어 Weapon은 필요한 Montage와 애니메이션 레이어에 대한 참조를 갖고 있기 때문에 Weapon이 로드될 때 애니메이션 데이터들이 같이 로드되도록 한다.
블루프린트 스레드 세이프 업데이트 애니메이션
최적의 퍼포먼스를 위해 라이라에서는 이벤트 그래프 대신 멀티 스레드 애니메이션을 사용하여 애니메이션 값을 계산한다.
C++를 통해 애니메이션 업데이트 방법이나 발생 시기를 제어할 수 있도록 해주면, 퍼포먼스를 향상시킬 수 있다.
많은 애니메이션 작업을 워커 스레드에서 돌릴 수 있도록 해주는 프로젝트 세팅
프로젝트 세팅 > Engine > General Settings > Anim Blueprints > Allow Multi Threaded Animation Update 체크
스레드 세이프 함수를 사용할 때는 이벤트 그래프에서와 달리 직접 데이터에 액세스할 수 없다. 대신에 Property Access를 사용하여 데이터에 접근하는 편이 낫다.
서브 애니메이션 인스턴스 / 애니메이션 레이어 / 애니메이션 블루프린트 링크
캐릭터의 애니메이션 블루프린트가 복잡해지기 시작하면서, 다른 애니메이션 블루프린트 안의 애니메이션 블루프린트 일부를 재사용하고플 수가 있습니다. 그럴 때 노드 망을 다시 만들기 보다는, 망을 별도의 애니메이션 블루프린트로 나눈 뒤Sub Anim Instance(서브 애님 인스턴스)를 사용하여 필요할 때 그 애니메이션 블루프린트에 접근하도록 할 수 있습니다.
애니메이션 블루프린트 링크(Animation Blueprint Linking)시스템은서브 애님 인스턴스의 익스텐션입니다. 이 익스텐션은 애니메이션 그래프의 서브섹션을 동적으로 전환하도록 지원하여 멀티 유저 협업 및 메모리 절감을 실현합니다. 애니메이션 블루프린트가 사용하지 않는 애니메이션 에셋을 더 이상 로드하지 않게 되기 때문입니다.
애니메이션 블루프린트 링크(Animation Blueprint Linking)시스템은 애니메이션 그래프의 여러 하위 섹션이 동적으로 전환되게 합니다. 링크된 레이어 애니메이션 블루프린트(Linked Layer Animation Blueprints)를 통해 메인 애니메이션 블루프린트의 여러 곳을 오버라이드할 수 있습니다.
라이라에서 이는 플레이어가 들고 있는 무기에 따라 로코모션 행동, 애니메이션 에셋, 포즈 수정이 달라질 수 있음을 뜻합니다.
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 수를 줄여준다.) 하는 동시에 스테이트 사이의 개별 트랜지션을 각각 제어할 수 있게 해준다.
상단 / 하단 바디 레이어링
블렌드 노드(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)으로 갑니다.