기본 수학 함수와 벡터 연산
산술·삼각·클램프 함수와 벡터 생성·분해·정규화·내적·외적을 조합해 위치와 속도 변화를 계산합니다.
나이아가라 스크립트의 기본 개념을 확인했으므로, 이번 절에서는 파티클 움직임과 속성 변화를 계산하는 기본 수학 함수와 벡터 연산을 다룹니다.
위치, 속도, 색상, 크기 같은 속성은 숫자로 표현되며, 이 값을 연산해 파티클 변화를 제어합니다.
나이아가라의 스크립트 에디터는 다양한 수학 노드와 벡터 연산 노드를 제공하여, 코딩 없이도 복잡한 계산을 시각적으로 구현할 수 있게 해줍니다.
Niagara의 수학 노드는 값을 계산하는 데서 끝나지 않고 색, 속도, 방향, 크기 같은 파티클 속성으로 이어진다.
- ScalarAdd / Multiply
Scalar 값을 늘리거나 줄여 크기, 속도, 밝기 같은 기본 변화를 만든다.
- WaveSine / Cosine
Wave 반복 진동을 만들어 흔들림, 깜박임, 원형 움직임에 사용한다.
- LimitClamp / Min / Max
Limit 계산 결과가 너무 커지거나 작아지지 않도록 범위를 제한한다.
- VectorLength / Normalize
Vector 방향과 거리를 분리해 이동 방향, 표면 반응, 분산을 제어한다.
기본 수학 함수 (Basic Math Functions)
단일 숫자(Float, Int) 값에 적용되는 기본적인 수학 연산입니다.
덧셈, 뺄셈, 곱셈, 나눗셈 (Add, Subtract, Multiply, Divide)
가장 기본적인 사칙연산 노드입니다.
- 사용법: 두 개의 입력 핀을 받아 연산을 수행하고 결과를 출력합니다.
-
예시
Particles.Lifetime에Multiply노드를 사용하여 파티클의 수명을 두 배로 늘립니다.Particles.SpriteSize에Add노드를 사용하여 모든 파티클의 크기를 일정량 증가시킵니다.
사인, 코사인, 탄젠트 (Sine, Cosine, Tangent)
주로 주기적인 움직임이나 파동 효과를 만들 때 사용되는 삼각 함수입니다.
- 사용법: 단일
Float입력(라디안 값)을 받아 해당 함수의 값을 출력합니다. -
예시
Sine노드에Particles.NormalizedAge(정규화된 수명)를 곱하고, 그 결과를 파티클의 X 위치에 더하여 파티클이 좌우로 흔들리며 날아가게 합니다.- 불꽃이 위로 솟아오르면서 좌우로 흔들리는
Add Velocity효과를 만들 때.
절대값 (Abs)
숫자의 부호를 제거하고 항상 양수로 만드는 함수입니다.
- 사용법: 단일
Float또는Vector입력을 받습니다. - 예시: 파티클의 속도 중 한 축이 음수가 될 때 (예: 아래로 떨어질 때),
Abs를 적용하여 속도의 크기만 사용하고 싶을 때.
거듭제곱, 제곱근 (Power, Sqrt)
Power는 입력 값을 지정된 횟수만큼 곱하고, Sqrt는 입력 값의 제곱근을 계산합니다.
- 사용법:
Power는 두 개의Float입력을,Sqrt는 단일Float입력을 받습니다. -
예시
- 파티클의 밝기를 수명에 따라 비선형적으로 변화시킬 때
Power를 사용할 수 있습니다. - 파티클의 밀도를 계산하는 복잡한 수식에서
Sqrt가 사용될 수 있습니다.
- 파티클의 밝기를 수명에 따라 비선형적으로 변화시킬 때
최소, 최대 (Min, Max)
두 개의 입력 중 더 작거나 큰 값을 선택합니다.
- 사용법: 두 개의
Float입력을 받아 비교합니다. - 예시: 파티클의 속도가 특정 값 이상으로 빨라지지 않도록 제한할 때
Min을 사용할 수 있습니다.
클램프 (Clamp)
값을 특정 최소값과 최대값 사이에 강제로 유지시킵니다.
- 사용법:
Value,Min,Max세 개의 입력을 받습니다. - 예시: 파티클의 색상 값이 특정 범위(0~1)를 벗어나지 않도록 할 때, 또는 파티클의 크기가 너무 커지거나 작아지지 않도록 할 때 유용합니다.
벡터 연산 (Vector Operations)
Make, Split, Length, Normalize, Dot/Cross는 수학 장식이 아니라 파티클 동작을 만드는 선택지다.
| 노드 계열 | 하는 일 | 주요 사용 | 결과 확인 |
|---|---|---|---|
| Make/Split | 성분을 합치거나 분리 | 좌표, 색, 커스텀 값 구성 | X/Y/Z 또는 RGBA가 의도와 맞는가 |
| Add/Multiply | 위치 오프셋과 힘 스케일 조정 | 흔들림, 속도 증폭, 색 강도 | 값이 과하게 누적되지 않는가 |
| Length | 크기와 거리 계산 | 속도 크기, 중심 거리 판정 | 단위와 비교 기준이 맞는가 |
| Normalize | 방향만 남기고 길이를 1로 만듦 | 일정 방향 힘, 표면 노멀 | 0 벡터 처리 기준이 있는가 |
| Dot/Cross | 각도 관계와 회전축 판단 | 방향성 분기, 회전 효과 | 좌표계와 축 방향이 맞는가 |
위치, 속도, 색상 등은 2차원 또는 3차원 벡터(Vector)로 표현됩니다.
벡터 연산은 이러한 벡터 값들을 다루는 수학입니다.
벡터 연산은 목적에 맞는 노드 조합을 고르는 순간 활용도가 크게 올라갑니다.
아래 시각자료는 입력 신호를 어떤 연산으로 처리해 최종 파티클 속성으로 연결하는지 요약합니다.
벡터 생성 (Make Vector, Make Vector2, Make Vector4)
개별 Float 값을 합쳐 Vector를 생성합니다.
- 사용법: X, Y, Z (또는 W) 입력 핀에
Float값을 연결하여 하나의Vector값을 만듭니다. - 예시:
Add Velocity모듈에서 파티클에 원하는 방향과 크기의 속도를 부여하기 위해 X, Y, Z 값을 각각 조절할 때 사용합니다.
벡터 분해 (Split Vector, Split Vector2, Split Vector4)
Vector를 개별 Float 값으로 분해합니다.
- 사용법: 하나의
Vector입력을 받아 X, Y, Z (또는 W) 출력 핀으로 분리합니다. - 예시: 파티클의
Position에서 X 값만 가져와 특정 계산에 사용하고 싶을 때.
벡터 덧셈, 뺄셈, 곱셈, 나눗셈 (Vector Add, Subtract, Multiply, Divide)
벡터와 벡터, 또는 벡터와 Float 간의 사칙연산입니다.
각 컴포넌트(X, Y, Z)별로 연산이 수행됩니다.
-
사용법
- 벡터 + 벡터: 두 벡터의 각 컴포넌트끼리 더합니다. (예:
Particles.Position+Particles.Velocity*System.DeltaTime으로 다음 프레임 위치 계산) - 벡터 * Float: 벡터의 모든 컴포넌트에
Float값을 곱합니다. (예: 파티클의Velocity에0.5를 곱하여 속도를 절반으로 줄일 때)
- 벡터 + 벡터: 두 벡터의 각 컴포넌트끼리 더합니다. (예:
-
예시
Add Velocity모듈에서Particles.Velocity에Gravity Force의 힘을 더하여 최종 속도를 계산할 때.- 파티클의
Color벡터에Float값을 곱하여 색상의 밝기를 조절할 때.
벡터 길이 (Vector Length)
벡터의 크기(길이)를 Float 값으로 출력합니다.
- 사용법: 단일
Vector입력을 받습니다. - 예시: 파티클의 속도 크기가 특정 값 이상일 때만 추가 효과를 발생시키고 싶을 때.
정규화 (Normalize)
벡터의 방향은 유지하고 길이를 1.0으로 만듭니다.
방향 벡터를 얻을 때 사용됩니다.
- 사용법: 단일
Vector입력을 받습니다. - 예시: 특정 방향으로 힘을 일정하게 적용하고 싶을 때, 방향 벡터를
Normalize하여 사용합니다.
내적 (Dot Product)
두 벡터의 내적을 계산하여 Float 값을 출력합니다.
두 벡터가 얼마나 같은 방향을 향하는지 나타냅니다.
- 사용법: 두 개의
Vector입력을 받습니다. - 예시: 파티클의 이동 방향과 특정 빛의 방향이 일치할 때만 밝아지도록 할 때.
외적 (Cross Product)
두 벡터에 수직인 새로운 벡터를 출력합니다.
3D 공간에서 회전 축 등을 계산할 때 사용됩니다.
- 사용법: 두 개의
Vector입력을 받습니다. - 예시: 특정 표면의 노멀 방향을 기반으로 파티클의 회전 축을 결정할 때.
스크립팅과 수학의 결합
이러한 수학 함수와 벡터 연산 노드들을 조합함으로써 여러분은 파티클의 동작을 매우 정교하게 제어할 수 있습니다.
아래 다이어그램은 시간값, 랜덤값, 수학 함수, 벡터 적용이 어떤 순서로 이어지는지 한 번에 보여줍니다.
복잡한 효과도 입력값을 만들고 함수로 형태를 잡은 뒤 범위를 제한해 Particle 속성에 쓰면 관리하기 쉬워진다.
| 순서 | 역할 | 예시 노드 | 파티클 결과 |
|---|---|---|---|
| 01 Input | 시간, 랜덤, 사용자 값을 준비 | NormalizedAge, DeltaTime, Random, User 값 | 변화의 재료가 생김 |
| 02 Shape | 값의 곡선과 리듬을 만듦 | Sine, Power, Curve | 흔들림, 밝기 변화, 감쇠 형태 |
| 03 Limit | 과한 범위를 안정화 | Min, Max, Clamp, Saturate | 색과 크기가 튀지 않음 |
| 04 Convert | 스칼라를 벡터나 색으로 변환 | Make Vector, Lerp, Multiply | 방향, 크기, 색상으로 의미 부여 |
| 05 Apply | 최종 값을 속성에 씀 | Position, Velocity, Color, SpriteSize | 화면에서 동작으로 확인 |
- 파동 효과:
Sine노드를 사용하여 파티클의 위치나 속도에 주기적인 변화를 줍니다. - 랜덤성 제어:
Random노드와Multiply,Add등을 조합하여 파티클의 속성에 다양한 무작위성을 부여하면서도 원하는 범위 내에서 제어합니다. - 동적인 크기/색상 변화:
Particles.NormalizedAge와Curve노드, 그리고Multiply노드를 사용하여 파티클의 크기와 색상을 수명에 따라 부드럽게 변화시킵니다. - 물리적 상호작용:
Add Velocity,Gravity Force등의 모듈과 함께 벡터 연산을 사용하여 파티클이 실제 물리 법칙을 따르도록 시뮬레이션합니다.
나이아가라 스크립트 에디터에서는 작은 노드 조합부터 실행 결과를 확인하며 계산 흐름을 검증해야 합니다.
아래 다이어그램은 수학 함수와 벡터 노드를 효과 목적에 맞춰 고르는 선택표입니다.
효과의 목적을 먼저 정하면 필요한 노드가 줄어듭니다. 움직임, 범위 제한, 방향 계산, 밝기 변화는 서로 다른 연산 패턴을 갖습니다.
- 흔들림과 파동
Sine 시간이나 정규화 수명을 넣어 반복되는 위치, 크기, 색상 변화를 만듭니다. NormalizedAge -> Sine Result -> Add Position
- 범위 제한
Clamp 색상, 알파, 크기가 안전한 값 밖으로 나가지 않게 고정합니다. Value, Min, Max 0.0 -> 1.0
- 방향만 사용
Normalize 벡터 길이는 버리고 방향만 필요할 때 씁니다. 비용이 있으므로 남용하지 않습니다. Vector -> Normalize Direction * Speed
- 방향 비교
Dot 두 벡터가 같은 방향을 보는지 검사해 조명, 정렬, 표면 반응을 제어합니다. Velocity dot Normal Result -> Select
- 부드러운 전환
Lerp 두 값 사이를 알파로 섞어 수명 기반 색상, 크기, 속도 변화를 만듭니다. A, B, Alpha Age -> Alpha
- 벡터 계산 읽는 순서
생성 Make Vector 축 조합 분해 Split Vector 축 추출 적용 Position + Velocity * DeltaTime 프레임 이동
- 방향
필요하면 벡터 노드, 범위가 필요하면 Clamp, 시간 변화가 필요하면 Sine이나 Lerp를 먼저 검토합니다. 복잡한 함수는 결과 차이가 실제 뷰포트에서 보일 때만 유지합니다. 목적 -> 입력 타입 -> 비용 순서로 고르기
아래 다이어그램은 수학 노드를 선택한 뒤 값 범위, 단위, 정규화, 클램프를 차례로 확인하는 안전장치 흐름입니다.
Sine, Normalize, Dot Product 같은 노드는 강력하지만 입력 단위와 출력 범위를 놓치면 파티클이 튀거나 사라집니다.
- NormalizedAge
age NormalizedAge 수명 기반 변화는 0에서 1로 움직인다는 전제를 유지합니다.
- Sine / Cosine
wave Sine / Cosine 주기 입력은 라디안 기준입니다. 속도 배율을 따로 두면 조정이 쉽습니다.
- Vector Length
length Vector Length 방향 정보는 사라지고 크기만 남습니다. 발광 강도 계산에 적합합니다.
- Dot Product
facing Dot Product 두 방향의 일치도를 읽습니다. 입력 벡터는 먼저 Normalize하는 편이 안전합니다.
수학 노드를 실제 이펙트에 넣을 때는 값의 종류, 단위, 범위를 먼저 고정한 뒤 속성에 연결해야 튜닝이 흔들리지 않습니다.
나이아가라 수학은 NormalizedAge, DeltaTime, Particles.Position, Velocity, Color처럼 입력과 출력 속성을 먼저 고정해야 예측됩니다.
- Add·Multiply·Clamp
Float Lifetime, SpriteSize, Alpha는 Map Range와 Clamp로 0-1 또는 cm 범위를 고정합니다.
- Sine·Cosine
Wave NormalizedAge에 주파수와 TAU를 곱해 흔들림을 만들고 라디안 입력을 유지합니다.
- Normalize·Dot·Cross
Vector Safe Normalize, Vector Length, Dot Product로 방향, 속도 크기, 정면 여부를 분리합니다.
- Local·World 변환
Space Transform Position/Vector로 Emitter Local과 World Space를 섞지 않게 맞춥니다.
- 단위 충돌
Degree와 Radian, Unreal cm, NormalizedAge 0-1 값을 한 식에서 섞지 않습니다.
- 폭주 방지
Color, Size, Velocity 출력 전 Clamp, Min/Max, Lerp로 NaN과 무한 가속을 막습니다.
- 속성 기록
Scratch Pad에는 Particles.SpriteSize, Color, Velocity처럼 대상 속성명을 남깁니다.