UDN
Search public documentation:

PhysXSoftBodyReferenceKR
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 소프트 바디


문서 변경내역: Bryan Galdrikian 작성. 홍성진 번역.

개요


UE3의 소프트 바디는 클로쓰나 메탈-클로쓰와 비슷하게, 스켈레탈 메시의 확장 옵션으로 사용가능합니다. 에디터에서의 사용법, 예를 들어 소프트 바디 메시 임포트, 편집, 레벨에 놓기 등 역시도 클로쓰 애셋 처리방식과 밀접하게 닮아 있습니다. 이 튜토리얼에서는 소프트 바디에 대한 것을 자세히 다루고 클로쓰와 공유되는 기본 개념은 가볍게 훑을 것이니, 최소한 클로쓰 사용법은 기본적으로 숙지하고 계신 상태에서 계속 읽으시는 것이 좋습니다.

전체적인 관점에서 보면 둘 사이에도 차이점은 있습니다:

클로쓰 소프트 바디
클로쓰 시뮬레이션에서, 시뮬레이트된 메시는 트라이앵글 메시이며 그 버텍스는 항상 스켈레탈 메시의 그래픽 표현(말하자면 클로쓰-본에 부착된 것들)의 부분 집합입니다. 소프트 바디에 대해, 시뮬레이트된 메시는 볼륨식(volumetric)이며 트라이앵글이 아닌 사면체(tetrahedron)로 구성됩니다. 스켈레탈 메시의 그래픽 메시는, 그래픽 메시가 리짓 바디에 입혀지는 것과 유사하게 시뮬레이트된 사면체에 "입혀지게(skinned)" 됩니다.
시뮬레이트된 클로쓰 메시의 해상도는 내재된 그래픽 메시의 해상도에 직접 영향을 받습니다. 시뮬레이트된 메시의 해상도는 그래픽 메시의 해상도와 별개로 (애님세트 에디터 내에서 스켈레탈 메시를 변경할 때 적절한 소프트 바디 사면체 메시 생성 파라미터를 선택하여) 제어 가능합니다.
클로쓰의 변형(deformation)에는 행위를 관장하는 주요 파라미터가 둘 있으며, 소위 다음과 같은 동작에 대한 저항력입니다:
- 클로쓰 잡아당기기
- 클로쓰 구부리기
소프트 바디의 기형 동작에도 역시 다음과 같은 동작에 대한 "stiffness"(강성) 파라미터도 둘 있습니다:
- 소프트 바디 잡아당기기
- 소프트 바디의 볼륨 바꾸기

게다가 클로쓰에는 현재 소프트 바디에는 지원되지 않는 부가 기능도 여럿 있습니다. 예를 들어:

  • 시뮬레이션 메시의 내부 찢기는 지원되지 않습니다.
  • "Auto Attachment"(자동 부착), 예로 충돌하는 피직스 오브젝트에 소프트 바디의 자동 부착은 지원되지 않습니다. ("특수 본"을 통해 부착해야 합니다.)
  • 소프트 바디 시뮬레이션 결과와 일반 스키닝과의 혼합은 지원되지 않습니다. (예로 "SoftBodyBlendWeight"(소프트 바디 블렌드 웨이트)는 없습니다.)

3D 콘텐츠 제작 프로그램으로 스켈레탈 메시 애셋 만들기


1단계는 클로쓰 생성법과 동일합니다. 언리얼 에디터의 입력용 필요 조건은, 버텍스에 하나 이상의 "소프트 바디 본"이 할당된 스켈레탈 메시이기만 하면 됩니다. Max/Maya같은 3D 편집 툴 내에서 메시 애셋을 만들 때, 소프트 바디 시뮬레이션에 의해 영향을 받아야 하는 메시의 버텍스가 부착될 곳에 (0보다 큰 가중치(weight)의) 본을 최소 하나 만들어야 함을 명심하십시오.

편집이 끝났으면 스켈레탈 메시를 언리얼 에디터로 임포트할 파일로 익스포트합니다.

(자세한 내용은 언리얼 마스터하기: 피직스 의 섹션 15.8, 클로쓰 문서를 참고하시기 바랍니다.)

UE3에 메시를 임포트하고 소프트 바디 프로퍼티 설정하기


3D 편집 툴로 만든 스켈레탈 메시를 콘텐츠 브라우저 내로 임포트합니다. 썸네일을 클릭하면 스켈레탈 메시가 애님세트 에디터 에 열립니다. 아래는 본 3개가 부착된 스켈레탈 메시 (SoftBodySausage) 의 뷰 예제입니다. (보기 -> 본 이름 표시 를 통해 시각화했습니다.)

소프트 바디 프로퍼티는 미리보기창 왼쪽 Mesh 탭 아래의 SoftBody 부분을 펼쳐 조작할 수 있습니다.

