편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
{{소프트웨어 정보 | {{소프트웨어 정보 | ||
|이름 | | 이름 = Houdini | ||
| 로고 = [[File:houdini_logo.svg|Houdini Logo|400px]] | |||
| 개발사 = SideFX | |||
| 발표일 = {{출시일|1996|10|02}} | |||
|로고 | | 최신 버전 = 18.5.351 | ||
| | | 최신 버전 출시일 = {{출시일|2020|10|20}} | ||
| | | 미리보기 버전 = 18.5.372 | ||
| | | 미리보기 버전 출시일 = {{출시일|2020|10|20}} | ||
| | | 프로그래밍 언어 = C++, Python | ||
| | | 운영체제 = Windows, macOS, Linux | ||
| | | 언어 = 영어, 일본어 | ||
| 종류 = [[컴퓨터 그래픽스]] | |||
| | | 라이선스 = 무료, 상용 | ||
|미리보기 = 18.5.372 | | 웹사이트 = {{URL|www.sidefx.com/products/houdini}} | ||
| | |||
| | |||
|언어 | |||
|운영체제 = Windows, macOS, Linux | |||
| | |||
| | |||
|라이선스 = 무료, 상용 | |||
|웹사이트 = {{URL|www.sidefx.com/products/houdini}} | |||
}} | }} | ||
== 개요 == | == 개요 == | ||
SideFX 사에서 개발한 [[3D]] 모델링을 포함한 VFX | SideFX 사에서 개발한 [[3D]] 모델링을 포함한 VFX, 렌더링{{*|내장된 Mantra와 Karma}} 프로그램이다. 다른 여타 3D 그래픽스 소프트웨어들과는 다르게 워크플로우 자체가 [[노드]]를 기반으로 한 절차적 생성 방식으로 되어있다. 또 그러한 경향에 따라 [[프로그래밍]]과 매우 밀접한 관련이 있고 이는 일반적으로 알려진 Houdini의 난이도 상승 문제에 직결된 면이 있다. | ||
=== 버전 === | === 버전 === | ||
36번째 줄: | 24번째 줄: | ||
{| class="wikitable" | {| class="wikitable" | ||
! 이름 || 가격 || 제한 | ! 이름 || 가격 || 제한 | ||
|- | |- | ||
| Apprentice || '''무료''' || 렌더링 등에 해상도 제한과 워터마크가 붙으며 타사의 서드파티 렌더러를 사용 할 수 없고, 특정 확장자의 경우 파일 출력 등의 경우는 불러오기만 가능하다. 당연히 상업적 사용도 불가능. | | Apprentice || '''무료''' || 렌더링 등에 해상도 제한과 워터마크가 붙으며 타사의 서드파티 렌더러를 사용 할 수 없고, 특정 확장자의 경우 파일 출력 등의 경우는 불러오기만 가능하다. 당연히 상업적 사용도 불가능. | ||
|- | |- | ||
| Indie{{*|스팀에서 구입 가능한 유일한 버전이다}} || $299(연간), $399(2년간) || 연간 총 소득액 10만 달러 미만의 스튜디오 중 사용자 3명 이하. 또한 영구적인 라이센스는 구매할 수 없다 | | Indie{{*|스팀에서 구입 가능한 유일한 버전이다}} || $299(연간), $399(2년간) || 연간 총 소득액 10만 달러 미만의 스튜디오 중 사용자 3명 이하. 또한 영구적인 라이센스는 구매할 수 없다. | ||
|- | |- | ||
| Artist || $1,995(Core), $4,495(FX), $499(Engine) || 스튜디오 중 사용자 5명 이하. | | Artist || $1,995(Core), $4,495(FX), $499(Engine) || 스튜디오 중 사용자 5명 이하. | ||
47번째 줄: | 35번째 줄: | ||
|} | |} | ||
=== | == 노드 == | ||
/obj의 Tab 메뉴를 기준으로 작성되었다. | |||
=== Primitives === | |||
{{ Houdini 노드 | [[File:box.svg|Box|48px]] | |||
| 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 === | |||
* Convert - 입력 받은 형태를 특정 형태로 변환 시켜준다. | |||
* Copy and Transform - 복사한 다음 해당 위치만큼 이동시켜준다. 구버전에서는 Duplicate 노드였다. | |||
* Convert Line - 입력 받은 형태를 에지만 남도록 해준다. | |||
* Copy to Points - 첫 번째로 입력 받은 지오메트리 노드를 두 번째로 입력해 지정한 포인트 마다 복사한다. 지정하지 않는다면 모든 포인트를 기준으로 복사한다. | |||
* Merge - 입력 받은 지오메트리를 합쳐준다. 오브젝트 네트워크 패널에서 합칠 노드를 모두 선택하고 Alt+드래그를 하면 자동으로 생성 된다. | |||
* Mirror - 거울에 비추듯 반사하여 반대쪽으로 상이 맺히듯 복사한다. | |||
* Null - 이 노드 자체는 아무것도 하지 않는다. 주로 여기에 인자 값을 만들고 조작하거나 다른 노드 네트워크에서 참조해 확장하는 용도로 사용한다. | |||
* PolyDoctor - 겹쳐있는 폴리곤 등, 지오메트리의 몇 가지 문제점을 자동으로 고쳐준다. | |||
* Split - 지오메트리의 일부분을 선택해 나눌 수 있다. 선택한 지오메트리는 첫 번째 출력으로, 선택하지 않는 지오메트리는 두 번째 출력으로 나온다. | |||
* Subnetwork - 또 다른 네트워크를 만든다. 총 4개의 입력을 받을 수 있다. | |||
* Visualize - 표면이나 포인트에 색상을 입혀보거나 와이어프레임을 강제로 활성화 하는 등 말 그대로 시각화 해준다. | |||
== VEX == | == VEX == | ||
Houdini 내부에서 사용하는 프로그래밍 언어. 단 스크립팅 언어를 대체하는 언어는 아니다 | Houdini 내부에서 사용하는 프로그래밍 언어. 단 스크립팅 언어를 대체하는 언어는 아니다. [[C (프로그래밍 언어)|C]]를 기반으로 하고 [[C++]]와 몇 가지 다른 언어에서 편리한 문법들을 차용했다. 실제로 vcc라는 vex 컴파일러가 C로 컴파일해 실행 된다. | ||
=== 문법 === | === 문법 === | ||
73번째 줄: | 121번째 줄: | ||
===== 배열 ===== | ===== 배열 ===== | ||
기존 C 계열 언어와 동일한 방식으로 배열을 만들 수 있다. 리터럴도 중괄호로 감싸아서 표현한다. 단 리터럴의 경우 컴파일 타임에 변수 값을 읽을 수 없어 array 함수로 대신해주어야 한다. 또한 | 기존 C 계열 언어와 동일한 방식으로 배열을 만들 수 있다. 리터럴도 중괄호로 감싸아서 표현한다. 단 리터럴의 경우 컴파일 타임에 변수 값을 읽을 수 없어 array 함수로 대신해주어야 한다. 또한 파이썬의 리스트처럼 쉽게 범위를 지정해 내부 값을 복사할 수도 있다. | ||
< | <source lang="cpp"> | ||
float arr[]; | float arr[]; | ||
string arr2[] = { "Hello", "World" }; | string arr2[] = { "Hello", "World" }; | ||
86번째 줄: | 134번째 줄: | ||
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> | ||
===== 문자열 ===== | ===== 문자열 ===== | ||
따옴표로 문자열 값을 리터럴로 표현할 수 있다. 큰따옴표든 작은따옴표든 상관 없다. | 따옴표로 문자열 값을 리터럴로 표현할 수 있다. 큰따옴표든 작은따옴표든 상관 없다. | ||
< | <source 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> | ||
==== 함수 ==== | ==== 함수 ==== | ||
아래와 같이 연속되는 같은 인자 값들의 타입을 생략 할 수 있다. 세미콜론으로 다른 타입의 인자와 구분 한다. | 아래와 같이 연속되는 같은 인자 값들의 타입을 생략 할 수 있다. 세미콜론으로 다른 타입의 인자와 구분 한다. | ||
< | <source lang="cpp"> | ||
int test(int a, b; string c) { | int test(int a, b; string c) { | ||
if (a > b) { | if (a > b) { | ||
129번째 줄: | 153번째 줄: | ||
} | } | ||
} | } | ||
</ | </source> | ||
사용시 주의해야 할 점은 앞서 서술했듯이 C로 컴파일 된 후 실행되므로 함수가 재귀적으로 실행되지 않는다는 점이 있다{{*|정확히는 재귀적으로 호출해야 할 함수가 아직 초기화 되지 않은 상태이기 때문에 | 사용시 주의해야 할 점은 앞서 서술했듯이 C로 컴파일 된 후 실행되므로 함수가 재귀적으로 실행되지 않는다는 점이 있다{{*|정확히는 재귀적으로 호출해야 할 함수가 아직 초기화 되지 않은 상태이기 때문에 컴파일러가 함수를 찾을 수 없어 에러를 띄운다.}}. 이땐 셰이더 호출을 사용해야 한다. | ||
=== 범위 기반 for === | === 범위 기반 for === | ||
< | <source 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> | ||
{{각주}} | {{각주}} | ||
[[분류: | [[분류:그래픽 소프트웨어]] | ||
[[분류:1990년 소프트웨어]] | [[분류:1990년 소프트웨어]] |