UDN
Search public documentation:

FractureToolKR
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 홈 > 스태틱 메시 > 프랙처 스태틱 메시
UE3 홈 > 배경 아티스트 > 프랙처 스태틱 메시

프랙처 스태틱 메시


개요


프랙처(부서지는) 스태틱 메시는 부분적으로 부서지는 환경을 효율적으로 만들어낼 수 있습니다. 이러한 특수 애셋은 기존 스태틱 메시 애셋을 스태틱 메시 에디터에서 열어볼 수 있는 프랙처 툴로 조작해서 만듭니다. 여기서는 프랙처 툴의 기본적인 사용법을, 애셋을 생성하여 레벨에 놓고 사용하는 법까지 전부 다뤄보도록 하겠습니다.

프랙처 툴 기본사항


프랙처 툴은 언리얼 엔진 3의 12월 QA 빌드에 추가되었습니다. 이 툴을 열어보려면 스태틱 메시 에디터에스 스태틱 메시를 연 다음, 메뉴에서 도구 > 프랙처 툴 을 사용하거나 새로 생긴 프랙처 툴 (노랑색 와이어프레임) 버튼을 누르면 됩니다. 그러면 이 메시를 조각내는 데 사용되는 옵션이 담긴 대화상자가 열립니다. 원하는 값으로 옵션을 설정하고, 대화상자의 밑부분에 있는 자르기 버튼을 누르면 메시가 조각나며, 사용자에게 새로 생긴 프랙처 메시를 저장할 패키지/그룹 이름을 물어옵니다. 자르기 패턴이 생성되면, 툴은 오브젝트의 콜리전 지오메트리 전반에 걸쳐 점을 흩어놓은 다음, 그에 따라 조각을 만들어냅니다.

01_FT_MeshViewer.jpg

메시를 조각내는 법


선택 및 위젯

각 청크(덩어리)의 원점(과 그에 상응하는 청크)은 분할 패턴 내에서 선택되며 이때 표시되는 위젯을 사용해서 이동할 수 있습니다. 청크가 선택될 때 나타나는 선들은 이 청크의 이웃을 나타냅니다. 이는 조각난 메시의 구조를 시각화시켜 보는 데 도움이 됩니다. 숫자는은 이웃과 접한 '접촉 면적' 을 나타냅니다. 분홍 선은 그 청크 외부 지오메트리의 '평균 표면 노멀'을 가리킵니다. 이는 조각이 떨어져 나갈 때 사용됩니다 (아래 그림 참조).

05_FT_Selection.jpg

청크 수

스태틱 메시가 열리고 프랙처 대화창이 보이는 상태에서, 툴의 첫 슬라이더는 원래의 메시를 몇개의 조각으로 자를지를 결정하는 것입니다. 비주얼 임팩트와 퍼포먼스 사이의 균형을 맞추기에 가장 알맞은 장소입니다. 청크의 수가 많으면 최종 결과물에 트라이앵글이 더 많아지며, 프랙처된 메시가 조각낼 수 있는 액터의 수도 많아집니다. 청크 수가 적을수록 스폰되는 액터와 트라이앵글의 수가 적어지지만, 전체적인 프랙처의 수도 적어져서, 오브젝트가 부서질 때의 비주얼 임팩트가 떨어집니다. 일단 오브젝트가 잘라지면 청크의 수도 약간 줄어듭니다. 이는 완전히 오브젝트 내부에 완전히 파묻힌 청크때문입니다.

02_FT_Dialog.jpg

평면 편향

프랙처 툴에서 두번째 값은 평면 편향입니다. 이는 프랙처 평면의 XYZ 치수를 조정, 입력된 값에 따라 조각이 더 넓어지거나 좁아집니다. 아래 스크린샷에서 보면, 한두 축 크기를 더 크게 하니 메시가 똑같은 크기의 청크가 아닌 서로 닮은 조각으로 나뉘고 있습니다. 이는 바위 메시에서 일정한 모양의 조각들을 잘라내는 것보다는 목재에서 길고 좁은 토막들을 잘라낸다든지, 종류가 다른 머티리얼 유형을 조각내는 데 좋습니다.

