posted by cimple 2019. 9. 2. 17:17

Maya 의 node attribute data 에 접근할 때, MPlug 와 MDataHandle 을 사용하는 방법이 있다. 언뜻 보면 두 방법 다 동일해 보인다. 

하지만 두 방식을 선택할 때에는 주의할 사항이 있다.

한 가지 기억해야 할 Rule 은, Custom node 의 MPxNode::compute() function 안에서 연산이 이루어질 떄에는 compute() 에 넘겨진 MDataBlock 으로부터 만들어진 MDataHandle 을 통해서 접근해야 한다는 것이다. 이 밖에는 MPlug() 를 사용해야 한다.

MPlug 로 compute() function 과 같은 곳에서 데이터에 접근하는 것은 DG가 정확하게 업데이트 되지 않을 수 있다는 위험성을 가지고 있다. 

반대로 compute() function 바깥에서는 MPxNode::forCache() 와 같은 함수를 이용해서 MDataBlock/MDataHandle 을 사용할 수 있는데, 이 경우 plug 가 dirty 되더라도 update 된 데이터를 보장하지 않을 수 있다.

 

간단하게 두 방식을 요약하면 다음과 같다.

MPlug 의 장점:

1. 모든 dirty propagation 을 제공한다.

2. 필요한 노드 업데이트 연산을 자동으로 수행한다.

3. multi element 가 필요할 때 자동으로 생성한다.

MDataBlock/MDataHandle 의 장점:

1. MPlug 보다 빠르다.

2. dirty plug 의 현재 값을 노드 업데이트를 force 하지 않고도 가져올 수 있다.

 

 

이 글은 다음 글에 기반하여 작성되었다.

https://around-the-corner.typepad.com/adn/2015/03/evaluating-node-attribute.html