스켈레탈 메시의 중요 프로퍼티는 위와 같습니다:

  • bForceCPUSkinning (CPU 스키닝 강제여부) - 소프트 바디 버텍스가 실제로 시뮬레이트되게 하려면 이걸 체크해야 합니다.
  • SoftBodyBones (소프트 바디 본) - 클로쓰에서의 "ClothBones" 배열과 마찬가지로, 스켈레탈 메시의 어느 부분이 소프트 바디로써 시뮬레이트될지를 이 배열에 입력한 본 이름을 통해 결정합니다. 여기서 본 3개 전부의 이름을 전부 입력했기에, 전체 메시가 사용될 겁니다.
  • SoftBodyVolume/Stretching-Stiffness (소프트 바디 볼륨/잡아당기기 강성)
    • 둘 다 최대값 1.0으로 설정하면 원래 모습을 가급적 유지하려 하는 매우 딱딱한 소프트 바디가 됩니다.
    • 볼륨-강성은 1.0으로 유지하고 잡아당기기-강성을 (0은 안되고, 0.0001과 같이) 매우 낮은 값으로 하면 "액체 덩어리"형 동작을 하게 됩니다. 예로, 소프트 바디가 전체 볼륨은 유지하려 하지만 원래 모양은 잃게 됩니다.
    • 두 값 모두 매우 낮게 설정하면 소프트 바디가 원래 모양을 거의 잃게 됩니다.
  • SoftBodyParticleRadius (소프트 바디 파티클 반경) - 클로쓰의 "두께"에 해당하는 값입니다. 소프트 바디와 다른 피직스 오브젝트와의 간격을 정하게 되는 최소 충돌-거리입니다. 이 값을 높이면 어떤 경우 소프트 바디가 오브젝트를 삐져나가는 현상을 방지할 수 있습니다.
  • SoftBodyDetailLevel, SoftBodySubdivisionLevel, bSoftBodyIsoSurface (소프트 바디 디테일 레벨, 소프트 바디 하위분할 레벨, 소프트 바디 이방성 표면여부) - 생성되는 사면체 메시의 해상도를 조절합니다. 자세한 것은 아래를 참고하십시오.

기타 파라미터는 클로쓰의 것과 의미상 다소 동일합니다.

클로쓰 메시와 대조적으로, 소프트 바드 메시는 그래픽 메시를 직접 사용하지 않습니다만, 먼저 그래픽 스켈레탈 메시를 기반으로 한 볼륨 메시 생성 알고리즘을 실행시켜야 합니다. 이 알고리즘은 기존의 2차원 표면 메시를 3차원 모양으로 추정하는 사면체 세트를 생성하게 됩니다.

소프트 바디 시뮬레이트 전에, 사용자가 직접 에디터 툴바의 (아래 반전된) 두 사면체 아이콘 먼저것을 클릭하여 사면체 메시 생성을 트리거시켜야 합니다.

결과 추정치는 와이어프레임 모델로 표시됩니다. (마리보기는 "보기" 메뉴 아래 "소프트 바디 사면체 표시" 항목을 클릭하여 끄고 켤 수 있습니다.)

ALERT! : 사면체 메시가 표시되지 않으면, "SoftBodyBones" 배열에 적절한 본 세트를 추가했는지와 bForceCPUSkinning 을 켰는지를 확인하시기 바랍니다.

사면체 메시 미리보기

사면체 메시 미리보기는 물론, "소프트 바디 미리보기 시뮬레이션 토글" 아이콘을 클릭하여 시뮬레이션 동작을 미리볼 수도 있습니다.

사면체 메시 생성 알고리즘은 시뮬레이션 메시의 해상도/품질을 조절하기 위해 튜닝할 수 있는 파라미터가 약간 있습니다:

  • SoftBodyDetailLevel / SoftBodySubdivisionLevel (소프트 바디 디테일 레벨 / 소프트 바디 하위분할 레벨) - 소프트 바디 메시의 해상도를 조절합니다. 낮추면 일반적으로 사면체와 버텍스 수가 적은 시뮬레이션 메시가 나오며, 시뮬레이트 비용도 줄어듭니다.
  • bSoftBodyIsoSurface (소프트 바디 이방성 표면여부) - 켜지면 사면체 생성기가 먼저 그래픽 메시 주변의 "이방성 표면"을 먼저 계산하고, 이것을 입력으로, 날 메시 데이터 직접 사용 대신 사용합니다. 원본 그래픽에 퇴화된 트라이앵글이 많을 경우에 유용합니다. 퇴화된 트라이앵글은 생성기가 퇴화된 시뮬레이션 메시를 출력하게 만들어, 시뮬레이션 부작용이 생기게 됩니다.

ALERT! 주: 이 파라미터 변경사항이 효과를 내게 하려면 사면체 메시를 재생성해야 합니다.

부착

