posted by cimple 2013. 3. 8. 13:59

Automatic Rigging 및 개인적 만족(;) 을 얻기 위해서 Sphere packing 알고리즘을 Maya 에서 구현하는 중이다.


이 때 거쳤던 난관들을 하나하나 기록해보려 한다.



1. particleFill 커맨드 문제


이 문제에 부딪혀서 상당히 오랜 시간을 헤맸다. 먼저 Maya 의 particleFill 명령어의 목적은 모델의 내부를 파티클들로 채워 주는 것이다.



(왼쪽 모델을 이렇게)


Sphere packing 위해서 모델 내부를 discretization 하는 과정을 그냥 Maya 의 기능으로 손쉽게 하는 것이다.


이 기능을 수행하려면 마야의 nDynamics 모듈로 들어가서 nParticles > createParticles > Fill Objects 를 선택하면 된다.


문제는 이것을 스크립트로 실행할 때인데, 해당 명령어의 MEL 스크립트는 아래와 같다.


particleFill -rs 50 -maxX 1 -maxY 1 -maxZ 1 -minX 0 -minY 0 -minZ 0 -pd 1 -cp;


이것을 MEL 스크립트로 실행하면 아무런 문제가 없이 잘 되는데, 문제는 이것을 Python command 로 import 해서 사용하는 데에 발생했다.


import maya.cmds as mc

mc.particleFill(rs=50,maxX=1,maxY=1,maxZ=1,minX=0,minY=0,minZ=0,pd=1,cp=1)

particle ;

# Error: RuntimeError: Maya command error #


이유를 알 수 없는 에러였다. 이것은 import maya.mel 이후 eval 명령어를 사용해도, from pymel.all import * 이후 Pymel 로 사용해도 같은 문제를 발생시켰다.


저 ' particle ; ' 이라는 마야 명령어를 실행시킬 때 문제가 발생한다는 것이었는데, Echo 를 찍어보아도 별다른 것이 나오지 않아 해결이 불가능한 버그였다.


한가지 다행인 것은 저런 에러 메시지와 함께 파티클이 생성은 되는데, 해당 부분이 에러처리가 되기 때문에 작성된 파이선 프로그램이 제대로 동작하지 않는 문제가 있다. 그래서 이는 이렇게 해결하였다.


try:

    particleFill(rs=100,maxX=1,maxY=1,maxZ=1,minX=0,minY=0,minZ=0,pd=1,cp=1)

except:

    pass


이렇게 하면 파티클 자체가 생성되고, 문제가 되는 particle ; 부분을 건너뛰어버려서 문제를 해결할 수 있었다.

 



To be continued...