Niagara로 생성된 Static Mesh에서 파티클 스폰하기



Niagara로 생성된 Static Mesh에서 파티클 스폰하기

금별 0 17 06:29

원문 : https://heyyocg.link/en/particle-on-meshparticle/

 

 

소개

레벨에 오브젝트를 배치하면 Static Mesh Location 모듈을 사용해 Static Mesh에서 파티클을 쉽게 스폰할 수 있습니다.

그러나 나이아가라 내부에서 완전히 제어되는 스태틱 메시를 따라 스파크나 파티클을 생성하고 싶은 경우가 많습니다—예를 들어 슬래시나 나선형과 같은 경우입니다. 그런 경우에는 파티클 위치를 수동으로 조정하여 대략 올바르게 보이도록 할 수 있지만, 슬래시 방향이나 스케일을 변경할 때마다 재조정이 필요합니다. 나선형 같은 복잡한 메시의 경우 수동 조정은 빠르게 비현실적이 됩니다.

> Niagara에서 출력하는 메시에서 파티클을 내는 슬래시나 헬릭스 등에 편리하며, 크기나 위치, 회전이 바뀌어도 자동으로 추종하는 파티클이 나오고 메시 위의 범위를 애니메이션할 수 있게도 해나갑니다! 

이 문서에서 소개된 방법은 메시의 위치나 스케일이 변경되더라도 파티클이 메시에서 자동으로 생성되도록 합니다.

또한, 위 비디오에서 보여준 것처럼, 다음도 설명하겠습니다:

메시에 맞춰 정렬된 속도를 파티클에 부여하는 방법

소스 메시의 UV를 사용해 슬래시나 헬릭스의 특정 영역에서만 파티클을 생성하는 방법

 

 

 

환경

UE5.5.4

1. UseStatic Mesh Location을 사용하여 대상 Static Mesh에서 파티클을 생성하세요

2. UseParticle Attribute Reader를 사용하여 메쉬 파티클에서 위치, 스케일, 회전 데이터를 가져옵니다.

3. 검색된 데이터를 사용하여 파티클 생성 위치를 조정하세요

4. 소스 메시의 형태를 따라 파티클 방출

5. 소스 메시의 UV를 사용해 파티클 생성 위치 필터링

간단한 예제를 사용해 이러한 단계를 살펴보겠습니다.

연습

0. 준비

먼저, 단일 메시를 생성하는 에미터를 만듭니다.베타 공격 효과에 흔히 사용되는 메시를 사용하겠습니다.

Mesh Renderer에 이 메쉬를 설정하고, Spawn Burst Instantaneous를 사용해 하나의 파티클을 생성하세요. 이 에미터의 이름을 Mesh로 지정하세요.

다음으로, 메시에서 생성되는 파티클을 위한 또 다른 이미터를 생성하세요. Add 미니멀 Emitter를 사용하여 추가하고, 다음을 설정하세요:

- 생성 속도: 100

- 스프라이트 크기: 3

이 이미터를 Particle로 이름 지으세요.

설정이 완료되었습니다.

1. 정적 메시 위치로 파티클 생성하기

ParticleEmitter에서 Static Mesh Location을 추가하고, Default Mesh를 MeshEmitter가 생성한 slash mesh로 설정하세요.

이번 경우 소스 메시가 변경되지 않으므로 Source Mode를 Default Mesh Only로 설정하세요. 기본 설정으로 두면 이 Niagara System을 다른 Static Mesh에 부착할 때 파티클 소스 메시가 부모 메시로 변경됩니다—이를 방지합니다.

명확성을 위해 파티클 머티리얼을 Particle Color만 반사하는 간단한 Unlit Translucent 머티리얼로 설정하고, 색상을 빨간색으로 설정하세요.

이제 파티클이 슬래시 메시의 표면 전체에 무작위로 생성됩니다.

그러나 메쉬 파티클의 스케일, 위치 또는 회전을 수정하면, Static Mesh Location을 통해 생성된 파티클은 여전히 기본 메쉬 변환을 기반으로 하게 됩니다—이로 인해 눈에 띄는 오프셋이 발생합니다.

