언어:
페이지 정보
엔진 버전:
언리얼 엔진

GPUSprites 타입 데이터

언리얼 엔진

GPUSprites.png

GPUSprite Type Data 모듈은 GPU 상에서의 파티클 시뮬레이션을 지원합니다. 전통적인 CPU 시스템에서 한 프레임에 지원하는 파티클 갯수는 천 단위입니다. GPU 시뮬레이션을 통해서는 십만 단위의 파티클을 시뮬레이션하여 효율적으로 렌더링할 수 있습니다.

GPU 파티클에는 전통적인 CPU 파티클의 모든 기능이 지원되지는 않습니다만, 고유 기능은 차치하고라도 훨씬 뛰어난 효율을 보여줍니다. 파티클 방출시 언제 어디에 몇 개나 스폰시킬지에 대한 결정은 여전히 CPU 상에서 일어납니다. CPU 는 또, 전통적 CPU 파티클에서 쓸 수 있는 메서드를 사용하여 크기나 속도같은 초기 특성을 할당해 주기도 합니다.

캐스케이드에서 GPU 파티클 스프라이트를 만드는 방법은, 이미터에 "GPU Sprites" 타입 데이터 모듈을 추가하면 됩니다. 캐스케이드에서 만들 수 있는 다른 이펙트와 마찬가지로, 이미터에 모듈을 추가하고 수정하는 방식으로 시뮬레이션 파라미터를 변경합니다. 프로퍼티 변화에 따라 시뮬레이션도 실시간 업데이트됩니다.

프로퍼티

프로퍼티

설명

Beam (빔)

Camera Motion Blur Amount

카메라 모션 블러량 - 카메라의 모션 블러에 따라 스프라이트를 늘립니다.

지원되는 특성

GPU 파티클에 지원되는 특성은 다음과 같습니다:

Initial Location (초기 위치)
Initial Velocity (초기 속도)
Acceleration (가속도)
Drag (드래그)
Lifetime (수명)
Color (컬러)
Size (크기)
Rotation (회전)
RotationRate (회전 속도)
SubImageIndex (서브 이미지 인덱스)

핵심 개념

씬에 GPU 파티클을 사용할 때는 다음 핵심 개념을 이해하는 것이 중요합니다.

모션

파티클 모션은 단순 뉴톤 역학에 의해 관장됩니다. 각각의 타임 스텝마다 파티클의 위치와 속도가 그 현재 위치, 현재 속도, 고정 가속도, 인력에 따라 선 통합됩니다.

GPU 파티클에는 선회(orbit) 역시 지원되는데, 세부적인 내용은 전통적인 CPU 파티클과 다르기는 합니다. 개념적으로 보면 스프라이트가 실제 파티클 위치를 중심으로 가변량의 오프셋을 적용하여 선회하는 것처럼 파티클이 움직입니다. Orbit 을 사용하여 파티클에 디테일한 모션을 추가할 수도 있습니다.

벡터 필드

GPU 파티클의 가장 흥미로운 기능은, 그 효율성 말고도, 벡터 필드가 있습니다. 벡터 필드란 파티클의 운동에 영향을 끼치는 벡터의 균일 그리드입니다. 벡터 필드는 월드에 (Global Vector Field) 액터 형식으로 놓이며, 다른 액터처럼 트랜슬레이트 / 로테이트 / 스케일 작업도 가능합니다. 동적이라 언제고 움직일 수 있습니다. 캐스케이드에서도 (Local Vector Field) 필드를 놓을 수 있는데, 그에 연관된 이미터에만 영향력이 제한됩니다. 파티클이 벡터 필드 범위에 들어가면 그 운동이 거기에 영향을 받으며, 파티클이 범위를 벗어나면 필드의 영향력이 사그라듭니다.

벡터 필드는 기본적으로 그 안의 파티클에 포스를 전해줍니다. 벡터 필드에는 "tightness" 파라미터도 있습니다. 이 파라미터는 필드의 벡터를 파티클이 얼마나 직접적으로 따를 것인가를 제어합니다. tightness 가 1 로 설정되면 파티클은 필드의 속도를 바로 읽어오므로 필드를 그대로 따르게 됩니다.

스태틱 벡터 필드는 벡터 그리드가 절대 변하지 않는 것입니다. 이러한 필드는 Maya에서 익스포트하여 볼륨 텍스처로 임포트할 수 있습니다. 스태틱 필드는 일단 비용이 매우 저렴하며, 파티클의 운동에 재미를 더할 수 있는데, 특히 필드 자체의 운동에 애니메이션을 더하는 식입니다.