소프트 바디는 "SoftBodySpecialBones"(소프트 바디 특수 본)을 통해 스켈레탈 메시에 부착할 수 있는데, 클로쓰가 "ClothSpecialBones"(클로쓰 특수 본)을 통하는 것과 같은 식입니다. (자세한 것은 PhysX Cloth Reference KR 페이지를 참고해 주십시오.)

짧게 요약하면, 필수 단계는 이렇습니다:

  1. 단순 피직스 애셋은 스켈레탈 메시용으로 만들어야 합니다. 그런 애셋을 만들려면 콘텐츠 브라우저 에서 소프트 바디의 스켈레탈 메시에 우클릭하고 "피직스 애셋 새로 생성"을 선택합니다. "Minimum Bone Size"(최소 본 크기)가 -1이 되게 선택합니다.
  2. 이제 각 본에 대해 자동 생성된 충돌 박스 몇이 포함된 스켈레탈 메시가 PhAT 에 표시될 겁니다. 이 기본값이 적절하지 않은 경우 충돌 지오메트리에 대해 스케일/방향/블로킹 동작을 부가적으로 편집할 수 있습니다. (PhAT 유저 가이드 참고)
  3. 부작된 소프트 바디는 이제 레벨에 놓을 수 있습니다. 스켈레탈 메시 액터의 스켈레탈 메시 콤포넌트가 그 PhysicsAsset (피직스 애셋) 프로퍼티 안에 참조된 피직스 애셋을 새로 만들고 bHasPhysicsAssetInstance (피직스 애셋 인스턴스 소유여부)도 체크했음을 확인하십시오. 부가적으로 스켈레탈 메시 콤포넌트 아래의 피직스 가중치도 1.f 로 설정하십시오.

레벨에 놓고 나면 다음과 같은 시각화 콘솔 명령을 통해 사면체로부터의 어느 버텍스가 피직스 애셋에 부착되었는지를 측정하기에 좋습니다: nxvis softbody_attachmentnxvis softbody_mesh. 이 둘 다 아래에 사용되었습니다.

ALERT! 주: SoftBodySpecialBones (소프트 바디 특수 본)은 그래픽 메시의 버텍스를 참조하는 반면, 실제 부착된 버텍스는 시뮬레이트된 사면체 메시의 것이기에, (클로쓰와는 달리) 그 둘간에 직접적인 일치는 있을 수 없습니다. 그래픽 메시의 버텍스가 부착 대상일 때, 거기에 포함된 사면체의 버텍스 전부가 대신 사용됩니다만, 원본 버텍스까지의 거리가 스켈레탈 메시의 SoftBodyAttachmentThreshold (소프트 바디 부착 임계점) 이내일 경우만입니다. 고로 이 값을 바꾸면 '특수 본' 사면체 버텍스의 부착이 얼마나 멀리까지 유지될지에 영향을 끼치게 됩니다.

게다가 부착과 시뮬레이션간의 혼합은 없습니다. 부착은 바이너리이며, 사면체 버텍스는 완전 부착되거나, 완전 시뮬레이트되거나 둘 중 하나입니다.

소프트 바디를 레벨에 추가하기


소프트 바디를 레벨에 놓으려면, 콘텐츠 브라우저 창에서 스켈레탈 메시를 선택하고 레벨 에디터에 우클릭하여 씬에 스켈레탈 메시 액터를 추가합니다.

새로이 생성된 액터에 대한 프로퍼티창을 엽니다:

SkeletalMeshActor 아래에 부가 범주 SoftBody 가 있습니다. 레벨에서 소프트 바디를 제대로 돌리려면, 시뮬레이션 체크박스를 켜십시오. 레벨 지오메트리와 충돌하게 하려면, 충돌하게 만들 채널도 적절히 선택해 줘야 합니다. 예를 들어 위의 스크린샷에서 "default" 채널입니다.

기타등등

  • 게임이 실행중일 때 사용할 수 있는 콘솔 명령이 둘 있습니다:
    • nxvis softbody_mesh - 소프트 바디에 관련된 사면체 메시를 시각화시킵니다.
    • nxvis softbody_attachment - 충돌 지오메트리나 월드에 부착된 지점을 표시합니다.
  • 소프트 바디 모양의 "stiffness"(강성) 파라미터 효과는 불행히도 시뮬레이션 시간 증분(timestep) 크기에 따라 다릅니다. 시간 증분이 작을수록 강성값이 바뀌지 않았어도 소프트 바디 동작이 더 딱딱해집니다. 가변 시뮬레이션 시간 증분을 사용할 때는, 실제 경과된 시뮬레이션 시간의 정점에서 소프트바디가 "그냥 갑자기" 꿈틀거리기 시작할 수도 있습니다.
    대안으로는 소프트 바디를 고정된 시간 증분을 가진 구획에서 돌려야 합니다. (예로 에디터의 보기 -> World 프로퍼티 -> Physics -> PhysicsTimings -> CompartmentTimingSoftBody -> bFixedTimeStep).

내려받기