UDN
Search public documentation:

FluidSurfacesKR
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 홈 > 파티클과 이펙트 > 플루이드 서피스 > 플루이드 서피스 가이드

플루이드 서피스 가이드


문서 변경내역: Niklas Smedberg 작성. 홍성진 번역.

개요


Fluid Surface(플루이드 서피스)는 일단은 평평한 오브젝트지만 버텍스를 위아래로 이동하거나 머티리얼에서 사용할 수 있는 노멀 맵 택스처를 애니메이트시켜 물결 모양을 내는 것입니다. 이들 각각의 기능은 전체 플루이드의 조그만 사각형 부분에만 영향을 끼칩니다. 보통 이 사각형은 메인 플레이어를 중심으로 맞춰지며, 나머지 플루이드 부분은 평평한 상태로 남아 다른 힘에는 영향을 받지 않습니다. 디자이너 입장에서는 이러한 사각형을 가급적 크게 만들고 정교하게 테셀레이트 하면서도 메모리 사용량과 퍼포먼스는 최적의 상태가 유지되길 바랄 것입니다.

플루이드 서피스는 흔히 물을 흉내내는 데 사용됩니다.

플루이드 서피스 유형에는 FluidSurfaceActor (플루이드 서피스 액터)와 FluidSurfaceActorMovable (플루이드 서피스 액터 무버블) 두 가지가 있습니다. 뒤의 것은 마티네에서 움직일 수 있다는 점만 다릅니다.

FluidTest.jpg

시뮬레이션과 디테일 서브-그리드


앞서 말한 것처럼 FluidSurfaceActor 의 일부분에만 디테일이 있으며, 나머지는 평평한 사각형(quad)에 불과합니다. 시뮬레이션과 디테일 서브-그리드는 FluidSurfaceActor 안을 돌아다니면서, 그 상대적인 "타겟"을 중심으로 맞추려고 합니다. TargetSimulationTargetDetail 프로퍼티가 비어 있는 경우, 플레이어를 중심으로 맞춥니다.

bShowSimulationPosition 이나 bShowDetailPosition 을 켜면 FluidSurfaceActor 안에 시뮬레이션 또는 디테일 서브-그리드가 배치된 위치를 볼 수 있는데, 사각형으로 표시됩니다. 돌아다니며 타겟을 따라다니기 때문에, 게임내에서 또는 PIE 에서 테스트해 보는 것이 좋을 것입니다. 이 기능은 게임 내에서 "set" 실행 명령으로 켤 수도 있습니다. 예:

 set fluidsurfacecomponent bShowSimulationPosition 1 

시뮬레이션 그리드에서는 버텍스 애니메이션을 사용하여 파동과 잔파동을 시각화하고 서브-그리드는 테셀레이션 정도가 크며 많은 버텍스를 포함하게 됩니다. 디테일 그리드는 노멀 맵 텍스처 주변을 이동하며 추가적인 버텍스가 필요하지 않습니다.

시뮬레이션 그리드는 CPU에서 별도 스레드로 시뮬레이션됩니다. 디테일 그리드는 온전히 GPU에서 시뮬레이션되며 일만 맵 텍스처를 애니메이션화합니다.

활성화 및 비활성화


플루이드를 활성화 및 비활성화할 수 있습니다. 활성화 상태에서는 물결과 잔물결이 시뮬레이션되고 플루이드가 필요한 메모리 및 퍼포먼스를 사용합니다. 비활성화 상태에서는 플루이드가 최소한의 메모리를 사용하며 정적 플랫 쿼드를 지정된 머티리얼로 렌더링하는 것 외에는 추가적인 퍼포먼스를 소모하지 않습니다.

플루이드는 비활성화된 상태로 시작되나 플레이어가 비활성화 거리 안에 있으면 자동으로 활성화됩니다. (가장 가까운 플루이드 서피스 액터 가장자리로부터 측정 - 시뮬레이션 또는 디테일 가장자리가 아님). 힘은 시뮬레이션 또는 디테일 그리드 안의 점으로부터 적용됩니다. 이 서브-그리드 바깥에 적용된 힘은 단순히 무시되며 플루이드는 비활성화된 상태를 유지합니다.

