본문 바로가기

Pymeshio edited by kLiR

pymeshio 사용하기 및 간략한 reference


원본 배포처

파이썬 : https://pypi.python.org/pypi/pymeshio/

깃허브 : https://github.com/ousttrue/pymeshio

원본 라이센스 : ZLIB/LIBPNG

원본 저작자 : ousttrue


kLiR가 간소화 및 수정한 것 (원본 2.8.2 버전 기반)

blender26-meshio-klir_v3.zip


업데이트 내역

- v3. Bone의 좌표 중 0이 있으면 Bone의 Tail위치가 이상하게 내보내지는 내가 유발한 버그를 고침.

- v2. v1을 설치해도 목록에 안나타나는 치명적인 버그가 있었는데 고침. 말 좀 해주지.

- v1. 강체 및 조인트의 3축회전이 모두 정의되어 있을 때, 내보내면 이상한 각도가 되던 것을 고쳤어요. (쿼터니언 좌표전환 활용.) export만 고침...

- v0.


pymeshio는 블렌더 파일안에 직접 강체와 조인트를 배치한 것을 export 할 수 있기 때문에 이용가치가 있습니다.

이용하기가 편리한 다른 애드온이 있다면 그것을 사용하세요. 그리고 추천해주세요.

PMXE의 메뉴는 무명P님(http://mmdguide.tistory.com/897)이 리소스를 번역하신 것을 기준으로 합니다. 일어버전의 직역에 가까우므로 보는데는 문제가 없을거라고 봅니다.


설치방법

튜토리얼 - 블렌더 애드온 설치방법

1. "User Prepference > Add-ons > Install from file..."을 통해서 압축파일을 직접지정.

2. 압축해제 후 스크립트 폴더에 직접 붙여넣기.

*1번 방법을 사용하면 %userprofile%\AppData\Roaming\Blender Foundation\Blender\[[버전 넘버]]\scripts\addons\blender26-meshio-klir\ 으로 설치가 됨. (블렌더를 Setup으로 설치한 경우)

*2번 방법은 [[블렌더 설치경로]]\scripts\addons\blender26-meshio-klir\export_pmx.py... 와 같은 경로가 되도록 붙여넣음.

*소스코드를 수정하면서 이용하려면 blender26-meshio-klir폴더를 즐겨찾기 해두세요. 블렌더 설치경로가 Program Files라서 관리자 권한을 요구하면, blender26-meshio-klir폴더의 권한을 조정해서 편집하기 용이하게 해두세요.


제거방법

1. "User Prepference > Add-ons"에서 "klir"를 검색 후 애드온 Remove

2. 스크립트 폴더에서 직접 삭제.


간소화 내역

pmx import/export을 제외한 기능 제거

원본과 다른 폴더명, 다른 버전 시그니처를 통해서 원본과 구분. (중복사용 가능)



수정 내역 (원본과의 차이)

*수정 내역은 export기능에 집중되어있고, import기능에는 누락이 있을 수 있음.

- import(가져오기)시 englishmap.py의 데이터에 따라 "본/모프/본그룹"의 이름이 자동으로 영문으로 변환되도록 했습니다.

- export(내보내기)시 englishmap.py의 데이터에 따라 "본/모프/본그룹"의 이름이 자동으로 일어로 변환되도록 하고 english_name 파라메터에 영문이 입력되도록 했습니다.

*englishmap.py 파일은 .\blender26-meshio-klir\pymeshio\ 안에 위치하고 있으며, 블렌더 재시작을 해야만 Python 코드를 재실행하여 갱신할 수 있습니다.

- bone 내보내기시 말단 본이 표시대상이 없는 것을 기본값으로 하던 것을 bone tail을 가지는 것을 기본으로 하도록 했습니다.

*커스텀 속성 : bone_use_tailoffset의 flag값을 무시한다고 보면 됩니다.

- object 커스텀 속성 : rigid_name 및 rigid_bone_name, const_name 등을 지정하지 않으면 블렌더 개체의 이름을 알아서 가져오도록 했습니다.

- 기타 몇몇 커스텀 속성 값을 지정하지 않아도 내보내기시 기본값이 대입되도록 했습니다..

- material 커스텀 속성 : material_edgecolor를 추가했습니다. float list 자료형을 가지며, [0.0, 0.0, 0.0, 1.0] (rgba)가 기본값입니다.

- material 커스텀 속성 : material_edgesize를 추가했습니다. float 또는 int 자료형을 가지며, 1.0이 기본값입니다.

- texture 커스텀 속성 : texture_type에 SUBTEX 값을 추가했습니다.

- object 커스텀 속성 : rigid_intersection_group을 콤마( , )로 구분하여 숫자지정을 할 수 있도록 했습니다. 입력변수는 string만 가능.

ex) string값 "1,3,5,16"을 지정하면, 해당 강체의 비충돌그룹에 1 3 5 16번이 체크됩니다. 단일 번호도 string으로 입력해야 합니다.

