UDN
Search public documentation:

PhysXClothReferenceKR
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 홈 > 피직스 > 클로쓰(Cloth) 참고서

클로쓰(Cloth) 참고서


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

개요


언리얼 엔진 3 의 클로쓰(Cloth) 시뮬레이션은 PhysX 의 클로쓰 시뮬레이션 엔진으로 처리됩니다. 이 기술을 통해 커튼이나 깃발같은 상호작용형 장식을 만들 수 있습니다. 클로쓰가 콜리전 이벤트를 받을 수 있게 되면, 플레이어나 그 무기는 물론 기타 운동 기반 이벤트에 영향을 받을 수가 있기 때문입니다.

이 스크린샷은 바람에 나부끼는 깃발을 나타냅니다.

UDKFlagExample.jpg

PhysX 클로쓰 만드는 법


PhysX 는 미리 테셀레이트해 놓은 스켈레탈 메시, 그 클로쓰 버텍스가 본에 웨이팅된 클로쓰를 흉내닙니다. 클로쓰를 메시의 일부에 붙이려거든, 에지 클로쓰 버텍스 일부를 다른 본으로 설정하십시오.

스켈레탈 메시에 본 셋업하기

이 스크린 샷에서 깃발이 가로 철봉에 붙어있기 때문에, 버텍스 맨 윗열은 다른 본에 웨이팅되어 있습니다. 나머지 깃발 버텍스는 깃발 본에 웨이팅되었습니다.

UDKFlagSetup.jpg

다중 클로쓰 시뮬레이션용 본 셋업하기

이 스크린 샷에서 가로 철봉에 깃발이 세 개 붙어있기에 클로쓰 시뮬레이션을 제어하는 본은 여섯 개 있습니다. 각각의 깃발에 대해 본 하나는 깃발 메시 맨 윗열에 웨이팅되고, 둘째 본은 깃말 메시 나머지에 웨이팅됩니다. 이렇게 하여 철봉에 깃발이 확실히 붙어있게 됩니다.

UDKTriFlagSetup.jpg

게임에서 본만 정의해 준다면야 클로쓰 갯수는 원하는 만큼 시뮬레이션 가능합니다.

UDKTriFlagExample.jpg

클로쓰 시뮬레이션용 스켈레탈 메시 셋업하기

대부분의 스켈레탈 메시에는 클로쓰 시뮬레이션이 필요치 않기에, 클로쓰는 디폴트로 꺼져 있습니다. 그래서 쓰려면 직접 켜줘야 합니다. PhysX 클로쓰는 CPU 상에서 시뮬레이팅되므로 CPU 스키닝을 먼저 켜 줘야 합니다. 애님세트 에디터에서 Skeletal Mesh 탭 안의 프로퍼티로 토글시켜 주면 됩니다.

EnableCPUSkinning.jpg

CPU 스키닝을 켠 다음, 클로쓰 버텍스가 웨이팅되어 있는 본을 정의해 줘야 합니다. Skeletal Mesh 탭 안에서 아래로 스크롤한 다음, Cloth 부분을 펼칩니다. Cloth Bones 배열에 항목을 추가한 다음 본 이름을 Skeleton Tree 패널에 나타나는 그대로 쳐 넣습니다.

AddClothBones.jpg

여기까지가 클로쓰 시뮬레이션 셋업에 있어서 최소 단계입니다. Toggle Cloth button 버튼을 클릭하면 클로쓰 시뮬레이션을 시작할 수 있습니다. Cloth 와/또는 Advanced Cloth 섹션의 변수를 만져주면 바로 변화를 확인할 수 있을 것입니다.

PreviewClothSimulation.jpg

W 키를 누르면 미리보기에 사용되는 바람을 조절할 수 있습니다. W 키 + 좌클릭 드래그는 바람의 방향, + 우클릭( 후 위아래) 드래그는 바람의 세기 조절입니다.

콜리전과 PhysX 클로쓰


