posted by cimple 2019. 8. 28. 15:52

Maya Blendshape Node 에 대한 분석의 결과물을 정리해 보려고 한다.

1. Blendshape node 의 생성

mesh 1, mesh 2, mesh 3 을 차례로 선택하고 blendshape 을 생성하면, 가장 마지막에 선택한 mesh 3 이 base mesh(neutral shape) 이 되면서 blendshape node 가 생성된다.

2. Blendshape node 의 연결

- Blendshape 의 input 으로 base mesh 는 입력되지 않는다. Blendshape node 의 output geometry attribute 가 base  mesh 의 inMesh 에 연결된다. base mesh 의 기본 정보는 커맨드 형태로 Blendshape node 에 입력되는 것을 보인다.

- Blendshape 에 target mesh 들은 input 에 직접 입력된다. 이 때, BlendshapeNode.InputTarget[0].InputTargetGroup[0].InputTargetItem[6000].InputGetomTarget 이라는 복잡한 과정을 거쳐서 mesh 데이터를 입력받는다. 상위의 attribute 들은 모두 compound attribute.

-Target shape 이 늘어날 때마다, BlendshapeNode.InputTarget[0], BlendshapeNode.InputTarget[1] ... 이런 식으로 Array attribute 형태로 붙게 된다. 이 array attribute 를 직접 attribute editor 나 channel box 에서 확인할 수는 없다. 

- Array attribute 의 특성상, node 내부에 미리 정해진 저장 공간을 할당하고 거기에 target shape 들을 연결한다. 만약 initial 로 3개의 target 을 연결했다면, 3개의 target mesh 를 받을수 있는 attribute 공간이 생성되고, node 연결을 끊더라도 이 공간 크기는 유지된다. 만약 새로운 공간을 더 확보하고 싶다면 Maya 에서도 Add blendshape 버튼을 제공하듯이, node 저장공간을 더 할당하고 Blendshape node 를 꽂아넣는 과정이 필요하다.

3. Shape 의 구성

- Blendshape 을 연결하면, base mesh object 에 orig shape 이 추가로 생성된다. orig shape 은 blendshape 에만 생성되는 것은 아니고, maya deformer 를 설치하면 자동으로 생성된다.

- base mesh 의 transform 에 종속되어 포함된다. 그러나 outliner 나 viewport 에서 바로 확인할 수는 없는데, 이는 이 오브젝트가 intermediate object 이면서 hidden in outliner 속성이 적용되어 있기 때문이다. Node editor 같은 곳에서 이 orig shape 을 선택한 다음, attribute editor 에서 Intermediate object 항목을 체크 해제해 주면 viewport 상에서 해당 shape 을 볼 수 있고, Hidden in Outliner 항목을 체크 해제해주면 Outliner 에서 해당 Mesh 의 Transfrom 에 child 로 들어 있는 Orig shape 을 확인할 수 있다.

- 만약 Intermediate object 를 보고 싶어서 항목을 체크 해제하면, 해당 오브젝트의 History 를 지워서 Blendshape node 를 지운다고 해도 이 OrigShape 은 남아있게 된다. 체크가 되어 있으면 history 를 지우면 intermediate object 도 함께 사라지게 된다.