이 워크플로우는 Maya에서 PhysX 플러그인으로 봉제 인형을 빌드한 다음 Stingray로 내보내는 방법을 설명합니다. 이 자습서의 두 번째 파트는 다른 응용프로그램에서 봉제 인형을 빌드한 경우에도 계속 적용됩니다.
참고:
Maya용 PhysX 플러그인을 다운로드하여 설치합니다. DCC 도구용 PhysX 플러그인 설치를 참조하십시오.
Maya에서 Plug-in Manager(Windows > Settings/Preferences > Plug-in Manager)를 사용하여 플러그인을 로드합니다.
플러그인이 로드되면 PhysX 메뉴가 기본 메뉴 막대에 표시됩니다.
Maya에서 Working Units 기본 설정을 meter로 변경합니다.
(이렇게 해야 물리적 엔진과 더 잘 연동됩니다.)
장면의 시간 범위를 연장합니다.
이렇게 하면 나중에 물리적 요소를 테스트할 여유가 생깁니다.
엉덩이/골반은 강체를 추가해야 하는 첫 번째 골격입니다.
엉덩이 관절을 선택하고 PhysX > Rigid Bodies를 선택하여 동적 강체를 생성합니다.
기본적으로 PhysX이 현재 접합에 연결되는 각 관절의 모양을 생성합니다.
단순한 물리적 요소만 필요하기 때문에 나머지 관절은 삭제하고 하나만 유지합니다.
다음과 같이 강체의 모양을 형상과 보다 가깝게 조정합니다.
Outliner에서 모양을 선택한 다음 Attribute Editor에서 해당 모양 노드 속성을 찾습니다.
용도에 부합하는 Shape Type을 선택하되 Convex Hull 및 Triangle Mesh는 피하십시오 .
형상에 맞게 모양 크기를 조정합니다. (이 예시에서는 더 크게 만듭니다.)
모양 변환을 사용하여 모양을 간격띄우기하고, 몸체 중심에 더 가깝게 만들 수도 있습니다.
모양과 모양이 피부 형상에 어울리는 정도가 만족스러울 때까지 진행합니다.
PhysX > Play/Stop Simulation을 선택합니다.
캐릭터가 바닥으로 쓰러집니다.
PhysX > Rewind Simulation을 선택하여 편집을 다시 시작합니다.
엉덩이 강체를 선택하고 Attribute Editor를 사용하여 Simulation Type을 Kinematic으로 전환합니다.
이렇게 하면 다른 강체에서 작업할 때 엉덩이 강체가 움직이지 않게 해줍니다.
척추 골격을 선택하고 여기에 강체를 추가합니다.
생성된 나머지 모양들을 삭제하고(하나만 유지) 척추 골격이 몸통 형상을 표현하도록 위치를 지정합니다. 예:
(선택 사항) 이제 Physx > Play Simulation을 선택하면 캐릭터가 둘로 분할됩니다.
Simulation Type이 Kinematic으로 설정되어 있기 때문에 엉덩이 섹션은 (예상대로) 움직이지 않고 몸통이 지면으로 쓰러집니다.
다음으로 두 강체 사이에 제약 조건이 필요합니다.
엉덩이 강체를 선택한 다음 Ctrl+클릭으로 몸통 강체를 선택합니다.
(선택 순서가 중요합니다. 몸체를 엉덩이에 제약시켜야 하므로 다른 방법으로 선택하면 안 됩니다.)
PhysX > Constraints > Create constraint를 선택합니다.
Outliner에서 제약 조건을 선택한 다음 Attribute Editor에서 Radius Scale을 증가시킵니다.
장면 뷰에서 제약 조건 한계가 하얀색으로 표시되는 것을 볼 수 있습니다.
물리적 시뮬레이션을 실행하여(Physx > Play Simulation) 제약 조건을 테스트합니다.
몸통이 엉덩이에 제약된 것을 확인할 수 있지만 제약 조건을 미세 조정하려 합니다.
물리적 관점에서 합리적인 위치에 배치합니다(연결된 두 몸체 사이의 어느 지점일 수 있음, 일반적으로 관절 위치임(무릎, 발목, 팔)).
선택한 관절의 한계를 스윙 속성부터 조정합니다.
비틀기 속성은 대부분의 경우 첫 번째 봉제 인형 버전에 대해서는 비틀기 자유 모드를 잠금으로 설정하기를 권장합니다.
첫 번째 버전이 잘 작동하고 나면 다른 비틀기 설정으로 실험해볼 수 있습니다.
시뮬레이션을 재생하고, 정지해서 한계를 조정하고, 결과가 만족스러울 때까지 반복합니다.
몸통 강체를 선택하고 Simulation Type을 Kinematic으로 설정합니다.
위와 동일한 프로세스를 사용하여 계속 진행하면서 추가 척추 관절, 머리, 팔 및 다리를 통해 골격 계층에서 상위로 이동합니다.
간혹 PhysX이 강체를 생성할 수 없다는 오류가 나타날 수 있습니다. 예:
==============in nxPerformDynamics, cmd = nxRigidBody -active -m 1 -den 1 -omd 0 -adp 0 -dp 0 -sf 0.2 -df 0.2 -b 0.6 -iv 0 0 0 -iav 0 0 0 There an existing rigid body: |master|Reference|Hips|HipsRigidBody1. Command will not be executed. If mesh is in a group, use rigidbody to add a physics shape.
캐릭터 계층 구조에서 하위에 관절을 하나 생성하기 전에 상위에서 관절 강체를 생성하려고 하면 이 오류가 발생할 수 있습니다. (척추 강체를 생성하기 전에 엉덩이 강체를 생성하는 경우를 예로 들 수 있습니다.)
이 문제를 해결하려면 계층 구조에서 하위에 있는 강체를 먼저 생성한 다음 상위 관절의 강체를 생성하면 됩니다.
각 강체와 제약 조건에 만족하면 Stingray로 내보낼 준비를 할 수 있습니다.
각 강체를 선택하고 Simulation Type을 다시 Dynamic으로 설정합니다.
시뮬레이션을 재생합니다(Physx > Play Simulation).
캐릭터가 아주 잘 쓰러져야 합니다.
File > Export All > [ ]를 선택하여 FBX 내보내기 옵션을 열고 Edit preset을 클릭합니다.
내보내기 사전 설정 편집 옵션이 표시되고, 여기에서 내보내는 파일의 FBX 옵션을 변경할 수 있습니다.
왼쪽 패널에서 머리글이 UNITS인 고급 옵션까지 아래로 스크롤합니다. File units converted to를 선택하고 마우스 오른쪽 버튼을 클릭한 다음 Enable를 선택합니다.
활성화되면 File units converted to를 Centimeters로 설정합니다.
사전 설정을 저장한 다음 Ok, Close를 클릭합니다.
내보내기 옵션으로 돌아가서 APEX/PhysX 파일 형식을 선택합니다.
File Type Specific 내보내기 옵션에서 Asset File Format을 APX로 설정하여 XML로 내보냅니다.
Stingray 프로젝트 디렉토리로 이동하여 봉제 인형 파일을 Stingray 프로젝트의 기존 캐릭터 유닛 파일과 동일한 이름으로 동일한 위치에 저장합니다.
예를 들어 캐릭터 유닛이 Guy.unit이라면 물리적 파일의 이름을 Guy.xml이라고 정합니다.
Stingray Asset Browser에서 캐릭터 유닛을 마우스 오른쪽 버튼으로 클릭하고 다시 가져오기를 선택합니다.
이전 단계에서 저장한 Physx 파일이 유닛 파일 옆에 표시됩니다.
캐릭터 유닛을 두 번 클릭하여 Unit Editor를 실행합니다.
PhysX 장면의 모든 강체가 왼쪽에 나열됩니다.
groundPlane 오브젝트(내보낼 때 PhysX에 의해 추가)를 선택하고 Properties 패널을 사용하여 비활성화합니다. (Enabled 옵션을 끕니다.)
캐릭터 유닛을 수준에 배치한 다음 재생을 눌러 캐릭터가 쓰러지는 모습을 살펴봅니다.
유닛을 생성하고 금방 봉제 인형을 활성화할 가능성은 없을 테니 강체를 비활성화하겠습니다.
Unit Editor에서 각 강체를 선택하고 Properties 패널에서 Enabled 옵션을 끕니다.
Asset Browser에서 유닛을 마우스 오른쪽 버튼으로 클릭하고 Create Animation Controller를 선택합니다.
Anim Controller Editor에서 Ragdolls를 마우스 오른쪽 버튼으로 클릭하고 Add New Ragdoll을 선택하여 이 유닛의 봉제 인형을 정의합니다.
봉제 인형 골격 특성에서 파란색 화살표를 클릭하여 각 강체를 원하는 범주로 이동합니다. (기본적으로 모두 Dynamic으로 정의됩니다.)
Ignored(활성화되지 않아 장면에 존재하지 않음)
Dynamic(물리적으로 구동됨)
Kinematic(애니메이션됨)
groundPlane을 선택하고 무시됨으로 이동합니다.
Layers를 마우스 오른쪽 버튼으로 클릭하고 Add Layer를 선택하고, 일반 애니메이션 상태(레이어를 선택하고 마우스 오른쪽 버튼을 클릭한 다음 Add New State > Clip State 선택)를 추가한 다음 General 설정에서 레이어의 일반 애니메이션 상태를 선택합니다.
레이어를 마우스 오른쪽 버튼으로 클릭하고 Add New State > Add Ragdoll state를 선택한 다음 일반 설정에서 앞서 생성한 봉제 인형 정의를 지정합니다.
봉제 인형 상태로 들어가거나 이 상태에서 나오는 이벤트 및 전환을 추가합니다.
애니메이션 제어기 설정도 참조하십시오.
애니메이션 제어기를 저장하고 컴파일합니다.
이제 봉제 인형을 필요에 따라 켜고 끌 수 있습니다.
부분 봉제 인형을 이용하면 물리적 요소에 의해 구동되는 사지를 생성하면서 몸체 나머지 부분은 애니메이션으로 구동할 수 있습니다. 이 예시는 왼쪽 팔에서만 봉제 인형을 활성화하는 방법을 보여줍니다.
Skeleton Editor에서 BlendMask를 생성하여 왼쪽 팔(예시)을 격리시킵니다.
Anim Controller Editor에서 봉제 인형 정의를 다음과 같이 생성(Ragdolls > Add New Ragdoll)합니다.
왼쪽 팔은 Dynamic 액터(물리적 요소 이용)
Spine4는 역운동학 액터(왼쪽 팔이 spine4에 연결되기 때문에 필수. 그렇지 않으면 팔이 땅에 떨어짐)
다른 모든 몸체는 Ignored
Anim Controller Editor에서 부분 봉제 인형만을 위한 레이어를 생성하고 기본 빈 상태를 부여(새 레이어를 마우스 오른쪽 버튼으로 클릭하고 Add New State > Empty State)합니다.
중요: 부분 봉제 인형에는 전용 레이어가 필요합니다.
전환 대상 봉제 인형 상태를 추가합니다.
혼합 마스크 및 봉제 인형 정의를 지정합니다.
이제 왼쪽 팔에서만 봉제 인형을 활성화할 수 있습니다.