파티클과 조명 상호작용 기본 이해
Lit 셰이딩·그림자·이미시브 머티리얼·Light Renderer가 파티클과 주변 조명에 미치는 시각 효과와 비용을 비교합니다.
파티클이 밝아 보이는 것, 외부 조명을 받는 것, 주변 물체를 밝히는 것은 서로 다른 기능입니다. 효과의 목적에 맞춰 이 세 경로를 분리해 설정합니다.
셰이딩 모델과 조명 반응
- Unlit: Emissive로 색을 표현하며 표면의 직접 조명을 계산하지 않습니다. 자체 발광을 표현하기 쉽지만 노출·톤매핑·안개 등은 여전히 화면에 영향을 줄 수 있습니다.
- Default Lit: Base Color, Roughness, Normal 등으로 표면이 빛에 반응하도록 합니다. 파편·먼지·눈처럼 환경과 섞여야 하는 효과에 활용합니다. Sprite에도 사용할 수 있으나 반투명 Lighting Mode와 렌더링 경로에 따라 지원과 품질이 다릅니다.
- Light Renderer: 파티클 위치에 조명을 만들어 주변 표면을 비춥니다. 파티클 표면의 셰이딩 모델과는 별도입니다. Emissive와 Bloom만 조절한 결과를 이 조명과 혼동하지 않습니다.
Unlit/Lit은 셰이딩 모델이고 Additive/Translucent는 블렌드 모드입니다. 같은 축의 선택지가 아니므로 각각 결정합니다.
NIAGARA · CH6-4
빛을 받는 표면·보이는 발광·주변 조명을 구분합니다
세 화살표는 서로 다른 역할입니다. 같은 효과에 조합할 수 있으며 Unlit/Lit 셰이딩 모델과 Additive/Translucent 블렌드 모드는 별도로 선택합니다.
조명을 받습니다
외부 조명에 반응하는 표면입니다. 반투명 Sprite는 Lighting Mode·렌더링 경로의 지원도 확인합니다.
밝은 픽셀로 보입니다
머티리얼의 발광 색을 화면에 표현합니다. 밝은 픽셀이나 Bloom이 주변 물체를 비추는 광원 생성과 같지는 않습니다.
주변을 직접 비춥니다
파티클 위치의 조명입니다. Color·Radius·활성 바인딩을 확인하고 주변 표면의 변화를 비교합니다.
비교할 결과를 나누어 확인합니다
파티클 자체의 색, 주변 Lit 벽·바닥의 직접 조명, 직접 비추지 않는 면의 간접광을 구분합니다. 이 그림은 GI·그림자 지원이나 특정 엔진 장면의 성공을 보장하지 않습니다.
Light Renderer의 Alpha Scales Brightness와 Sprite 재질의 Alpha→Opacity는 별도 소비 경로입니다. 수명 커브를 써도 각 바인딩을 맞춰야 하며 비용은 라이트 수·반경·지원되는 그림자 경로에서 측정합니다.
그림자를 받기와 드리우기
그림자가 표면에 보이는 것과 파티클의 형상이 빛을 가려 다른 표면에 그림자를 드리우는 것을 구분해야 합니다. Unlit이라고 모든 그림자 투영이 불가능한 것은 아닙니다. Opaque/Masked 형상의 차폐와 반투명 그림자의 지원 조건도 다릅니다.
우선 소수의 Mesh 파티클과 Opaque 또는 Masked 머티리얼, 그림자를 만드는 광원으로 테스트 장면을 구성합니다.
Niagara 컴포넌트와 Renderer의 해당 그림자 설정, 광원의 Cast Shadows를 확인합니다. 옵션 노출 위치와 지원은 엔진 버전 및 렌더링 경로에 따라 다릅니다.
파티클 형상이 주변 바닥을 가리는지 확인합니다. 반투명 Sprite는 동일한 설정만으로 불투명 메시와 같은 그림자를 얻는다고 가정하지 않습니다. 그림자 종류와 머티리얼 지원을 따로 확인합니다.
필요한 실루엣에만 그림자를 사용하고, 입자 수·화면 범위·지속 시간을 늘리기 전에 비용을 비교합니다.
Light Renderer의 조절값
- Color Binding / Color Add: 파티클 색을 읽고 고정 색상 값을 더합니다. 밝기 조절은 전달하는 RGB 범위 및 감쇠와 함께 봅니다.
- Radius Binding / Radius Scale: 파티클별 반경과 배율을 정합니다. 기본 반경 바인딩은
Particles.LightRadius입니다. - Alpha Scales Brightness: 색상의 Alpha를 조명 밝기의 배율로 사용합니다.
- Light Rendering Enabled Binding: 어떤 파티클에서 조명을 만들지 제어합니다.
Point Light 컴포넌트의 모든 속성이 Niagara Light Renderer에도 같은 이름으로 있다고 가정하지 않습니다. 예를 들어 UE 5.8 API의 MegaLights Cast Shadows는 Allow MegaLights가 켜진 경로의 옵션입니다. 사용하는 버전의 지원을 확인하고, 아래 기본 실습은 그림자를 요구하지 않습니다. Light Renderer API
직접 해 보기: 수명에 따라 꺼지는 빛
NS_BasicSpawn의 복사본에 Light Renderer를 추가합니다. Sprite Renderer는 파티클 자체를 보이게 하는 역할로 유지합니다.
Emitter Update의 Spawn Rate를 5개/초 정도로 낮춥니다. Particle Spawn의 Initialize Particle에서 Lifetime을 1초, Color를 RGBA (1,0.5,0,1)로 정합니다. 초기 Add Velocity와 Particle Update의 Particle State·Solve Forces and Velocity가 있어 이동과 수명 제거가 이루어지는지 확인합니다.
Render 섹션에 Light Renderer를 추가합니다. Color Binding은 Particles.Color, Radius Binding은 Particles.LightRadius로 설정합니다. Particle Spawn에서 LightRadius Float를 200 cm로 기록하고 Radius Scale은 1로 둡니다. Color Add는 (0,0,0)부터 시작합니다.
Alpha Scales Brightness를 켭니다. 버전에서 제공하는 추가 그림자 경로는 이 실습에서 사용하지 않습니다. 기본 Light Renderer의 값을 Point Light의 Intensity 1000 설정으로 대신 설명하지 않습니다.
Particle Update의 Scale Color에서 RGB 배율은 1로 유지하고 Alpha 배율에 Float From Curve를 연결합니다. 커브 입력은 Particles.NormalizedAge, 키는 (0,1)과 (1,0), 보간은 Linear로 설정합니다. Particle State 뒤에 두고 다른 Color 기록이 이 결과를 덮어쓰지 않게 합니다.
Lit 머티리얼을 쓰는 바닥과 벽이 있는 장면에서 재생합니다. Sprite의 머티리얼은 Particle Color의 Alpha도 읽도록 합니다. Light Renderer를 켰을 때와 껐을 때 주변 표면의 차이를 비교합니다.
예시: 한 입자의 알파가 두 출력에 쓰이는 경우
수명 1초인 한 입자의 나이가 0.25초인 샘플을 보겠습니다. NormalizedAge는 0.25이고, (0, 1)에서 (1, 0)으로 가는 선형 커브 값은 0.75입니다. 색을 설정하는 다른 Color 모듈이 없고 이 커브로 최종 Color Alpha를 0.75로 기록했다면, Alpha Scales Brightness를 켠 Light Renderer는 밝기에 0.75를 곱합니다. Sprite 재질이 Alpha를 Opacity에도 연결했다면 같은 알파를 그 별도 경로에서도 읽습니다. 최종 화면 밝기를 정확히 75%로 측정했다는 뜻은 아닙니다.
알파 배율과 라이트 수 구별하기
위 입자에서 Alpha Scales Brightness만 끄고 Sprite의 Alpha→Opacity 연결은 유지했습니다. 알파 0.75가 두 출력에 미치는 영향은 어떻게 달라질까요? 별도로 Spawn Rate 5개/초·Lifetime 1초인 충분히 오래 실행한 효과에서, 각 입자가 조명 하나를 만들고 추가 제거·활성 필터가 없다면 동시 라이트 수는 대략 얼마일까요? 알파만 낮추면 생성한 라이트 수도 그 비율로 줄었다고 판단해도 되는지 설명하세요.
소비 설정과 생존 개수를 따로 풀이하기
Light Renderer는 Alpha를 밝기 배율로 사용하지 않지만 Sprite 재질의 Opacity 경로는 계속 0.75를 읽습니다. 정상 상태의 기대 개수는 5개/초 × 1초 ≈ 5개이며 생성 샘플과 종료 경계에서는 달라질 수 있습니다. 알파 값만 낮추는 동작은 Spawn Rate·Lifetime·활성 바인딩을 바꾸지 않으므로 라이트 개수 감소로 계산하지 않습니다. 비용을 줄일 목적이라면 실제 개수·반경·활성 조건도 비교합니다.
예상 결과는 생성 직후 밝고 수명 종료에 가까워질수록 약해지는 조명입니다. 빛이 잘 보이지 않으면 바인딩, 대상 표면의 Lit 여부, 거리와 노출을 먼저 확인합니다. 라이트 수·반경·그림자 경로가 비용을 크게 바꾸므로 색상의 밝기만 낮추는 것을 성능 최적화로 보지 않습니다.