- 조인트 가져오기시, 블렌더 내부에서 표시되는 형태를 방향을 구분할 수 있는 노란표식이 있는 빨간 정육면체로 변경했습니다.

- 모프의 패널지정 버그를 수정했습니다.

- 이유는 모르겠지만 원저작자가 65535개로 제한을 시켜둔 정점갯수의 리미트를 해제했습니다. 아무리 뜯어봐도 문제없던데 왜 제한한거지?

- 감추어진 layer의 mesh개체가 export시 증발해버리는 버그를 수정했습니다.

- object 커스텀 속성 : rigid_bone_name을 비어있는 string ( "" )으로 지정하면 -1번 본을 추종하는(추종하는 본이 없는) 강체가 되도록 했습니다. 참고로 강체는 추종하는 본이 없어도 단독으로 정상작동합니다.

- 이외에 기타등등 몇 가지 수정한거 같긴한데 기억이 잘 안나므로 일단 여기까지 씁니다.

- 아래 사용방법 중, 이 수정내역에 영향받지 않는 부분은 원본 pymeshio의 사용법과도 같습니다.


기본 사용 방법

- export 범위안에 들어가는 개체는 기본적으로 "object mode"상태로 돌려놓고 export합니다. pose mode, edit mode 등등을 해두고 하면 오류가 발생합니다.

- 단일 mesh 개체를 선택한 다음에 export하면 오로지 그 개체만의 mesh와 material만을 export합니다.

- 하나의 armature개체를 생성하고 해당 armature개체를 선택한 다음에 export를 하면 armature의 child에 해당하는 모든 개체가 export됩니다.

- 즉, armature 개체는 필수이며, 가능한 export시키고자하는 mesh집합들은 armature개체를 parent로 소유하도록 지정하세요.

- Empty개체를 사용해서 parent로 만들어 디렉토리 폴더식으로 만들면 다수의 개체들을 관리하기가 쉽습니다.


튜토리얼 - 모델에 기본 Bone을 박아서 PMX로 내보내기 - 1

튜토리얼 - 모델에 기본 Bone을 박아서 PMX로 내보내기 - 2

튜토리얼 - 모델에 기본 Bone을 박아서 PMX로 내보내기 - 3

튜토리얼 - 모델에 기본 Bone을 박아서 PMX로 내보내기 - 4


Blender ↔ PMXE 좌표계 전환

- Blender는 횡방향 X, 깊이방향 Y, 높이 Z의 위치 좌표계를 사용합니다.

- PMXE는 횡방향 X, 깊이방향 Z, 높이 Y의 위치 좌표계를 사용합니다.

- Blender는 +회전방향은 각 축에서 오른손 법칙을 따릅니다. (엄지 : 축의 +이동방향, 감싸는 4손가락 : 축의 +회전방향)

- PMXE의 +회전방향은 각 축에서 왼손 법칙을 따릅니다.

- 위치와 각도의 크기는 별다른 설정이 없는 경우, 1:1대응입니다. 각도는 degree를 사용합니다. 블렌더도 degree로 표현되지만, Python으로 접근하려면 radian을 사용하세요.

- export시, 아래의 경우를 제외한 나머지 경우는 위치와 회전을 자동으로 변환합니다. Y↔Z, 회전방향 -1곱셈.

- 블렌더에서도 직접 PMXE의 좌표순서인 XZY에 따라서 데이터를 입력하는 경우는 현재, 조인트로 쓸 개체의 custom property, IK의 Link된 개체의 회전제한이 있습니다. IK Link의 회전제한은 블렌더상에서 Y, Z로 범위를 시각적으로 확인하고 확인이 끝난 뒤, 데이터를 담아두기만 할때는 Z, Y 반대로 넣어둡니다. (IK는 수정필요)

