UDN
Search public documentation:

PhysXParticleSystemReferenceKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 피직스 > PhysX 파티클 시스템 참고서

PhysX 파티클 시스템 참고서


문서 변경내역: Simon Schirm 작성.

개요


PhysXParticleSystem 은 PhysX의 플루이드 파라미터를 담아두는 그릇입니다. 이 파라미터의 세트는 에디터에서 더 명료하게 조직되어 있으며, (최근에 통합된) 2.8.0의 새 파라미터를 반영하는 몇 개의 필드도 포함되어 있습니다. PhysXParticleSystem 은 다수의 이미터들에 의해 공유될 수 있으므로, 파티클 시뮬레이션의 물리적 양상에 대해 세부 조정한 것들을 재사용하는 것이 쉽습니다. 이 PhysXParticleSystem 은 파티클의 이동 그리고 PhysX 씬과의 충돌 기능을 제공합니다. 그밖에, 이 시스템이 SPH (Smoothed particle hydrodynamics, 부드럽게 만든 파티클 액체역학) 플루이드 시뮬레이션을 수행하도록 설정할 수도 있습니다.

PhysX의 특별한 이미터 타입 데이터 모듈에서 PhysXParticleSystem 오브젝트를 참조하면 이를 사용할 수 있습니다. 선택할 수 있는 지원 모듈에는 두 가지가 있습니다: PhysXMeshTypeDataPhysXSpriteTypeData 입니다. 이 두 이미터 타입은 모두 글로벌 LOD의 행태를 조정하는 파라미터를 나타냅니다.

PhysXMeshTypeData 는 파티클을 회전하는 메시로서 표시하는데 사용됩니다. 이는 파편이나 나뭇잎들처럼 작고 간단한 오브젝트를 시뮬레이트하기에 알맞습니다. 이 타입의 이미터는 다량의 파티클 효과를 가능하도록 하기 위해 빠르게 인스턴스화 된 렌더링 패쓰로 최적화되어 있습니다.

PhysXSpriteTypeData 는 PhysXParticleSystem 을 통해서 모든 종류의 스프라이트 파티클 애니메이션을 구동합니다.

PhysXParticleSystem 오브젝트를 이용하여 시뮬레이트 된 모든 파티클들에 대해, LOD를 제어할 수 있습니다. 각 개별 이미터에 대해, 시뮬레이트 된 파티클의 총계와 더불어 파티클의 수명 및 스폰 행위 등이 조정됩니다.

PhysXParticleSystem


PhysXParticleSystem 을 새로 만들려면, 콘텐츠 브라우저 에서 우클릭한 다음 맥락 메뉴에서 "New PhysXParticleSystem" 을 선택합니다. 새로 생긴 PhysXParticleSystem 아이콘을 더블클릭하면 편집할 수 있습니다.

가장 널리 사용되는 파라미터가 처음 3개의 범주인 Buffer, Collision, Dynamics 에 나타나 있습니다: 덜 빈번하게 사용되거나, SPH 파라미터 같이 변경이 좀 더 어려운 파라미터는 SdkExpert 범주에 들어 있습니다.

  • Buffer
    • MaxParticles - 이 PhysXParticleSystem 에 대한 총 파티클 수의 최대치
  • Collision
    • bDynamicCollision - 동적 강체와의 충돌을 유효화/무효화 함
    • CollisionDistance - 파티클이 강체의 표면과 충돌하는 거리
    • FrictionWithDynamicShapes - 동적 강체와의 충돌에 대한 마찰율
    • FrictionWithStaticShapes - 정적 강체와의 충돌에 대한 마찰율
    • RestitutionWithDynamicShapes - 동적 강체와의 충돌에 대한 복원율
    • RestitutionWithStaticShapes - 정적 강체와의 충돌에 대한 복원율
  • Dynamics
    • bDisableGravity - PhysXParticleSystem 에 대한 화면 중력을 무효화 함
    • Damping - 속도의 감폭
    • ExternalAcceleration - 모든 시뮬레이션 단계에 적용되는 가속 벡터
    • MaxMotionDistance - 한 시뮬레이션 단계에서 파티클이 이동할 수 있는 거리의 한계
  • SdkExpert
    • bStaticCollision - 정적 강체와의 충돌을 유효화/무효화 함
    • bTwoWayCollision - 파티클과 강체간의 양방향 상호작용을 유효화/무효화 함
    • CollisionResponseCoefficient - 양방향 상호작용에 대한 조정 인수
    • KernelRadiusMultiplier - SPH 에 대한 파티클 상호작용의 반경을 결정. RestParticleDistance 와 상대적임
    • PacketSizeMultiplier - 병렬 계산을 위한 격자 칸의 상대적 크기를 결정함
    • RestDensity - 파티클의 양을 설정함. 1000 정도의 값이면 SPH에 훌륭한 결과를 나타낼 수 있음
    • RestParticleDistance - 수면 상태에 있는 파티클들간의 간격을 결정함
    • SimulationMethod - SPH 계산을 유효화/무효화 함
    • Stiffness - SPH의 경도
    • Viscosity - SPH의 점도

