후디니 VEX·HScript·Python 어디에 무엇을 쓰나
후디니 Python을 어디에 써야 할까요? 포인트 위치를 바꾸거나 파라미터를 연결하고, 여러 노드를 자동으로 만들 때 VEX·HScript·Python 중 무엇을 골라야 할지 막히기 쉽습니다. 후디니에서는 언어 이름뿐 아니라 입력 위치도 함께 구분해야 합니다.
핵심은 작업 대상과 입력 위치를 먼저 구분하는 것입니다. 포인트별 속성 계산에는 VEX, 파라미터의 수식과 채널 참조에는 HScript expression, 장면·노드·파일을 다루는 자동화에는 Python을 우선 검토합니다. 반복해서 실행할 도구는 Python Shelf Tool로 만들 수 있습니다.
다만 언어 이름만으로 모든 작업이 결정되지는 않습니다. Python도 파라미터 입력칸에서 사용할 수 있고, Python SOP에서는 지오메트리를 직접 수정할 수 있습니다. 같은 Python이라도 실행 위치와 목적이 다릅니다.
이 글에서는 작업별 언어 선택부터 정리합니다. 이어서 Houdini 19.5.435에서 100만 포인트를 대상으로 측정한 VEX와 Python SOP의 실행 시간을 비교합니다. 마지막에는 잘못 고르기 쉬운 경계와 빠른 선택 순서를 살펴봅니다.
작업별 언어와 입력 위치부터 고르세요
| 하려는 작업 | 우선 선택 | 정확한 입력 위치 |
|---|---|---|
| 포인트 위치·색상·속성 계산 | VEX | Attribute Wrangle의 Snippet, Run Over 설정 |
| 파라미터 값 계산·채널 참조 | HScript expression | 노드의 파라미터 입력칸 |
| 파라미터에서 Python 계산 실행 | Python parameter expression | 해당 파라미터의 Expression Language를 Python으로 변경한 입력칸 |
| 노드 생성·장면 제어·파일 일괄 처리 | Python / HOM | Python Shell, hython 등 |
| 입력 지오메트리를 Python으로 수정 | Python SOP | Python SOP의 Code |
| 클릭할 때 실행되는 반복 도구 | Python Tool Script | Shelf Tool의 Python 스크립트 |
하려는 일에 맞는 언어와 입력 위치 고르기
작업을 선택하면 우선 사용할 언어, 입력 위치, 짧은 예시가 나옵니다. 특정 문맥을 기준으로 한 출발점입니다.
선택 결과는 작업 대상을 기준으로 읽으면 됩니다. 지오메트리 요소마다 값을 계산한다면 VEX와 Attribute Wrangle을 먼저 확인합니다. 파라미터 연결이라면 HScript expression을 확인합니다. 노드·파일 자동화라면 Python과 HOM을 검토합니다. Python SOP와 Python parameter expression은 같은 Python을 사용하지만 서로 다른 입력 위치입니다.
HScript는 파라미터의 수식과 채널 참조에 사용합니다
HScript는 후디니에서 오래 사용해 온 스크립트 언어입니다. 여기서 가장 먼저 알아야 할 것은 기본 파라미터 표현식 언어가 HScript라는 점입니다.
예를 들어 한 노드의 파라미터 값을 다른 노드의 채널에 연결하고 싶을 수 있습니다. 이때는 HScript의 ch() 같은 expression function을 사용할 수 있습니다. 단순한 연결이나 수식을 위해 별도의 Python SOP를 만들 필요는 없습니다.
채널 참조를 처음 사용한다면 후디니 ch()와 익스프레션으로 파라미터 연결하기를 함께 확인하세요. 파라미터 참조의 기본 구조를 이해한 뒤 다른 언어와 비교하면 구분하기 쉽습니다.
후디니 Python은 장면과 노드를 자동화할 때 사용합니다
후디니 Python의 대표적인 역할은 장면과 노드를 프로그램으로 제어하는 것입니다. 여러 노드를 만들거나 설정을 변경하고, 파일 처리 절차를 자동화할 때 Python을 검토할 수 있습니다.
SideFX의 HOM 문서에서 HOM은 Houdini Object Model을 뜻합니다. Python이 Houdini의 장면과 API에 접근하도록 제공하는 인터페이스입니다. 이 인터페이스의 중심에 hou 모듈이 있습니다.
Python에서 hou를 이용하면 Houdini의 노드와 장면을 코드로 다루는 작업을 구성할 수 있습니다. 사람이 반복해서 수행하는 노드 관련 작업을 스크립트로 바꾸려는 경우가 대표적입니다.
Python 코드를 실행할 수 있는 위치는 하나가 아닙니다. Houdini 안의 Python Shell에서 실행할 수 있고, hython을 사용하는 환경에서도 실행할 수 있습니다. Python parameter expression에서도 hou 모듈을 사용할 수 있습니다.
SideFX 문서에 따르면 Python Shell, hython, Python parameter expression에서는 hou 모듈이 자동으로 import됩니다. 그러나 자동 import된다는 사실이 세 실행 환경의 역할까지 같다는 뜻은 아닙니다.
Python은 언어이고 HOM은 Houdini를 제어하는 API입니다. 언어를 선택하는 문제와 어떤 API를 사용할지 결정하는 문제를 구분해야 합니다. 일반적인 Python 코드를 작성하는 것과 Houdini 노드 객체를 조작하는 것은 필요한 인터페이스가 다릅니다.
반복해서 사용하는 도구는 Shelf Tool을 검토합니다
특정 작업을 매번 같은 순서로 수행한다면 Shelf Tool에 Python Tool Script를 구성하는 방법이 있습니다. SideFX의 Tool Script 문서는 Shelf를 클릭할 때 해당 Python 스크립트가 실행된다고 설명합니다.
Python parameter expression과 Python SOP는 다릅니다
후디니 Python을 배우면서 혼동하기 쉬운 부분입니다. 두 기능 모두 Python 코드를 사용하지만 입력 위치와 실행 목적은 다릅니다.
Python parameter expression은 파라미터 값을 계산합니다
Python parameter expression은 특정 파라미터 입력칸에서 Expression Language를 Python으로 선택한 것입니다. 같은 파라미터 표현식이라도 HScript 대신 Python을 사용할 수 있습니다.
Python parameter expression은 독립된 Python SOP가 아닙니다. 입력 위치는 노드의 파라미터입니다. 주된 목적도 해당 파라미터에 필요한 결과값을 계산하는 것입니다.
SideFX 문서는 Python parameter expression이 여러 번 평가될 수 있다고 안내합니다. 따라서 표현식이 언제 평가되는지 고려하지 않고 무거운 작업이나 반복적인 부작용을 가진 코드를 넣는 방식은 주의해야 합니다.
표현식에 넣은 Python 코드가 한 번만 실행된다고 가정하지 마세요. 필요한 값 계산에 집중하고, 장면을 변경하는 별도 절차가 목적이라면 Python Shell이나 Tool Script처럼 작업에 맞는 실행 위치를 검토하세요.
기본 언어가 HScript라고 해서 Python parameter expression을 사용할 수 없는 것도 아닙니다. SideFX 문서는 파라미터별로 표현식 언어를 선택할 수 있다고 설명합니다.
Python SOP는 입력 지오메트리를 수정합니다
Python SOP는 입력 지오메트리를 Python 코드로 다루는 노드입니다. 포인트 위치나 지오메트리 정보를 읽고 수정하는 작업에 사용할 수 있습니다.
그러나 Python SOP로 지오메트리를 수정할 수 있다는 사실이 모든 포인트 계산에 Python SOP가 가장 적합하다는 뜻은 아닙니다. 포인트마다 Python 객체와 API 호출을 반복하는 구현은 계산 자체 외의 처리 비용도 포함합니다.
VEX는 지오메트리 요소별 속성 계산에 사용합니다
SideFX Houdini 19.5의 VEX snippet 문서는 Wrangle 코드가 선택한 지오메트리 요소마다 실행된다고 설명합니다. Point, Primitive 등 어떤 요소를 대상으로 처리할지는 노드의 실행 문맥에 따라 결정됩니다.
예를 들어 Attribute Wrangle을 Point Run Over로 설정한 경우 다음 코드를 사용할 수 있습니다.
@P.y = sin(@P.y);
이 코드는 현재 처리 중인 포인트의 P.y 값을 읽어 sin을 적용한 뒤 다시 P.y에 저장합니다. 예제에서는 위치의 Y 성분을 계산하지만, 핵심은 각 포인트의 속성에 접근하는 실행 문맥입니다.
SideFX 문서는 VEX가 빠르며 자동 threading과 parallel computation을 지원한다고 설명합니다. 요소별 연산을 반복하는 작업에서 VEX가 유리할 수 있는 이유입니다.
VEX를 선택했다면 Run Over를 함께 확인하세요. 코드 한 줄이 포인트마다 실행되는지, 프리미티브마다 실행되는지를 알아야 계산 대상을 올바르게 이해할 수 있습니다.
Run Over에 따른 처리 단위가 헷갈린다면 후디니 Attribute Wrangle Run Over 차이를 참고하세요. 같은 코드라도 실행 대상이 다르면 결과를 해석하는 기준도 달라집니다.

