posted by cimple 2017. 9. 13. 17:24

Mesh Surface 의 경우 input/output 은 inMesh / outMesh 이다.

Nurbs Surface 의 경우 input/output 은 create / local 이다.

Nurbs Surface 의 이름이 직관적이지가 않은데... 누가 처음에 이런 attribute 네이밍을 했는지 궁금할 따름이다.

posted by cimple 2016. 8. 19. 15:22

Hair simulation 을 위하여 Nurbs curve 를 nHair 의 Make Selected Curve Dynamic 으로 만들어 줄 때,


기존의 curve 가 Maya2016 버전에서는 null node 형태로 보이게 된다.


이는 해당 curve 의 shape 노드에 들어가 보면, object display 메뉴에서 Intermediate Object 로 체크가 된 상태로 바뀌기 때문이다.


해당 체크를 풀면 다시 보통 nurbs curve 가 되고 이 curve 를 복사해서 blendshape 을 쓰거나 cluster 를 적용해서 디폼시키는 등의 활용이 가능하다.

posted by cimple 2016. 4. 18. 17:23


(위 이미지는 참고링크에서 가져온 것)


참고링크

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 로 변경...




posted by cimple 2015. 11. 24. 20:59

모션 리타겟팅을 캐릭터에 수행하다 보면, 리깅된 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 안에 두개 이상 존재하면 오류가 발생하게 된다. 네이밍에 각별히 신경을 써 주도록 하자.


이렇게 하면 스키닝이 잘 옮겨지게 된다. 잘 안된다면 위의 주의사항들을 잘 읽어보고 어디에서 오류가 발생했는지 찾아 보도록 하자.

posted by cimple 2013. 11. 29. 12:45

아래 Python Script 를 다운로드 받으시면 됩니다.


simpleMayaVoxelize.py





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 은 다음 링크에 공개된 소스코드를 상당부분 활용하였습니다.

http://zoomy.net/2010/02/25/voxelize-meshes-script-v2/

posted by cimple 2012. 10. 25. 14:33

 

 

2012 SIGGRAPH 의 Autodesk Masterclass 에서 등장했던 Animation Binder.

 

모션 캡쳐된 애니메이션을 캐릭터 Rigging 의 키값으로 옮겨주고 싶을 때 사용하는 툴이다.

 

http://markj3d.blogspot.kr/search/label/MasterClass

 

위 제작자 블로그에서 직접 다운로드 받을 수 있다.

 

사용법은

 

 

Autodesk MasterClass - Live Animation Binding from Mark Jackson on Vimeo.

 

위 동영상을 참고.

posted by cimple 2012. 2. 2. 20:41
Comet Tools 는 리깅에 사용되는 유용한 MEL script 들을 모아 놓은 편리한 툴입니다.

스크립트 형태이므로 사용하는 데 문제는 없지만, 편하게 Maya 에 등록해서 사용하는 법을 설명하도록 하겠습니다.


1. Comet Tools 다운로드

아래 링크에서 다운로드 받을 수 있습니다.

Comet Tools 페이지

링크에 들어가 보면 MEL Script Suite 섹션 안에 있는 cometScript.zip 파일을 다운로드 받으시면 됩니다. 

cometScript.zip 을 다운로드 합니다.

 
cometScripts 폴더 안에 압축을 풀어 보면 각종 스크립트들이 들어 있는 것을 볼 수 있습니다.


2. Maya Script 폴더에 복사 

이제 이 스크립트들을 Maya 에서 실행할 수 있도록 해 주면 됩니다. 먼저 해당 폴더를 다음 경로에 복사합니다. (이탤릭체는 여러분의 설정에 따라 바뀌는 부분입니다)

C:\Users\YOURNAME\Documents\maya\scripts\


또는

C:\Documents and Settings\YOURNAME\My Documents\maya\scripts\ 



즉 마야의 기본 스크립트 폴더에 복사해 넣는 것입니다.




3. Maya 에서 메뉴로 뜰 수 있도록 설정해주기

