GPU 스프라이트 이펙트

이 문서에서는 GPU를 사용하여 수백만 개의 스프라이트 파티클을 스폰하는 방법을 설명합니다.

필요한 사전지식

이 페이지의 콘텐츠를 이해하고 활용하기 위해 다음 주제를 숙지해 주세요.

이펙트에 따라 수만 개의 파티클을 스폰해야 할 수도 있습니다. 하지만, 표준 CPU를 사용하여 이렇게 많은 파티클을 생성하면 퍼포먼스 문제를 유발할 수 있습니다. 이 가이드에는 CPU가 아닌 GPU 시뮬레이션을 실행하여 스프라이트 파티클 이펙트를 생성하는 방법이 나와 있습니다.

시스템 및 이미터 생성

나이아가라 이미터와 시스템은 독립되어 있습니다. 현재는 기존 이미터나 이미터 템플릿에서 시스템을 생성하는 워크플로를 권장합니다.

  1. 우선 콘텐츠 브라우저에서 우클릭한 다음, FX > 나이아가라 시스템(Niagara System) 을 선택하여 나이아가라 시스템을 생성합니다. 나이아가라 시스템 마법사가 표시됩니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  2. 선택한 이미터에서 나온 새 시스템(New system from selected emitters) 을 선택합니다. 다음(Next) 을 클릭합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  3. 템플릿(Templates) 에서 심플 스프라이트 버스트(Simple Sprite Burst) 를 선택합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  4. 더하기 아이콘(+) 을 클릭하여 이미터 목록에 이미터를 추가하고 시스템에 추가합니다. 완료(Finish) 를 클릭합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  5. 새 시스템 이름을 GPUSprite 로 지정합니다. 더블클릭하여 나이아가라 에디터에서 엽니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  6. 새 시스템의 이미터 인스턴스 이름은 기본적으로 SimpleSpriteBurst 지만 나중에 변경할 수 있습니다. 시스템 개요(System Overview) 에서 이미터 인스턴스 이름을 클릭하면 해당 필드를 편집할 수 있습니다. 이미터 이름을 FX_GPUSprite 로 지정합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  7. GPUSprite 시스템을 레벨로 드래그합니다.

파티클 이펙트를 만들 때는 항상 시스템을 레벨에 드래그하는 편이 좋습니다. 이렇게 하면 모든 변경과 편집을 레벨에서 볼 수 있습니다. 시스템에서 변경한 내용은 자동으로 레벨의 시스템 인스턴스에 전파됩니다.

이미터 세팅 - 이미터 프로퍼티

우선, 이미터 프로퍼티(Emitter Properties) 에서 몇 가지 세팅을 변경해야 합니다. 여기에서 CPU 시뮬레이션을 GPU 시뮬레이션으로 전환합니다.

  1. 시스템 개요(System Overview) 에서 이미터 세팅(Emitter Settings) 을 클릭하여 선택(Selection) 패널에서 엽니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  2. 이미터 프로퍼티(Emitter Properties) 를 펼칩니다. 시뮬레이션 타깃(Simulation Target) 필드를 찾습니다. 여기에서 언리얼 엔진의 시뮬레이션에 GPU를 사용하도록 설정합니다. 드롭다운을 클릭하고 GPUComputeSim 을 선택합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  3. 아직 설정되지 않은 고정 바운드에 관한 경고가 표시될 수 있습니다. 고정 바운드(Fixed Bounds) 박스를 클릭하면 오류가 해결됩니다. 최소(Minimum)최대(Maximum)** 값은 기본값으로 둡니다.

    파티클 시뮬레이션이 GPU에서 처리되므로, 시스템은 이펙트의 크기를 읽을 수 없습니다. 따라서 고정된 바운드를 설정해야 합니다. 이 단계에 나와 있는 것처럼 이미터에서도 가능하고, 시스템 프로퍼티(System Properties) 아이템에서 전체 시스템에 대한 고정 바운드를 설정할 수 있습니다.

이미터 업데이트 그룹 세팅

