후디니에서 색·pscale 값이 안 바뀔 때: 포인트·버텍스·프리미티브 속성 확인
후디니에서 색·노멀·pscale이 이상하게 나오면 식보다 속성이 포인트·버텍스·프리미티브·디테일 중 어디에 있는지, 몇 군데에 있는지부터 확인해야 합니다.
후디니 속성 값(색이나 pscale)이 안 바뀐다면 노드 연결보다 속성이 저장된 클래스부터 확인하세요. 박스의 면 하나를 골라 Color 노드로 빨갛게 칠했습니다. 그런데 뷰포트는 그대로 회색이거나, 칠한 면 주변까지 번진 듯 흐리게 물듭니다. Attribute Wrangle에서 만든 pscale을 Copy to Points에 넘겼는데 복사본 크기가 전부 같습니다. 노멀을 고쳤는데 셰이딩은 그대로입니다. 노드 연결은 튜토리얼과 똑같은데 값만 엉뚱하게 나오죠.
이럴 때는 보통 노드 순서나 오타부터 의심합니다. 하지만 후디니에서는 값이 틀린 게 아니라 값이 다른 클래스에 저장된 경우가 많습니다. 같은 Cd라도 포인트에 있느냐, 프리미티브에 있느냐에 따라 화면에 보이는 결과와 다음 노드가 읽는 값이 달라집니다. 식을 고치기 전에 Geometry Spreadsheet에서 그 속성이 어느 클래스에 있는지부터 보세요. 원인은 대부분 거기서 드러납니다.
후디니 속성 값이 안 바뀌면 저장된 클래스를 봅니다
후디니 지오메트리에서 속성이 붙을 수 있는 클래스는 네 가지입니다. 포인트, 버텍스, 프리미티브, 그리고 지오메트리 전체를 뜻하는 디테일이죠. Maya를 쓰다 온 분이라면 포인트와 버텍스 구분에서 처음 헷갈립니다. Maya에서 버텍스라고 부르던 위치 점이 후디니에서는 포인트이기 때문입니다.
포인트는 공간 속 한 위치이고, 위치 속성 P가 여기에 있습니다. 프리미티브는 폴리곤 면, 커브, 볼륨처럼 모양을 이루는 단위입니다. 버텍스는 그 둘을 잇습니다. 프리미티브가 자기 모서리에서 포인트 하나를 가리키는 연결 하나하나가 버텍스예요. 폴리곤 박스를 만들면 포인트는 8개이지만, 면 6개가 모서리를 4개씩 가지므로 버텍스는 24개입니다. 모서리 점 하나를 면 세 개가 공유하니, 한 위치에 버텍스가 세 개씩 겹쳐 있는 셈이죠.

그래서 한 위치가 ‘이 점의 값’과 ‘이 면에서 본 이 점의 값’을 따로 가질 수 있습니다. UV 이음새에서 한 점이 UV 좌표 두 개를 갖고, 하드 엣지에서 한 점이 두 방향의 노멀을 갖는 이유가 이것입니다. 모서리에서 노멀이 갈라질 때 빛이 어떻게 달라 보이는지는 베벨이 빛을 잡는 방식에서, UV가 이음새에서 갈라져 생기는 문제는 패딩과 밉맵 글에서 이어서 볼 수 있습니다.
같은 이름이 두 클래스에 있으면 아래 단계가 이깁니다
문제는 같은 이름의 속성이 두 클래스에 동시에 있을 때 생깁니다. SideFX 공식 문서의 속성 우선순위 규칙에 따르면, 이때는 더 낮은 단계의 값이 쓰입니다. 버텍스가 포인트를, 포인트가 프리미티브를, 프리미티브가 디테일을 덮어씁니다.
첫 장면을 다시 보겠습니다. 앞 노드 어딘가에서 포인트 Cd가 이미 만들어져 있었다면, Color 노드의 Class를 Primitive로 두고 면을 빨갛게 칠해도 화면에는 포인트 Cd가 보입니다. 값은 분명 들어갔지만 우선순위에서 밀린 거예요. 노멀도 마찬가지입니다. 버텍스 N이 남아 있으면 포인트 N을 아무리 고쳐도 셰이딩은 바뀌지 않습니다.

