후디니 Sweep 단면이 뒤틀릴 때: Up 벡터·Roll·Twist
Sweep으로 만든 곡선 튜브의 단면이 중간에서 돌아가거나 뒤집혀 보일 때가 있습니다. 이때 Roll부터 바꾸면 첫 단면만 맞고 뒤쪽은 더 어색해질 수 있습니다. 프레임, 곡선 속성, 추가 Twist를 나눠서 확인하세요.
세 원인은 화면에서 비슷하게 보여도 고치는 설정은 다릅니다. 기준 Up Vector가 tangent와 충돌했을 수 있고, 곡선의 point 속성이 설정을 덮었을 수도 있습니다. 전체 단면을 같은 각도로 돌리는 Roll과 곡선을 따라 누적하는 Twist를 구분해야 합니다. 어디부터 보면 단면 뒤틀림을 빠르게 가를 수 있을까요?
이 글에서는 단면 방향을 만드는 프레임, 곡선 point 속성, 의도한 회전을 차례대로 분리합니다. 아래 도구에서 곡선 모양과 Up 기준을 바꿔 단면 표시가 어떻게 달라지는지 먼저 보세요.
체험 도구: 곡선 모양과 Up 기준을 바꿔 보세요
단면의 첫 점을 따라 그린 개념도입니다. 표시 각도는 연속 표본 사이에서 재며, 닫힌 곡선의 끝-시작 이음부는 계산하지 않습니다. 곡선 방향이 꺾인 양도 들어가며, Houdini의 실제 메시·옵션 계산을 그대로 재현하지는 않습니다.
직선에서는 단면 방향이 눈에 띄게 변하지 않을 수 있습니다. 원과 나선에서는 곡선의 tangent가 계속 바뀝니다. 수직 꺾임에서는 세계축 Up이 tangent와 나란해지는 구간이 생길 수 있습니다. 이 차이가 Up Vector를 고를 때 중요합니다.
Houdini 19.5.435에서 나선과 수직 꺾임을 실측했습니다
표의 각도는 곡선 위 인접 단면에서 첫 점이 향하는 월드 방향을 비교한 최댓값입니다. Houdini 19.5.435 Commercial의 hython에서 Sweep 2.0을 실행했습니다. 자동 원형 단면은 12열, 반지름 0.1로 설정했습니다. 나선은 65점, 수직 꺾임은 25점으로 만들었습니다.
| 나선 65점 설정 | 최대 방향 변화 |
|---|---|
| Target Up Vector: Curve Normal | 8.2622° |
| Target Up Vector: Z Axis | 8.2612° |
| point up={0,1,0}, Transform Using Curve Point Attributes 켬 | 11.9100° |
| Partial Twist 15°, Twist Per: Per Edge | 17.0963° |
| 수직 꺾임 25점 설정 | 최대 방향 변화 |
|---|---|
| Target Up Vector: Curve Normal | 45.0000° |
| Target Up Vector: Y Axis | 45.0000° |
| Target Up Vector: Z Axis | 0.0000° |
| point up={0,1,0}, Transform Using Curve Point Attributes 켬 | 45.0000° |
| Partial Twist 15°, Twist Per: Per Edge | 45.9930° |
이 값은 단면 첫 점 방향의 총 변화량입니다. 곡선 tangent가 꺾이며 생긴 변화도 포함하므로, 원치 않는 twist만 따로 잰 숫자는 아닙니다. 수직 꺾임에서 Z Axis가 0°로 나온 것은 그 곡선과 첫 점 방향의 조합에서 벡터가 바뀌지 않았다는 뜻입니다. 다른 단면 점이나 모든 곡선에서 문제가 없다는 뜻은 아닙니다.
나선에서 point up 속성을 넣었을 때는 11.9100°로, 시작 Up Vector만 고른 두 조건보다 큰 값이 나왔습니다. 이것은 이 표본에서 측정한 방향 변화이며, 모든 곡선에서 point up이 더 나쁘다는 뜻은 아닙니다. 직접 만든 속성이 프레임을 어떻게 덮는지 같은 곡선에서 비교하는 데 쓰세요.
첫 점이 뒤집히면 단면 회전보다 tangent와 Up 기준을 보세요