플루이드가 활성화된 후에는 플레이어가 비활성화 거리 밖으로 이동하고 10초 후에 자동으로 비활성화되며 더 이상 시뮬레이션이나 디테일 그리드에 힘이 적용되지 않고 플루이드가 정착됩니다.

물결 생성


플루이드에서는 두 가지 방법으로 물결을 만들 수 있습니다. Fluid Surface Influence Actor 수작업 또는 자동 물리적 상호 작용을 활용하는 것입니다. 자동 상호 작용은 일반 Touch 이벤트(키즈멧에서 연결 가능)로 처리됩니다. 액터가 플루이드 평면에 접촉할 때마다 영향력이 적용됩니다. 그 강도와 크기 및 접촉 액터의 속도는 ForceImpact 프로퍼티에서 파생됩니다. 접촉 액터가 플루이드 평면 주위를 이동하면 다른(연속적) 힘이 적용됩니다. 이러한 상호 작용 유형에서는 FluidContinuous 프로퍼티를 사용하여 연속적인 힘의 강도를 결정합니다.

TestRipple 에서는 임펄스에 FluidImpact 프로퍼티를 사용합니다 (TestRippleFrequency가 0보다 큰 경우). TestRippleFrequency가 0이면 ForceContinuous 프로퍼티를 통해 연속적인 힘을 적용합니다.

시뮬레이션이나 디테일 사각형 외부 위치에 적용된 모든 힘은 무시됩니다.

시각적 품질을 높이기 위한 일반적인 팁은 영향 반경이 커질수록 보통 더 부드럽고 훌륭한 물결이 생긴다는 점입니다. 반경이 커질수록 해당 힘에 영향 받는 셀이 더 많아지므로 시뮬레이션에 안정적인 효과를 낼 수 있습니다.

생성


콘텐츠 브라우저의 "액터 클래스" 탭에서 FluidSurfaceActor 를 선택합니다. 뷰포트에서 월드 아무데나 우클릭하고 "여기에 FluidSurfaceActor 추가"를 선택합니다. 위젯으로 위치와 크기를 조절하고 F4 키를(, 또는 액터를 더블클릭하거나 우클릭후 "FluidSurfaceActor 프로퍼티"를) 누릅니다.

FluidSurfaceActor 에는 Fluid, FluidDebug, FluidDetail, FluidSurfaceComponent 등 4가지 카테고리의 프로퍼티가 있습니다. 프로퍼티 설정을 검토할 때, 플루이드 애니메이션 방법은 두 가지 있음에 유념하십시오. 하나는 버텍스를 위아래로 움직이기, 그리고/또는 노멀맵 텍스처를 애니메이트하기 입니다. 보통 앞의 것을 "시뮬레이션", 뒤의 것을 "디테일" 이라고 합니다. 시뮬레이션은 CPU(별도 스레드)에서, 디테일은 GPU에서 처리됩니다.

프로퍼티: FluidSurfaceComponent

이 카테고리에는 플루이드 머티리얼 프로퍼티만 포함되어 있으며, 플루이드가 온전하게 작동하도록 하기 위해 설정해 줘야 하는 유일 프로퍼티입니다.

FluidMaterial
플루이드 렌더링에 사용할 머티리얼. 여기에는 배경으로 몰아치는 난류(turbelence)에 쓸 스크롤 디스토션 맵은 물론, 디테일 텍스처에 접근하기 위한 특수 FluidNormal 노드 역시 포함 가능합니다. 머티리얼의 bUsedWithFluidSurfaces 체크박스가 반드시 켜져 있어야 합니다!

프로퍼티: Fluid

이 프로퍼티는 시뮬레이션(버텍스 애니메이션)과 플루이드를 전체적으로 제어합니다.

