후디니 Copy to Points 회전·크기 속성: orient·N·up·pscale 우선순위
Copy to Points로 복사한 물체가 엉뚱하게 돌거나 크기가 그대로라면, target point에 어떤 속성이 있는지와 적용 순서를 먼저 확인하세요. orient가 있으면 N과 up 대신 orient가 방향을 정하고, transform이 있으면 그 행렬이 회전·크기 속성을 대체합니다. pscale과 scale은 둘 중 하나를 고르는 관계가 아니라 서로 곱해집니다.
같은 표준 속성 체계는 포인트 인스턴싱에도 쓰이므로 후디니 인스턴스 작업에서도 참고할 수 있습니다. 아래 수치 실험은 Copy to Points SOP에 한정했습니다.
회전 속성을 겹쳐 만들거나 스케일 값을 무작정 바꾸기 전에, SideFX 공식 문서의 우선순위를 기준으로 점검하면 원인을 좁힐 수 있습니다. 아래 결과는 설치된 Houdini 19.5.435의 hython에서 점 하나에 속성을 넣고 Copy to Points를 실행해 확인했습니다.
Copy to Points 속성은 transform, orient, N 순서로 확인하세요
속성은 원본 물체가 아니라 복사 대상인 점에 둡니다. 표에서 위 단계가 아래 단계보다 먼저 결과를 결정합니다. 다만 pivot은 회전·크기 모드를 고르는 속성이 아니라 로컬 기준점을 옮기며, P와 trans는 최종 위치를 정합니다.
| 확인 순서 | 속성 | Copy to Points에서 하는 일 |
|---|---|---|
| 기준점 | pivot | 복사본의 로컬 피벗을 지정합니다. |
| 전체 변환 | transform | 3×3 또는 4×4 행렬로 변환합니다. 이 속성이 있으면 orient, N, up, v, rot, pscale, scale 조합을 따로 기대하지 마세요. P, pivot, trans의 이동은 예외입니다. |
| 방향 | orient 또는 N·up·v | transform이 없으면 orient가 우선합니다. orient도 없을 때 N이 복사본의 +Z축을 정하고, up은 +Y축 방향을 보조합니다. N이 없으면 v가 +Z축 방향에 사용될 수 있습니다. |
| 추가 회전 | rot | 앞에서 정한 방향에 회전을 더합니다. |
| 크기 | pscale × scale | pscale은 균일한 float, scale은 축별 float3입니다. 둘 다 있으면 곱해집니다. |
| 위치 | P + trans | 점의 위치 P에 추가 이동 trans를 더합니다. |
SideFX 문서의 식은 간단히 이렇게 읽을 수 있습니다. transform이 있으면 피벗·행렬·이동, 없고 orient가 있으면 피벗·스케일·orient와 rot·이동, 그 외에는 피벗·스케일·N 또는 v 정렬과 rot·이동이 적용됩니다.
transform 있음: X * M * T
orient 있음: X * S * (O * R) * T
그 외: X * S * L * R * T
X는 피벗 이동, M은 transform 행렬, S는 pscale과 scale의 곱, O는 orient, L은 N 또는 v와 up으로 만든 정렬, R은 rot, T는 P와 trans의 이동입니다.
원문 우선순위와 행렬식은 공식 문서에서 확인할 수 있습니다.
체험 도구: 속성을 켜서 방향과 크기를 비교하세요
아래 판정기는 고정된 예시 값에서 체크한 속성이 어떤 역할을 하는지 의사 3D 축으로 보여 줍니다. 처음에는 N과 up, pscale과 scale이 켜져 있습니다. 여기에 orient를 켜면 N/up 대신 orient가 방향을 정하고, transform을 켜면 행렬이 그보다 우선합니다.
점 속성 조합 판정기
체크박스를 바꾸면 정지 상태에서 Copy to Points가 우선 적용할 속성과 축 방향·크기를 갱신합니다. 값은 비교를 위한 고정 예시입니다.
예시 값: orient는 Y축 90°, N=(0,1,0), up=(0,0,1), v=(1,0,0), rot는 로컬 Z축 30°, pscale=2, scale=(1,2,3), transform은 Y축 90° 회전과 (1.5,1,0.75) 스케일, pivot=(0.5,0,0), trans=(0.5,0,0)입니다. P는 원점으로 둡니다.
이 그림은 고정된 예시 값의 배치 방향과 축별 스케일을 보여 줍니다. 표면 점의 implicit normal, 오브젝트 피벗 보정, velocity blur는 별도 설정이며 여기서 계산하지 않습니다. N/up/v가 어떤 순서로 사용되는지 확인하는 판정 예시로 써 주세요.
Houdini 19.5.435에서 점 하나로 확인한 결과
실험에서는 각 축 길이가 2인 큐브를 원본으로 두고, 복사 대상의 원점에 점 하나를 만들었습니다. 회전을 읽기 위해 원점에서 로컬 X·Y·Z축으로 각각 0.45 단위인 probe도 넣었습니다. Copy to Points의 Transform Using Target Point Orientations는 On, Pack and Instance는 Off로 두고, 결과 지오메트리의 바운딩 박스와 probe 끝점 벡터를 읽었습니다.
| target point 속성 | bbox 크기 | 복사된 원본 축 probe 결과 |
|---|---|---|
N=(0,1,0) | (2, 2, 2) | +X→(0.45, 0, 0), +Y→(0, 0, -0.45), +Z→(0, 0.45, 0) |
N=(0,1,0), up=(0,0,1) | (2, 2, 2) | +X→(-0.45, 0, 0), +Y→(0, 0, 0.45), +Z→(0, 0.45, 0) |
orient=(0,√0.5,0,√0.5) | (2, 2, 2) | +X→(0, 0, -0.45), +Y→(0, 0.45, 0), +Z→(0.45, 0, 0) |
같은 orient와 N·up | (2, 2, 2) | 위 orient만 있을 때와 같은 축 결과입니다. 이 조합에서는 orient가 N/up보다 우선했습니다. |
pscale=2, scale=(1,2,3) | (4, 8, 12) | 축 probe 길이=(0.9, 1.8, 2.7)입니다. 균일 스케일 2에 각 축 scale을 곱한 값입니다. |
orient·N·v 없음, 고립 점 | (2, 2, 2) | 로컬 +Z→(0, 0, 0.45)로 남았습니다. |
N 없이 v=(1,0,0) | (2, 2, 2) | 로컬 +Z→(0.45, 0, 0)입니다. |
pscale=0 | (0, 0, 0) | 세 축 probe가 모두 길이 0이 됐습니다. |
N만 둔 결과와 N·up을 함께 둔 결과는 +Z 방향은 같지만 +X와 +Y가 달라집니다. 즉 up은 복사본이 향하는 축만 정하는 게 아니라 그 주위의 롤 방향도 고정합니다. 큐브처럼 대칭인 원본은 롤 차이를 알아보기 어려우니, 축 선이나 한쪽에 표시가 있는 비대칭 물체로 확인하세요.