우리의 목표는 파티클 스폰 위치가 메쉬 파티클의 스케일, 위치, 회전 변화에 자동으로 따라가도록 만드는 것입니다.

2. 파티클 속성 리더로 메시 위치, 스케일, 회전 가져오기

다른 에미터가 제어하는 파티클 데이터를 액세스하기 위해 Particle Attribute Reader를 사용합니다.

이 내용은 이전 글에서 다루었습니다. 이에 익숙하지 않다면 먼저 이 글을 읽어 주세요:

먼저, Emitter Attribute로 Particle Attribute Reader를 생성하세요.

이를 Emitter Spawn에 추가하고, Emitter Binding을 읽어올 에미터의 이름으로 설정하세요—in this case, Mesh.

다음으로, Particle Spawn에서 Scratch Pad Module을 생성하고 ApplyMeshTransform이라고 이름을 지정하세요. 이 모듈 내부에서 메쉬의 위치, 스케일, 회전을 가져와 파티클 위치에 적용하겠습니다.

파티클 속성 리더 입력을 ToMap Getnode에 추가하세요.

우리는 다음 속성을 원합니다:

- 위치:위치(위치 타입)

- Scale:Scale(Vector3 type)

- Rotation:MeshOrientation(Quaternion type)

각각에 대해 해당하는 Get <Type> by Index 노드를 추가하고, 속성 이름을 이에 맞게 설정하세요.

메시 이미터가 Spawn Burst Instantaneous를 통해 단 하나의 파티클만 생성하므로, its Particle Index는 0입니다.

파티클 인덱스는 실행 인덱스에 해당하며, 이는 0부터 순차적으로 할당됩니다. 하나의 메시 파티클만 존재하기 때문에, 그 실행 인덱스는 0입니다.

이를 통해 메쉬의 위치, 스케일, 회전을 가져올 수 있습니다.

3. 검색된 데이터를 사용한 파티클 생성 위치 조정

위치, 스케일, 회전은 함께 일반적으로 Transform이라고 불립니다. 레벨에서 오브젝트를 선택할 때 Details 패널에 표시되는 Transform 값에서 이를 확인할 수 있습니다.

파티클 위치에 이 변환을 적용하기 위해, 우리는 Apply Local Transform을 사용합니다.

원래 파티클 위치를 InputVector에 연결하세요.

- Set:Position → TranslateScale → ScaleMeshOrientation → Rotate

이것은 메쉬 변환을 적용하여 파티클 위치를 변환합니다.

ForInputVector의 경우, 파티클의 원래 Position(을 Map Get을 통해)을 사용하세요. Position에서 Vector로의 변환 노드가 자동으로 생성되지만, 이는 대형 월드 지원을 위한 것이며 여기서는 무시해도 됩니다.

마지막으로, useMap Set을 사용하여 출력을 Position에 다시 기록하세요.

스크래치 패드 모듈에서 Particle Attribute Reader 입력을 할당하는 것을 잊지 마세요.

이 시점에서 두 가지 중요한 고려사항이 있습니다.

### 메모 ①: 로컬 스페이스 사용

스케일과 회전은 피벗 위치에 크게 의존하기 때문에, 메시와 파티클 이미터 모두 Local Space를 사용해야 하며, Niagara System의 위치를 피벗으로 사용해야 합니다.

두 에미터 모두의 Emitter Properties에서 EnableLocal Space를 활성화하세요.

### Note ②: 스케일을 적절히 설정하세요

메시 파티클의 Mesh Scale Mode가 Unset으로 설정되어 있더라도, 메시가 시각적으로 스케일 1로 나타나지만 Particle Attribute Reader는 올바른 스케일 값을 가져오지 않습니다.

스케일을 명시적으로 설정하세요.

설정되면, 파티클은 메시 표면의 위치, 스케일 또는 회전이 변경되어도 올바르게 메시 표면에 스폰됩니다.

이로써 Niagara에서 생성된 Static Mesh로부터 파티클을 스폰하는 기본 설정이 완료됩니다.

4. 메시 형태를 따라 파티클 방출하기

이제 몇 가지 실용적인 확장을 살펴보겠습니다.