DeactivationDistance
플루이드가 비활성화되고 단순 플랫 쿼드로 렌더링을 시작하는, 플레이어와 가장 가까운 플루이드 가장자리 간의 거리입니다.
EnableDetail
노멀 맵 디테일 텍스처의 애니메이션을 활성화/비활성화합니다.
EnableSimulation
시뮬레이션(버텍스-애니메이션)을 활성화/비활성화합니다.
FluidDamping
플루이드 시뮬레이션에서 물결의 폭을 무디게 하는 정도입니다(0.0-30.0).
FluidHeightScale
물결 높이 크기 - 값이 커지면 시뮬레이션에서의 버텍스 물결이 더 높아집니다.
FluidTravelSpeed
시뮬레이션을 위한 물결 이동 속도 요인(0.0-1.0). 물결 속도를 낮추는 데 사용할 수 있습니다.
FluidUpdateRate
시뮬레이션 업데이트 속도(초당 업데이트 수). 이 값을 높이면 물결이 빠르게 전파되나 퍼포먼스는 낮아집니다.
ForceContinuous
지속적 상호 작용을 위한 힘 요인입니다(갑작스러운 영향과 대비됨).
ForceImpact
즉각적인 상호 작용을 위한 힘 요인입니다.
GPUTessellationFactor
플루이드 그리드를 테셀레이션하는 GPU 크기입니다 (GPU 테셀레이션을 완벽 지원하는 플랫폼에서만 사용하며 현재는 Xbox360가 해당합니다).
GridSpacing
시뮬레이션 그리드 셀 크기(세계 공간 단위)
GridSpacingLowRes
플루이드가 비활성화되었을 때 자동으로 저해상도 그리드를 그립니다. 플루이드가 반투명일 때는 버텍스 흐리기를 위해 합당한 값이 필요합니다. 너무 낮으면 GridSpacingLowRes가 잠깁니다(결과적으로 버텍스가 65,000개 이상)
LightingContrast
이 값을 높이면 플루이드 버텍스 법선에 대한 구부러짐이 과장되어 조명에 대비가 추가됩니다.
SimulationQuadsX
시뮬레이션 그리드의 버텍스 쿼드 수(X축을 따라)
SimulationQuadsY
시뮬레이션 그리드의 버텍스 쿼드 수(Y축을 따라)
TargetDetail
디테일 텍스처가 중심을 맞추는 목표 액터. 제공되지 않은 경우 디테일 텍스처가 플레이어 주변에 중심을 맞춥니다.
TargetSimulation
시뮬레이션 그리드가 중심을 맞추는 목표 액터. 제공되지 않은 경우 시뮬레이션 그리드가 플레이어 주변에 중심을 맞춥니다.

프로퍼티: FluidDetail

이 프로퍼티는 디테일 노멀 맵 텍스처에만 영향을 미칩니다.

DetailDamping
FluidDamping 과 같으나 디테일 텍스처용입니다.
DetailHeightScale
FluidHeightScale 과 같으나 디테일 텍스처용입니다.
이 값을 높이면 FluidNormal의 대비가 추가됩니다.
DetailResolution
디테일 텍스처의 해상도. 텍스처는 정사각형입니다.
DetailSize
세계 공간 단위로 나타낸 플루이드 내 디테일 그리드 크기입니다. 디테일 그리드는 정사각형입니다.
DetailTransfer
디테일 텍스처에 적용된(전달된) 모든 힘을 모듈화하는 요인입니다. 플루이드 서피스 액터에 시뮬레이션과 디테일 기능을 모두 사용할 경우에만 유용합니다.
DetailTravelSpeed
FluidTravelSpeed 와 같으나 디테일 텍스처용입니다.
DetailUpdateRate
FluidUpdateRate 와 같으나 디테일 텍스처용입니다.

프로퍼티: FluidDebug

이러한 프로퍼티는 플루이드 서피스 액터를 설정 및 조정할 때 사용하며 FINAL_RELEASE 빌드에는 적용되지 않습니다.