반대로 색이 번져 보이는 건 클래스의 성질 때문입니다. 포인트에 저장한 색은 면 위에서 이웃 포인트 색과 섞여 그라데이션이 됩니다. 면 하나만 칠하려고 그 면의 포인트 네 개를 빨갛게 했다면, 그 포인트를 함께 쓰는 옆 면들까지 반쯤 물듭니다. 면 단위로 딱 떨어지는 색이 필요하면 프리미티브에, 한 위치라도 면마다 달라야 하면 버텍스에 둡니다.
노드마다 읽고 쓰는 클래스가 정해져 있습니다
두 번째 함정은 다음 노드가 어느 클래스를 읽느냐입니다. Copy to Points는 템플릿 포인트의 속성으로 복사본의 크기와 방향을 정합니다. pscale을 프리미티브에 만들어 두면 노드는 그 값을 쓰지 않고 기본 크기로 복사합니다. 에러가 나지 않으니 더 헷갈리죠.
Attribute Wrangle은 Run Over에서 고른 클래스의 요소마다 코드를 한 번씩 실행합니다. 새로 만드는 @속성도 그 클래스에 생깁니다. Points로 둔 채 면마다 다른 값을 만들려 했다면, 결과는 포인트 속성으로 저장됩니다. 프리미티브 값이 필요하면 Run Over를 Primitives로 바꾸세요. 다른 클래스의 값을 읽어야 할 때는 point(), prim(), vertex() 같은 함수로 클래스를 직접 지정하는 편이 안전합니다.
30초 진단: 스프레드시트에서 후디니 속성 이름부터 찾으세요
값이 이상해지는 노드를 선택하고 Geometry Spreadsheet를 엽니다. Points, Vertices, Primitives, Detail을 차례로 눌러 문제의 속성 이름이 어느 목록에 나오는지 확인합니다. 네트워크에서 노드를 가운데 버튼으로 클릭하면 뜨는 정보 창에서도 클래스별 속성 목록을 빠르게 볼 수 있습니다.
결과는 셋 중 하나입니다. 이름이 두 클래스 이상에 있으면 우선순위 충돌입니다. 한 클래스에만 있는데 기대한 클래스가 아니라면 처음부터 클래스를 잘못 고른 겁니다. 기대한 클래스에 있는데도 값이 이상하다면 그때 식이나 연결을 의심하면 됩니다. 이 순서를 지키면 멀쩡한 식을 고치느라 시간을 쓰지 않습니다.

- Geometry Spreadsheet에서 같은 이름의 속성이 어느 클래스에 존재하는지 확인합니다.
- 두 곳 이상이면 보이지 않는 쪽의 속성을 지울지 판단합니다.
- 잘못된 클래스에 있다면 Attribute Promote로 옮기거나 노드의 Class를 바꿉니다.
- 한 클래스에만 있는데도 결과가 이상하다면 그때 노드의 식과 연결을 점검합니다.
고칠 때는 한 이름을 한 클래스에만 둡니다
첫째, 같은 이름이 여러 클래스에 있으면 쓰지 않을 쪽을 지웁니다. Attribute Delete에서 해당 클래스의 속성만 지우면, 가려져 있던 값이 바로 화면에 나타납니다.
둘째, 값을 다른 클래스로 옮겨야 한다면 Attribute Promote를 씁니다. Original Class와 New Class를 고르고, Promotion Method로 여러 값을 하나로 합치는 방식을 정합니다. 포인트에서 프리미티브로 올리면 면 하나에 포인트 여러 개가 대응하므로 Average, Maximum, First Match 같은 규칙이 필요합니다. 조각 번호처럼 섞이면 안 되는 정수를 Average로 합치면 어느 조각의 번호도 아닌 값이 나올 수 있으니, 이럴 때는 Mode나 First Match 쪽이 맞습니다. 또 버텍스 속성을 같은 이름의 포인트 속성으로 올리면 원래 버텍스 속성은 항상 지워진다고 공식 문서에 적혀 있습니다. 원본이 필요하면 이름을 바꿔서 올리세요.
셋째, 새 속성을 만들 때 처음부터 클래스를 정합니다. Attribute Create의 Class, Attribute Wrangle의 Run Over, Color 노드의 Class는 모두 같은 질문입니다. 이 값은 위치마다 다른가, 면마다 다른가, 면의 모서리마다 다른가, 전체에 하나인가. 답에 따라 포인트, 프리미티브, 버텍스, 디테일을 고르면 됩니다.
파일을 넘기기 전에 클래스부터 정리합니다
이 규칙은 혼자 작업할 때보다 캐시를 다른 사람에게 넘길 때 더 중요해집니다. 렌더러나 다른 부서가 읽는 UV, N, Cd는 어느 클래스에 있느냐에 따라 결과가 달라지니까요. 내보내기 전에 쓰지 않는 속성을 Attribute Delete로 정리하고, 같은 이름이 두 클래스에 남아 있지 않은지 스프레드시트로 한 번 확인하는 습관을 들이세요. 중복 속성은 용량만 늘리는 게 아니라, 받는 사람이 어느 값이 진짜인지 모르게 만듭니다.
클래스를 맞췄는데도 이상하다면
첫 번째는 인트린식 속성입니다. 면적이나 바운딩 박스처럼 계산으로 얻는 값은 스프레드시트에 기본으로 표시되지 않고, Intrinsics 메뉴에서 켜야 보입니다. VEX에서 @로 바로 읽을 수도 없어서 primintrinsic 같은 함수를 써야 합니다.
두 번째는 패킹된 지오메트리입니다. Pack으로 묶으면 안쪽의 포인트와 면은 바깥에서 프리미티브 하나로만 보입니다. 안쪽 속성을 바꾸려면 언팩한 뒤 처리하거나, 패킹하기 전에 값을 정리해야 합니다.
세 번째는 디테일 속성입니다. 전체에 하나뿐인 설정값을 디테일에 두었는데 같은 이름이 포인트나 프리미티브에도 있으면 가려집니다. 전역값에는 다른 클래스와 겹치지 않는 이름을 붙이는 편이 안전합니다.
한 줄 정리
후디니에서 값이 엉뚱하게 나오면 식을 고치기 전에, 그 속성 이름이 포인트·버텍스·프리미티브·디테일 중 어디에, 몇 군데에 있는지부터 확인하세요.
vfx 잡학지식



댓글 0
첫 댓글을 남겨보세요.