다음으로 이미터 업데이트(Emitter Update) 그룹에서 모듈을 편집합니다. 이 동작은 이미터에 적용되며 프레임마다 업데이트됩니다.

  1. 시스템 개요(System Overview) 에서 이미터 업데이트(Emitter Update) 를 클릭하여 선택(Selection) 패널에서 엽니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  2. 이미터 상태(Emitter State) 모듈을 펼칩니다. 이 모듈은 이미터의 시간과 확장성을 제어합니다. 심플 스프라이트 버스트 템플릿을 사용했기 때문에 라이프 사이클 모드(Life Cycle Mode)셀프(Self) 로 설정됩니다. 이 세팅은 보통 특정 이미터에 설정된 라이프 사이클 로직을 완벽하게 커스터마이징하기 위해 사용되는데, 해당 이펙트에는 사용할 필요가 없습니다. 드롭다운을 클릭하고 라이프 사이클 모드(Life Cycle Mode)시스템(System) 으로 설정합니다. 그러면 시스템에서 라이프 사이클 세팅을 계산할 수 있습니다. 일반적으로 이 세팅은 퍼포먼스를 최적화합니다. 기본적으로 시스템은 5초마다 무한히 루프됩니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  3. 즉시 스폰 버스트(Spawn Burst Instantaneous) 모듈은 이미터가 스폰되었을 때 대량의 파티클 버스트를 생성합니다. 이 모듈은 심플 스프라이트 버스트 템플릿에 포함되어 있습니다. 스폰 수(Spawn Count)2500 으로 설정합니다. 스폰 시간(Spawn Time)0 으로 설정되어 있으므로, 시작하는 즉시 버스트가 발생합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  4. 이 이펙트의 경우, 이미터가 스폰되었을 때 단순한 파티클 버스트 이상의 것이 필요합니다. 스폰 속도(Spawn Rate) 모듈은 이미터가 활성화되는 동안 지속적으로 파티클을 생성합니다. 이미터 업데이트에서 더하기 표시(+) 아이콘을 클릭하고 스폰(Spawning) > 스폰 속도(Spawn Rate) 를 선택하여 스폰 속도(Spawn Rate) 모듈을 추가합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  5. 스폰 속도(Spawn Rate)500 으로 설정합니다. 이렇게 하면 파티클을 초당 500회의 속도로 스폰하여 첫 버스트 이후 파티클이 연속적으로 생성됩니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

파티클 스폰 그룹 세팅

다음으로는 파티클 스폰(Particle Spawn) 그룹에서 모듈을 편집합니다. 이 동작은 처음 스폰되었을 때 파티클에 적용됩니다.

  1. 시스템 개요(System Overview) 에서 파티클 스폰(Particle Spawn) 을 클릭하여 선택(Selection) 패널에서 엽니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  2. 파티클 초기화(Initialize Particle) 모듈을 펼칩니다. 이 모듈은 관련된 여러 파라미터를 하나의 모듈로 모아서 스택의 복잡성을 최소화합니다. 포인트 어트리뷰트(Point Attributes) 에서 수명(Lifetime) 파라미터를 찾습니다.

  3. 수명 파라미터는 파티클이 사라지기 전까지 표시되는 시간을 결정합니다. 이 이펙트에는 상수 값을 사용해야 이펙트가 끝날 때까지 파티클이 계속 표시됩니다. 수명(Lifetime)5 로 설정합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  4. 이 가이드의 다른 파트에서 스프라이트 크기 랜덤화를 다룰 예정이며, 여기서는 스프라이트의 기본 크기를 설정합니다. 스프라이트 어트리뷰트(Sprite Attributes) 에서 스프라이트 크기(Sprite Size) 파라미터를 찾아 활성화합니다. 스프라이트 크기(Sprite Size) 를 다음과 같이 설정합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

    크기 벡터

    X

    5

    Y

    5

  5. 구체 위치는 스프라이트가 스폰되는 위치의 모양을 제어합니다. 파티클 스폰의 더하기 아이콘(+) 을 클릭하고 위치(Location) > 구체 위치(Sphere Location) 를 클릭하여 구체 위치(Sphere Location) 모듈을 추가합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  6. 구체 위치(Sphere Location) 모듈을 추가하면 스프라이트가 구체 모양으로 스폰되며, 반경을 지정하여 구체 모양의 크기를 설정할 수 있습니다. 모양 프리미티브(Shape Primitive) 드롭다운 메뉴에서 스피어(Sphere) 를 선택합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

파티클 업데이트 그룹 세팅