먼저, 메시의 형태를 따라 파티클을 방출하는 방법입니다. 슬래시 이펙트의 경우, 파티클이 모션 트레일의 반대 방향으로 날아가거나 슬래시 방향으로 날아가게 할 수 있습니다. 이 방법이 그에 이상적입니다.

여기서는 메시의 UV 방향을 사용하는 것이 잘 작동합니다.

위의 슬래시 예제에서, 두 방향을 따라 속도를 적용합니다:

- 빨간색 방향 = V 방향

- Blue 방향 = U 방향

이제 단계별로 구현해 보겠습니다.

먼저 메시에 UV 체크어를 표시하세요. 빨간 화살표는 V 방향을, 파란 화살표는 U 방향을 나타냅니다.

UV 방향을 어떻게 가져오는지 궁금할 수 있지만—Static Mesh Location이 이미 이를 제공합니다.

Static Mesh Location을 사용할 때 다음 속성들이 자동으로 생성됩니다:

SampledTangent → U 방향

SampledBitangent → V 방향

이미터가 Local Space에 있을 때, 이 벡터들은 로컬 스페이스에서 메시의 UV 방향을 나타냅니다.

그러나 Position과 마찬가지로, 이러한 벡터들도 메시 파티클의 transform을 사용해 변환해야 합니다. 따라서 이를 insideApplyMeshTransform 내부에서 처리하겠습니다.

Map Get에 Tangent와 Bitangent 벡터 입력을 추가하고, Position과 마찬가지로 Apply Local Transform을 적용하세요.

출력을 새로운 파티클 속성에 저장하세요:

### MeshTangent
메시 탄젠트(MeshTangent)는 3D 메시의 버텍스에 저장되는 탄젠트 벡터를 나타내는 데이터 구조입니다. 주로 노멀 매핑(Normal Mapping)과 같은 범프 맵핑(Bump Mapping) 기법에서 사용되며, 텍스처 공간의 접선(Tangent) 방향을 정의합니다.
#### 구조 및 구성 요소
```
struct MeshTangent {
float3 tangent; // 단위 탄젠트 벡터 (UV 방향에 수직)
float w; // 핸디드니스(Handedness): +1(오른손), -1(왼손) 또는 바이탄젠트 방향 정보
};
```
- tangent (float3): 메시 표면의 UV 좌표계에서 U 방향을 가리키는 단위 벡터입니다. 버텍스 노멀에 수직입니다.
- w (float): 바이탄젠트(Bi-tangent) 방향을 결정하는 스칼라 값입니다.
- 양수: 오른손 좌표계 (바이탄젠트 = cross(normal, tangent))
- 음수: 왼손 좌표계 (바이탄젠트 = -cross(normal, tangent))
#### 계산 방법
메시 탄젠트는 일반적으로 MikkTSpace 알고리즘을 사용해 자동 생성됩니다. 이는 UV 언랩과 버텍스 위치를 기반으로 일관된 탄젠트 공간을 계산합니다.
```hlsl
// 셰이더에서 TBN 매트릭스 구성
float3 T = normalize(input.tangent.xyz);
float3 B = normalize(cross(input.normal, T) input.tangent.w);
float3 N = normalize(input.normal);
float3x3 TBN = float3x3(T, B, N);
```
#### 용도
- 노멀 맵 샘플링: 텍스처 공간에서 조명 계산을 위해 필수적입니다.
- 파라락스 맵핑(Parallax Mapping): 깊이 효과를 위한 뷰 방향 변환.
- 애니메이션: 스킨드 메시에서 탄젠트 블렌딩으로 디포메이션 유지.
#### 주의사항
- UV 시임(Seam)에서 불연속 발생 시 아티팩트 발생 가능 → MikkT 호환성 확인.
- 오버드로 최적화: 탄젠트 데이터는 버텍스 버퍼에 압축 저장 권장.
- 매 프레임 업데이트: 동적 메시 변형 시 재계산 필요.

메시 비탄젠트

로컬 속성을 파티클 속성으로 변환하려면, Map Set에서 연결한 후 오른쪽 클릭하여 Change Namespace → Particle을 선택하세요.