03_FT_PlaneBias.jpg

점 수정

점 수정은 선택된( 또는 모든) 청크의 원점을 오브젝트의 바운드 쪽으로 옮기거나, 몇몇 또는 절단 패턴에서 모든 청크의 원점을 흩어놓는 데 사용됩니다. 청크의 원점을 오브젝트의 바운드 쪽으로 이동하면 청크 분할면에 메시 표면이 포함되지 않아 다수의 청크가 버려지는 현상을 피할 수 있습니다. 원점을 흩어놓는다는 것은 구역이 너무 직선적으로 잘리는 것을 방지하는데 도움이 됩니다. XYZ 의 최대 이동 허용치를 입력 박스에 적어넣은 다음, [면으로 이동] 또는 [랜덤화] 버튼을 눌러 청크의 중심을 변경하고, 새 절단 패턴을 확인하십시오. 선택된 청크가 있다면, 선택된 것들만 변경됩니다.

04_FT_Noise.jpg

청크 옵션

청크 옵션에 있는 3개의 체크박스는 청크가 그 부모 메시로부터 잘라져 나갈 수 있는지, 청크가 메시의 주 몸체에 연결되어 있는 것으로 단정할 것인지, 청크가 잘려진 조각의 물리적 표현을 스폰할 것인지를 조절합니다.

파괴가능 체크박스는 청크가 충격에 반응해서 원래의 메시로부터 떨어져 나갈것인지를 결정합니다. 체크하지 않으면, 이 청크는 보통의 경우에는 이를 떨어져나가게 할 손상이나 기타 다른 충격에 반응하지 않습니다.

지지 청크 체크박스는 메시에 '지지대' 를 만드는데 사용됩니다. 청크가 메시에서 떨어져나가지 않았더라도, 연결된 청크 네트워크 중에 이 옵션이 켜진 청크를 찾을 수 없었다면, 물리법칙이 바로 적용됩니다. 바닥에 지지 청크 옵션을 켜 둔 기둥을 예로 들어 봅시다. 기둥 중간을 잘라버리면 윗부분은 건드리지 않았다 해도 바닥의 지지 청크와의 연결점이 없어지기에, 기둥 윗부분은 무너져버릴 것입니다. 이는 메시 프로퍼티의 bCompositeChunksExplodeOnImpact (임팩트시 복합 청크 폭발?) 옵션과 함께 사용할 수 있습니다. 이 옵션을 켜면 지지대와의 연결이 끊긴 청크는 다음 번 월드와의 콜리전이 있을 때 무너져 내립니다. 방금 전 기둥 윗부분의 예제에서라면, 기둥 윗부분이 바닥에 떨어지자마자 기둥 조각을 이루던 부분이 산산조각날 것입니다. 큰 오브젝트의 시뮬레이션 양을 줄이는 데 좋습니다. MinSupportConnection (지지대 연결 최소 수) 옵션이 모든 연결 부분 수보다 작도록 해야 합니다.

피직스 스폰 안함 체크박스는 Fractured Static Mesh 프로퍼티의 ChanceOfPhysicsChunk (피직스 청크 확률) 설정에 관계없이 피직스 조각을 스폰하지 않습니다.

청크 선택

청크 선택 부분의 [선택 키우기] 또는 [선택 줄이기] 버튼은 현재의 청크 선택 세트를 늘리거나 줄이는 데 사용합니다. 적어도 청크가 하나는 선택되어 있어야 작동합니다. 청크가 선택되면, 위젯을 사용해서 그 청크의 중심을 이리저리 옮겨 그 메시의 프랙처를 다시 계산할 수 있습니다. [맨위 선택]과 [맨밑 선택] 버튼은 맨위 또는 맨밑 청크 (오브젝트의 바운딩 박스에 의해 결정된)를 선택 세트에 추가합니다. 이는 지지 청크를 빠르게 선택하는 데 매우 큰 도움이 됩니다. [선택 반전] 버튼은 말 그대로 모든 청크의 선택 상태를 반전시킵니다.

