Mesh Surface 의 경우 input/output 은 inMesh / outMesh 이다.
Nurbs Surface 의 경우 input/output 은 create / local 이다.
Nurbs Surface 의 이름이 직관적이지가 않은데... 누가 처음에 이런 attribute 네이밍을 했는지 궁금할 따름이다.
Mesh Surface 의 경우 input/output 은 inMesh / outMesh 이다.
Nurbs Surface 의 경우 input/output 은 create / local 이다.
Nurbs Surface 의 이름이 직관적이지가 않은데... 누가 처음에 이런 attribute 네이밍을 했는지 궁금할 따름이다.
Centos 의 yum package install 이 안 될 경우에는 repository 주소를 확인하자.
내 경우 /etc/yum.repository.d/ 안에 있는 CentOS-Base.repo 가 사내 주소로 변경되어 있었다.
이러면 제대로 package install 이 될 리가 없지.
기본 Centos repository 나 국내 저장소(다음카카오) 등으로 변경해 주어야 한다.
Maya 뿐만 아니라 많은 아이콘들을 마음에 드는 이미지들로 바꿀 수 있다.
일단 아이콘을 선택해서 우클릭 > 속성(p) 에 들어가면 다음과 같은 화면을 볼수 있는데
여기에서 나는 이미 아이콘 이미지를 바꾸어 놓았는데, 왼쪽 위의 마야 아이콘 이미지가 있는 곳을 클릭하면 사용자 아이콘을 선택할 수 있는 창이 뜨게 된다.
인터넷에서 Maya 아이콘을 다운로드 받아서 여기에 연결시켜서 쓰면 된다. 다른 아이콘들도 이쁘게 해서 쓰도록 하자.
Hair simulation 을 위하여 Nurbs curve 를 nHair 의 Make Selected Curve Dynamic 으로 만들어 줄 때,
기존의 curve 가 Maya2016 버전에서는 null node 형태로 보이게 된다.
이는 해당 curve 의 shape 노드에 들어가 보면, object display 메뉴에서 Intermediate Object 로 체크가 된 상태로 바뀌기 때문이다.
해당 체크를 풀면 다시 보통 nurbs curve 가 되고 이 curve 를 복사해서 blendshape 을 쓰거나 cluster 를 적용해서 디폼시키는 등의 활용이 가능하다.
(위 이미지는 참고링크에서 가져온 것)
참고링크
http://forums.autodesk.com/t5/maya-general/joints-display-broken-viewport-2-0/td-p/6053740
엔비디아 그래픽카드 드라이버 업데이트 후, Maya viewport 2.0 에서 조인트가 깨져보이는 현상이 발생하는데,
참고 링크에서 답을 찾을 수 있었다.
Windows -> Settings/Preferences -> Preferences -> DisplayWindows -> Settings/Preferences -> Preferences -> Display
에 들어가서
Viewport 2.0 의 엔진을 OpenGL 에서 DirectX 로 변경...
모션 리타겟팅을 캐릭터에 수행하다 보면, 리깅된 Joint version 만 있는 캐릭터가 필요할 경우가 있다.
조인트-컨트롤러간 독립성이 잘 갖추어진 리깅이라면 그냥 컨트롤러만 지워주면 되겠지만, 그렇지 않은 경우는 이런 Joint version 만 있는 캐릭터를 만들기가 좀 까다로운 편이다.
이 것을 위해서는 크게 2단계의 과정을 거쳐야 하는데,
1. Rigging 된 모델에서, 스키닝과 관련된 조인트 리스트를 뽑아내기
2. 해당 조인트/메쉬를 export 한 뒤, 원본 모델에서 Skin Weight Map 을 export 하여 새로운 모델에 적용
이 과정을 거치면 Joint version 만 있는 캐릭터를 손쉽게 만들 수 있다.
각각의 과정을 설명하면,
1. Rigging 된 모델에서 스키닝과 관련된 조인트 리스트 뽑아내기
이를 위해서, 간단한 스크립트가 필요하다.
import maya.cmds as mc meshList = mc.ls(sl=True) def getSkinJointListFromMeshList(meshList): skinJntList = [] skinJntSet = set([]) for mesh in meshList : skinJntList.append(mc.skinCluster(mesh, q=True, wi=True)) for skinJnt in skinJntList : skinJntSet = skinJntSet|set(skinJnt) return list(skinJntSet) skinJntList = getSkinJointListFromMeshList(meshList) for skinJnt in skinJntList : pos = mc.xform(skinJnt, q=True, t=True, ws=True) mc.select(cl=True) nJnt = mc.joint(n=skinJnt+'_new') mc.xform(nJnt, t=pos, ws=True)
설명하면,
1. mesh 들을 선택한다. 캐릭터가 메쉬 하나로 이루어진 경우도 있지만 여러 개의 mesh 로 이루어진 경우도 있다.
2. 이 mesh 들을 선택하고 getSkinJointListFromMeshList 함수를 실행시키면, 스키닝되어 있는 모든 조인트들의 리스트를 만들어준다. (set 을 사용해서 다수의 메쉬에서 중복되는 조인트가 안생기도록)
3. 그 리스트대로 '_new' 를 붙여서 새로운 조인트를 만들어준다.
이렇게 만들어진 새로운 조인트와, 캐릭터 mesh 를 duplicate 해서 새로운 파일로 export 해 놓으면 일차적인 준비는 끝.
Warning: 그러나, 2단계의 skin weight import/export 를 위해서는 mesh 와 joint 의 네이밍이 리깅의 버전과 동일해야 한다. 위 방식대로 duplicate 하거나 _new 를 붙인 네이밍은 새로운 파일에서 원본 리깅과 동일하도록 수정해 주어야 한다.
Warning: 이렇게 만들어진 조인트는 계층 구조가 없다. 원본의 계층 구조를 고려해서 parents 시킬 수도 있겠지만, 계층 구조가 없는 리깅도 있다. 위 스크립트의 경우에는 결과물을 수작업으로 조인트를 parents 시켜 주어야 한다.
2. Skin weight map export / import
Maya 의 Skin weight map 기능을 이용하여 메쉬의 스키닝을 옮겨준다.
Warning: Maya 의 Skin weight map 은 기본적으로 해당 mesh 의 UV 정보를 기준으로 map 을 만들기 때문에, UV 가 이상하게 꼬여있거나 겹쳐져 있거나 하면 제대로 스키닝 정보가 옮겨지지 않는다. 따라서 UV 가 잘 수정되어 있다는 전제가 있어야 한다.
- 먼저, Skin weight map 을 export 한다. 방법은 간단한데, export 하고 싶은 mesh 를 모두 선택한 다음, skin > export weight maps... 를 하면 간단하게 weight map 을 뽑아줄 수 있다.
- 다음, 새로이 뽑아낸 mesh 와 joint 를 기본 옵션으로 바인딩한다. 이 바인딩된 결과물은 신경쓸 필요가 없는데, 일단 '바인딩' 자체가 되어 있어야 skin weight map 을 import 할 수 있기 때문이다.
- mesh 들을 선택한 다음 skin> import weight maps... 로 스키닝 정보를 import 한다.
Warning: Import skin weight map 작업은 기본적으로 네이밍을 기준으로 이루어지므로, 네이밍이 다르다던가, 중복된 이름이 scene 안에 두개 이상 존재하면 오류가 발생하게 된다. 네이밍에 각별히 신경을 써 주도록 하자.
이렇게 하면 스키닝이 잘 옮겨지게 된다. 잘 안된다면 위의 주의사항들을 잘 읽어보고 어디에서 오류가 발생했는지 찾아 보도록 하자.
아래 Python Script 를 다운로드 받으시면 됩니다.
Simple Maya Voxelize Tool
Maya 에서 손쉽게 Mesh Voxelization 을 수행할 수 있는 툴입니다.
UI 는 다음과 같습니다.
1. Mesh 를 선택하고 (여러개의 Mesh 를 동시에 Voxelize 할 수도 있으나 속도가 느립니다)
2. Voxel Size 를 선택한 후
3. 원하는 Voxelize 방법으로 만드시면 됩니다.
Make Full Voxel Cubes : 내부까지 Voxel 로 꽉 차있는 Voxelized 된 모델을 만듭니다.
Make Surface Voxel Cubes : 겉표면만 Voxel 로 되어 있는 모델을 만듭니다. 속도가 상대적으로 빠르고 가볍습니다.
Make Shape Carving Voxels : 오브젝트의 겉표면대로 Voxel 을 깎습니다. 내부에도 Voxel 이 차 있습니다.
Shape Carving Voxels 기능을 이용한 데모 동영상입니다.
※ Surface Voxelization 은 다음 링크에 공개된 소스코드를 상당부분 활용하였습니다.
2012 SIGGRAPH 의 Autodesk Masterclass 에서 등장했던 Animation Binder.
모션 캡쳐된 애니메이션을 캐릭터 Rigging 의 키값으로 옮겨주고 싶을 때 사용하는 툴이다.
http://markj3d.blogspot.kr/search/label/MasterClass
위 제작자 블로그에서 직접 다운로드 받을 수 있다.
사용법은
Autodesk MasterClass - Live Animation Binding from Mark Jackson on Vimeo.
위 동영상을 참고.
cometScript.zip 을 다운로드 합니다.
C:\Users\YOURNAME\Documents\maya\scripts\
C:\Documents and Settings\YOURNAME\My Documents\maya\scripts\
C:\Users\YOURNAME\Documents\maya\MAYA_VERSION\scripts\
C:\Documents and Settings\YOURNAME\My Documents\maya\MAYA_VERSION\scripts\
source "cometScripts/cometMenu.mel" ;
C:\Documents and Settings\YOURNAME\My Documents\maya\MAYA_VERSION\scripts\
MAYA_SCRIPT_PATH = C:\Users\YOURNAME\Documents\maya\scripts\cometScripts
주의! Linux 에서는 위와 같은 방식으로 Script path 가 추가되지 않을 수 있습니다. 다음과 같이 추가하시기 바랍니다. USER_SCRIPT_PATH=$HOME/maya/scripts/cometScripts MAYA_SCRIPT_PATH=$USER_SCRIPT_PATH:$HOME/maya/scripts 위와 같이 USER_SCRIPT_PATH 로 원하는 패스를 추가하고, MAYA_SCRIPT_PATH 에서 콜론(:) 으로 구분하여 패스를 추가해 줍니다. Windows 에서도 같은 방식으로 할 수 있으며, 세미콜론(;) 으로 구분하여 패스를 추가합니다. |
편리한 기능이 많은 cometTools