클로쓰는 리짓 바디랑만, 즉 피직스 애셋이 있는 스켈레탈 메시나 리짓 바디가 있는 스태틱 메시와 충돌합니다. 정상적이라면 이 기능은 디폴트로 켜져 있지 않지만, 매우 쉽게 켤 수 있습니다. 깃발 메시의 경우, 깃발은 깃대랑 충돌할 수 있어야 합니다. 그렇기에 스켈레탈 메시에 대한 피직스 애셋을 생성한 것이죠. 리짓 바디 생성 과정에서 세심한 주의를 기울였는데, 정확한 클로쓰 시뮬레이션이 필요했기 때문입니다. 피직스 애셋 시뮬레이션을 통해 리짓 바디가 콜리전에 제대로 적용되는지 확인해 보면 됩니다.

FlagPhysicsAsset.jpg

여기서 클로쓰를 켠 스켈레탈 메시를 월드에 놓을 수 있습니다. 클로쓰 콜리전의 정상 작동을 위해 설정해야 하는 프로퍼티가 몇 있습니다. 먼저 스켈레탈 메시 Physics AssetHas Physics Asset Instance 를 체크합니다.

FlagSkeletalMeshComponentProperties.jpg

다음으로 Cloth 파라미터를 조절해 줘야 합니다. Cloth 부분을 펼치고요. Enable Cloth Simulation, Cloth Awake On Startup 을 체크하고 Cloth Wind 를 설정하여 물결치는 듯한 대기의 흐름을 조성해 줍니다.

FlagClothProperties.jpg

마지막으로 Collision 부분을 펼칩니다. Block Rigid Body 를 체크하고요. 상호작용이 필요한 액터는 모두 리짓 바디를 블록해야 합니다. PhysX 는 여러가지 다른 피직스 시뮬레이션과의 상호작용이 뭐가 가능하고 뭐는 불가능한지 걸러내는 데 있어 콜리전 채널을 사용합니다. 이를 통해 클로쓰와 상호작용하는 것과 하지 않는 피직스 액터를 만들어 낼 수 있습니다. 깃발 메시는 클로쓰와 충돌해야 하기에, Cloth 채널을 RBCollide With Channels 내에 설정해야 합니다.

FlagCollisionProperties.jpg

클로쓰는 실시간 모드를 켜도 에디터 월드 뷰포트 안에서는 시뮬레이팅되지 않습니다. 그러나 PIE 에서는 클로쓰 시뮬레이션도 자체 콜리전도 돌아갑니다. 클로쓰와 충돌하는 액터를 구성하려면, 위와 같이 Collision 프로퍼티를 설정해 주십시오. 스켈레탈 메시의 경우 피직스 애셋이 콜리전에 사용되니, 곡 할당해 줘야 한다는 점 기억하시기 바랍니다.

언리얼스크립트를 사용하여 클로쓰 켜기

가끔 스켈레탈 메시 컴포넌트의 초기 클로쓰 시뮬레이션을 껐으면 할 때가 있습니다. 탁자위에 놓여 있다든가, 시뮬레이션이 낭비인 위치에 있다던가 할 경우죠. 스켈레탈 메시 컴포넌트의 클로쓰를 켜기 위해서는 다음 코드 스니펫을 쓰면 됩니다.

// 클로쓰 시뮬레이션 켜고 끄기
SkeletalMeshComponent.SetEnableClothSimulation(true);

언리얼스크립트 안에서 PhysX 클로쓰 사용하기

PhysX 클로쓰 API 대부분은 언리얼스크립트에 노출되어 있어, 런타임 트윅을 통해 재미난 결과를 낼 수 있습니다. 이들 함수 모두 SkeletalMeshComponent.uc 안에서 찾을 수 있으며, 스켈레탈 메시 컴포넌트에 사용할 수 있습니다.

시뮬레이션 함수

  • SetEnableClothSimulation(bool bInEnable) - 이 스켈레탈 메시에 대한 클로쓰 시뮬레이션을 켜고 끕니다.
  • SetClothFrozen(bool bNewFrozen) - 활성 클로쓰 시뮬레이션을 토글합니다. SetEnableClothSimulation 보다 싸며, 얼었을 때 모양이 유지됩니다.
  • SetEnableClothingSimulation(bool bInEnable) - 활성 클로쓰 시뮬레이션을 토글하고, 얼었을 때 그 모양을 유지합니다.
  • UpdateClothParams() - SkeletalMesh 프로퍼티에서 내부 클로쓰 시뮬레이션 파라미터를 업데이트합니다.
  • SetClothExternalForce(vector InForce) - 클로쓰에 적용되는 외부 힘을 변경합니다. 바뀔 때까지 계속해서 적용됩니다.
  • SetAttachClothVertsToBaseBody(bool bAttachVerts) - 이 컴포넌트 액터가 붙어있는 피직스 바디에서 버텍스를 붙였다/뗐다 합니다.
  • ResetClothVertsToRefPose() - 클로쓰 안 모든 버텍스를 레퍼런스 포즈로 옮기고, 그 속도를 0 으로 만듭니다.