추가적으로 벡터 필드는 2D 이미지에서 재구성할 수도 있습니다. 이러한 경우 노멀맵같은 이미지를 임포트한 뒤 어느 한 볼륨을 중심으로 회전시키거나 돌출시켜서 볼륨 텍스처를 재구성하는 데 쓸 수 있습니다. 이러한 재구성 결과물 위에 스태틱 벡터 필드를 추가하면 약간의 노이즈나 임의성을 넣을 수도 있습니다. 추가적으로 아틀라스 텍스처에 개별 프레임을 보관하여 2D 이미지에 애니메이션을 줄 수도 있습니다. 그렇게 하면 오프라인에서의 유연한 시뮬레이션은 물론 실시간에서의 운동 재구성도 아주 적은 비용으로 할 수 있게 됩니다.

퍼포먼스

GPU 파티클의 CPU 비용은 파티클 스폰에 의해 좌우됩니다. 파티클은 전통적인 CPU 파티클과 같은 메서드를 사용하여 CPU 상에서 스폰되기에 퍼포먼스적인 특성은 비슷합니다.

파티클의 GPU 비용은 일차적으로 파티클의 수에 의해 결정됩니다. 기존의 고정비 이상으로 GPU 파티클에 추가 비용이 발생하는 기능은 거의 없습니다. GPU 비용의 대부분은 소팅과 렌더링으로 인해 발생한다고 볼 수 있습니다. 소팅은 선택적인 것으로, 꼭 필요한 이미터에만 켜야 할 기능입니다. 렌더링은 종종 필 레이트(fill rate)에 좌우됩니다. 파티클의 크기, 파티클의 머티리얼에 있는 인스트럭션 수, 파티클의 총 갯수를 줄이는 것 모두 도움이 됩니다. 파티클이 매우 작다거나 하는 몇 가지 경우 렌더링은 버텍스 비용에 좌우되는데, 그러한 경우에는 파티클의 수를 줄이는 것만이 비용을 줄이는 유일한 방법입니다.

시뮬레이션 비용은 이미터가 겹치는 벡터 필드 수에 비례하기에, 겹치는 벡터 필드 수를 줄이는 것이 시뮬레이션 비용을 줄이는 데 도움이 될 수 있습니다.

모바일 디바이스에서의 GPU 스프라이트

GPUSprites_&_Vector_Fields.png

이제 GPU 파티클과 벡터 필드를 모바일 디바이스에서 사용할 수 있습니다. 하지만 이 기능은 MRT 포함 32 비트 부동소수점 렌더 타깃이 지원되는 모바일 디바이스를 필요로 하므로, 다음과 같은 모바일 디바이스에서만 작동합니다.

제조사명

디바이스 클래스

디바이스 이름

애플

A8+

아이폰 6, 아이패드 에어 2, 아이패드 미니 4 이상

Android

6.0 디바이스에 Adreno 4xx 및 Mali-T7xx GPU 탑재

갤럭시 노트 4, 노트 5, S6, S7, 넥서스 6P 등

파티클을 활성화시켜 이 기능을 활용하기 위해서는, 파티클에 다음과 같은 유형의 데이터가 추가되었는지 확인해 주기만 하면 됩니다.

GPUSprites_VFXC_Setup.png

  • GPU Sprites 유형 데이터

  • Global Vector Fields 유형 데이터

또한 파티클 시스템에 Vector Field 를 추가시키거나 레벨에 배치하여 제공해 줘야 합니다.

모바일 디바이스에서의 GPU 스프라이트 한계

모바일 디바이스에서 GPU 스프라이트를 사용할 때 유념해야 할 사항은 다음과 같습니다.

  • 벡터 필드 상호작용: PC 에서의 벡터 필드와 마찬가지로, 모바일 GPU 스프라이트에 영향을 끼칠 수 있는 벡터 필드는 동시에 최대 넷 까지입니다. 나누어 보자면 로컬 벡터 필드 하나, 월드에 배치된 벡터 필드 셋 입니다.

  • GPU 파티클 콜리전: 모바일 GPU 스프라이트는 씬과의 충돌 또는 메시 디스턴스 필드같은 옵션은 지원하지 않습니다. 모바일 디바이스에서 지원되지 않기 때문입니다.