- 조인트의 회전제한 축은 반대로 되어있습니다. 축회전값 [0,0,0]인 조인트 기준으로 보면, PMX와 MMD의 글로벌 좌표계의 양수이동방향이 음수가 됩니다. 즉, 조인트의 회전제한 방향을 알아볼 때만, 왼손법칙을 쓴다면 엄지손가락을 반대로 하던가, 오른손법칙을 써야한다는 말입니다. 예를 들면, PMXE에서 XZ평면(바닥) 위에 놓인 강체를 시계방향으로 45도 돌리려면 Y축 회전 값을 +45도로 해야하는데, 조인트에서 시계방향 회전의 상한선을 45도로 주려면 최대는 0도, 최소 회전값을 -45도로 넣어야한다는 말입니다. 이러면 겉보기에 0~45도 사이에서 왔다갔다가 가능한 조인트가 됩니다. 회전 방향이 같다고 생각하여 최대 45도, 최소0도 넣으면 글로벌 좌표에서 보기에는 -45~0도 사이에서 왔다갔다하는 모양새가 됩니다. 왜 이렇게 반대로 만들었는지는 아직 파악 불가.


강체 지정 방법

- 강체는 mesh 개체의 커스텀 속성:rigid_shape_type이 존재하는 경우 해당 mesh개체의 형태를 완전무시하며 mesh로써 읽어들이지 않습니다. 해당 개체의 위치회전, scale 값을 읽어들입니다.

*강체로써 사용할 개체는 다음과 같은 개체(object) 커스텀 속성(custom properties)값을 이용합니다.

Custom Property

Data Type

설명

rigid_name

string

강체 이름. 개체이름으로 자동대체가능

rigid_shape_type 

int

0 : 구, 1 : 상자, 2 : 캡슐. 구의 경우 scale의 x값, 상자는 scale 3축 전부, 캡슐은 x와 z(높이)를 읽어들인다.

rigid_process_type

int

0 : 본 추종, 1 : 물리 연산, 2 : 물리연산+본고정

rigid_bone_name

string

강체가 추종하는 본의 명칭. 개체이름으로 자동대체가능. armature의 본 명칭과 중복되어도 괜찮음. 비어있는 string값을 넣으면 본을 추종하지 않는 강체가 된다.

rigid_group

int

1부터 16까지 넣을 수 있는, 강체 충돌 그룹.

rigid_intersection_group

string

강체 비충돌그룹. 콤마( , )로 구분짓는다.

rigid_weight

float

강체 중량.

rigid_linear_damping

float

이동감쇠.

rigid_angular_damping

float

회전감쇠.

rigid_restitution

float

반발력.

rigid_friction

float

마찰력.


튜토리얼 - 강체와 조인트 구성해서 내보내기 - 1

튜토리얼 - 강체와 조인트 구성해서 내보내기 - 2


조인트 지정 방법

- 조인트는 mesh 개체의 커스텀 속성:const_a이 존재하는 경우 해당 mesh개체의 형태를 완전무시하며 mesh로써 읽어들이지 않습니다. 해당 개체의 위치회전 값을 읽어들입니다.

*조인트는 스프링 6DOF(degree of freedom)만을 지원합니다.

*조인트로써 사용할 개체는 다음과 같은 개체(object) 커스텀 속성(custom properties)값을 이용합니다.

Custom Property

Data Type

설명

const_name

string

조인트 이름. 개체이름으로 자동대체가능

const_a

string

연결강체A로 지정할 강체의 명칭을 넣으면 됩니다.

const_b

string

연결강체B로 지정할 강체의 명칭을 넣으면 됩니다.

const_pos_min

3개의 float list

이동제한매개변수 최소값. [x,y,z], 좌표순서는 PMXE기준.

const_pos_max

3개의 float list

이동제한매개변수 최대값. [x,y,z], 좌표순서는 PMXE기준.

const_rot_min

3개의 float list

회전제한매개변수 최소값. [x,y,z], 좌표순서는 PMXE기준.

const_rot_max

3개의 float list

회전제한매개변수 최대값. [x,y,z], 좌표순서는 PMXE기준.

const_spring_pos

3개의 float list

이동형태 스프링 상수. [x,y,z], 좌표순서는 PMXE기준.

const_spring_rot

3개의 float list

회전형태 스프링 상수. [x,y,z], 좌표순서는 PMXE기준.


재질 지정 방법

- 재료(material)는 export할 mesh의 face가 해당 재료를 사용하는 경우, 읽어들여집니다.

*블렌더의 재료(material)는 PMXE의 재질에 대응합니다.

*재료는 다음과 같은 재료(material) 커스텀 속성(custom properties)값을 이용합니다.

*flag(int)값. 1은 yes, 0은 no