Get 함수

  • GetClothAttachmentResponseCoefficient() - 클로쓰의 어태치먼트 반응 계수를 반환합니다.
  • GetClothAttachmentTearFactor() - 클로쓰의 어태치먼트 테어(찢기) 팩터를 반환합니다.
  • GetClothBendingStiffness() - 클로쓰의 접힘 강성을 반환합니다.
  • GetClothCollisionResponseCoefficient() - 클로쓰의 콜리전 반응 계수를 반환합니다.
  • GetClothDampingCoefficient() - 클로쓰의 제동 계수를 반환합니다.
  • GetClothFlags() - 클로쓰에 대한 플랙을 나타내는 비트 마스크를 반환합니다.
  • GetClothFriction() - 클로쓰의 마찰을 반환합니다.
  • GetClothPressure() - 클로쓰의 압력을 반환합니다.
  • GetClothSleepLinearVelocity() - 클로쓰의 잠 선 속도를 반환합니다.
  • GetClothSolverIterations() - 클로쓰의 솔버 이터레이션 횟수를 반환합니다.
  • GetClothStretchingStiffness() - 클로쓰의 스트레칭 강성을 반환합니다.
  • GetClothTearFactor() - 클로쓰의 테어 팩터를 반환합니다.
  • GetClothThickness() - 클로쓰의 두께를 반환합니다.

Set 함수

  • SetClothAttachmentResponseCoefficient(float ClothAttachmentResponseCoefficient) - 클로쓰의 어태치먼트 반응 계수를 설정합니다.
  • SetClothAttachmentTearFactor(float ClothAttachTearFactor) - 클로쓰의 어태치먼트 테어 팩터를 설정합니다.
  • SetClothBendingStiffness(float ClothBendingStiffness) - 클로쓰의 접힘 강성을 설정합니다.
  • SetClothCollisionResponseCoefficient(float ClothCollisionResponseCoefficient) - 클로쓰의 콜리전 반응 계수를 설정합니다.
  • SetClothDampingCoefficient(float ClothDampingCoefficient) - 클로쓰의 제동 계수를 설정합니다.
  • SetClothFlags(int ClothFlags) - 클로쓰의 플랙 비트 마스크를 설정합니다.
  • SetClothFriction(float ClothFriction) - 클로쓰의 마찰을 설정합니다.
  • SetClothPressure(float ClothPressure) - 클로쓰의 압력을 설정합니다.
  • SetClothSleepLinearVelocity(float ClothSleepLinearVelocity) - 클로쓰의 잠 선 속도를 설정합니다.
  • SetClothSolverIterations(int ClothSolverIterations) - 클로쓰의 솔버가 사용할 이터레이션 횟수를 설정합니다.
  • SetClothStretchingStiffness(float ClothStretchingStiffness) - 클로쓰의 스트레칭 강성을 설정합니다.
  • SetClothTearFactor(float ClothTearFactor) - 클로쓰의 테어 팩터를 설정합니다.
  • SetClothThickness(float ClothThickness) - 클로쓰의 두께를 설정합니다.
  • SetClothSleep(bool IfClothSleep) - 클로쓰의 잠 상태를 설정합니다.
  • SetClothPosition(vector ClothOffSet) - 클로쓰의 위치를 설정합니다.
  • SetClothVelocity(vector VelocityOffSet) - 클로쓰의 속도를 설정합니다.

Attachment 함수

  • AttachClothToCollidingShapes(bool AttatchTwoWay, bool AttachTearable) - 클로쓰를 현재 충돌하는 셰이프에 붙입니다.

Valid Bounds 함수

  • EnableClothValidBounds(bool IfEnableClothValidBounds) - 클로쓰에 대한 적합 바운드 계산을 켭니다.
  • SetClothValidBounds(vector ClothValidBoundsMin, vector ClothValidBoundsMax) - 클로쓰에 사용할 적합 바운드를 설정합니다.

PhysX 클로쓰 찢기


