이제 적이 죽었을 때 사라지는 효과를 만드려고 한다. 프로젝트의 테마가 사이버펑크·가상현실이었기에 적이 나타날 때와 사라질 때 입자로 변해서 나타나는 연출을 하고 싶었다.
그때 같은 팀원이 스탠다드 2반에서 배웠다며 보여준 방식이 눈길을 끌었다. 알아보니 dissolve라고 했다. 이에 관해 조사해서 나름 그럴듯한 결과물을 만들 수 있었다. 좀 더 홀로그램같은 느낌으로 연출할 수 있었으면 좋았겠지만, 일단은 이정도면 만족스럽다.
'머티리얼로 이런 것도 돼?' 하고 머티리얼과 나이아가라 시스템에 흥미가 생긴 부분이기도 하다.
썸네일과 같은 효과를 주기 위해선 세 가지 세팅이 필요하다.
1. 해당 효과를 적용할 머티리얼에 적절한 노드를 추가해준다. (주로 Opacity Mask 노드를 사용)
2. 나이아가라 시스템으로 스켈레탈 메시의 표면을 따라 파티클이 생성되도록 한다.
3. 머티리얼을 다이나믹 머티리얼 인스턴스를 생성 후, 원하는 시점에 머티리얼과 나이아가라의 파라미터를 보간 변경한다.
적 캐릭터의 스켈레탈 메시의 머티리얼을 확인한다.
Manny
의 머티리얼은 2가지인데, 계속해서 머티리얼 인스턴스가 아닌 머티리얼이 나올 때가지 타고 올라가보면 하나의 머티리얼에서 나왔다는 것을 알 수 있다.
머티리얼을 열어보면 여러 핀이 나오는데, 그 중 연결해야 할 것은 Opacity Mask
다. 이름 그대로 불투명 마스크다.
위와 같이 핀을 작성해준다.
TextureSampleParameter2D
노드를 만들고, 디테일 패널에서 Texture를 지정해줘야 한다. 이 텍스쳐가 맨 위의 GIF와 같이 사라질 때의 사라지는 패턴의 모양이다. (검은 부분, 흰 부분의 비율이 비슷할 수록 좋다.)s
누른 상태로 좌클 혹은 우클릭 후 Scalar Parameter
를 선택하여 노드를 배치한다. 이름은 Amount
라고 지정하는데, 이 이름을 캐릭터의 이벤트그래프에서 사용하게 된다. (Set Scalar Parameter Value
노드)if
노드를 위처럼 연결해주고, 노드의 출력핀을 Opacity Mask
에 연결한다.Particle Spawn
에서 +
버튼을 눌러 Sample Skeletal Mesh
검색하여 생성Surface
로 바꿔주면 캐릭터의 표면을 따라 파티클이 생성된다.Texture
검색)Sample Skeletal Mesh
의 SampledUV
를 지정해준다.Apply Sampled RGBA to Particle Color
체크 해제.스크래치 모듈은 나이아가라 시스템에서 강력한 커스텀 기능을 제공하는 모듈이다. (이름부터 메모장을 뜻하는 'Scratchpad'가 연상된다.) 스크래치 모듈을 만들어 머티리얼에 설정한 것과 동일하게 마스크가 동작하도록 할 것이다.
Map Get
노드 하나만 있을 것이다.float
로 검색하여 4개 추가하고, 핀의 이름을 아래와 같이 설정한다.select / if
노드는 약간의 과정이 필요하다.
우클릭하여
select / if
노드를 생성하면 초기엔 노드의 모양이 많이 다르다. 아래 사진처럼 핀이 하나밖에 없는데, 오른쪽 연필 모양 버튼을 눌러Static bool
타입으로 핀을 바꿔준다.이후 바뀐 노드 옆에
float
노드를 하나 생성하여 핀을 아무 곳에나 연결해준다. 그리하면Select
노드의 핀들이NiagaraFloat
핀들로 바뀌게 된다.
필요없어진
float
노드는 삭제한다.
Map Set
노드에 float 핀을 추가한다. 이름을 Kill
로 바꾸고 우클릭하여 namespace
를 PARTICLES
로 설정한다.select
노드의 출력핀을 연결해준다.Map Get
노드에서 추가했던 float핀들을 확인할 수 있다.SampledR
을 검색해 Texture
까지 끌어서 연결해준다.Amount
를 만들어 Mask
에 연결한다. 이후 이 Amount
값을 1~0까지 조절해보면 마스크 범위가 달라지는 것을 확인할 수 있다.Kill Particles
모듈을 추가해 스크래치 모듈의 Map Set
에서 추가했던 Kill
을 연결해주고 비교 타입은 Equal로 설정한다.Gravity Force
모듈만 붙여주었다. 하나는 아래로, 하나는 위로 향하게 하면 만들어진 입자가 위아래로 향하는 모습을 보여줄 수 있다.이제 이벤트그래프 혹은 C++에서 머티리얼과 나이아가라 시스템의 변수값을 변화하도록 만들어야 한다. 머티리얼에 만들었던 스칼라 파라미터와 나이아가라 시스템에 만든 유저 변수를 게임 중 특정 상황에 동적으로 변경하게 된다.
BeginPlay()
에 연결된 노드이다. 게임이 시작되면 적 캐릭터는 동적 머티리얼 인스턴스를 2개 생성한다. 타겟이 되는 Mesh
는 현재 캐릭터의 스켈레탈 메시이고, 기반이 되는 머티리얼은 스켈레탈 메시에서 Get material
노드를 사용한다. 이때 인덱스는 아래와 같이 설정해야 한다.Amount
를 Set Niagara Variable
노드로 보간 수정 할 것이다.Timeline
을 만들고, 트랙을 추가한다. 트랙의 길이는 5초이며 상황에 따라(On Dead
와 On Spawn
) 0에서 1로 증가할 지, 1에서 0으로 감소할 지가 정해진다.
Set Scalar Parameter Value
로 앞에서 생성한 동적 머티리얼 인스턴스의 스칼라 파라미터 Amount
를 0에서 1로 선형 보간한다.
Set Niagara Variable (float)
로 나이아가라 컴포넌트에 지정된 에셋(위에서 작성한)의 유저 파라미터 Amount
를 0에서 1로 선형 보간한다.
이렇게 하면 아래와 같이 생성될 때의 효과를 줄 수 있고, 보간 방향을 뒤집어 1에서 0으로 가도록 만들면 썸네일처럼 소멸될 때의 효과를 줄 수 있다.