05_FT_Selection.jpg

06_FT_MovedSlice.jpg

보기

보기 부분의 [모드 표시] 부분에는 세 가지 옵션이 있습니다. 이것만 보기 는 슬라이더 위치에 맞는 청크만을 보여줍니다. 이것말고 전부 보기 는 슬라이더 위치에 맞는 것을 제외한 청크를 전부 보여줍니다. 이것까지 보기 는 슬라이더의 현위치 이하 청크만을 보여줍니다. [조각 표시] 체크박스는 청크가 생성된 절단 패턴의 와이어프레임을 표시합니다. [조각 입체로 표시] 체크박스는 절단 패턴을 입체면으로 표현하여 더욱 쉽게 알아볼 수 있도록 합니다. 이 모드에서는 청크를 더욱 쉽게 선택할 수 있습니다. 청크 면을 클릭하면 되기 때문입니다. [보이는 조각 표시]는 현재 보이는 청크만 나타냅니다.

청크 렌더 모드는 여러가지가 있으며, [조각 색 모드] 박스에서 선택할 수 있습니다. 디폴트는 랜덤 으로, 청크에 임의로 색깔을 배정합니다. 지지 청크 는 지지 청크로 설정된 청크는 빨강, 그 이외에는 파랑으로 나타냅니다. 파괴가능 청크 는 반대인데, 파괴가능하면 빨강, 아니면 파랑으로 표시됩니다. 피직스 청크 없음 은 피직스 청크를 스폰하지 않도록 설정된 청크를 빨갛게 표시합니다. [코어 표시]는 코어 메시(가 할당된 경우) 렌더링을 토글합니다.

10_FT_ViewOnly.jpg

09_FT_ViewAllBut.jpg

08_FT_ViewUpTo.jpg

버텍스 컬러

메시가 잘리면, 메시의 안쪽 면에는 버텍스 알파가 적용됩니다. 버텍스가 메시의 원래 표면에 있는 면과 공유되면, 버텍스 알파는 1 로 설정되고, 다른 버텍스는 전부 버텍스 알파 0 으로 설정됩니다. 이는 프랙처의 뎁스에 따라 머티리얼에 다양성을 주는 데 사용할 수 있습니다.

UV

메시에 라이트맵 좌표 세트가 있고, 사용가능한 LightMapResolution (라이트맵 해상도)가 있다면, 엔진은 원래 UV 채널의 레이아웃을 사용하여 그 메시에 대한 라이트맵 UV 를 자동 생성합니다. 원래 라이트맵 UV는 약간 스케일 조정을 거쳐, 그 결과 발생한 빈 공간에 새 프랙처 트라이앵글이 메꿔집니다. 프랙처 메시에 유용한 기술은, 그 UV 세트를 새로이 생성된 내부 면에 적용된 머티리얼용 좌표로 사용하는 것입니다. 이 작업은 보통 내부 면에 적용된 머티리얼의 TextureCoordinate 노드를 값이 0 보다 큰 CoordinateIndex 와 함께 사용하는 식으로 합니다.

코어

프랙처 메시의 코어란, 프랙처 메시에 병합하여 오브젝트를 조각내는 데 있어 내부 구조물로 사용할 수 있는 별개의 스태틱 메시를 말합니다. 코어 메시는 최소 하나의 청크가 제거되기 전까지는 렌더되지 않습니다. 프랙처 메시에 코어 메시를 추가하려면, 콘텐츠 브라우저에서 알맞은 스태틱 메시를 선택한 다음, [코어 추가] 버튼을 누르면 됩니다. 그러면 그 메시의 인스턴스가 뷰어에 추가되며, 위젯이 표시되어 오브젝트의 이동/스케일이 가능합니다. 이 모드에서 스페이스바를 치면 트랜슬레이트(이동)/스케일 모드가 전환됩니다. 스케일 모드에서 Shift 키를 누르고 움직이면 코어 메시의 크기가 (모든 축에) 균등하게 조절되는 반면, Shift 키를 누르지 않고 한 축을 클릭 후 끌면 그 축의 크기만 조절됩니다.