언리얼 엔진 3 에서는 클로쓰 시뮬레이션 메시를 찢을 수 있습니다. Enable Cloth Tearing 를 체크하고 Cloth Tear Factor 를 설정해 주기만 하면 됩니다. Cloth Tear Factor 로는 클로쓰가 찢어지기 전까지 힘을 얼마나 받을 수 있을지 나타냅니다. 이상적으로는 1 이상으로 설정해 줘야 손대면 톡 하고 떨어지지 않을 것입니다. 복잡한 메시의 경우 올바른 결과를 내기 위해서는 Cloth Tear Reserve 를 올려줘야 할 수도 있습니다.

ClothTearingProperties.jpg

NxForceField 클래스를 사용하여 힘을 적용해야 합니다.

ClothTearingExample.jpg

PhysX 클로쓰 디버깅하기


애님세트 에디터의 PhysX Debug 메뉴를 통해 디버그 렌더링 정보를 토글시킬 수 있습니다. 이 옵션을 체크해 두면 게임에서도 디버그 정보가 표시됩니다.

PhysXClothDebug.jpg

기타 PhysX Cloth 프로퍼티


  • Use Cloth COM Damping 클로쓰 질량중심 제동 사용 - 제동이 적용되는 클로쓰의 스트레칭을 유지하는 데 도움이 됩니다. 보통 제동이라 함은 월드 프레임에 상대적으로 무언가를 느리게 하는 것입니다. 그러나 (봉에 붙어있는 깃발처럼) 클로쓰 일부가 붙어있고, 붙은 것이 빠르게 움직인다면, 제동이 걸리지 않은 버텍스는 봉대에서 늘어지게 될 수 있습니다. COM Damping 을 켜 두면 클로쓰는 "로컬 프레임" 안에서 느려지게 되어, 이러한 효과가 줄어듭니다.
  • Cloth Relative Grid Spacing 클로쓰 상대 그리드 스페이싱 - 최적화 파라미터입니다. 첫-패스 콜리전 디텍션에 대한 클로쓰 내부 표상 방식을 정의합니다. (광범위(broadphase) 컬링입니다.) 이 수치가 매우 작다면 광범위 부하는 커지나 세부적인 콜리전 계산 횟수는 줄어들며, 너무 크다면 굵직하던 것이 미세한 계산으로 전환됩니다. 보통 이 파라미터에는 최적의 범위가 있어, 디폴트는 0.25 로 설정해 두었습니다.
  • Enable Cloth Two Way Collision 클로쓰 두 방향 콜리전 켜기 - 정상적인 경우 리짓 바디가 클로쓰에 영향을 끼치지, 그 반대로는 아닙니다. 즉 오브젝트에 클로쓰를 떨어뜨리면 오브젝트를 살포시 감싸게 되는데, 이 상태에서 클로쓰를 잡아당겨 봐야 오브젝트에는 힘이 전해지지 않는다는 뜻입니다. bEnableClothTwoWayCollision 을 설정해 둔 상태라면 오브젝트에 힘이 전해집니다.
  • Cloth Special Bones 클로쓰 특수 본 - 클로쓰 어태치먼트에 대한 스켈레탈 메시 본을 정의합니다. 본 하나의 BoneType 이 CLOTHBONE_BreakableAttachment 로 설정되어 있는 경우 부서지기도 하는 특수한 형태의 어태치먼트입니다. 이를 통해 본을 충분히 세게 잡아당기면 클로쓰가 떨어져 나가도록 할 수 있습니다.
  • Enable Cloth Line Checks 클로쓰 라인 체크 켜기 - 클로쓰에 총을 쏠 수 있도록 하려면 이 옵션을 켜 줘야 합니다.
  • Cloth Metal Penetration Depth 클로쓰 메탈 관통 깊이 - 메탈 클로쓰에 사용되며, 양수면 메탈 클로쓰가 리짓 바디에 맞았을 때 더 크게 변형됩니다.
  • Cloth Tear Reserve 클로쓰 찢기 예비 - 클로쓰 테어링에 사용됩니다. 클로쓰가 찢어질 때 버텍스가 추가로 생성되는데, 이 갯수만큼 생성 가능합니다. 테어링으로 이 만큼의 버텍스가 생성되고나면 클로쓰는 더이상 찢어지지 않습니다.

내려받기