Custom Property

Data Type

설명

material_flag_bothface

flag(int)

양면묘화.

material_flag_groundshadow

flag(int)

지면그림자.

material_flag_selfshadowmap

flag(int)

셀프그림자맵.

material_flag_drawselfshadow

flag(int)

셀프그림자.

material_flag_drawedge

flag(int)

엣지(윤곽) 유효 여부.

material_edgecolor

4개의 float list

외곽선 색상. [r,g,b,a]에 대응합니다.

material_edgesize

float

외곽선 두께.

material_shared_toon


아직 뭔지 파악을 못함.

material_sphere_mode


아직 뭔지 파악을 못함.


Blender Property

PMXE Property

비고

Diffuse (RGB)

확산색

숫자만 그대로 복사되며 색상은 상이할 수 있습니다.

Specular (RGB)

반사색

숫자만 그대로 복사되며 색상은 상이할 수 있습니다.

Mirror (RGB)

환경색

숫자만 그대로 복사되며 색상은 상이할 수 있습니다.

Z-transparency > Alpha

비투과도


Specular > Toon > Size

반사강도

Size값의 10배는 PMXE의 반사강도에 대응합니다. ex) Size:0.5 -> 반사강도:5


텍스쳐 지정 방법

- 텍스쳐는 재료를 항상 parent처럼 두고있으며, 재료안에서 정의됩니다. 블렌더의 특정 재료에서 texture에 체크(사용표시)가 되어있으면 읽어들입니다.

- 텍스쳐는 블렌더의 Bake 기능을 사용하면 렌더링할 수 있습니다. 텍스쳐를 생성하기 전에 적절하게 UV좌표를 Unwrap합시다.

*텍스쳐는 다음과 같은 텍스쳐(texture) 커스텀 속성(custom properties)값을 이용합니다.

texture_type

 - 이 속성값이 존재하지 않거나 "NORMAL" 이면 재질의 텍스쳐(Tex)로 파일명칭을 내보냅니다.

 - 이 속성값이 "TOON" 이면 재질의 Toon으로 파일명칭을 내보냅니다.

 - 이 속성값이 "SPH" 이면 재질의 스피어로 파일명칭을 내보내면서 x승산스피어로 지정합니다.

 - 이 속성값이 "SPA" 이면 재질의 스피어로 파일명칭을 내보내면서 +가산스피어로 지정합니다.

 - 이 속성값이 "SUBTEX" 이면 재질의 스피어로 파일명칭을 내보내면서 SubTex로 지정합니다.


표시 범위 설정 방법

- 본 그룹의 표시범위는 블렌더의 armature의 Bone Group을 통해 지정할 수 있습니다. 본 그룹을 assign하는 것은 pose mode에서 가능합니다. 기본적인 Bone Group의 영문명칭은 englishmap.py에 있으며 필요한경우 더 추가하거나 수정할 수 있습니다.

- 블렌더에서 내보내기될 개체에 Shape Key가 존재하는 경우, PMXE에 정점 모프(표정)으로 내보내기 됩니다.

*Shape Key의 명칭또한 englishmap.py의 내용에 따라 번역됩니다.


본 설정 방법

- 블렌더의 bone의 부모관계도는 거의 표시된 문자 그대로 PMXE에 대입됩니다. 부모관계는 armature의 edit mode에서 편집할 수 있습니다.

ex) knee_LParent Boneleg_L이면, PMXE에서도 左ひざ(knee_L)부모본左足(leg_L)이 됩니다.

ex) knee_LParent Boneleg_L이면서, connected되어있으면, PMXE에서 左足(leg_L)꼬리끝左ひざ(knee_L)을 향하도록 됩니다.


본 설정 방법 - Blender pose mode : Bone Constraint ↔ PMXE 대응

튜토리얼 - 모델에 기본 Bone을 박아서 PMX로 내보내기 - 2

- armature의 pose mode에서는 각 본의 제약사항(Constraint) 또는 IK (Inverse Kinematics)를 지정할 수 있습니다.

- Copy Rotation 제약(x,y,z)을 걸고 대상 본(Target Bone)과 영향(Influence)수치를 지정하면, PMXE에서 회전부모적립률로 대입됩니다.

- Copy Position 제약(x,y,z)을 걸고 대상 본(Target Bone)과 영향(Influence)수치를 지정하면, PMXE에서 이동부모적립률로 대입됩니다.

- Limit Rotation 제약이 걸려있으면, PMXE에서 축 제한이 자동으로 들어갑니다.