프랙처 메시의 지오메트리 속에 완전히 파묻히도록 하는 것이 좋은데, 프랙처 메시에서 청크가 한 덩이 제거되어야 보이기 때문입니다. 코어 메시의 위치와 스케일 조절을 마치고서 [코어 확인] 버튼을 누르면 코어를 염두에 둔 상태로 프랙처 작업이 다시 이루어 집니다. 코어가 추가된 상태라면 [코어 제거] 버튼을 눌러 제거할 수 있습니다. 프랙처 메시 하나당 하나의 코어 메시만 가능합니다. 코어는 그 단순화된 콜리전에 따라 프랙처 메시를 다시 자릅니다. 단순화된 콜리전 모양의 면으로 청크를 단순히 다시 잘라보기야 하지만, 볼록하지 않은 모양으로는 자를 수 없습니다. 그렇기에 전형적으로 평평한 모양에서는 얇은 청크가 나오게 되나, 코너 혹은 좀 더 복잡한 지오메트리가 포함된 청크는 다시 자르지 않습니다.

12_FT_CoreMesh.jpg

13_FT_BrokenFromCore.jpg

자르기

[자르기] 버튼은 현재 절단 패턴에 따라 메시를 실제로 변경하고 폴리곤 면을 새로 계산하는 데 사용합니다. 이 버튼을 클릭하면, 패키지에 새 프랙처 스태틱 메시를 놓겠냐고 묻는 대화창이 열립니다. 균열된 지오메트리 제작의 마지막 단계입니다. 메시에 대한 UV 가 새로 생성되는 시점이기도 합니다. 새로이 생성되는 면 전부는 새 머티리얼을 가지고 매핑될 것이며, 이 머티리얼은 디폴트로 공백 상태입니다. 외부 지오메트리를 포함하지 않는 청크(, 즉 메시 내부에 완전히 파묻힌 청크)는 폴리 절약을 위해 버립니다.

07_FT_SaveObject.jpg

프랙처 메시를 월드에 놓기

프랙처 메시를 생성하고 패키지에 저장하는 작업까지 마치고나면, 이제 월드에 놓을 수 있습니다. 콘텐츠 브라우저에서 프랙처 메시를 찾아 선택합니다. 월드에 우클릭하고 액터 추가 > FracturedStaticMesh 추가를 선택합니다. 월드에 프랙처 메시가 놓이는 것을 확인할 수 있습니다.

14_FT_InGame.jpg

15_FT_BrokenInGame.jpg

손상이 메시에 영향을 주도록 하려면 DamageType 클래스의 bCausesFracture가 반드시 TRUE로 설정되어야 합니다.

프랙처 메시의 옵션


  • bCompositeChunksExplodeOnImpact 임팩트시 복합 청크 폭발? - 이 옵션은 지지 청크로 설정된 청크와의 연결이 끊어진 프랙처 메시 부분이 온전한 상태로 남아있게 만들지 여부입니다. 참이면 지지 청크로의 연결이 제거되어 무너지는 프랙처 메시 부분은 월드와의 접촉시 개별 청크로 산산조각납니다.
  • bFixIsolatedChunks 고립된 청크 고정? - 참이면 프랙처 메시는 지지 청크로의 연결을 무시하고, 모든 청크를 하나로 간주합니다. 한 메시의 모든 청크는 프랙처 메시의 다른 청크와의 연결 상황과 무관하게 부서질 때까지 제자리에 남아있습니다.
  • bUniformFragmentHealth 동등한 조각 체력? - 원래 오브젝트와 청크 크기의 비율에 따라 체력을 조절하는 기능을 끄는 옵션입니다. 원래는 체력은 청크의 크기와 비례합니다.
  • ChanceOfPhysicsChunk 피직스 청크 확률 - 청크가 대미지를 받을 때 파괴된 청크의 물리적 표현을 스폰시킬 확률을 조절합니다. 디폴트는 1.0 (100%) 입니다.
  • ChunkAngVel 청크 각 속도 - 청크가 메인 프랙처 메시에서 떨어져나갈 때 적용할 각(스핀) 속도를 나타냅니다.
  • ChunkLinHorizontalScale 청크 선형 가로 스케일 - 조각이 떨어져나갈 때 세로 이동에 대해 가로 이동을 편향시키는 데 사용합니다. 값이 높을수록 가로 속도가 높아짐을 나타냅니다.
  • ChunkLinVelocity 청크 선 속도 - 청크가 메시에서 떨어져나갈 때 적용할 속도의 양입니다. 청크의 이동 방향은 원래 외부 지오메트리의 평균 표면 노멀에 의해 결정됩니다.
  • DynamicOutsideMaterial 다이내믹 외부 머티리얼 - 설정되면 스폰되는 다이내믹 부분상의 OutsideMaterialIndex (외부 머티리얼 인덱스)로 지정된 섹션에 대한 머티리얼로 설정됩니다.
  • ExplosionChanceOfPhysicsChunk 폭발시 피직스 청크 확률 - 폭발 대미지로 인해 프랙처에 스폰되는 피지컬 청크 확률 스케일입니다.
  • ExplosionPhysicsChunkScaleMax 폭발 피직스 청크 스케일 최대 - 폭발 대미지로 인해 스폰되는 피직스 청크의 스케일 최대값입니다.
  • ExplosionPhysicsChunkScaleMin 폭발 피직스 청크 스케일 최소 - 폭발 대미지로 인해 스폰되는 피직스 청크의 스케일 최소값입니다. ExplosionPhysicsChunkScaleMax/Min 값이 같다면, 다양성이 없습니다.
  • ExplosionVelScale 폭발 속도 스케일 - 폭발 대미지로 인해 스폰되는 피직스 청크에 전해지는 속도 스케일입니다.
  • FragmentDestroyEffect 조각 파괴 이펙트 - 이 필드에 파티클 시스템을 입력하면 원래 프랙처 메시에서 떨어져나가는 청크 중심에 파티클 시스템을 스폰시킵니다. 이펙트는 분출 방향이 아래를 향하도록 X 를 맞추고, 떨어지는 조각에 부착시킵니다.

16_FT_AddEffect.jpg

17_FT_EffectInGame.jpg

  • FragmentDestroyEffectScale 조각 파괴 이펙트 스케일 - FragmentDestroyEffect (조각 파괴 이펙트)가 스폰될 때 적용할 균등 스케일입니다.
  • FragmentHealthScale (조각 체력 스케일) - 프랙처 스태틱 메시에서 청크를 떼어내는 데 필요한 디폴트 대미지량을 스케일 조절합니다. 각 청크의 체력은 크기에 따라 다릅니다.
  • FragmentMaxHealth 조각 최대 체력 - 청크의 최대 체력을 설정합니다.
  • FragmentMinHealth 조각 최소 체력 - 청크의 최소 체력을 설정합니다.
  • LoseChunkOutsideMaterial 청크 외부 머티리얼 잃기 - 스폰된 피직스 청크에 적용된 머티리얼을 덮어씁니다. 영향받는 머티리얼 ID는 OutsideMaterialIndex 에 설정되어 있습니다.
  • MinConnectionSupportArea 지지 연결 최소 영역 - 두 청크가 연결된 것으로 간주되기 위해 공유해야하는 최소 표면 영역입니다. 한 청크가 프랙처 메시의 지지 청크에 연결되었나를 결정합니다.
  • bSpawnPhysicsChunks 피직스 청크 스폰? - 디폴트는 참입니다. 거짓이면 조각에 쏴도 피직스가 스폰되지 않습니다. 그래도 FragmentDestroyEffect (조각 파괴 이펙트)는 나갑니다.
  • NormalPhysicsChunkScaleMax 일반 피직스 청크 스케일 최대 - 일반 대미지에 스폰되는 피직스 청크의 최대 크기입니다.
  • NormalPhysicsChunkScaleMin 일반 피직스 청크 스케일 최소 - 일반 대미지에 스폰되는 피직스 청크의 최소 크기입니다.