Tangent와 Bitangent 입력을 다음으로 설정하세요:

샘플링된탄젠트

샘플링된 비탄젠트

이제 메쉬의 트랜스폼을 올바르게 따르는 UV 방향이 있습니다.

이들을 속도로 사용하려면:

속도 추가

속도(Velocity)를 메시 탄젠트(MeshTangent)에 설정

속도 조정 속도 스케일

파티클이 이제 메시의 U 방향을 따라 날아갑니다.

MeshBitangent를 사용하는 대신 사용하면 파티클을 V 방향을 따라 보냅니다.

두 개의 Add Velocity 모듈을 결합하고 속도 스케일을 조정하면, 메시 형태를 따라 파티클 움직임을 자유롭게 제어할 수 있습니다.

5. UV를 사용한 파티클 생성 위치 필터링

다음은 또 다른 매우 실용적인 기술입니다: 메시의 UV를 사용해 파티클 생성 위치를 필터링하는 방법.

슬래시 이펙트에서 메쉬의 일부만 보이는 트레일을 나타내는 경우가 일반적입니다. 파티클이 전체 메쉬에서 생성되면 보이지 않는 영역에 나타나서 부자연스럽게 보입니다.

메시에 직접 스폰 위치를 제한하는 대신 (이는 특별한 메시 설정이 필요함), 우리는 대신:

전체 메시 위에 파티클 생성

지정된 범위를 벗어나는 UV를 가진 파티클을 즉시 제거

이는 일반적인 기법으로, 파티클 디졸브에도 사용됩니다.

또 다른 Scratch Pad 모듈을 생성하고 FilterByUV라고 이름을 지정하세요.

슬래시가 V 방향을 따라 흐르기 때문에 V를 사용해 필터링하겠습니다 (U에 대해서도 동일한 로직이 적용됩니다).

모듈 내부:

맵 가져오기 입력 추가:MeshUV(Vector2)V Threshold Min(float)V Threshold Max(float)

파티클의 `Alive` 속성이 `True`인 경우만 다음 로직을 설정하세요:

V Threshold Min < MeshUV.y < V Threshold Max

IfAlive가 False가 되면, 해당 프레임에서 파티클이 제거됩니다.

Static Mesh Location에서 자동으로 제공되는 SetMeshUVtoSampledUV입니다.

AnimateV Threshold Min과 V Threshold Max를 슬래시 모션에 맞게 애니메이션화하세요.이 예에서 슬래시는 V = 1에서 V = 0으로 이동하므로, 두 임계값 모두 1에서 0으로 애니메이션되며, Max는 가시 범위를 정의하기 위해 약간 지연됩니다.

중요 참고 사항: Curve Index는 슬래시의 정규화된 나이(normalized age)를 사용해야 합니다. defaultNormalizedAge는 파티클 자신의 수명을 가리키며, 여기에는 적합하지 않습니다.

슬래시 수명이 시스템 수명(1초)과 일치하므로, System 속성에서 useNormalizedLoopAge를 사용합니다.

수명이 다르면, 커브 타이밍이나 CurveIndex 값을 이에 맞게 조정해야 합니다.

마지막으로, 많은 파티클이 죽을 것이므로 Spawn Rate를 200으로 증가시키세요.

이 설정으로 파티클이 보이는 슬래시 궤적을 따라 깨끗하게 스폰됩니다.

결론

Niagara에서 생성된 Static Meshes에서 파티클을 스폰하는 기능은 이 두 가지 추가 기법과 결합하면 매우 다재다능해집니다.

이 접근 방식은 Scratch Pad Modules와 약간 더 고급 Niagara 기능을 사용하지만, 직접 해보면 생각만큼 어렵지 않다는 것을 알게 되기를 바랍니다.

탄젠트의 더 자세한 분해와 그 밑바탕 이론 같은 더 깊은 설명에 관심이 있으시다면, 제 코스에서 광범위하게 다루고 있습니다:

고급 Niagara & 머티리얼 VFX 메커니즘 완벽 마스터하기

다시 한 번, 제 결론은 언제나 똑같습니다: Niagara는 놀랍습니다—그걸로 정말 많은 걸 할 수 있어요.

 

 

 

 

 

