상세 컨텐츠

본문 제목

FomulaNode

Maya_Plugin_Development /hConnect

by hwano 2014. 4. 9. 18:01

본문

 

 

 

예전에 C4D를 쓸 때, C4D에는 아래와 같은 formula노드가 있었다.

물론 기본적인 커피노드도 있고 후에 파이썬 노드도 생기고 해서 더 복잡한 계산도 가능하지만

간단한 수학공식은 저 노드로 쉽게 처리 할 수 있었다.

 

 

 

 

마야를 쓰면서 불편했던 점이 저런 계산노드가 없다는 것이다. 

 

 

물론 마야는 expression을 이용하여 연결하도록 장려하고 있고 이를 통해 어느정도 해결이 된다.

하지만 expression안에서 다른 attribute를 mel의 -q 구문을 통해 가져오거나 하게 되면 expression은 그때부터 time노드와

연결되어 작동하게 되므로 플레이 버튼을 눌러야지만 실제 뷰포트에 값이 적용되게 된다.

 

즉, 복잡한 리깅등을 계획했을 경우, expression안에서 멜구문의 도움을 받을수밖에 없게 되고

이때부터 리깅구조는 실시간으로 뷰포트에 반영이 되지 않는다.

 

 

예를 들어 curve의 parameter에 따른 어떤 attribute를 가져 올때 mel을 통해서 가져올수도 있고 info노드를 통해서도 가져올수있다.

하지만 mel과 expression을 통한 연결은 이를 실시간으로 뷰포트에 뿌려주지 않는다.

이런 문제때문에 나는 expression을 거의 쓰지 않고 매번 노드 기반의 작업을 한다.

 

 

이런 노드 기반의 작업을 할 때, 당연하게 간단한 수학공식을 연결시켜야 하는데 마야는 더하기 곱하기등의 사칙연산 노드들을 따로 따로

제공하기 때문에 작업에 불편함이 많다.

스크립트를 이용하여 일련의 작업을 자동화 시키는 경우에  쓸데없이 하나둘 늘어나는

사칙연산 노드들로 스크립트 작업분량이 어마어마하게 늘어나곤 한다. 

 

내 경우 잎사귀가 자라나는 노드구조를 계층구조와 계산노드들을 이용하여

만들어 본 적이 있었는데

디테일을 올리게 되니 계산노드들이 중복되어 기하급수적으로 늘어나게 되어

별 내용도 없는 씬의 크기가 150메가까지 늘어난 적이 있었다. 씬이 무거워진것은 둘째치고, 수많은 각 노드들을 거쳐 계산을 하게되니

그 비효율은 말할것도 없다.

 

 

 

예전에 만들어 봤던 잎사귀 Set 작동모습. cluster들의 계층구조와 계산노드들을 이용하여 만들었었다.

 

 

 

 

 

 

이와 같이 단순한 방식의 구조와 움직임을 가지고 있으나 디테일을 위해 segment를 조금만 늘리면 노드의 갯수는

아래처럼 기하급수적으로 늘어난다.  ( 사실 전부 더하기 빼기, 1/2로 나누기 등의 단순한 계산들밖에 없음에도 불구하고.. )

 

 

 

 

 

작동구조를 잘 디자인하여 원하는 움직임을 아주 단순한 구조로 구현하였더라도,

막상 저 수없는 계산 노드들 사이를 거치며 퍼포먼스는 바닥으로 추락하곤 한다. 더욱이 기껏 고생해서 만들어 놓은 SET들을

프로젝트에 적용조차 못하는 상황이 빈번이 생긴다는 점이다.

 

 

///////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

뭐 이러 저러한 연유로 API를 손대면서 가장 처음만들어 봤던 노드였던거 같다.

 

//예전 파이썬버젼

2013/12/22 - formula 테스트버젼 노드 생성 완료..

2014/01/16 - 현재 상태에서 간단한 속도테스트

 

 

//c++

MGlobal::executePythonCommand 를 이용하여 c++노드안에서 python code를 실행하는 방식으로 바꿔보았다.

하지만 2014/01/16페이지에서 했던 테스트보단 빨라졌지만 여전히 느리다.  2014/01/16버젼보다 약3~4배 빠른

수준에서 멈춘다. 괜한 기대 였음.

 

executePythonCommand가 아닌 mel을 이용한 executeCommand로 바꿔 보았다. 위와 엇비슷하지만 조금은 더 빠른느낌이다.

하지만 역시 200개정도만 넘어가도 느려져서 못쓴다.

 

 

 

 

 

 

 

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

 

만약 마야를 하다가 필요성을 느끼게 되어 스크립트를 배우는 사람들이 있다면

스크립트만 배워도 뭐든 다 가능하지 않을까 하는 고민을 하는 단계의 마야유저들은

개인적으로 스크립트는 아주 기본적인 선에서 손을 때고 pythonAPI도 건너뛰고 C++API로 바로 입문하는 것이 어떨까 싶다.

 

스크립트만 이용해도 모그라프를 만들 수도 있고 xfog같은 것도 비슷하게 만들어 불 수 있지만

막상 프로젝트로 들어가서 적용을 하게 되면 스크립트는 말할것도 없고 pythonAPI로 구현한 것도 절대

실제 사용할 수 있는 퍼포먼스를 발휘하지 못한다.

 

C4D를 써본 사람은 알겠지만 모그라프 처음 써보면 너무 좋아 보이지만 effector가 늘어나거나

copy갯수가 조금만 늘어나도 속도가 어마어마하게 저하되는걸 알 수 있다. 프로그램엔진 단계에서

지원하는 계산 퍼포먼스 수준이 그정도인데

 

pythonAPI로 아무리 날고 기어봐야 그 속도보다 기본적으로 100~1000배 정도 느리다고 보면된다.

 

 

물론 개인마다 필요한 분야가 다르고 목표로 하는 기준선이 다르니 개인이 판단할 일이지만

스크립트에 아예 손을 대지 않던지 손을 댈꺼면 바로 c++ api로 가는게 좋다는 생각이다.

 

 

 

 

 

 

 

 

 

관련글 더보기