프랙처 툴 제한사항

프랙처 툴은 어느 스태틱 메시에도 작동하나, 모양이 복잡하면 최적의 결과가 나오지 않을 것입니다. 내부 구조가 없는 오브젝트에서 최적의 결과를 얻을 수 있습니다. 내부에 면이 있는 오브젝트는 분할되는 오브젝트의 내부에 걸친 면이 잘못 생성될 확률이 있습니다 (튜브나 속이 뚫린 큐브처럼 상호교차되는 면이 있거나 안에 뚫린 공간이 있거나 하면 그 확률은 훨씬 높아집니다).

프랙처 둘은 닫힌 메시에만 올바르게 작동합니다. 파이프처럼 속이 빈 메시에도 제대로 작동하지 않습니다.

기술 정보


프랙처 툴은 3D Voronoi 계산을 사용합니다. 각 '청크'는 각 청크 원점에 가장 가까운 공간 볼륨을 나타냅니다.

렌더 비용 면에서 프랙처 스태틱 메시는 보통의 스태틱 메시와 똑같으며, (버텍스 라이팅만 지원하기는 해도) 동일한 종류의 미리계산된 라이팅을 사용합니다. 그러나 라이팅 계산시 셀프-섀도잉은 무시되는데, 그렇지 않으면 모든 내부 면이 까매지기 때문입니다. 아무튼 프랙처 메시 사용에 관계된 비용이 없는 것은 아니며, 다음과 같습니다:

  • 프랙처로 만들면 메시의 폴리/버텍스 수가 늘어납니다.
  • 버텍스 라이팅 데이터로 인해 결과적으로 메모리 부하가 늘어납니다.
  • 인스턴스별 인덱스 버퍼의 메모리 부하.
  • 표시여부 상태를 변경할 때 인덱스 버퍼 재계산 시간이 걸립니다.
  • 스폰된 다이내믹 피직스 조각의 부하. 다이내믹 라이팅마저 사용합니다.

렌더되는 폴리 카운트를 가급적 줄여보시기 바랍니다. 청크의 내부 면은 이웃 중 하나가 안보여야지만 그려집니다. 프랙처 툴을 열어두면 좌상단에 총 폴리 수와 현재 렌더되는 폴리 수를 둘 다 확인할 수 있습니다. 베이스 메시의 단순화된 콜리전은 조각나도 변하지 않습니다. 이는 게임플레이에 너무 큰 영향을 끼치지 않는 '클라이언트측' 이펙트용이었습니다. 그러나 폴리별 콜리전(무기 등)은 숨긴 조각을 올바르게 따르지 못합니다. 스폰되는 각 조각은 피직스 콜리전에 단순한 바운딩 박스를 사용합니다.

FractureManager

WorldInfo 오브젝트에는 FractureManager 클래스가 정의되어 있습니다 (*Game.ini 파일의 FractureManagerClassPath 를 사용해 설정). 이 클래스를 통해 물리 조각을 스폰한다든가 파티클 이펙트를 낸다든가 등등 게임-지정 방식으로 프랙처 스태틱 메시 행위의 다양한 함수를 쉽게 구현할 수 있습니다.