후디니 Transform Order와 피벗: SRT 순서 체험
같은 점에 같은 이동·회전·크기를 넣었는데, Transform Order만 바꿨더니 점이 엉뚱한 곳으로 갔나요? 회전값이 잘못된 것인지, 피벗이 움직인 것인지 한눈에 판단하기 어렵습니다. 변환값은 그대로인데 결과가 달라지는 이유는 무엇일까요?
나사 하나를 조립할 때도 먼저 돌리고 밀지, 밀고 나서 돌릴지에 따라 도착 위치가 달라집니다. 후디니 Transform SOP도 같습니다. 변환 순서와 기준점이 달라지면 같은 숫자라도 최종 좌표가 달라집니다. 아래 표는 Houdini 19.5.435에서 한 점으로 직접 확인한 결과입니다.
Houdini Transform Order 6가지를 같은 점으로 비교했습니다
비교 조건은 입력 점 (1,1,0), Translate (2,1,0), Rotate (0,0,90), Scale (2,1,1), Pivot Translate (1,0,0), Pivot Rotate (0,0,0), Pre-Transform 기본값입니다. 회전 순서는 XYZ로 고정했습니다. 아래 값은 모두 Houdini 19.5.435의 Transform SOP 출력에서 읽었습니다.
| Transform Order | 최종 점 (x, y, z) | 결과 |
|---|---|---|
| SRT | (2, 1, 0) | 스케일·회전 뒤 마지막으로 이동합니다. |
| STR | (-1, 2, 0) | 이동한 점을 피벗 기준으로 회전합니다. |
| RST | (1, 1, 0) | 회전과 스케일 뒤 이동합니다. |
| RTS | (3, 1, 0) | 회전한 뒤 이동하고, 그 결과를 스케일합니다. |
| TSR | (-1, 4, 0) | 먼저 이동한 뒤 스케일과 회전을 적용합니다. |
| TRS | (-3, 2, 0) | 이동·회전 뒤 스케일합니다. |
이 여섯 좌표는 순서만 달리한 같은 실험값입니다. 결과가 다르다는 사실은 오차가 아니라 순서가 계산 결과에 들어간다는 뜻입니다. 특히 숫자만 보고 “90도 회전했으니 이쪽으로 가야 한다”고 판단하면 이동과 스케일이 어느 단계에 끼어 있는지 놓치기 쉽습니다.

