커브와 그래디언트 데이터
정규화된 수명에 커브와 그래디언트를 매핑해 파티클의 크기와 색상이 생성부터 소멸까지 부드럽게 변하도록 설정합니다.
불꽃은 처음에는 밝은 주황색이었다가 점점 어두운 붉은색으로 바뀌고, 연기 덩어리는 작게 생겨 커졌다가 사라질 때 다시 작아집니다. 이런 변화는 고정된 값 하나나 바깥에서 넣는 값으로는 만들기 어렵습니다. 입자가 살아 있는 동안 값이 부드럽게 바뀌어야 하기 때문입니다. 나이아가라는 이를 위해 커브(Curve)와 그래디언트(Gradient)를 씁니다. 이 글에서는 입자의 수명 진행률을 입력으로 삼아 크기와 색이 바뀌도록 커브와 그래디언트를 설정하고, 키 사이의 값을 직접 계산해 봅니다.
수명 진행률을 입력으로 쓰는 커브
커브는 크기나 속도, 회전 같은 속성이 어떤 입력에 따라 어떻게 바뀔지를 그래프로 정한 것입니다. 가장 흔한 입력은 입자의 수명 진행률인 Particles.NormalizedAge로, 보통 나이(Age)를 수명(Lifetime)으로 나눠 계산합니다. 이 값을 커브의 입력에 연결하면 0은 입자가 생긴 순간, 1은 정해진 수명에 이른 순간이 됩니다.
다만 이 값이 바르게 갱신되려면 Particle State 같은 모듈이 나이를 갱신하고 있어야 하며, 수명이 끝난 입자를 없애지 않고 살려 두면 1을 넘을 수도 있습니다. 또 모든 커브의 가로축이 저절로 NormalizedAge를 읽는 것은 아니므로, 커브를 쓸 때는 입력이 무엇인지 확인해야 합니다.
자료형에 맞는 커브 고르기
나이아가라에서 자주 쓰는 커브는 바꾸려는 값의 자료형에 따라 나뉩니다.
Float From Curve: 숫자 하나(Float)가 바뀔 때 씁니다. 크기 배율을 점점 키우거나 줄이는 데 쓸 수 있고, Particle Update에서 속도나 힘의 한 성분을 시간에 따라 조절할 수도 있습니다. 같은 커브를 Particle Spawn에서만 읽으면 생성 순간의 값 하나만 쓰게 된다는 점에 주의합니다.Vector2 From Curve: 스프라이트의 가로, 세로 크기처럼 2차원 벡터가 바뀔 때 씁니다.Scale Sprite Size에서 X와 Y 배율을 따로 조절하면 수명에 따라 길쭉해지거나 한 방향으로만 커지게 할 수 있습니다.Vector From Curve: 속도나 위치 오프셋처럼 3차원 벡터가 바뀔 때 씁니다. X, Y, Z의 커브를 각각 편집해 속도 벡터를 수명에 따라 바꾸면 특정한 궤적을 그리게 할 수 있습니다.
입력 옆의 드롭다운에서 이런 커브를 고르면 커브 편집기가 나타나고, 여기서 키(key)를 더하고 옮겨 원하는 모양을 만듭니다. Vector2 From Curve나 Vector From Curve를 고르면 축마다 커브가 따로 나타납니다.
커브 편집기 다루기
커브 편집기에서는 그래프를 오른쪽 클릭해 Add Key를 고르거나 Shift를 누른 채 클릭해 키를 더합니다. 더한 키는 끌어서 입력값과 출력값을 바꿀 수 있습니다. 키를 선택하고 오른쪽 클릭하면 탄젠트(tangent)의 종류를 Auto, Linear, Break 등으로 바꿔 키 사이의 곡선이 얼마나 부드러운지를 조절합니다.
커브가 예상과 다르게 동작하면 입력값과 키, 보간 방식, 그리고 결과가 들어가는 속성을 함께 확인합니다. 특히 Auto 탄젠트는 키 사이에서 값이 키보다 더 높거나 낮게 튈 수 있으므로, 결과가 이상하면 Linear로 바꿔 비교해 봅니다.
색의 변화를 정하는 그래디언트
그래디언트는 색(Color)이 수명에 따라 어떻게 바뀔지를 정하는 특별한 형태의 커브입니다. 색의 변화는 효과의 분위기와 깊이를 정하는 큰 요소입니다.
색에는 주로 Color From Curve를 씁니다. 수명 진행률 0에서 1 사이에서 입자의 색이 어떻게 바뀔지 정하며, 불꽃이나 연기, 마법 효과의 색을 시간에 따라 바꾸거나 물방울이 사라질 때 알파(Alpha)를 낮춰 점점 투명해지게 하는 데 씁니다. Color 타입 입력에서 Color From Curve를 고르면 되고, RGB와 Alpha 입력이 나뉘어 있는 모듈이라면 각 자료형에 맞는 커브를 따로 연결합니다. 이때 Scale Color는 초기 색에 배율을 곱하는 모듈이고 Color 모듈은 색을 직접 정하는 모듈이라는 차이를 기억해 둡니다.
색 커브를 편집하는 화면은 버전에 따라 그래디언트 바로 보이기도 하고 채널별 커브로 보이기도 합니다. 그래디언트 바라면 바 아래쪽의 작은 사각형 키가 색을, 바 위쪽의 키가 알파를 정합니다. 바 아래를 클릭해 색 키를 더하고, 키를 선택한 뒤 색 선택기로 색을 정하며, 키를 끌어 수명 진행률 위의 위치를 바꿉니다. 바 위쪽의 알파 키로는 시간에 따른 투명도를 정합니다.
알파를 0까지 내려도 그것이 화면의 투명도로 이어지려면 머티리얼이 Particle Color의 Alpha를 Opacity에 써야 합니다. 또 완전히 투명해진 입자도 Kill 조건에 이를 때까지는 살아 있을 수 있습니다.
커브와 그래디언트 조정해 보기
파티클 생성 및 기본 속성 설정에서 만든 NS_BasicSpawn을 다시 엽니다. 입자가 이미 생성되고 있는 시스템에서 시작하면, 이번에 더하는 커브와 그래디언트가 바꾼 부분만 화면에서 구분해 볼 수 있기 때문입니다. 원래 상태와 비교하고 싶다면 콘텐츠 브라우저에서 사본을 만들어 그 사본으로 작업합니다. 아래에서는 크기에 커브를 먼저 적용하고 이어서 색에 그래디언트를 적용하며, 두 경우 모두 커브의 입력이 Particles.NormalizedAge인지 확인합니다.
크기에 커브 적용하기
먼저 입자가 작게 생겨 커졌다가 사라질 때 다시 작아지게 만들어 봅니다. 시스템 개요에서 이미터의 Particle Update 그룹으로 가서 + 버튼으로 Scale Sprite Size를 검색해 추가합니다. 추가한 모듈을 선택하고 선택 패널에서 Scale Factor 입력 옆의 드롭다운을 열어 Vector2 From Curve를 고르면, 커브 편집기에 X와 Y 두 개의 커브가 나타납니다.
X 커브에 키 세 개를 둡니다. 입력 0.0에서 값 0.0으로 시작하고, 0.5에서 1.0으로 가장 커졌다가, 1.0에서 다시 0.0으로 작아지는 모양입니다. Y 커브도 똑같이 만듭니다. 처음에는 세 키를 Linear 보간으로 이어 결과를 확인하고, 그 뒤에 Auto와 비교해 봅니다. 커브의 입력이 Particles.NormalizedAge인지도 확인합니다.
초기 스프라이트 크기가 0보다 크다면, 입자는 이 배율에 따라 커졌다가 작아집니다. 이 크기 변화가 입자를 없애는 것은 아니며, 크기가 0이 되어도 입자는 수명이 다할 때까지 살아 있습니다.
정규화된 나이와 크기 배율
Lifetime 4/초기 크기 (8,12)의 나이 변화에서 진행률→Linear 배율→현재 크기가 바뀐다. 크기 0과 Kill을 구별하고 곡선 전체는 유지한다.
NIAGARA · CH4-3
수명 진행률로 초기 크기의 배율을 읽습니다
본문의 세 키를 Linear로 연결한 예입니다. X·Y에 같은 커브를 사용하고 입력을 Particles.NormalizedAge에 연결합니다.
실제 크기 = 초기 크기 × 배율
진행률 0 → 배율 0 · 크기 0
진행률 0.5 → 배율 1 · 초기 크기 그대로
진행률 1 → 배율 0 · 크기 0
Age/Lifetime이 같은 진행률이면 같은 배율을 읽습니다. Lifetime을 늘리면 이 곡선의 실제 초 단위 길이는 늘어납니다.
크기 0은 소멸 조건과 다릅니다. 나이 갱신과 Kill 설정에 따라 끝점이 화면에 표시되지 않거나 진행률이 1을 넘을 수 있습니다. Auto 보간은 이 직선과 다를 수 있습니다.
초기 크기는 0보다 큰 값으로 설정합니다. 모든 커브가 자동으로 NormalizedAge를 읽는 것은 아니므로 입력을 확인합니다. 그래프는 X·Y 크기 배율 예이며 Alpha나 생존 입자 수를 표시하지 않습니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 관계·조건 설명 | 가로축 NormalizedAge가 0, 0.5, 1일 때 세로축 크기 배율은 각각 0, 1, 0이다. 같은 세 키를 선형 보간하며 실제 크기는 초기 크기에 이 배율을 곱한다. |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 1초 Lifetime 4, 초기 8×12에서 진행률은 0.25다. |
|
|
| 2초 진행률 0.5의 최대 배율 1을 읽는다. |
|
|
| 3초와 끝 0.75에서 배율은 0.5가 되고, 1에서는 0이 된다. |
|
|
정규화된 나이와 크기 배율
Lifetime 4/초기 크기 (8,12)의 나이 변화에서 진행률→Linear 배율→현재 크기가 바뀐다. 크기 0과 Kill을 구별하고 곡선 전체는 유지한다.
NIAGARA · CH4-3
수명 진행률로 초기 크기의 배율을 읽습니다
본문의 세 키를 Linear로 연결한 예입니다. X·Y에 같은 커브를 사용하고 입력을 Particles.NormalizedAge에 연결합니다.
실제 크기 = 초기 크기 × 배율
진행률 0 → 배율 0 · 크기 0
진행률 0.5 → 배율 1 · 초기 크기 그대로
진행률 1 → 배율 0 · 크기 0
Age/Lifetime이 같은 진행률이면 같은 배율을 읽습니다. Lifetime을 늘리면 이 곡선의 실제 초 단위 길이는 늘어납니다.
크기 0은 소멸 조건과 다릅니다. 나이 갱신과 Kill 설정에 따라 끝점이 화면에 표시되지 않거나 진행률이 1을 넘을 수 있습니다. Auto 보간은 이 직선과 다를 수 있습니다.
초기 크기는 0보다 큰 값으로 설정합니다. 모든 커브가 자동으로 NormalizedAge를 읽는 것은 아니므로 입력을 확인합니다. 그래프는 X·Y 크기 배율 예이며 Alpha나 생존 입자 수를 표시하지 않습니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 관계·조건 설명 | 가로축 NormalizedAge가 0, 0.5, 1일 때 세로축 크기 배율은 각각 0, 1, 0이다. 같은 세 키를 선형 보간하며 실제 크기는 초기 크기에 이 배율을 곱한다. |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 1초 Lifetime 4, 초기 8×12에서 진행률은 0.25다. |
|
|
| 2초 진행률 0.5의 최대 배율 1을 읽는다. |
|
|
| 3초와 끝 0.75에서 배율은 0.5가 되고, 1에서는 0이 된다. |
|
|
위 그림은 방금 만든 세 키를 Linear로 이은 커브입니다. 가로축은 NormalizedAge이고 세로축은 스프라이트 크기의 배율이며, X와 Y에 같은 커브를 씁니다. 진행률 0에서 배율은 0이라 크기도 0이고, 0.5에서 배율 1로 초기 크기 그대로가 되며, 1에서 다시 배율 0이 됩니다. 실제 크기는 초기 크기에 이 배율을 곱한 값입니다. 나이를 수명으로 나눈 진행률이 같으면 같은 배율을 읽으므로, Lifetime을 늘리면 같은 곡선이 실제로는 더 긴 시간에 걸쳐 펼쳐집니다.
그림 아래의 설명은 몇 가지 조건을 짚습니다. 크기 0은 소멸 조건과 다르고, 나이 갱신과 Kill 설정에 따라 끝점이 화면에 보이지 않거나 진행률이 1을 넘을 수 있습니다. Auto 보간은 이 직선과 다를 수 있고, 초기 크기는 0보다 커야 하며, 모든 커브가 저절로 NormalizedAge를 읽는 것은 아니므로 입력을 확인해야 합니다. 이 그래프는 X와 Y의 크기 배율만 나타내며, 알파나 살아 있는 입자 수를 나타내지는 않습니다.
키 사이의 값을 직접 읽어 봅니다. 수명이 4초로 고정이고 초기 스프라이트 크기가 (8, 12)인 입자에 이 커브를 썼다고 해 봅시다. 나이 1초의 진행률은 1 ÷ 4 = 0.25입니다. 0.25는 키 0과 0.5 사이의 한가운데이므로, 배율도 0과 1의 한가운데인 0.5이고 실제 크기는 (8 × 0.5, 12 × 0.5) = (4, 6)입니다. 나이 3초의 진행률 0.75도 1에서 0으로 내려오는 구간의 한가운데이므로 같은 배율 0.5를 읽습니다. 이 계산은 Linear 보간일 때만 맞으며, Auto 탄젠트나 다른 키를 쓴 곡선에 그대로 적용할 수는 없습니다.
색에 그래디언트 적용하기
이번에는 입자가 빨간색으로 시작해 노란색으로 바뀐 뒤 투명하게 사라지게 만들어 봅니다. 이 글처럼 빨강, 노랑, 주황을 직접 정하려면 Particle Update에 Color 모듈을 더합니다. 이미 Scale Color가 있거나 그 아래에 다른 Color 모듈이 있다면 꺼 두고 비교합니다. Scale Color로 같은 결과를 내고 싶다면 초기 색을 흰색으로 두고 RGB와 Alpha의 배율을 각각 정해야 합니다.
Color 모듈의 색 입력 드롭다운에서 Color From Curve나 그 RGB 타입에 맞는 커브를 고르고, 커브의 입력이 Particles.NormalizedAge인지 확인합니다. RGB와 Alpha 입력이 나뉜 버전이라면 색 커브와 알파 커브를 각각 연결합니다. 그다음 색 키 세 개를 둡니다. 왼쪽 끝인 0.0에는 빨간색, 가운데인 0.5에는 노란색, 오른쪽 끝인 1.0에는 주황색입니다. 알파 키는 두 개를 둡니다. 0.0에서 값 1.0으로 불투명하게 시작해 1.0에서 값 0.0으로 완전히 투명해지게 합니다.
이제 미리보기에서 입자가 빨간색으로 시작해 노란색으로 바뀌고, 점점 투명해지면서 주황색으로 사라지는 모습을 볼 수 있습니다.
시작, 중간, 끝에서 확인하기
결과를 확인할 때는 수명 진행률 0, 0.5, 1 근처에서 크기와 알파를 각각 봅니다. 끝점 1은 입자가 그 순간 사라지면서 실제 프레임에는 보이지 않을 수도 있습니다. 크기가 튀면 보간 방식과 X, Y 입력을, 색이 탁하면 초기 색과 곱하는 방식인지를, 투명해지지 않으면 머티리얼의 알파 연결을 확인합니다.
Lifetime을 바꾸면 같은 정규화 커브라도 실제 초 단위로는 변화의 빠르기가 달라집니다. 기준이 되는 커브를 보관해 두고 한 축씩 바꾸면, 이전 결과로 되돌려 비교하기 쉽습니다.
정리
- 커브와 그래디언트는 어떤 입력에 따라 값이 바뀌는 모양을 정하며, 흔히 수명 진행률
Particles.NormalizedAge를 입력으로 씁니다. - NormalizedAge는 나이를 수명으로 나눈 값으로,
Particle State가 나이를 갱신해야 바뀌고, 모든 커브가 저절로 이 값을 읽지는 않습니다. - 바꿀 값의 자료형에 따라
Float From Curve,Vector2 From Curve,Vector From Curve,Color From Curve를 고릅니다. Scale Color와Scale Sprite Size는 초기값에 배율을 곱하고,Color모듈은 색을 직접 정합니다.- 크기 0이나 알파 0은 입자를 없애지 않으며, 투명도가 화면에 보이려면 머티리얼이 알파를 Opacity에 써야 합니다.
연습 문제
1. 나이 4.5초의 크기와 알파
수명이 6초이고 초기 크기가 (12, 20)인 입자의 나이가 4.5초입니다. 크기에는 본문과 같은 세 키를 Linear로 이은 NormalizedAge 커브를 씁니다. 따로 알파 커브는 진행률 0에서 1, 1에서 0을 Linear로 이어 Color에 직접 씁니다. 크기 배율과 실제 크기, 알파를 계산해 보세요. 알파가 0이 되었다는 사실만으로 입자가 사라졌다고 말할 수 있을까요?
해설 보기
진행률은 4.5 ÷ 6 = 0.75입니다. 크기 커브에서 0.75는 1에서 0으로 내려오는 구간의 한가운데이므로 배율은 0.5이고, 실제 크기는 (12 × 0.5, 20 × 0.5) = (6, 10)입니다. 알파는 직접 쓰는 값이므로 1 - 0.75 = 0.25입니다. 크기와 알파는 서로 다른 커브의 출력입니다.
알파가 0이 되었다고 해서 입자가 사라졌다고 말할 수 없습니다. 알파는 색의 한 성분일 뿐이고, 입자를 없애는 것은 Particle State의 수명 처리나 Kill 조건입니다. 화면이 투명해지려면 머티리얼이 알파를 Opacity에 써야 한다는 점도 함께 확인합니다. 이 계산은 나이가 갱신되고, 크기와 색을 정하는 다른 모듈이 값을 덮어쓰지 않는다고 가정한 것입니다.
2. 수명을 두 배로 늘리면
크기 커브를 그대로 두고 수명만 2초에서 4초로 늘렸습니다. 입자가 가장 커지는 순간은 생긴 뒤 몇 초일까요? 커브의 키를 고쳐야 할까요?
해설 보기
커브는 수명 진행률 0.5에서 가장 크므로, 수명이 2초일 때는 1초에, 4초일 때는 2초에 가장 커집니다. 진행률이 같으면 같은 배율을 읽기 때문입니다.
키를 고칠 필요는 없습니다. NormalizedAge를 입력으로 쓰는 커브는 수명이 바뀌어도 모양이 그대로이고, 실제 초 단위로만 늘어나거나 줄어듭니다. 수명과 상관없이 생긴 뒤 1초에 가장 커지게 하고 싶다면, 진행률 대신 나이를 초 단위로 읽는 입력을 써야 합니다.
3. 키보다 커지는 크기
세 키의 최댓값을 1.0으로 두었는데, 탄젠트를 Auto로 바꾸자 입자가 잠깐 초기 크기보다 더 커지는 것처럼 보입니다. 왜 그럴까요?
해설 보기
Auto 탄젠트는 키 사이를 부드럽게 이으려고 곡선을 만드는데, 이 과정에서 곡선이 키의 값보다 높거나 낮게 지나갈 수 있습니다. 그래서 가장 큰 키가 1.0이라도 그 근처에서 배율이 1을 조금 넘을 수 있습니다.
배율이 키를 넘지 않게 하려면 Linear로 바꾸거나, 탄젠트를 직접 조절해 곡선이 키 위로 솟지 않게 합니다. 결과가 이상할 때는 Linear로 바꿔 비교하면 원인이 보간 방식인지 금방 알 수 있습니다.
다음 글 메시 데이터 세트의 기본 사용법에서는 Static Mesh 데이터 인터페이스로 메시의 표면에 입자를 만들고, 메시의 위치와 노멀을 입자에 쓰는 방법을 살펴봅니다.