※ 'Today, I Learned'에서 하나의 개념을 온전히 다루려고 하다 보니 기록하기가 힘들다. 앞으로는 하나의 개념을 설명하는 게 아니라, 하나의 이슈를 해결하는 걸 기준으로 기록하려고 한다.
문제 상황
레이저 무기를 구현하고 싶었다. 단순히 피격 대상 감지 후 데미지를 부여하는 것만이라면 Linetrace와 Apply Damage 만으로도 가능했겠지만, 레이저 효과를 화면에 표현하기 위해서는 나이아가라 시스템에 대해 알 필요가 있었다.
언리얼 공식 문서의 간단한 레이저 예제를 찾아보고 이를 구현하던 도중에 레이저가 Linetrace Impact Point까지 그려지게 하기 위해선 해당 location의 vector 값을 외부로부터 읽어올 필요가 있었다.
이에 나이아가라 시스템에서 외부 데이터를 변수로 입력 받는 방법에 대해서 알아봤다.
기능 이해와 테스트
가장 먼저 나이아가라에 대해 간단하게만 살펴보도록 하자. 나이아가라 VFX 시스템은 언리얼 엔진에서 비주얼 이펙트(VFX) 작업을 할 때 주로 사용하는 툴이다.
나이아가라 VFX 시스템에는 크게 3개의 구성 요소가 있는데 이는 다음과 같다.
- System
이펙트 빌드에 필요한 모든 요소가 담긴 컨테이너다. 시스템에서 (Module 같은) 다양한 빌딩 블록을 쌓아 전체적인 이펙트를 구성할 수 있다. - Emitter
나이아가라 시스템에서 직접적으로 파티클(시각적 효과를 구성하는 개별적인 요소)을 생성하는 곳이다. Emitter는 파티클의 생성 방식, 시간 경과에 따라 파티클에서 발생하는 현상, 파티클의 외관 및 행동 등을 제어한다. - Module
나이아가라 내 이펙트의 기본 빌딩 블록이다. 그룹에 Module을 추가하여 스택을 만들 수 있고, 이렇게 만들어진 스택은 위에서 아래로 순차적으로 처리된다.
Module은 공통 데이터와 통신하고 동작을 캡슐화하며 다른 모듈과 중첩되는 방식으로 동작한다. (이펙트의 구현을 목표로 하는 객체 지향 시스템 내의 하나의 객체라고 보면 될 것 같다.)
예를 들어, 파이어볼 이펙트를 제작한다고 해보자. 그럼 System에서는 이펙트의 지속 시간, 시작 지점 등 이펙트 전체에 적용되는 설정을 정의한다. Emitter에서는 Module을 조합하여 파티클의 크기, 색상, 속도 등을 정의함으로써 화염 파티클과 연기 파티클을 생성할 수 있다. 이런 식으로 파이어볼 이펙트를 제작할 수 있다.
그럼, 이런 나이아가라 시스템에 외부 데이터를 입력 받으려면 어떻게 해야 될까? 내가 찾은 방법은 다음과 같다.
- [나이아가라 시스템] Scratch Pad를 열어서 새로운 Scratch Dynamic Input을 생성한다.
- Map Get으로 필요한 외부 데이터 타입 핀을 설정한다.
- 외부 데이터가 필요한 곳에서 Scratch Dynamic Input을 참조하도록 설정한다.
- Read from new User parameter로 User parameter를 설정한다.
- [외부 블루프린트] 나이아가라 시스템을 사용하는 블루프린트에서 Set Niagara Variable로 데이터를 넘겨준다.
결과는 아래에서 확인할 수 있다.
결과
아래와 같이 Hit Actor가 있는 경우 Impact Point가 레이저의 도착점이 됨을 확인할 수 있다.
배운 점
- TIL에 모든 개념을 넣으려고 하지 말자.
- 특정 변수를 참조하는 로직이 있는 경우, 해당 변수가 초기화 및 갱신되는 시점을 잘 고려하자.
더 알아볼 것들
- 좋은 TIL을 작성하는 방법.
참고 링크
'개발 > 언리얼' 카테고리의 다른 글
언리얼 엔진으로의 원신 모델링 적용 기록 (실패) (2) | 2024.06.08 |
---|---|
[Blueprint] VR 환경에서 HUD를 구성하는 방법 (1) | 2024.01.16 |
[Blueprint] Linetrace (0) | 2024.01.09 |
[Blueprint] Timeline (0) | 2024.01.03 |
[Blueprint] Enhanced Input Action (0) | 2023.12.30 |