2D 체험 도구: 순서와 피벗을 바꿔 보세요
아래 도구는 작은 도형의 이동·회전·스케일과 피벗을 직접 바꾸는 2D 단순화 시뮬레이터입니다. 기본값은 위 실험의 T=(2,1), Z 회전=90°, S=(2,1), 피벗=(1,0)입니다. Transform Order나 피벗을 바꾸면 도형과 추적점이 어떻게 달라지는지 확인하세요.
2D 단순화 · 추적점 p=(1,1)
변환 순서와 피벗 체험
순서만 바꿔도 파란 도형의 위치가 달라집니다.
이 도구는 2D에서 원리만 보여 줍니다. Houdini의 3D Rotate Order, 전체 Pre-Transform, shear와 속성 변환은 재현하지 않습니다.
기본값에서 SRT를 고르면 추적점은 (2,1)로 표시됩니다. 여기서 STR로 바꾸면 위치가 달라집니다. 같은 값을 넣었는데 다른 결과가 나오는 것이 바로 순서의 효과입니다. 단, 도구는 2D 평면에서 회전축을 하나만 다루므로 실제 3D Houdini 결과와 모든 항목이 일치한다고 보면 안 됩니다.
SRT와 STR은 글자 순서대로 적용합니다
Transform Order는 S(Scale), R(Rotate), T(Translate)를 어떤 순서로 합성할지 정합니다. Houdini는 row-vector 행렬을 사용합니다. SideFX 문서의 합성식은 p′ = p · inverse(P) · M · P · N입니다. 여기서 P는 pivot 공간, M은 Transform 값, N은 Pre-Transform입니다. 이 표기에서는 같은 문자 조합도 어디에서 곱하는지에 따라 점 위치가 달라지므로, Houdini의 적용 순서와 pivot을 함께 봐야 합니다.
이번 실험에서 SRT는 M = S · R · T입니다. 입력점을 피벗 기준으로 놓고 먼저 스케일, 이어서 Z축 90도 회전, 마지막으로 이동합니다. pivot이 (1,0,0)이어서 입력점 (1,1,0)은 pivot에서 오른쪽으로 1칸, 위로 1칸인 위치에서 시작합니다. 회전과 이동이 끝난 최종 좌표는 (2,1,0)입니다.
STR은 M = S · T · R입니다. 스케일 뒤에 이동한 점을 다시 회전하므로 최종 좌표가 (-1,2,0)으로 바뀝니다. 회전 전에 이동을 넣을지 회전 후에 이동을 넣을지의 차이만으로 X 좌표가 2에서 -1로 달라졌습니다. 나머지 네 조합도 같은 방식으로 순서가 달라집니다.
Transform Order 글자는 장식이 아니라 실제 연산 순서입니다. 처음 비교할 때는 포인트 하나와 비대칭 스케일을 사용하세요. 대칭 스케일이나 회전이 없는 경우에는 서로 다른 순서가 우연히 같은 결과를 만들 수 있습니다.
Rotate Order는 Transform Order와 다른 설정입니다
Transform Order가 이동·회전·스케일의 큰 순서를 정한다면, Rotate Order는 X·Y·Z 세 회전을 서로 어떤 순서로 합성할지를 정합니다. 두 설정은 별개입니다. Houdini 19.5 Transform SOP에는 XYZ, XZY, YXZ, YZX, ZXY, ZYX가 있습니다.
이번에는 T=(2,1,0), R=(30,45,60), S=(2,1,1), pivot=(1,0,0), Transform Order=SRT로 고정했습니다. 각도 세 개를 모두 사용하자 Rotate Order별 최종 좌표가 달라졌습니다.
| Rotate Order | 최종 좌표 (x,y,z) |
|---|---|
| XYZ | (2.426777, 1.739199, 0.353553) |
| XZY | (2.823223, 1.433012, 0.883883) |
| YXZ | (2.250000, 1.433012, 0.500000) |
| YZX | (2.133975, 1.433013, 0.250000) |
| ZXY | (2.564404, 1.433013, 0.789149) |
| ZYX | (2.387628, 1.126827, 0.780330) |
한 축만 회전하면 Rotate Order가 달라도 결과가 같을 수 있습니다. 그때는 메뉴가 고장 난 것이 아니라 나머지 축 회전이 0이라 순서 차이가 드러나지 않은 것일 수 있습니다. 오일러 각을 비교할 때는 Rotate 값뿐 아니라 Rotate Order도 같이 기록하세요.
Pivot Translate와 Pivot Rotate가 바꾸는 것
문이 경첩을 기준으로 도는 것처럼, 회전은 어느 점을 중심으로 도는지에 따라 궤적이 달라집니다. Pivot Translate는 Transform SOP의 로컬 pivot 위치를 옮깁니다. Pivot Rotate는 그 pivot 공간의 방향을 바꿉니다. 둘 다 오브젝트의 일반 Translate·Rotate 값과는 다른 역할입니다.
실측에서 Pivot Translate=(1,0,0), Pivot Rotate=(0,0,0)일 때 결과는 (2,1,0)이었습니다. 나머지 값을 그대로 두고 Pivot Rotate Z만 90도로 바꾸자 결과는 (-2,2,0)이 됐습니다. Pivot Rotate가 0이 아니면 회전값을 읽는 로컬 기준 방향도 달라지므로, Pivot Translate만 확인해서는 결과를 설명할 수 없습니다.
피벗을 옮겼는데 점이 바로 움직이지 않는다고 해서 설정이 무시된 것은 아닙니다. 회전과 스케일이 0도·1도 아닌 상태에서 차이가 나타나는지 확인하세요. 반대로 피벗 주변에서 돌려야 할 점이 크게 벗어난다면 Pivot Translate와 Pivot Rotate가 의도한 기준인지 먼저 보세요.
Pre-Transform은 Transform 값과 따로 확인하세요
Transform SOP에는 기본 Translate·Rotate·Scale 외에 Pre-Transform 섹션이 있습니다. 여기에는 별도의 Pre-Transform Order, 회전 순서, Pre-Translate, Pre-Rotate, Pre-Scale, Pre-Shear가 있습니다. 따라서 위쪽의 Translate·Rotate·Scale만 보고 최종 좌표를 역산하면 설명이 맞지 않을 수 있습니다.
Houdini 19.5.435 실험에서 Pre-Transform이 identity일 때 기본 세트의 점은 (2,1,0)이었습니다. Pre-Translate=(1,0,0), Pre-Rotate=(0,0,90), Pre-Scale=(1.5,1,1)로 바꾸자 점은 (0,3,0)이 됐습니다. Pre-Transform도 별도의 숫자 묶음이 아니라 최종 행렬에 들어가는 변환입니다.
실제 씬을 확인할 때는 Transform Order와 Rotate Order를 먼저 기록하고, Pivot Translate·Pivot Rotate와 Pre-Transform 값을 이어서 확인하세요. 프리미티브마다 다른 방향·크기를 주려는 작업이라면 Transform SOP 대신 각 포인트 속성의 역할도 따로 살펴봐야 합니다. Copy to Points에서 orient·N·up·pscale이 회전과 크기에 어떻게 연결되는지는 후디니 Copy to Points 속성 비교에서 확인할 수 있습니다.
값이 예상과 다르면 이 순서로 점검하세요
- 입력 지오메트리에서 추적할 점 하나를 고르고 Geometry Spreadsheet에서 출력 좌표를 기록하세요.
- Transform Order를 확인하고, 같은 입력·T·R·S·pivot 값으로 여섯 순서를 비교하세요.
- Rotate Order를 별도로 기록하세요. 여러 축 회전이 있을 때만 메뉴별 차이가 드러나는지 보세요.
- Pivot Translate와 Pivot Rotate를 확인하세요. 회전 중심과 회전 기준 방향이 달라지면 점 궤적도 달라집니다.
- Pre-Transform 값이 identity인지 확인하세요. 숨겨진 추가 변환이 있으면 기본 Transform 값만으로 출력 좌표를 설명할 수 없습니다.
- 결과가 올바른데 뷰포트에서 보이지 않는다면 Display Flag 등 표시 상태를 별도로 확인하세요. 노드 플래그의 기능은 후디니 노드 플래그 차이를 참고하세요.
Houdini 19.5와 22 문서 차이
이 글의 수치는 Houdini 19.5.435에서 측정했습니다. SideFX의 현재 Houdini 22 Transform SOP 문서와 19.5 문서를 비교했을 때 Transform Order·Rotate Order·Pivot Translate·Pivot Rotation·Pre-Transform의 핵심 설명과 row-vector 행렬식에서 의미 있는 차이는 찾지 못했습니다. 따라서 표의 실측값은 19.5.435 결과로 한정하고, Houdini 22에서 같은 값을 재측정했다고 표현하지 않습니다.
결국 같은 Transform 값이라도 순서와 pivot 공간이 다르면 결과 점은 다른 곳에 놓입니다. 숫자를 의심하기 전에 순서, 회전 순서, 피벗, Pre-Transform을 한 항목씩 고정해 보세요. 순서와 피벗이 최종 위치를 바꿉니다.
참고 자료
vfx 잡학지식

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