회전이나 크기가 기대와 다르면 이 순서로 점검하세요
- 속성이 target point에 있는지 확인합니다. Geometry Spreadsheet에서 속성 이름과 클래스가 point인지 보세요. 속성 클래스 때문에 값이 다르게 보이면 후디니 포인트·버텍스·프리미티브 속성 차이도 함께 확인하세요.
- transform부터 찾습니다. 점에
transform이 있으면 별도의 orient나 scale 값이 적용될 것이라고 가정하지 말고 행렬을 먼저 확인하세요. - orient와 N/up을 동시에 만들었는지 봅니다. orient가 있으면 방향은 orient가 정합니다. 표면 법선으로 정렬할 생각이라면 불필요하거나 오래된 orient를 지우거나 갱신하세요.
- N이 없을 때는 점의 normal 상태도 확인합니다. 이번 고립점 실험은 N/v/orient 없이 +Z를 유지했습니다. 다만 Houdini 19.5.435의 Copy to Points에는 N이 없을 때 implicit target point normal을 쓰는 옵션이 기본 On이므로, 표면 위 점이라면 그 옵션과 입력 지오메트리도 확인하세요. 롤이 중요하면 up을 지정하세요.
- pscale이 0인지 확인합니다. pscale=0이면 다른 scale이 있어도 곱셈 결과가 0이 되어 복사본이 점처럼 줄어듭니다. pscale은 float, scale은 float3로 만들어야 합니다.
- 노드의 방향 적용 옵션을 확인합니다. Houdini 19.5.435에서는 파라미터 이름이 Transform Using Target Point Orientations이며 기본값은 On입니다. 최신 공식 노드 문서는 Transform Using Point Orientations라고 표기합니다. 꺼져 있으면 점 속성만 바꿔도 기대한 회전이 나오지 않을 수 있습니다.
v는 방향 정렬에 쓰이더라도 속도 정보로 모션 블러에 별도로 사용될 수 있습니다. 특히 N과 v가 함께 있으면 N이 정렬 방향을 정하고, v는 블러 방향을 제공할 수 있습니다. 정지 배치와 모션 블러를 같은 결과로 판단하지 마세요.
Houdini 버전별 문서 차이와 확인 범위
SideFX의 Houdini 19.5, 21.0, 22.0 point attribute 문서를 비교했을 때 이 글에서 다룬 속성 이름·타입과 우선순위는 같았습니다. Houdini 19.5.435에서 확인한 UI 라벨은 Transform Using Target Point Orientations이고, Houdini 22.0 노드 문서는 Transform Using Point Orientations라고 표기합니다. 19.5.435에서는 방향 토글과 implicit-normal 토글이 기본 On이었습니다. H22 공식 문서에는 토글 초기값이 기재돼 있지 않으므로, H22 실행판의 기본값은 이 글에서 제시하지 않습니다.
Copy to Points는 복사된 지오메트리를 다음 노드에서 다시 다룰 수 있게 만듭니다. Pack and Instance를 켜는 것은 데이터를 패킹해 공유하는 선택이지, orient와 N의 우선순위를 바꾸는 선택은 아닙니다. 노드 파라미터는 SideFX 공식 문서를 참고하세요.
정리: transform을 먼저, 방향은 orient와 N, 크기는 곱셈으로 확인합니다
회전이 다르면 target point에 transform이 있는지 먼저 보고, 없으면 orient와 N/up/v를 확인하세요. 크기가 다르면 pscale이 0인지와 scale이 float3인지 봅니다. 원하는 정렬이 안 나올 때는 점 속성의 클래스와 Copy to Points의 방향 적용 옵션까지 확인하면 원인을 빠르게 좁힐 수 있습니다.
vfx 잡학지식

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