몇가지 지침들:

  • bTwoWayCollision 을 유효화 하면 충돌시 메시 파티클의 자동 방위 설정이 무효화 됩니다.
  • SPH를 사용하는 경우, KernelRadiusMultiplier 를 보통 1.7 에서 2.0 사이로 하면 좋은 퍼포먼스와 행태를 얻을 수 있습니다.
  • SPH를 사용하지 않을 경우, RestDensity 를 사용해서 파티클의 힘 필드 효과를 조정할 수 있습니다. 현재 PhysX의 힘 필드는 기능 특유의 조정을 지원하지 않고 있으므로 이것이 필요합니다.

퍼포먼스 튜닝:

  • 주어진 효과에 대한 CollisionDistance, 그리고 특히 MaxMotionDistance 는 되도록 낮은 값으로 설정해야 합니다.
  • 병렬화 계산을 위해 공간에서 보통 격자가 사용됩니다. 격자 칸(패킷)들은 충돌 및 SPH의 역학을 위해 사용됩니다.
  • 패킷의 크기는 KernelRadiusMultiplier * RestParticleDistance * PacketSizeMultiplier로 결정됩니다.
  • 패킷의 크기는 주어진 용도의 좋은 퍼포먼스를 위해 아주 중요합니다:
    • 일반적으로 패킷의 수가 적을수록 (큰 것들) 퍼포먼스가 더 좋아집니다.
    • 크기는 계산 시간의 측면에서 (또한 PPU [Physics Processing Unit, 물리 처리 장치]의 메모리 사용량의 견지에서) 충돌의 효율에 영향을 미칩니다.
  • SPH에서는 패킷의 크기를 결정하는 3개의 파라미터에 대해 비교적 엄격한 값의 세트가 유효합니다.
    • KernelRadiusMultlier 는 2.0 정도로 설정될 필요가 있음.
    • RestParticleDistance 는 효과의 비례에 의해 주어짐.
    • PacketSizeMultiplier 는 시나리오가 얼마나 성긴지에 따라 선택됨. 파티클이 비교적 빽빽한 경우에는 크기를 작게 선택할 것.
  • 상호작용을 하지 않는 파티클에 대해서는 충돌에 대한 최적의 세트를 선택할 필요가 있습니다.
    • KernelRadiusMultiplierRestParticleDistance 는 PPU의 메모리 소비를 줄이기 위해 PacketSizeMultiplier 에 대하여 크게 선택하는 것이 좋습니다.

PhysX 메시 이미터


PhysXMeshEmitter를 만들려면 Cascade 내 "Type Data" 필드에서 "PhysX Mesh Data"를 선택합니다.

"PhysX Mesh Data"의 속성 대화상자에는 약간의 PhysX 특유의 속성들이 있습니다:

  • PhysXParSys - 파티클을 시뮬레이트할 때 사용되는 PhysXParticleSystem.
  • PhysXRotationMethod - 파티클 메시의 기본 형태 기능을 반영하는 방법을 선택.
  • FluidRotationCoefficient - 파티클 메시의 회전에서 직선 속도 또는 충돌 결과의 양을 정의.
  • VerticalLod - 글로벌 EmitterLodControl 을 위한 파라미터.

스폰하는 모듈들은 모두 지원됩니다. 그러나 사용 가능한 업데이트 모듈 중에서는 SizeByLife 만이 지원됩니다.

몇가지 지침들:

  • 될수 있으면 여러 이미터에서 같은 PhysXParticleSystem 을 공유하도록 노력하십시요.
  • 범용 PhysXRotationMethod는 될 수 있는대로 메시와 밀접하게 매치되어야 합니다. 더 잘 맞도록 하기 위해서는 메시의 방위 설정을 다시 해야 할 것입니다.

PhysX 스프라이트 이미터


PhysXSpriteEmitter를 만들려면 Cascade 내의 "Type Data" 필드에서 “PhysX Sprite Data"를 선택합니다.

"PhysX Sprite Data"의 속성 대화상자에는 PhysX 특유의 속성들이 몇가지 있습니다:

  • PhysXParSys - 파티클의 시뮬레이트에 사용되는 PhysXParticleSystem.
  • VerticalLod - 글로벌 EmitterLodControl 을 위한 파라미터.