- 블렌더는 PMXE와는 거꾸로, IK조작대상이 될 본에 IK 제약을 지정하고, 조작리모컨이 되는 본(PMXE에서의 IK본)을 그 타겟으로 지정합니다. Chain Length의 숫자를 0보다 크게하면 IK조작대상이 주변으로 Chain Length의 숫자만큼 전파됩니다. Chain Length를 0으로 놔두지 마세요.


ex) ankle_RIK Constraint를 지정하고, 그 대상leg IK_R로 한 다음에, Chain Length2로 하고 Use Tail의 체크를 풀면 (Head방향으로 연쇄 확산, ankle_R의 부모인 knee_R이 연루되고,(chain길이 1), knee_R의 부모인 leg_R이 연루된다.(chain길이 2).) 다음과 같이 됩니다.


ex cont.) PMXE에서 右足IK(leg IK_R)IK본이 되고, 메인타겟으로 右足首(ankle_R)을 가집니다. chain으로 연루되었던 右ひざ(knee_R)과 右足(leg_R)Link목록에 들어갑니다.


ex cont.2) 이러한 상황에서, 블렌더측에서 knee_RBone > Inverse KinematicsX Limit에 체크를 하고, 가동범위를 -1~180도 정도로 제한하면 가동범위값이 PMXE의 Link목록각도제한으로 들어갑니다. (X축 -180~1도가 됩니다.)

*IK 각도제한의 경우엔, 블렌더측에서 X,Y,Z로 표시되는 것이 자동으로 X,Z,Y로 축변환되지 않고 숫자 순서 그대로 들어가므로 Y, Z값을 바꿔서 넣어야합니다. (버그 수정 요망...) 이렇게 필요한 경우엔 Y, Z등의 Limit에도 체크를 해야하죠.


- 블렌더의 bone 편집시 Transform메뉴(기본적으로 3D view에서 n키 누르면 우측에 나오는 메뉴)에서 다음 사항을 조절하면 PMXE에서 가동 조작 제한을 할 수 있습니다.

- Location의 자물쇠 아이콘을 눌러 잠그면 해당 본은 PMXE에서 이동조작허용이 off 처리가 됩니다.

- Rotation의 자물쇠 아이콘을 눌러 잠그면 해당 본은 PMXE에서 회전조작허용이 off 처리가 됩니다.

- PMXE에서 조작허용 처리는 블렌더에서 export시 항상 True로 처리됩니다.

- pose mode에서 본을 선택한 후, h 단축키를 누르면 hide시킬 수 있습니다. hide된 본은 export시 PMXE에서 보기허용이 off로 나타납니다. Alt+h를 누르면 현재 layer에서 감추었던 개체들을 나타나게 합니다.


웨이트 설정 방법

- 블렌더는 하나의 정점(Vertex)에 Weight를 무한정 바를 수 있지만 export되는건 최대 상위 4개의 본 명칭뿐입니다. Threshold가 적용된 Clear 기능 등으로 모든 정점의 본 웨이트 종류가 4개 이하가 되도록 최대한 깔끔하게 정리하면, 블렌더의 pose mode에서 테스트한 움직임과 PMXE의 TransformView에서 테스트한 움직임의 괴리감이 없어질 것입니다.

- SDEF (Sphere DEForm), QDEF (Quaternion DEForm)는 지원이 안되며, 단순한 BDEF (Bone DEForm)만 지원됩니다.

- QDEF (Dual Quaternion이라고 부르는 기술)의 경우는 BDEF4와 파라메터 갯수의 차이는 없으나 블렌더 측에서 공식지원을 아직까지 하지않으므로(2.78a 미지원) pose editor에서 확인할 수 없습니다. 그러나 비공식 빌드의 블렌더를 찾아서 시도해 볼 수는 있습니다. 다만 이 애드온에서는 지원을 안하네요. 만약 시도한다면 출력된 버텍스를 전부 QDEF로 바꾸는 것 만으로 해결될 수도?


내보내기 후 작업 (PMXE상 추가작업)

여기까지 서술한 기능으로 Blender상에서 정점(BDEF2~4), , 재질, , 모프(정점 오프셋 모프만), 표시범위(정점모프+본 그룹 정리), 강체, 조인트의 데이터를 거의 대부분 작성해 줄 수 있습니다.

PMXE에서 해야하는 작업은 다음과 같습니다.

