Houdini: 두 판 사이의 차이

잔글 (→‎버전: 무료 버전 제한 추가)
잔글 (봇: 자동으로 텍스트 교체 (-\[\[([^]]*)_([^]]*)\]\] +\1 \2))
 
(사용자 6명의 중간 판 20개는 보이지 않습니다)
1번째 줄: 1번째 줄:
{{소프트웨어 정보
{{소프트웨어 정보
| 이름                 = Houdini
|이름     = Houdini
| 로고                 = [[File:houdini_logo.svg|Houdini Logo|400px]]
|원어이름 =
| 개발사              = SideFX
|배경색  =
| 발표일              = {{출시일|1996|10|02}}
|글자색  =
| 최신 버전            = 18.5.351
|로고     = [[파일:houdini logo.svg|Houdini Logo|400px]]
| 최신 버전 출시일    = {{출시일|2020|10|20}}
|화면    =  
| 미리보기 버전        = 18.5.372
|화면설명 =  
| 미리보기 버전 출시일 = {{출시일|2020|10|20}}
|원작자  =
| 프로그래밍 언어     = C++, Python
|개발    =
| 운영체제             = Windows, macOS, Linux
|종류    = [[컴퓨터 그래픽스]]
| 언어                = 영어, 일본어
|출시    = [[1996년]] [[10월 2일]]
| 종류                = [[컴퓨터 그래픽스]]
|최신버전 = 18.5.351
| 라이선스         = 무료, 상용
|최신출시 = [[2020년]] [[10월 20일]]
| 웹사이트             = {{URL|www.sidefx.com/products/houdini}}
|미리보기 = 18.5.372
|미리출시 = [[2020년]] [[10월 20일]]
|상태    =
|언어     = 영어, 일본어
|운영체제 = Windows, macOS, Linux
|플랫폼  =
|엔진    =  
|작성언어 = [[C++]], [[Python]]
|라이선스 = 무료, 상용
|이전    =
|이후    =
|웹사이트 = {{URL|www.sidefx.com/products/houdini}}
|비고    =
}}
}}


== 개요 ==
== 개요 ==
SideFX 사에서 개발한 [[3D]] 모델링을 포함한 VFX, 렌더링{{*|내장된 Mantra와 Karma}} 프로그램이다. 다른 여타 3D 그래픽스 소프트웨어들과는 다르게 워크플로우 자체가 [[노드]]를 기반으로 한 절차적 생성 방식으로 되어있다. 또 그러한 경향에 따라 [[프로그래밍]]과 매우 밀접한 관련이 있고 이는 일반적으로 알려진 Houdini의 난이도 상승 문제에 직결된 면이 있다.
SideFX 사에서 개발한 [[3D]] 모델링을 포함한 VFX 제작 및 렌더링{{*|내장된 Mantra와 Karma}} 프로그램이다. 다른 여타 3D 그래픽스 소프트웨어들과는 다르게 워크플로우 자체가 [[노드]]를 기반으로 한 절차적 생성 방식으로 되어있다. 또 그러한 경향에 따라 [[프로그래밍]]과 매우 밀접한 관련이 있고 이는 일반적으로 알려진 Houdini의 난이도 상승 문제에 직결된 면이 있다.


=== 버전 ===
=== 버전 ===
24번째 줄: 36번째 줄:


{| class="wikitable"
{| class="wikitable"
! 이름 || 가격 || 제한
! 이름 || 가격 || 제한 및 특이사항
|-
|-
| Apprentice    || '''무료'''                              || 렌더링 등에 해상도 제한과 워터마크가 붙으며 타사의 서드파티 렌더러를 사용 할 수 없고, 특정 확장자의 경우 파일 출력 등의 경우는 불러오기만 가능하다. 당연히 상업적 사용도 불가능.
| Apprentice    || '''무료'''                              || 렌더링 등에 해상도 제한과 워터마크가 붙으며 타사의 서드파티 렌더러를 사용 할 수 없고, 특정 확장자의 경우 파일 출력 등의 경우는 불러오기만 가능하다. 당연히 상업적 사용도 불가능.
|-
|-
| Indie{{*|스팀에서 구입 가능한 유일한 버전이다}}          || $299(연간), $399(2년간)                  || 연간 총 소득액 10만 달러 미만의 스튜디오 중 사용자 3명 이하. 또한 영구적인 라이센스는 구매할 수 없다.
| Indie{{*|스팀에서 구입 가능한 유일한 버전이다}}          || $299(연간), $399(2년간)                  || 연간 총 소득액 10만 달러 미만의 스튜디오 중 사용자 3명 이하. 또한 영구적인 라이센스는 구매할 수 없다. 다른 상용 라이센스와 다르게 [[Houdini#Houdini Engine|Houdini Engine]]을 시트 수만큼 무료로 제공한다.
|-
|-
| Artist        || $1,995(Core), $4,495(FX), $499(Engine)  || 스튜디오 중 사용자 5명 이하.
| Artist        || $1,995(Core), $4,495(FX), $499(Engine)  || 스튜디오 중 사용자 5명 이하.
35번째 줄: 47번째 줄:
|}
|}


== 노드 ==
=== Houdini Engine ===
다른 소프트웨어에 통합되어 사용할 수 있는 Houdini다. Houdini에서 에셋을 만들고 디지털 에셋으로 출력해 DCC 어플리케이션 등에서 Houdini Engine 플러그인을 적용 후 불러와 Houdini 내부에서 디지털 에셋을 사용하듯 인자 값을 조정해 에셋 자체를 수정하지 않고 인스턴스 마다 편집이 가능하게 된다.


/obj의 Tab 메뉴를 기준으로 작성되었다.
지원하는 프로그램들은 다음과 같다.
* [[3DS MAX]]
* [[Autodesk Maya]]
* [[언리얼 엔진|Unreal Engine 4]]
* [[유니티 (게임 엔진)|Unity]]


=== Primitives ===
Indie 라이센스를 제외한 다른 상용 라이센스에서는 추가적으로 구입해야 한다. 모든 라이센스가 영구적인 라이센스가 아닌 구독제 라이센스다.


{{ Houdini 노드 | [[File:box.svg|Box|48px]]
== [[Houdini/노드|노드]] ==
| Box, Cube |
정육면체 형태를 만든다. 프리미티브, 폴리곤, 폴리곤 메쉬, NURBS, 베지어, 포인트 타입을 지원한다.
}} {{ Houdini 노드 | [[File:houdini_circle.svg|Circle|48px]]
| Circle |
원 형태를 만든다. 프리미티브, 폴리곤, NURBS 곡선, 베지어 곡선 타입을 지원한다.
}} {{ Houdini 노드 | [[File:houdini_generic.svg|Generic|48px]]
| Control |
}} {{ Houdini 노드 | [[File:houdini_curve.svg|Curve|48px]]
| Curve |
직접 포인트를 하나의 노드로 찍을 수 있다. 폴리곤, NURBS, 베지어, 포인트 타입을 지원하고 포인트 타입이 아니라면 이웃 포인트 끼리 에지로 연결된다.
}} {{ Houdini 노드 | [[File:houdini_drawcurve.svg|Draw Curve|48px]]
| Draw Curve |
}} {{ Houdini 노드 | [[File:houdini_file.svg|File|48px]]
| File |
obj나 fbx 파일 등등을 불러올 수 있다.
}} {{ Houdini 노드 | [[File:houdini_font.svg|Font|48px]]
| Font |
폰트를 지정해 글자를 만들 수 있다. 베지어 곡선과 폴리곤 타입을 지원한다.
}} {{ Houdini 노드 | [[File:houdini_grid.svg|Grid|48px]]
| Grid |
사각형 형태를 행렬 방식으로 만들 수 있다. 행, 열, 행렬, 삼각형, 사변형, 대체 삼각형, 역삼각형 타입을 지원한다.
}} {{ Houdini 노드 | [[File:houdini_iso.svg|Iso|48px]]
| IsoSurface |
등가곡면을 만든다.
}} {{ Houdini 노드 | [[File:houdini_lsystem.svg|L-System|48px]]
| L-System |
이름 그대로 [[L-System]] 알고리즘 기반 생성한다. 처음 만들면 아이콘처럼 나무 줄기 모양을 만들 수 있다. 뼈대, 튜브 타입을 지원한다.
}} {{ Houdini 노드 | [[File:houdini_line.svg|Line|48px]]
| Line |
직선을 만든다. 폴리곤, NURBS, 베지어, 포인트 타입을 지원한다.
}} {{ Houdini 노드 | [[File:houdini_metaball.svg|Metaball|48px]]
| Metaball |
}} {{ Houdini 노드 | [[File:houdini_platonic.svg|Platonic Solids|48px]]
| Platonic Solids |
}} {{ Houdini 노드 | [[File:houdini_font.svg|PolySoup|48px]]
| PolySoup |
}}
{{ Houdini 노드 | [[File:houdini_primitive.svg|Primitives|48px]]
| Primitives |
}} {{ Houdini 노드 | [[File:houdini_sphere.svg|Sphere|48px]]
| Sphere |
구체를 만든다. 프리미티브, 폴리곤, 폴리곤 메쉬, 메쉬, NURBS, 베지어, 폴리곤 스프 타입을 지원한다.
}} {{ Houdini 노드 | [[File:houdini_torus.svg|Torus|48px]]
| Torus |
원환면 형태를 만든다. 폴리곤, 메쉬, NUBRS, 베지어, 폴리곤 스프 타입을 지원한다.
}} {{ Houdini 노드 | [[File:houdini_trace.svg|Trace|48px]]
| Trace |
이미지 파일을 불러와 평면의 지오메트리로 만들 수 있다. 지오메트리의 외곽선은 알파값으로 구분 된다.
}} {{ Houdini 노드 | [[File:houdini_tribez.svg|TriBezier|48px]]
| TriBezier |
}} {{ Houdini 노드 | [[File:houdini_tube.svg|Tube|48px]]
| Tube |
튜브, 혹은 고깔 형태를 만든다. 프리미티브, 폴리곤, 메쉬, NURBS, 베지어, 폴리곤 스프 형태를 지원한다. 양면을 닫거나 열 수 있다.
}}


=== Utility ===
주로 노드를 연결해 모델링과 VFX 제작을 하는 프로그램인 만큼 수많은 노드들이 존재한다. 자세한 내용은 [[Houdini/노드|노드]]로.
* Convert - 입력 받은 형태를 특정 형태로 변환 시켜준다.
* Copy and Transform - 복사한 다음 해당 위치만큼 이동시켜준다. 구버전에서는 Duplicate 노드였다.
* Convert Line - 입력 받은 형태를 에지만 남도록 해준다.
* Copy to Points - 첫 번째로 입력 받은 지오메트리 노드를 두 번째로 입력해 지정한 포인트 마다 복사한다. 지정하지 않는다면 모든 포인트를 기준으로 복사한다.
* Merge - 입력 받은 지오메트리를 합쳐준다. 오브젝트 네트워크 패널에서 합칠 노드를 모두 선택하고 Alt+드래그를 하면 자동으로 생성 된다.
* Mirror - 거울에 비추듯 반사하여 반대쪽으로 상이 맺히듯 복사한다.
* Null - 이 노드 자체는 아무것도 하지 않는다. 주로 여기에 인자 값을 만들고 조작하거나 다른 노드 네트워크에서 참조해 확장하는 용도로 사용한다.
* PolyDoctor - 겹쳐있는 폴리곤 등, 지오메트리의 몇 가지 문제점을 자동으로 고쳐준다.
* Split - 지오메트리의 일부분을 선택해 나눌 수 있다. 선택한 지오메트리는 첫 번째 출력으로, 선택하지 않는 지오메트리는 두 번째 출력으로 나온다.
* Subnetwork - 또 다른 네트워크를 만든다. 총 4개의 입력을 받을 수 있다.
* Visualize - 표면이나 포인트에 색상을 입혀보거나 와이어프레임을 강제로 활성화 하는 등 말 그대로 시각화 해준다.


== VEX ==
== VEX ==
Houdini 내부에서 사용하는 프로그래밍 언어. 단 스크립팅 언어를 대체하는 언어는 아니다. [[C (프로그래밍 언어)|C]]를 기반으로 하고 [[C++]]와 몇 가지 다른 언어에서 편리한 문법들을 차용했다. 실제로 vcc라는 vex 컴파일러가 C로 컴파일해 실행 된다.
Houdini 내부에서 사용하는 프로그래밍 언어. 단 스크립팅 언어를 대체하는 언어는 아니다{{*|스크립팅 언어는 [[Python]]과 HScript라는 게 쓰이는데, 후자는 쉘 스크립트와 비슷한 문법을 가지고 있다. 이 HScript는 Houdini에서 VEX와 함께 같이 밀접하게 사용된다.}}. [[C (프로그래밍 언어)|C]]를 기반으로 하고 [[C++]]와 몇 가지 다른 언어에서 편리한 문법들을 차용했다. 실제로 vcc라는 vex [[컴파일러]]가 C로 컴파일해 실행 된다.


=== 문법 ===
=== 문법 ===
121번째 줄: 73번째 줄:


===== 배열 =====
===== 배열 =====
기존 C 계열 언어와 동일한 방식으로 배열을 만들 수 있다. 리터럴도 중괄호로 감싸아서 표현한다. 단 리터럴의 경우 컴파일 타임에 변수 값을 읽을 수 없어 array 함수로 대신해주어야 한다. 또한 파이썬의 리스트처럼 쉽게 범위를 지정해 내부 값을 복사할 수도 있다.
기존 C 계열 언어와 동일한 방식으로 배열을 만들 수 있다. 리터럴도 중괄호로 감싸아서 표현한다. 단 리터럴의 경우 컴파일 타임에 변수 값을 읽을 수 없어 array 함수로 대신해주어야 한다. 또한 [[파이썬]]의 리스트처럼 쉽게 범위를 지정해 내부 값을 복사할 수도 있다.


<source lang="cpp">
<syntaxhighlight lang="cpp">
float arr[];
float arr[];
string arr2[] = { "Hello", "World" };
string arr2[] = { "Hello", "World" };
134번째 줄: 86번째 줄:
int rev[] = nums[::-1];  // { 5, 4, 3, 2, 1, 0 }
int rev[] = nums[::-1];  // { 5, 4, 3, 2, 1, 0 }
int odd[] = nums[1::2]; // { 1, 3, 5 }
int odd[] = nums[1::2]; // { 1, 3, 5 }
</source>
</syntaxhighlight>


===== 문자열 =====
===== 문자열 =====
따옴표로 문자열 값을 리터럴로 표현할 수 있다. 큰따옴표든 작은따옴표든 상관 없다.
따옴표로 문자열 값을 리터럴로 표현할 수 있다. 큰따옴표든 작은따옴표든 상관 없다.
<source lang="cpp">
<syntaxhighlight lang="cpp">
string s = 'foo';
string s = 'foo';
string t = "bar";
string t = "bar";
string py = r"Hello world\n";        // Python 스타일, "Hello world\\n"와 동일함.
string py = r"Hello world\n";        // Python 스타일, "Hello world\\n"와 동일함.
string cpp = R"(Hello world\n)";  // C++ 스타일. "Hello world\\n"와 동일함.
string cpp = R"(Hello world\n)";  // C++ 스타일. "Hello world\\n"와 동일함.
</source>
</syntaxhighlight>
 
===== 속성 =====
어트리뷰트라고도 한다. Houdini에서 가장 중요하다고도 말할 수 있을 정도로 많은 데이터가 속성 값에 들어있는데 예를 들어 디퓨즈 컬러, 위치, 노멀, 알파 값 등등은 전부 속성에서 접근할 수 있다. 조작하기 위해 대체할 수 있는 노드들도 있지만 vex를 이용해 접근하는 것이 훨씬 확장성이 높다.
속성 값은 '''[[골뱅이표|@]]'''를 접두사로 써서 표현하는데 영어로 at이라 부르기 때문이다. 또한 타입에 따라 i(정수), f(실수), v(벡터), s(문자열)들을 @ 앞에 기입해 타입을 명확히 지시해서 사용한다. 이미 정의했거나 미리 지정되어 있는 속성 값에서는 이를 생략할 수 있다.
 
<syntaxhighlight lang="cpp">
i@integer_value = 1; // 정수형 속성 값, integer_value가 이름이 되었다.
f@float_value = 1.f;  // 실수형 속성 값
v@vector_value = {0, 0, 0}; // 벡터형 속성 값
s@string_value = "hello houdini!"; // 문자열형 속성 값
</syntaxhighlight>
 
위 vex 코드를 단일 [[Houdini#Primitives|Box]] 형태에서 Attribute Wrangle 노드를 이용해 입력했을 때 지오메트리 스프레드시트 탭에서 다음과 같이 변경된다.
 
[[파일:houdini example vex.jpg|800px]]
 
대표적으로 다음과 같은 미리 정의된 속성 값들이 있다.
* '''v@P''' 포인트의 위치 값이다. 이 값을 변경하면 포인트의 위치가 변경 된다.
* '''v@N''' 노멀의 방향 값이다. 변경하면 노멀을 변경할 수 있다.
* '''v@v''' 속도 값이다. 렌더러가 모션 블러를 추가할 때 사용한다. 자동으로 계산되지 않는 속성 값이다.
* '''i@id''' 각 요소마다 고유한 id 값이다. 요소 순서 값과는 다르다. 지오메트리가 변경되어 포인트에 할당되었던 번호가 변경되었어도 여전히 같은 값으로 추적할 수 있다. 파티클 DOP에서 종종 사용 된다.
* '''s@name''' 볼륨 혹은 패킹된 프리미티브와 같은 것들에 설정하여 이름별로 코드에서 탐색 가능한 값이다. 일부 노드가 사용하는 속성 값이다.
* '''v@Cd''' 벡터로 나타낸 rgb의 디퓨즈 컬러 값이다. 변경하면 뷰포트에서 확인 가능하다.
* '''f@Alpha''' 알파 투명도 값이다. 변경하면 뷰포트에서 확인 가능하다.


==== 함수 ====
==== 함수 ====
아래와 같이 연속되는 같은 인자 값들의 타입을 생략 할 수 있다. 세미콜론으로 다른 타입의 인자와 구분 한다.
아래와 같이 연속되는 같은 인자 값들의 타입을 생략 할 수 있다. 세미콜론으로 다른 타입의 인자와 구분 한다.
<source lang="cpp">
<syntaxhighlight lang="cpp">
int test(int a, b; string c) {
int test(int a, b; string c) {
     if (a > b) {
     if (a > b) {
153번째 줄: 129번째 줄:
     }
     }
}
}
</source>
</syntaxhighlight>
사용시 주의해야 할 점은 앞서 서술했듯이 C로 컴파일 된 후 실행되므로 함수가 재귀적으로 실행되지 않는다는 점이 있다{{*|정확히는 재귀적으로 호출해야 할 함수가 아직 초기화 되지 않은 상태이기 때문에 컴파일러가 함수를 찾을 수 없어 에러를 띄운다.}}. 이땐 셰이더 호출을 사용해야 한다.
사용시 주의해야 할 점은 앞서 서술했듯이 C로 컴파일 된 후 실행되므로 함수가 재귀적으로 실행되지 않는다는 점이 있다{{*|정확히는 재귀적으로 호출해야 할 함수가 아직 초기화 되지 않은 상태이기 때문에 [[컴파일러]]가 함수를 찾을 수 없어 에러를 띄운다.}}. 이땐 셰이더 호출을 사용해야 한다.


=== 범위 기반 for ===
=== 범위 기반 for ===
<source lang="cpp">
<syntaxhighlight lang="cpp">
int arr = { 0, 1, 2, 3 };
int arr = { 0, 1, 2, 3 };
foreach (int i; arr) {
foreach (int i; arr) {
     printf("%d\n", i);
     printf("%d\n", i);
}
}
</source>
</syntaxhighlight>
 
 


{{각주}}
{{각주}}
[[분류:그래픽 소프트웨어]]
[[분류:Houdini| ]]
[[분류:1990년 소프트웨어]]
[[분류:1990년 소프트웨어]]

2022년 8월 29일 (월) 11:38 기준 최신판

Houdini
Houdini Logo
소프트웨어 정보
종류 컴퓨터 그래픽스
출시 1996년 10월 2일
최신버전 18.5.351
2020년 10월 20일
미리보기:
18.5.372
2020년 10월 20일
언어 영어, 일본어
운영체제 Windows, macOS, Linux
작성언어 C++, Python
라이선스 무료, 상용
웹사이트 www.sidefx.com/products/houdini

개요[편집 | 원본 편집]

SideFX 사에서 개발한 3D 모델링을 포함한 VFX 제작 및 렌더링[1] 프로그램이다. 다른 여타 3D 그래픽스 소프트웨어들과는 다르게 워크플로우 자체가 노드를 기반으로 한 절차적 생성 방식으로 되어있다. 또 그러한 경향에 따라 프로그래밍과 매우 밀접한 관련이 있고 이는 일반적으로 알려진 Houdini의 난이도 상승 문제에 직결된 면이 있다.

버전[편집 | 원본 편집]

일반적으로 5가지 종류가 있다고 볼 수 있는데 각각 Apprentice, Indie, Artist, Studios, Education 버전이다.

이름 가격 제한 및 특이사항
Apprentice 무료 렌더링 등에 해상도 제한과 워터마크가 붙으며 타사의 서드파티 렌더러를 사용 할 수 없고, 특정 확장자의 경우 파일 출력 등의 경우는 불러오기만 가능하다. 당연히 상업적 사용도 불가능.
Indie[2] $299(연간), $399(2년간) 연간 총 소득액 10만 달러 미만의 스튜디오 중 사용자 3명 이하. 또한 영구적인 라이센스는 구매할 수 없다. 다른 상용 라이센스와 다르게 Houdini Engine을 시트 수만큼 무료로 제공한다.
Artist $1,995(Core), $4,495(FX), $499(Engine) 스튜디오 중 사용자 5명 이하.
Studios $2,995(Core), $6,995(FX)

Houdini Engine[편집 | 원본 편집]

다른 소프트웨어에 통합되어 사용할 수 있는 Houdini다. Houdini에서 에셋을 만들고 디지털 에셋으로 출력해 DCC 어플리케이션 등에서 Houdini Engine 플러그인을 적용 후 불러와 Houdini 내부에서 디지털 에셋을 사용하듯 인자 값을 조정해 에셋 자체를 수정하지 않고 인스턴스 마다 편집이 가능하게 된다.

지원하는 프로그램들은 다음과 같다.

Indie 라이센스를 제외한 다른 상용 라이센스에서는 추가적으로 구입해야 한다. 모든 라이센스가 영구적인 라이센스가 아닌 구독제 라이센스다.

노드[편집 | 원본 편집]

주로 노드를 연결해 모델링과 VFX 제작을 하는 프로그램인 만큼 수많은 노드들이 존재한다. 자세한 내용은 노드로.

VEX[편집 | 원본 편집]

Houdini 내부에서 사용하는 프로그래밍 언어. 단 스크립팅 언어를 대체하는 언어는 아니다[3]. C를 기반으로 하고 C++와 몇 가지 다른 언어에서 편리한 문법들을 차용했다. 실제로 vcc라는 vex 컴파일러가 C로 컴파일해 실행 된다.

문법[편집 | 원본 편집]

아래는 C와 다른 부분을 위주로 서술되어 있다.

변수[편집 | 원본 편집]

배열[편집 | 원본 편집]

기존 C 계열 언어와 동일한 방식으로 배열을 만들 수 있다. 리터럴도 중괄호로 감싸아서 표현한다. 단 리터럴의 경우 컴파일 타임에 변수 값을 읽을 수 없어 array 함수로 대신해주어야 한다. 또한 파이썬의 리스트처럼 쉽게 범위를 지정해 내부 값을 복사할 수도 있다.

float arr[];
string arr2[] = { "Hello", "World" };
int value = 1;
int arr3[] = array(value, 2, 3); // 리터럴의 경우 컴파일 에러!

int nums[] = { 0, 1, 2, 3, 4, 5 };
int start[] = nums[0:2];  // { 0, 1 }
int end[] = nums[-2:];  // { 4, 5 }
int rev[] = nums[::-1];  // { 5, 4, 3, 2, 1, 0 }
int odd[] = nums[1::2]; // { 1, 3, 5 }
문자열[편집 | 원본 편집]

따옴표로 문자열 값을 리터럴로 표현할 수 있다. 큰따옴표든 작은따옴표든 상관 없다.

string s = 'foo';
string t = "bar";
string py = r"Hello world\n";        // Python 스타일, "Hello world\\n"와 동일함.
string cpp = R"(Hello world\n)";   // C++ 스타일. "Hello world\\n"와 동일함.
속성[편집 | 원본 편집]

어트리뷰트라고도 한다. Houdini에서 가장 중요하다고도 말할 수 있을 정도로 많은 데이터가 속성 값에 들어있는데 예를 들어 디퓨즈 컬러, 위치, 노멀, 알파 값 등등은 전부 속성에서 접근할 수 있다. 조작하기 위해 대체할 수 있는 노드들도 있지만 vex를 이용해 접근하는 것이 훨씬 확장성이 높다. 속성 값은 @를 접두사로 써서 표현하는데 영어로 at이라 부르기 때문이다. 또한 타입에 따라 i(정수), f(실수), v(벡터), s(문자열)들을 @ 앞에 기입해 타입을 명확히 지시해서 사용한다. 이미 정의했거나 미리 지정되어 있는 속성 값에서는 이를 생략할 수 있다.

i@integer_value = 1; // 정수형 속성 값, integer_value가 이름이 되었다.
f@float_value = 1.f;   // 실수형 속성 값
v@vector_value = {0, 0, 0}; // 벡터형 속성 값
s@string_value = "hello houdini!"; // 문자열형 속성 값

위 vex 코드를 단일 Box 형태에서 Attribute Wrangle 노드를 이용해 입력했을 때 지오메트리 스프레드시트 탭에서 다음과 같이 변경된다.

Houdini example vex.jpg

대표적으로 다음과 같은 미리 정의된 속성 값들이 있다.

  • v@P 포인트의 위치 값이다. 이 값을 변경하면 포인트의 위치가 변경 된다.
  • v@N 노멀의 방향 값이다. 변경하면 노멀을 변경할 수 있다.
  • v@v 속도 값이다. 렌더러가 모션 블러를 추가할 때 사용한다. 자동으로 계산되지 않는 속성 값이다.
  • i@id 각 요소마다 고유한 id 값이다. 요소 순서 값과는 다르다. 지오메트리가 변경되어 포인트에 할당되었던 번호가 변경되었어도 여전히 같은 값으로 추적할 수 있다. 파티클 DOP에서 종종 사용 된다.
  • s@name 볼륨 혹은 패킹된 프리미티브와 같은 것들에 설정하여 이름별로 코드에서 탐색 가능한 값이다. 일부 노드가 사용하는 속성 값이다.
  • v@Cd 벡터로 나타낸 rgb의 디퓨즈 컬러 값이다. 변경하면 뷰포트에서 확인 가능하다.
  • f@Alpha 알파 투명도 값이다. 변경하면 뷰포트에서 확인 가능하다.

함수[편집 | 원본 편집]

아래와 같이 연속되는 같은 인자 값들의 타입을 생략 할 수 있다. 세미콜론으로 다른 타입의 인자와 구분 한다.

int test(int a, b; string c) {
    if (a > b) {
        printf(c);
    }
}

사용시 주의해야 할 점은 앞서 서술했듯이 C로 컴파일 된 후 실행되므로 함수가 재귀적으로 실행되지 않는다는 점이 있다[4]. 이땐 셰이더 호출을 사용해야 한다.

범위 기반 for[편집 | 원본 편집]

int arr = { 0, 1, 2, 3 };
foreach (int i; arr) {
    printf("%d\n", i);
}

각주

  1. 내장된 Mantra와 Karma
  2. 스팀에서 구입 가능한 유일한 버전이다
  3. 스크립팅 언어는 Python과 HScript라는 게 쓰이는데, 후자는 쉘 스크립트와 비슷한 문법을 가지고 있다. 이 HScript는 Houdini에서 VEX와 함께 같이 밀접하게 사용된다.
  4. 정확히는 재귀적으로 호출해야 할 함수가 아직 초기화 되지 않은 상태이기 때문에 컴파일러가 함수를 찾을 수 없어 에러를 띄운다.