Sweep은 spine curve의 각 지점에서 단면이 놓일 방향을 계산합니다. Curve tangent는 단면이 진행할 방향을 정하지만, 그 축을 중심으로 단면을 얼마나 돌릴지는 하나의 추가 기준이 필요합니다. 그 기준을 고르는 항목이 Construction 탭의 Up Vectors에 있는 Target Up Vector입니다.
Target Up Vector 메뉴에는 Curve Normal, X/Y/Z Axis, Attribute, Custom이 있습니다. Curve Normal은 평면 curve에서 단면의 up을 곡선 평면의 법선에 맞추는 선택입니다. X/Y/Z Axis는 세계축을 기준으로 시작 방향을 정합니다. Attribute나 Custom은 curve별 기준 벡터를 사용합니다.
여기서 고르는 Up Vector는 모든 점에서 같은 방향을 강제로 유지하라는 뜻과 다릅니다. Sweep 2.0은 시작 기준 벡터에 맞는 프레임을 정하고, curve tangent를 따라 단면 방향을 계산합니다. 두 tangent 사이를 최소 회전으로 이어 가는 방식을 운반 또는 parallel transport라고 부릅니다. SideFX UI에 Minimal Rotation이라는 별도 메뉴가 있는 것은 아닙니다.
그래서 세계축을 고정해 두고 각 점의 up을 직접 계속 넣으면, 시작 방향만 지정했을 때와 결과가 달라질 수 있습니다. 특히 선택한 up 축이 tangent와 나란해지면 단면을 돌릴 기준이 불안정해질 수 있습니다. 곡선 전체에서 기준으로 쓸 up이 계속 유효한지 먼저 확인하세요.
point N·up 속성이 Target Up Vector보다 우선할 수 있습니다
곡선에 속성을 만들어 두었다면 Construction 탭의 Transform Using Curve Point Attributes가 켜져 있는지 확인하세요. 이 옵션이 켜져 있으면 Sweep은 spine point의 위치·방향·크기 속성을 단면 transform 계산에 쓸 수 있습니다.
| 곡선 point에 있는 속성 | Sweep에서 확인할 내용 |
|---|---|
| N만 있음 | 다른 방향 속성이 없으면 N을 tangent 방향으로 사용합니다. |
| up만 있음 | tangent는 계산하고, up을 각 point의 up-vector로 사용합니다. |
| N과 up | 표준 point transform 규칙에 따라 N이 축 방향, up이 회전 기준을 정합니다. |
| orient 또는 transform | 이 방향 정보가 있으면 N·up을 바꿔도 결과가 바뀌지 않을 수 있습니다. |
표준 point 속성의 우선순위는 transform 행렬이 다른 transform 속성을 대체하고, orient가 있으면 orient로 방향을 정합니다. orient가 없으면 N과 up으로 축을 맞춥니다. rot는 그 뒤에 추가 회전으로 적용됩니다. Copy to Points에서도 같은 속성 이름을 다루므로 후디니 Copy to Points 회전·크기 속성의 orient·N·up 우선순위와 함께 보면 속성 조합을 이해하기 쉽습니다.
사용자가 적은 up 값이 결과를 바꾸지 않는다면, 다른 속성이나 Transform Using Curve Point Attributes 설정이 우선했는지 보세요. 반대로 점마다 다른 up을 만들어 둔 경우에는 Target Up Vector가 예상과 다르게 보일 수 있습니다. 두 입력이 서로 다른 기준을 주고 있는지 확인하는 것이 먼저입니다.
Roll은 전체 오프셋이고 Twist는 곡선을 따라 적용합니다
기본 프레임이 안정된 뒤에는 Rotation의 Apply Roll or Twist를 확인하세요. Roll은 spine 방향을 축으로 모든 단면에 같은 각도를 적용합니다. 시작 단면의 방향을 전체적으로 맞출 때 쓰며, curve 중간에서 추가 회전이 쌓이는 문제를 고치는 기능과는 다릅니다.
| 설정 | 적용 방식 | 언제 확인하나 |
|---|---|---|
| Roll | 모든 단면에 같은 회전 | 단면 방향 전체가 일정하게 돌아가 있을 때 |
| Partial Twist | 선택한 interval마다 각도 추가 | 구간별로 의도한 twist를 줄 때 |
| Full Twists | 360°를 곱해 Partial Twist에 더함 | 한 interval에 완전 회전을 더할 때 |
| Twist Per: Per Edge | 인접 curve point 사이 edge마다 적용 | 점 간격이 달라지면 단위 길이당 회전도 달라질 때 |
| Per Full Curve by Edges | 총 회전량을 curve 전체 edge에 나눔 | 전체 curve를 한 번 비틀 양을 나눌 때 |
예를 들어 Partial Twist 15°와 Per Edge를 선택하면 각 edge 구간마다 그 값을 적용합니다. Full Twists 1은 여기에 360°를 더합니다. 완전한 한 바퀴는 edge 끝의 단면 첫 점 방향으로만 보면 시작 방향과 같을 수 있습니다. 단면 첫 점 한 개만으로는 360° 회전을 식별할 수 없다는 점을 기억하세요.
점 간격이 고르지 않은 curve에서 일정한 총 회전을 주려면 Per Full Curve by Edges나 Per Full Curve by Distance를 비교하세요. 점마다 twist 속성을 곱하는 Scale by Attribute는 누적 회전이 아니라 각 지점에 적용되는 roll 값으로 설명되어 있습니다. Twist Ramp Attribute가 어떤 클래스에 있는지도 함께 확인하세요.
프레임, 속성, 추가 회전 순서로 점검하세요
설정 창을 한꺼번에 바꾸기보다 다음 순서로 하나씩 확인하세요. 매 단계에서 첫 단면과 중간 단면, 끝 단면의 방향을 같은 위치에서 비교하면 무엇이 결과를 바꾸는지 찾기 쉽습니다.
- 먼저 프레임을 확인하세요. Target Up Vector가 curve tangent와 나란해지는 구간이 있는지 봅니다. 평면 curve라면 Curve Normal을, 공간 곡선이라면 구간 전체에서 유효한 Custom 또는 Attribute up을 시험합니다.
- 다음으로 point 속성을 확인하세요. Transform Using Curve Point Attributes가 켜져 있는지 보고 N, up, orient, transform을 살핍니다. 한 속성만 바꿨는데 결과가 그대로라면 더 높은 우선순위의 방향 정보가 있는지 확인합니다.
- 마지막으로 Roll과 Twist를 나눕니다. 전체 단면의 시작 방향만 맞추려면 Roll을, curve를 따라 비틀려야 할 때는 Full Twists·Partial Twist·Twist Per를 봅니다.
끝 단면도 특정 방향을 향해야 한다면 Use Target End Up Vector를 시험하세요. 이 옵션은 시작 방향은 유지하면서 끝 up-vector가 목표에 가까워지도록 curve를 따라 twist를 조정합니다. 끝 방향을 맞추느라 시작이 바뀌는지 같이 확인하세요.
방향만 따로 검사하고 싶다면 Orientation Along Curve 노드로 프레임을 출력해 볼 수 있습니다. SideFX는 이 노드의 방향 계산이 Sweep과 동등하다고 설명합니다. 이 글의 각도 표는 Houdini 19.5.435 Commercial에서 측정했고, 화면 캡처 버전은 Houdini 22.0.466 Apprentice입니다. 버전이 다른 메뉴를 그대로 따라 하기 전에 실제 parameter label을 확인하세요.
정리: Roll보다 프레임을 먼저 확인하세요
단면 방향이 중간에서 뒤집히면 처음부터 Roll로 덮지 마세요. 먼저 Target Up Vector와 curve tangent를 보고, 다음으로 point N·up·orient·transform이 켜진 상태에서 결과를 덮는지 확인하세요. 의도한 회전만 마지막에 Roll과 Twist로 조정하세요.
단면이 뒤틀릴수록 프레임을 먼저, Roll은 마지막에 보세요.
참고 자료
vfx 잡학지식


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