Houdini 편집하기


편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
1번째 줄: 1번째 줄:
{{소프트웨어 정보
{{소프트웨어 정보
|이름     = Houdini
| 이름                 = Houdini
|원어이름 =
| 로고                 = [[File:houdini_logo.svg|Houdini Logo|400px]]
|배경색  =
| 개발사              = SideFX
|글자색  =
| 발표일              = {{출시일|1996|10|02}}
|로고     = [[파일:houdini logo.svg|Houdini Logo|400px]]
| 최신 버전            = 18.5.351
|화면    =  
| 최신 버전 출시일    = {{출시일|2020|10|20}}
|화면설명 =  
| 미리보기 버전        = 18.5.372
|원작자  =
| 미리보기 버전 출시일 = {{출시일|2020|10|20}}
|개발    =
| 프로그래밍 언어     = C++, Python
|종류    = [[컴퓨터 그래픽스]]
| 운영체제             = Windows, macOS, Linux
|출시    = [[1996년]] [[10월 2일]]
| 언어                = 영어, 일본어
|최신버전 = 18.5.351
| 종류                = [[컴퓨터 그래픽스]]
|최신출시 = [[2020년]] [[10월 20일]]
| 라이선스         = 무료, 상용
|미리보기 = 18.5.372
| 웹사이트             = {{URL|www.sidefx.com/products/houdini}}
|미리출시 = [[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의 난이도 상승 문제에 직결된 면이 있다.


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


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


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


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


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


== [[Houdini/노드|노드]] ==
{{ 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, 베지어, 폴리곤 스프 형태를 지원한다. 양면을 닫거나 열 수 있다.
}}


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


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


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


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


<syntaxhighlight lang="cpp">
<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 }
</syntaxhighlight>
</source>


===== 문자열 =====
===== 문자열 =====
따옴표로 문자열 값을 리터럴로 표현할 수 있다. 큰따옴표든 작은따옴표든 상관 없다.
따옴표로 문자열 값을 리터럴로 표현할 수 있다. 큰따옴표든 작은따옴표든 상관 없다.
<syntaxhighlight lang="cpp">
<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"와 동일함.
</syntaxhighlight>
</source>
 
===== 속성 =====
어트리뷰트라고도 한다. 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''' 알파 투명도 값이다. 변경하면 뷰포트에서 확인 가능하다.


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


=== 범위 기반 for ===
=== 범위 기반 for ===
<syntaxhighlight lang="cpp">
<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);
}
}
</syntaxhighlight>
</source>
 
 


{{각주}}
{{각주}}
[[분류:Houdini| ]]
[[분류:그래픽 소프트웨어]]
[[분류:1990년 소프트웨어]]
[[분류:1990년 소프트웨어]]
리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다.
취소 편집 도움말 (새 창에서 열림)

| () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |}

이 문서에서 사용한 틀: