2012-08-09 1 views
3

attributeAffects 함수를 사용하면 Maya 노드의 두 속성을 연결할 수 있습니다. 예를 들어, 입력 속성 x은 출력 속성 y에 링크 될 수 있습니다. 즉, x이 변경되면 Maya는 주어진 노드에서 compute() 콜백 함수를 실행하여 y을 계산합니다.변환 노드가 변경 될 때 강제 계산 (Maya Plugin)

그러나 내가 말할 수있는 한, 노드 내부의 속성 만이 플러그인처럼 내부에서 연결할 수 있습니다.

내 플러그인에서 나는 MPxLocator을 확장하고 출력 속성 out을 만듭니다. 다음을 원합니다 :

# replace <...> with transform node name. 
attributeAffects(CustomNode.out, <custom node's tranform node>.translateX) 
attributeAffects(CustomNode.out, <custom node's tranform node>.translateZ) 

이 작업을 수행하는 방법에 관한 문서를 찾을 수 없습니다. 아무도 그것을 마쳤습니까/어떻게 알았습니까? 스크립트 편집기 (파이썬)에서 다음을 수행하여이를 해킹 할 수있는 방법이 있습니다.

import maya.cmds as cmds 

# Creates CustomNode1, which is linked to transform1 in the DG. 
cmds.createNode("CustomNode") 
cmds.connectAttr("transform1.translateX", "CustomNode.out") 
cmds.connectAttr("transform1.translateZ", "CustomNode.out") 

답변

4

노드는 의도적으로 다른 노드를 알아야합니다. 즉, 노드에 필요한 일부 데이터가있는 경우 데이터를 내부 또는 생성하거나 사용자가 연결할 때 필요합니다. 이것이 Maya를 효율적으로 만드는 원인입니다. 마야가 실제로 이것을 강요하지는 않지만 마야와 항상 싸우고 있기 때문에이 디자인 아이디어를 무시하면 매우 불만해질 것입니다 (더하기, 오류가 발생하기 쉬운 코드, 유지하기 쉬운 코드).

그래서이 2 옵션을 나뭇잎

  • 생성이 입력 속성 및 (, 당신은 단지 번역을 모두 연결할 수 있습니다 그것에 동안 3 할) 사람들을 참조하십시오. 이 접근법의 보너스는 이제 마야 사용자가 노드에서 기대하지 않은 것을 할 수 있다는 것입니다. 이것이 다른 모든 Maya 노드의 작동 방식입니다. 대부분의 팩토리 노드는 나머지 노드에 예상되는 연결을 연결할 수 있도록 노드를 만들기위한 명령을 제공합니다. 다른 작업을 수행하려는 사용자는 항상 createNode을 사용할 수 있습니다. out 속성에 연결하지 않으면 실제로 이렇게 해킹하지 않습니다.
  • 그것 때문에 로케이터 노드가 이미 DAG 노드 상속 속성 parentMatrix의 형태로 부모의 변환을 알고있는 일이, 지금은 부모의 로컬 좌표가 아니라 그 세계 공간 좌표입니다. 이제 이것 역시 Maya가 만드는 연결이지만 숨겨진 연결 유형입니다. *

이것들 만 당신의 유일한 제정신 옵션입니다. 그러나 꼭해야한다면, 물어 보는 것을 할 수는 있지만, Maya가 제공하는 무료 성능을 바탕으로 자신의 이벤트를 모니터링하게 될 것입니다. 약간의 추가 코드와 훨씬 더 많은 디버깅이 모든면에서 열등합니다.

PS : 당신의 해킹 작동하는 이유는 출력이 더러운하고 경우에 마야는 다음 마야는 계산을

을 발사합니다 출력을 평가하도록 요청되도록 마야, 연결에게 그들이 만들어지는 반대 방향으로 평가한다는 것입니다 * 시간과 마찬가지로 time of time이라는 애트리뷰트를 만들면, Maya는 다른 것을 연결하지 않는다면 물어 보지도 않고, 당신을 위해 그것을 연결합니다. 음영은 주로 이러한 연결을 기반으로합니다.

+0

위대한 답변입니다. Maya 노드 뒤에있는 의미를 잘 알지 못했지만 지금은 내게 훨씬 명확합니다. 감사합니다. – rykardo

+0

당신이 알고있는 형태로 혜택을받을 수있는 것이 하나 더 있습니다. 코드를 올바르게 구성하면 내부적 인 경우에도 요청 당 최소 슬롯 수, 입출력 만 계산됩니다. 즉, Maya가 요청한 내용을 확인할 수 있습니다. 그런 다음 노드를 만들지 않고도 결과를 캐시 할 수 있으며 항상 올바른 순서로 평가됩니다. 그것은 당신이 노드 내부 계산 사이에 다른 노드를 주입 ​​할 수 있습니다. 모션 경로 베어링 계산과 같은 많은 Maya 공장 노드에서이 작업을 수행 할 수 있습니다. 모든 계산은 노드 안에 있습니다. 그래서 노드의 노드. – joojaa

관련 문제