bPause
이 항목을 실행하면 시뮬레이션을 위치에 고정합니다.
bShowDetailNormals
화면에 디테일 텍스처를 표시하는 오버레이를 렌더링합니다.
bShowDetailPosition
디테일 그리드의 위치를 플루이드 안에서 사각형으로 표시합니다.
bShowFluidDetail
디테일 텍스처를 플랫으로 표시하나 배경에서 지속적으로 애니메이션화합니다.
bShowFluidSimulation
시뮬레이션을 플랫 지오메트리로 표시하나 배경에서 지속적으로 애니메이션화합니다.
bShowSimulationNormals
선으로 시뮬레이션 법선을 시각화합니다.
bShowSimulationPosition
시뮬레이션 그리드의 위치를 플루이드 안에서 사각형으로 표시합니다.
bTestRipple
테스트 잔물결을 실행/실행 중지합니다.
bTestRippleCenterOnDetail
테스트 잔물결의 중심을 디테일 그리드에 맞출지 여부입니다.
NormalLength
시각화된 시뮬레이션 법선의 길이입니다.
TestRippleFrequency
테스트 잔물결의 각 Pling 간 소요 시간(초)입니다. 0이면 연속입니다.
TestRippleRadius
세계 공간에서 테스트 잔물결의 반경입니다.
TestRippleSpeed
테스트 잔물결의 각속도입니다.

팁과 우수 사례


큰 표면에는 버텍스 애니메이션을, 웅덩이 같은 소규모 표면에는 노멀 맵 애니메이션을 사용하는 것이 좋습니다. 두 기능을 동시에 사용하면 조정 작업이 까다로워질 수 있으며 별다른 소득 없이 메모리와 퍼포먼스만 낭비하게 됩니다.

플루이드 서피스 액터는 원하는 만큼 크게 할 있지만, 시뮬레이션이나 디테일 서브-그리드가 커지면 메모리 소모량도 커지고 퍼포먼스도 저해됩니다. 부드러움을 크게 망가뜨리지 않는 선에서 GridSpacing 을 가급적 크게 하는 것이 핵심입니다. 높은 값(50 등)에서 시작하여 만족스러운 품질이 나타날 때까지 점차 적게 시도합니다. 그런 다음 필요한 만큼 큰 활성 사각형이 생길 때까지 SimulationQuadsX 및 SimulationQuadsY로 시뮬레이션 그리드의 크기를 조절합니다. 마찬가지로 300 x 300이 넘는 대형 그리드를 사용하면 메모리가 많이 소모됩니다.

에디터에서 플루이드 프로퍼티를 조절하려면 "Test Rippple"를 실행하고 실시간 업데이트를 사용하십시오. 테스트 잔물결은 물결을 활성화하므로 사용자가 설정 품질을 추정해 볼 수 있습니다. 품질을 크게 해치지 않고 메모리 사용과 퍼포먼스를 최적으로 유지할 수 있도록 가능한 낮은 설정을 사용하십시오.

물결 이동 속도는 해상도(GridSpacing/SimulationQuadsX/SimulationQuadsX 또는 DetailSize/DetailResolution), FluidUpdateRate/DetailUpdateRate 및FluidTravelSpeed/DetailTravelSpeed 의 영향을 받습니다. 적당하게 부드러운 물결에 대해 해상도를 설정한 경우 FluidTravelSpeed/DetailTravelSpeed 로 물결 속도를 조절할 수 있습니다. 업데이트 속도를 30 정도로 유지해야 합니다(낮아지면 애니메이션이 조악해지고 높아지면 퍼포먼스 비용이 늘어납니다).

플루이드에 적용한 모든 힘의 반경은 너무 작아서는 안 됩니다. 반경이 커지면 물결이 더 부드러워 보입니다.

실행 명령


  • togglefluids 는 모든 플루이드 시뮬레이션을 실행/중지하고 사용한 메모리를 거의 전부 해제시킵니다. 이 명령으로 메모리 사용량과 퍼포먼스 영향을 비교할 수 있습니다.
  • stat fluids 는 메모리와 퍼포먼스 통계를 표시합니다. 통계는 플랫폼마다 크게 차이가 날 수 있다는 점 기억하십시오!