@P.y = sin(@P.x * 2) * 0.5;)로, 오른쪽은 Python SOP의 포인트 반복문으로 쓴 화면입니다.100만 포인트 실측: VEX와 Python SOP 실행 시간
두 언어를 모두 이용해 포인트 위치를 수정할 수 있다면 실행 시간은 얼마나 다를까요? 이번에는 같은 입력 지오메트리를 대상으로 VEX Attribute Wrangle과 Python SOP를 비교했습니다.
먼저 범위를 분명히 해야 합니다. 이번 결과는 동일한 수치 연산을 서로 다른 구현으로 수행한 한 PC의 실측입니다. 모든 VEX와 Python 작업의 성능을 비교한 결과가 아닙니다.
실측 환경과 계산 조건
| 항목 | 실측 조건 |
|---|---|
| Houdini | 19.5.435 Commercial |
| Python 환경 | hython 3.9.10 |
| 운영체제 | Windows |
| CPU | AMD Ryzen 7 5800X3D |
| 코어·스레드 | 8코어 / 16스레드 |
| 입력 지오메트리 | 1000×1000 XY Grid SOP |
| 포인트 수 | 1,000,000 |
| 계산 | 입력 P.y에 sin 적용 |
| 비교 대상 | Attribute Wrangle / Python SOP |
VEX 쪽은 Attribute Wrangle의 Run Over를 Point로 설정했습니다. Snippet에는 앞에서 본 @P.y = sin(@P.y); 코드를 사용했습니다.
Python SOP 쪽은 geo.points()로 포인트를 순회하면서 각 포인트의 위치를 가져오고, math.sin()을 적용한 값을 point.setPosition()으로 기록하는 방식입니다.
두 구현 모두 같은 입력 P.y에 sin을 적용하도록 구성했습니다. 그러나 내부의 처리 방식은 다릅니다. VEX는 Wrangle의 요소별 실행 방식을 사용하고, Python SOP는 Python의 포인트 루프와 HOM API 호출을 사용했습니다.
측정 방법과 캐시 조건
먼저 입력 Grid SOP의 cook을 타이밍 전에 수행했습니다. 따라서 아래 시간은 입력 그리드를 처음 생성하는 과정까지 포함한 전체 장면 생성 시간이 아닙니다.
각 SOP는 한 번 워밍업한 뒤 그 측정값을 제외했습니다. 반복 측정에서는 캐시된 이전 결과를 그대로 읽는 상황을 피하도록 cooktag 매개변수 값을 매번 변경했습니다.
VEX와 Python SOP를 교차 순서로 측정했으며, 각 방식에서 5회의 측정값을 얻었습니다. 한쪽 방식을 모두 측정한 다음 다른 쪽을 일괄 측정하는 순서가 아닙니다.
결과는 각 5회 측정값의 중앙값으로 비교했습니다. 중앙값은 측정값을 크기순으로 정렬했을 때 가운데에 오는 값입니다. 단일 측정값 하나에만 의존하지 않도록 한 것입니다.
5회 측정값과 중앙값
| 측정 | VEX Wrangle (ms) | Python SOP (ms) |
|---|---|---|
| 1회 | 4.6386 | 5880.076 |
| 2회 | 4.2683 | 6626.049 |
| 3회 | 2.3738 | 7510.871 |
| 4회 | 2.9131 | 6803.846 |
| 5회 | 1.9257 | 7810.296 |
| 중앙값 | 2.9131 | 6803.8462 |
이번 측정의 중앙값은 VEX 2.9131ms, Python SOP 6803.8462ms였습니다. 이 특정 구현과 PC에서 Python SOP 중앙값은 VEX의 약 2,336배였으며, 약 6.8초에 해당합니다. 다른 Python 구현이나 장비에 그대로 적용할 수 있는 배수는 아닙니다.
두 출력은 모두 1,000,000점을 유지했습니다. 선택한 샘플의 Y값도 서로 일치했습니다. 즉 이 실측에서는 단순히 서로 다른 계산을 실행해서 시간 차이가 난 상황은 아닙니다.
측정에 사용한 재현 스크립트는 이 PC의 D:\Aside\VFX\.work\evidence\V122-benchmark.py에 있습니다. 실측 환경과 방법은 해당 재현 결과를 기준으로 기록했습니다.
이 수치로 판단할 수 있는 것과 없는 것
이번 실측에서는 포인트별로 sin을 적용하는 작업에 VEX Wrangle을 사용했을 때 Python SOP의 포인트 루프보다 처리 시간이 짧았습니다. 이 결과는 해당 버전, 입력 지오메트리, CPU, 코드 구현에 한정됩니다.
특히 Python SOP는 포인트마다 Python 객체와 HOM API를 다루는 방식이었습니다. 따라서 측정 시간에는 math.sin() 계산만이 아니라 포인트 접근과 위치 설정에 필요한 처리 비용도 포함됩니다.
이 수치를 VEX가 Python보다 언제나 일정 배수 빠르다는 주장으로 바꾸면 안 됩니다. NumPy를 사용하는 구현이나 다른 Python 알고리즘의 성능을 측정한 결과도 아닙니다.
장면 자동화, 노드 생성, 파일 처리와 같은 작업은 이번 100만 포인트 루프와 비교 대상이 다릅니다. 그런 작업에서도 같은 성능 차이가 발생한다고 일반화할 근거는 없습니다.
SideFX 공식 비교에서도 Python 구현 방식에 따라 차이가 납니다
SideFX의 공식 HDK 문서에는 같은 SOP 작업을 서로 다른 구현으로 비교한 예가 있습니다. 해당 문서의 근사 비교 수치는 다음과 같습니다.
| 구현 방식 | 공식 비교 예의 실행 시간 |
|---|---|
| Pure Python | 약 11,400ms |
| NumPy | 약 420ms |
| VEX | 약 245ms |
이 숫자는 앞에서 진행한 Houdini 19.5.435 실측과 별개의 공식 비교 예입니다. 입력 조건과 구현을 동일하게 검증한 측정이 아니므로 두 표의 수치를 합치거나 직접적인 성능 비율로 계산해서는 안 됩니다.
SideFX 문서는 Python의 포인트 루프에서 HOM_Point 객체를 생성하고 해제하는 비용을 느려지는 이유로 설명합니다. 이는 숫자 계산 함수 하나의 속도만으로 전체 처리 시간을 설명할 수 없다는 뜻입니다.
반면 NumPy를 사용한 Python 구현의 성능은 별도로 평가해야 합니다. 이번 실측에는 NumPy 방식이 포함되지 않았으므로 NumPy 기반 Python SOP가 몇 ms에 완료될지는 이 결과만으로 알 수 없습니다.
실무에서 빠르게 고르는 5단계
새로운 작업을 시작할 때마다 세 언어를 모두 비교할 필요는 없습니다. 다음 순서로 작업 대상을 좁혀 보세요.
- 무엇을 변경할지 정하세요. 포인트·프리미티브 같은 지오메트리 요소인지, 파라미터 값인지, 장면의 노드나 파일인지 구분하세요.
- 파라미터 한 칸의 계산이라면 expression부터 확인하세요. 단순한 수식과 채널 참조라면 기본 HScript expression을 검토하세요. Python으로 표현할 필요가 있다면 해당 파라미터의 Expression Language를 확인하세요.
- 요소별 속성 계산이라면 Wrangle을 확인하세요. Attribute Wrangle에서 필요한 Run Over를 설정하고 VEX Snippet을 작성하는 방식을 먼저 검토하세요.
- 장면이나 노드를 자동화한다면 HOM을 확인하세요. Python Shell이나 hython 등 작업에 맞는 실행 환경을 선택하세요. 클릭으로 반복 실행할 도구라면 Shelf Tool의 Python Tool Script를 검토하세요.
- Python으로 지오메트리를 수정해야 한다면 구현 비용도 확인하세요. Python SOP의 포인트 루프가 필요한지 살펴보세요. 대량의 요소별 연산이라면 VEX와 비교하고, NumPy 등 다른 Python 구현의 성능을 이번 실측으로 단정하지 마세요.
결론: 언어보다 작업 대상과 실행 위치가 먼저입니다
Python parameter expression은 파라미터 값을 계산하고, Python SOP는 입력 지오메트리를 수정합니다. 반복 도구는 Shelf Tool을 검토하세요.
포인트 값은 VEX, 파라미터 연결은 HScript expression, 노드·파일 자동화는 Python을 먼저 검토하세요. 그리고 같은 Python이라도 parameter expression, Python SOP, Python Shell, Shelf Tool 중 어디에서 실행할지 먼저 결정하세요. 이 구분이 후디니 스크립트 선택의 가장 실용적인 출발점입니다.
참고 자료
vfx 잡학지식

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