Maya 를 실행할 때, Comet 이 바로 메뉴로 뜰 수 있도록 설정해 줄 수 있습니다. 다음 스크립트 폴더에 들어가 보세요. 각 MAYA version 에 따른 스크립트 폴더입니다.

C:\Users\YOURNAME\Documents\maya\MAYA_VERSION\scripts\



또는

C:\Documents and Settings\YOURNAME\My Documents\maya\MAYA_VERSION\scripts\ 



에 들어가보면, userSetup.mel 이라는 파일이 있을 수도 있고 없을 수도 있습니다. 없으면 만들어 주고, 파일 안에 다음 내용을 추가합니다.

source "cometScripts/cometMenu.mel" ; 



이렇게 하면 Maya 를 다시 켜면 메뉴로 등록되는 것을 볼 수 있습니다.



4. Maya Script Path 설정해주기

만약 3번까지 과정을 거치고 Comet 메뉴 안의 기능들을 눌러 보면 작동되지 않을 것입니다. Maya Script Path 안에 폴더를 하나 더 만들어서 그 안에 스크립트가 있기 때문인데, 따라서 해당 폴더를 추가로 Script Path 로 등록해 주어야 합니다.

C:\Documents and Settings\YOURNAME\My Documents\maya\MAYA_VERSION\scripts\ 



위 폴더에 들어가 보면 maya.env 라는 파일을 볼 수 있습니다. 해당 파일을 열어서, cometScript 폴더의 위치를 아래와 같이 추가해 줍니다.

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 에서도 같은 방식으로 할 수 있으며, 세미콜론(;) 으로 구분하여 패스를 추가합니다.




주의!


이 정도만 하시면 Maya 에서 Comet Tools 를 마음껏 사용하실 수 있으실 것입니다.

편리한 기능이 많은 cometTools

 
그럼 즐거운 리깅 되세요.


ThEnd. 




posted by cimple 2011. 11. 15. 01:17

Maya 의 기본 World Axis 는 Y-up 이다.

갑자기 무슨 일인지 Z-up 으로 바뀌어서 좀 고생을 했다; 잘 모르면 손이 고생이라고...  물론 Preferences 에 있을 것 같기는 한데 모르니까 잘 보이지도 않는다.

하지만 생각보다 간단하게 있었다.

Window > Setting/Preferences > Preferences 를 켠 다음, Settings 탭에서 World axis 를 바꿀 수 있다.



 고생하는 사람이 나뿐만은 아닌가보다. Youtube 에 올라와 있는 동영상.




ThEnd. 
posted by cimple 2011. 8. 2. 16:07


IK 를 설치할 때 SC solver, RP solver 가 존재한다. 둘의 차이점은 폴벡터의 유무 정도로만 이해하고 있는데, 둘의 차이점을 좀 더 명확하게 이해해보도록 하자.


1. 명칭의 정의

일단 정확한 명칭의 의미를 아는 것은 개념을 이해하는 데 중요하다.

SC solver 는 Single Chain Solver 를 뜻하고,

RP solver 는 Rotation Plane Solver 를 뜻한다.



2. 개념의 정의

먼저 RP solver 부터 알아보면, 관절이 일정한 방향성을 가지고 꺾일 수 있도록 Pole Vector 를 가진다. 명칭에서 알 수 있듯이, 조인트의 시작점-end effector, 그리고 pole vector 가 하나의 plane 위에 있고, 그 위에서 Rotate 하게 됨을 알 수 있다. 따라서 팔꿈치나 무릎 등을 리깅할 때에는 RP solver 를 사용하는 것이 최적인 것이다.

하지만 SC solver 는 이러한 일정한 방향성을 가지면서 꺾이도록 할 수 없다. 따라서, 두 개의 조인트로 이루어진 하나의 본(bone) 에 IK 를 설치할 때 (ex. 발 리깅을 할 때, 발목-발끝에 SC solver 를 설치하면 발끝 motion 에 따라 발목 joint 의 rotation 되는 리깅이 가능해진다.) SC solver 가 더 나은 선택이다. 
 

ThEnd.