이제 파티클 업데이트(Particle Update) 그룹에서 모듈을 편집합니다. 이 동작은 이미터의 파티클에 적용되며 프레임마다 업데이트됩니다.

  1. 시스템 개요(System Overview) 에서 파티클 업데이트(Particle Update) 그룹을 클릭하여 선택(Selection) 패널로 엽니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  2. 파티클 스폰(Particle Spawn) 그룹의 파티클 초기화(Initialize Particle) 모듈에서 스프라이트의 기본 크기를 선택했습니다. 스프라이트 크기 조정(Scale Sprite Size) 모듈을 추가하여 스프라이트의 크기를 랜덤화할 수 있습니다. 이렇게 하면 기본 크기에 스케일링 인수가 적용됩니다. 더하기 아이콘(+) 을 클릭하고 크기(Size) > 스프라이트 크기 조정(Scale Sprite Size) 를 선택하여 스프라이트 크기 조정(Scale Sprite Size) 모듈을 추가합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  3. 스프라이트 크기 조정(Scale Sprite) > 비균등(Non-Uniform) 드롭다운 메뉴에서 비균등 을 선택합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  4. 스프라이트 크기 조정의 기본값은 X: 1, Y: 1 을 사용합니다. 이러한 기본값을 변경하면 모든 파티클이 균일하게 커지거나 작아집니다. 하지만 랜덤 크기 베리에이션이 스태틱 크기보다 시각적으로 흥미롭습니다. 스케일 인수(Scale Factor) 필드 옆의 아래 방향 화살표를 클릭하고 동적 입력(Dynamic Inputs) > 플로트에서 벡터 2D(Vector2D from Float) 를 선택합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  5. 참고로 스케일 인수(Scale Factor) 에 대한 값이 하나의 스태틱 값으로 변경되었습니다. float 값을 추가하는 방법은 어떤 모습의 파티클을 원하는지에 따라 여러 가지입니다. 점진적으로 이어지는 크기 변화에는 커브가 이상적입니다. 값(Value) 옆의 아래 방향 화살표를 클릭하고 동적 입력(Dynamic Inputs) > 커브에서 플로트(Float from Curve) 를 선택합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  6. 스프라이트 크기 조정 모듈을 엽니다. 램프 업 다운(Ramp Up Down) 커브 템플릿을 클릭하고 해당 모양을 커브에 적용합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  7. 커브와 일치하는 템플릿을 클릭합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  8. 현재 세팅은 별로 흥미롭지 않은 파티클의 공을 생성할 뿐입니다. 파티클의 베리에이션 및 움직임을 늘리는 엘리먼트를 추가할 수 있습니다. 파티클 업데이트의 더하기 아이콘(+) 을 클릭하고 힘(Forces) > 컬 노이즈 힘(Curl Noise Force) 을 선택합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  9. 컬 노이즈 힘으로 많은 것을 할 수 있습니다. 노이즈 강도(Noise Strength) 는 전체적인 노이즈 필드의 크기를 제어합니다. 다시 말해 노이즈가 파티클의 원래 구체를 방해하는 양을 제어합니다. 노이즈 빈도(Noise Frequency) 는 파티클에 적용되는 컬 노이즈의 빈도를 제어합니다. 이 값이 작을수록 파티클의 구체 위치가 더 워핑됩니다. 지금은 아래 세팅을 사용하지만, 나중에 다른 모습이 되도록 실험할 수 있습니다. 

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

    파라미터

    Noise Strength

    72

    Noise Frequency

    .02

  10. 처음에는 파티클이 소용돌이치다가 소멸될 때까지 계속 바깥쪽으로 이동합니다. 이 이펙트의 경우, 파티클은 바깥쪽으로 이동하다가 원점으로 돌아와서 소용돌이를 만듭니다. 포인트 어트랙션 힘(Point Attraction Force) 모듈은 파티클을 단일 지점으로 이동하게 합니다. 기본적으로 이 지점에 이미터가 위치합니다. 파티클 업데이트의 더하기 아이콘(+) 을 클릭하고 힘(Forces) > 포인트 어트랙션 힘(Point Attraction Force) 을 선택합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  11. 어트랙션 강도(Attraction Strength) 는 파티클을 어트랙터 지점으로 당기는 힘의 양입니다. 어트랙션 반경(Attraction Radius) 은 파티클에 적용되는 포인트 어트랙션 힘에 해당하는 필드의 크기를 나타냅니다. 감쇠 익스포넌트(Falloff Exponent) 는 구체가 퍼지는 양을 제어합니다. 값이 작을수록 파티클 구체가 더 많이 퍼집니다. 소멸 반경(Kill Radius) 은 파티클의 라이프 사이클이 끝나 사라지는 영역의 크기를 설정합니다. 어트랙션 강도(Attraction Strength), 어트랙션 반경(Attraction Radius), 감쇠 익스포넌트(Falloff Exponent), 소멸 반경(Kill Radius) 을 다음과 같은 값으로 설정합니다.

    모듈 맨 아래의 삼각형을 클릭하면 소멸 반경(Kill Radius) 파라미터가 표시됩니다. 박스가 체크되어 있지 않다면, 체크하여 활성화합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

    파라미터

    어트랙션 강도(Attraction Strength)

    5.5

    어트랙션 반경(Attraction Radius)

    300.0

    감쇠 익스포넌트(Falloff Exponent)

    0.6

    소멸 반경(Kill Radius)

    4.0

  12. 이제 색을 변경하는 방법입니다. 파티클 업데이트의 더하기 아이콘(+)을 클릭하고 색(Color) > 색(Color) 을 선택하여 색(Color) 모듈을 추가합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  13. 색(Color) 옆의 아래 방향 화살표를 클릭하고 일반(General) > 동적 입력(Dynamic Inputs) > 커브의 색(Color from Curve) 을 선택합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  14. 컬러 바 위의 공간을 클릭하여 커브에 컬러 스톱을 추가할 수 있으며, 스톱을 더블 클릭하여 색 선택 툴을 열면 컬러를 변경할 수 있습니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  15. 오파시티 스톱을 설정하려면 바 아래의 공간을 클릭합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  16. 시간을 설정하려면 바 아래의 공간을 클릭합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  17. 컬러와 오파시티를 아래와 같이 설정합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

    컬러 또는 오파시티 스톱

    시간

    컬러

    스톱 1

    0.0

    R: 1, G: 0, B: 1

    스톱 2

    .35

    R: .08, G: 0, B: 1

    스톱 3

    ..60

    R: .2 , G: 1, B: .8

    스톱 4

    .8

    R: 1, G: .96, B: .3

    오파시티

    스톱 1

    0

    1

    스톱 2

    .7

    1

    스톱 3

    1

    0

최종 결과

축하합니다! CPU 대신 GPU를 사용하는 멋진 스프라이트 이펙트를 완성했습니다.

언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
취소