에반 언리얼5 이펙트 그룹과정[26년초 시작] : https://cafe.naver.com/unrealfx/20727

KUPAFX Stylized 유니티 이펙트 취업과정 : https://cafe.naver.com/unrealfx/21249

트리키 언리얼+후디니 활용 게임 VFX 연출과정 : https://cafe.naver.com/unrealfx/25629

 

max님의 쌩기초 메쉬활용 이펙트과정 1달특강 : https://cafe.naver.com/unrealfx/24469

eVan텍스쳐 단품과정 : https://cafe.naver.com/unrealfx/24468

rak 유니티 UI연출이펙트 : https://gamefx.co.kr/bbs/page.php?hid=Rak_intro

Comments


번호 포토 분류 제목 글쓴이 날짜 조회
1291 언리얼4 언리얼 - 나이아가라 Advanced Guide – 위치 기반 동역학 금별 06:37 23
열람중 언리얼4 Niagara로 생성된 Static Mesh에서 파티클 스폰하기 금별 06:29 18
1289 언리얼4 언리얼 - 나이아가라로 스플라인을 따라 발사되는 파티클 제작 금별 05:51 18
1288 언리얼4 언리얼5 - 어검술의 완성 : 검진(Sword Array) 심화 기동 및 고급 제어(한글자막) 금별 02:32 24
1287 언리얼4 언리얼5 - 벡터 연산을 활용한 검진(Sword Array) 지정 방향 발사 로직(한글자막) 금별 02:32 16
1286 언리얼4 언리얼5 - Particle Reader를 활용한 검진(Sword Array) 타겟 추적 및 회전 제어(한글자막) 금별 02:31 16
1285 언리얼4 언리얼5 - 파티클 Index를 활용한 원형 검진(Sword Array) 배치 제작과정(한글자막) 금별 02:30 19
1284 언리얼4 언리얼5 - VHS 포스트 프로세스 제작과정 금별 02:10 18
1283 언리얼4 언리얼5 - 데드 스페이스 VFX reborn[팬메이드] 금별 02:07 19
1282 언리얼4 Simple Light Aura VFX in UE5 Niagara Tutorial ✨????️???? ashif 01.08 18
1281 언리얼4 Heat Distortion VFX for Fire in UE5 Niagara! (Photoshop & Normal Map Workflow) ????????✨ ashif 2025.12.16 182
1280 2D 섭스턴스 디자인 - 색수차(Chromatic Aberration) 매직 오라 텍스처 만들기(한글자막) 금별 2025.12.16 211
1279 언리얼4 언리얼 - 미호요 신작 스타일 Depth Fade와 UV 조작을 이용한 공간 포털 연출(한글자막) 금별 2025.12.16 295
1278 언리얼4 언리얼5 - Polar Coordinates를 활용한 태극 무늬 제작 금별 2025.12.16 165
1277 언리얼4 언리얼 - AAA 게임 개발에서의 나이아가라 모듈(Niagara Module) 연구 및 적용 금별 2025.12.16 191
1276 유니티 유니티 - 유니티 스플라인 카메라 무브먼트 예제(워프 효과 연출) 금별 2025.12.16 154
1275 언리얼4 언리얼 - 간단한 스타일라이즈드 불효과 제작과정팁 금별 2025.12.16 156
1274 언리얼4 Simple Stylized Tornado VFX in UE5 Niagara! (Torus Mesh, Erode & Dynamic Params) ????️????✨ ashif 2025.12.15 125
1273 2D 섭스턴스 디자인 - 움푹 파인 바닥 절차적 제작과정(한글자막) 금별 2025.12.10 164
1272 언리얼4 언리얼 - Stylized 파도/물보라 제작과정 part3(한글자막) 금별 2025.12.10 171
1271 언리얼4 언리얼 - Stylized 파도/물보라 제작과정 part2(한글자막) 금별 2025.12.10 121
1270 언리얼4 언리얼 - Stylized 파도/물보라 제작과정 part1(한글자막) 금별 2025.12.10 138

 

Banner
 
Facebook Twitter GooglePlus KakaoStory NaverBand