PhysX 스프라이트 이미터는 PhysX 메시 이미터만큼 최적화되어 있지 않습니다. 그렇지만 이는 좀 더 많은 융통성을 제공합니다. 시뮬레이션 동안의 파티클 위치나 속도의 업데이트, 또는 파티클의 말살을 제외한 모든 모듈이 지원됩니다.

글로벌 파티클 LOD


Unreal 이미터 시스템은 거리를 바탕으로 LOD의 기능성을 제공합니다. PhysX의 이미터 구현은 글로벌 파티클 예산을 설정할 수 있는 추가의 LOD 메커니즘을 제공합니다.

글로벌 파티클 LOD를 적용하는 데에는 서로 협력하여 작용하는 두 가지 기본 방법이 있습니다.

  • FIFO mode (선입선출 모드) - 이미터 효과의 파티클들은 우선권 순서로 조직되어 있습니다. 오래된 파티클일수록 우선권이 낮으며, 따라서 파티클의 예산이 초과될 경우 가장 먼저 제거됩니다. 각기 다른 이미터 효과에 대하여 파티클 제거를 위한 우선권을 설정할 수도 있습니다.
  • Emission volume reduction (방사량 감소) - 특정 이미터를 위한 파티클 예산을 맞추기 위해서는 방사의 양을 줄일 수 있습니다. 이 양은 파티클의 평균 수명과 파티클의 평균 속도의 곱으로 정해집니다. 전체의 파티클 예산은 모든 활성화 되어있는 이미터에 분배됩니다.

각기 다른 레벨에 각기 다른 LOD 설정이 되어 있습니다:

  • BaseEngine.ini (상응하는 게임, ...Engine.ini, "[Engine.PhysicsLODVerticalEmitter]" 아래)
    • ParticlePercentage - 글로벌 파티클 LOD 설정을 퍼센트로 정의함.
      • 기본값: 100
  • WorldInfo.Physics.VerticalProperties.Emitters
    • ParticlesLodMin - ParticlePercentage 0 에서 맵의 글로벌 파티클 예산.
    • ParticlesLodMax - ParticlePercentage 100 에서 맵의 글로벌 파티클 예산.
    • bApplyCylindricalPacketCulling - 설정된 경우, 패킷의 거리가 카메라 주위 수평 면에서 평가됨.
    • PacketsPerPhysXParticleSystemMax - 각 PhysXParticleSystem 에 대한 플루이드의 상한선. 알맞은 값은 50에서 600 사이. 가능한 한 값을 적게 유지.
    • SpawnLodVsFifoBias - 이미터의 스폰율과 수명이 글로벌 파티클 수 제한에 의해 얼마나 영향을 받을 것인지를 정의함. 0은 방사량 감소가 적용되지 않는다는 것을 나타냄.
  • PhysXMeshTypeData.VerticalLOD / PhysXSpriteTypeData.VerticalLOD
    • WeightForFIFO - 오래된 파티클 제거와 관련하여 이미터 효과의 상대적 중요도. 상대적으로 낮은 값은 시스템으로 하여금 가능하면 다른 이미터 효과로부터의 파티클들을 삭제할 수 있도록 함.
    • WeightForSpawnLOD - WeightForFIFO 와 같으나 방사량 감소와 관련됨.
    • SpawnLodRateVsLifeBias - 스폰량이 방사율의 감소 또는 파티클 수명의 감소에 의해 얼마나 영향을 받을지를 규정함.
    • RelativeFadeoutTime - 파티클을 시각적으로 점점 희미해지게 하는데 사용되는 파티클의 수명의 일부에 설정되어야 함. LOD 시스템은 파티클을 즉각적으로 삭제하기보다는 점점 흐려져서 보이지 않게 하려고 노력함.

한계 및 알려진 문제점들


  • PhysXMeshTypeData 이미터가 SizeByLife 의 업데이트 모듈만을 지원함. 이를 최소한 런타임 버텍스 컬러 업데이트까지로 연장하려고 함.
  • PhysX 이미터에서 실시간 미리보기가 제대로 작용하지 않음.
  • 현재 같은 타입의 PhysXMeshTypeData 이미터가 모두 한번에 일괄적으로 렌더되고 있음. 앞으로 일괄 렌더링을 위해 이미터 인스턴스들을 임의로 그룹지을 수 있는 기능을 지원하고자 함.
  • PhysX 이미터가 Cascade 충돌 메시 미리보기에서 작용하지 않음.
  • 이미터의 워밍업 시간이 지원되지 않음.
  • bUseLocalSpace 가 지원되지 않음! (모든 PhysX 파티클은 월드 스페이스를 사용)

내려받기