- 본을 재정렬해야합니다. 본, 강체, 조인트의 이름 재정렬은 PMXE용 플러그인을 이용하세요. http://ch.nicovideo.jp/t0r0/blomaga/tag/闇鍋プラグイン 정렬(sorting)상태를 텍스트로 내보내기, 텍스트 가져오기 기능을 이용하면 반복된 export에도 노동없이 빠르게 재정렬할 수 있습니다.

- 불필요하게 많이 Link된 IK조작대상 본을 지워야합니다.

- UV모프, 재질모프는 직접 만들어야합니다.

- SDEF, QDEF는 직접 변경해야합니다.

- 장문의 PMX파일 제목과 설명서는 텍스트 파일에 꽁쳐놨다가 PMXE에서 적어주세요.

- 이외 언급되지 않은 것들은 PMXE에서 해야합니다만, 블렌더에서 90%가까이 완성시킬 수 있기 때문에 PMXE에서 할일이 별로 없습니다.

- 반복되는 적용작업(UV모프, 재질모프등)은 PMXE의 csv나 클립보드로 내보내기 기능으로 따로 보관해두면 export후 빠르게 재적용할 수 있습니다. (본 재정렬 이후에 사용하는 것을 추천.)


Import 응용

- 직접하려면 노동이 필요한 간단한 치마 본 등은 PMXE에서 플러그인으로 작성한 것을 import하여, armature끼리 join시키면 블렌더측 파일에 본을 융합할 수 있으며, 조인트와 강체 정보들을 가져올 수 있습니다.

*가져온 armature를 먼저 선택하고, 기존의 armature를 shift+클릭으로 나중에 선택하고 join시켜야 기존의 armature가 살아남습니다. 기존(노랑 표식), 가져온거(주황 표식)


Python 사용

- 블렌더에서 효과적인 대량 편집을 하려면 Python 함수를 작성해서 이용하면 능률이 향상됩니다. 커스텀 속성을 포함한 모든 프로퍼티는 Python으로 접근하고 제어할 수 있습니다.

- 블렌더의 Text에디터에서 작성한 함수는 많은 과정을 자동화하여, 작업 능률을 향상시키거나 잠재적 오류 요소등을 관리할 수 있습니다.

- 블렌더의 수많은 요소들은 마우스 커서를 가만히 올리고 있는 것으로 파이썬을 통한 접근 경로를 보여줍니다.


알려진 문제

- 블렌더에서 강체로 사용할 개체의 scale이 음수값이어도 당장 오류 및 경고가 발생하지 않으나, 예측하지 못한 수치연산때문에 MMD에서 메모리 침해 크래시가 발생할 수 있습니다. 음수 크기의 강체는 PMX의 데이터 검증을 통과하므로 잠재적 위협이 됩니다. 모든 강체의 모든 scale을 항상 양수값으로 유지하세요.

- mesh의 표면normal방향은 항상 바깥을 향할 수 있도록 하세요. normal이 뒤집혀서 export되는 경우는 scale이 음수인 경우입니다. scale을 항상 양수로 유지하세요. scale은 mirror operation등으로 음수가 될 수 있습니다.

v1.에서 수리 완료. - 강체와 조인트의 3축 회전은 PMXE와 블렌더가 미세하게 다르게 계산합니다. 어떤식으로 계산되는지 몰라서 아직 적절한 해결방안을 찾지 못했습니다. 2축 회전만(X,Y,Z중 최대 2가지만 쓰고 나머지는 0도 고정) 이용하거나 조금 틀어져보여도 그냥 쓰세요.

*조인트는 3축회전이 모두 필요할만큼 축 방향 회전에 그다지 민감하지 않습니다. 1~2축 값만 사용해서 대략적인 방향만 지시해주면 됩니다.

*강체의 3축회전이 모두 필요한 경우는 강체의 모양이 상자일 때 뿐입니다.

- Python Text editor의 출력값이나 디버깅 중 오류코드가 궁금해서 system console을 켰는데, 그 console을 그냥 X를 눌러서 닫지맙시다. 저장할거냐고 묻지도 않고 블렌더 통째로 그냥 꺼진다... XX...(2.78a기준)

- export 도중 오류가 발생하면 tmp~ 어쩌고 하는 개체가 생성될 수 있습니다. 그러한 개체는 Outliner검색창을 통해서 찾을 수 있습니다.

'Pymeshio edited by kLiR' 카테고리의 다른 글

pymeshio-klir_v3  (1) 2017.01.14
pymeshio-klir_v2  (0) 2017.01.05
pymeshio-klir버전 v1업뎃  (0) 2017.01.01