VEX compiler pragmas

VEX compiler (vcc)는 UI  다이얼로그 스크립트를 자동적으로 만드는 pragma를 지원한다. 이 pragma는 -u 옵션이 vcc 커맨드 라인에 지정되지 않는 한 일반적으로 무시된다 pragma는 파라미터, 조직, 다른 정보를 어떻게 표현할지 도움과 힌트들을 지정할 수 있게 한다.

pragma는 두 가지 방식으로 지정될 수 있다 : #pragma 프리 프로세서 명령, 또는 a_Pragma VEX 문법.  두 번째 형식은 하나의 매크로에서 다수의 pragma를 만들 수 있게 허용한다.

다음 프리 프로세서 형식 :

1
#pragma label parm “Parameter Label”
cs

은 이 VEX 문법과 기능적으로 동일하다 :

1
_Pragma(“label parm \”Parameter Label\””);
cs

pragma 인수들은 이스케이프 따옴표의 기존 세트를 가진 따옴표에 둘러쌓여 있다.

#pragma bindhandle

#pragma bindhandle channel_name h_name h_label h_index h_settings

디폴트로 핸들을 특정 파라미터로 바인드 한다. (사용자가 바인딩을 오버라이드 할 수 있다).

channel_name

핸들로 바인드할 VEX 연산자에 있는 채널의 이름.

h_name

핸들 이름이다. 이는 미리 정의된 Houdini 핸들 중 하나이다. (예를 들어 ladder). omls HScript 명령어를 사용 가능한 핸들의 모든 리스를 보는데 사용할 수 있다.

h_label

핸들의 간략한 설명이다.

h_index

(xform과 같은) 많은 핸들은 이에 관련 있는 다수의 파라미터들을 가지고 있다. 이는 어떤 핸들 파라미터가 VEX 파라미터에 바인드 되는지 선택하게 한다.

h_settings

핸들에 대한 몇가지 디폴트 행위를 설정하는데 사용될 수 있는 선택적 핸들 전용 string이다.

1
2
3
4
#pragma bindhandle offset1 xform “Translate” tx “invisible(1)”
#pragma bindhandle offset2 xform “Translate” ty
#pragma bindhandle offset3 xform “Translate” tz
sop translate(vector offset=0) { P += offset; }
cs

#pragma bindhandlereserved

#pragma bindhandlereserved reserved_channel_name h_name h_label h_indexh_settings

각 스크팁트된 연산자 타입은 그 타입의 모든 연산자에 추가된 여러 개의 파라미터들을 가지고 있다. ( 다이얼로그 스크립트 파일의 콘텐츠와 관계 없이). 핸들 하나를 이들 파라미터들 중 하나에 바인드하려면, bindhandlereserved pragma를 사용해야만 한다. 이 pragma는 bindhandle pragma와 정확하게 같은 인수를 사용한다. 다른 점은 그 채널 이름 인수가 예약된 파라미터의 이름을 지정해야만 한다.

#pragma bindselector

#pragma bindselector [parm_name] sel_type sel_name sel_prompt sel_maskallow_dragging group_type_parm asterisk_sel_all [input_index input_required]

Houdini에서 인터렉티브하게 연산자가 생성될 때, 사용자는 작업할 데이터에 대해 프롬프트(prompt)될 수 있다. 이 프롬프트들은 선택자(selector)들에 의해 좌지우지 된다. 선택자들은 각 OP basis 또는 각 parameter basis에 정의될 수 있다.

per-op 선택자들에 대해서 bindselector pragma는 7개의 인수를 허용한다. per-parameter s선택자에 대해서는 10개의 인수를 허용한다.

parm_name

선택자에 바인드할 VEX 파라미터 (per-parameter selector에 대한).

sel_type

선택할 엔트리이다. omsls HScript 명령어를 사용해 가능한 값들의 리스트를 출력하는데 사용된다.

sel_name

선택자의 대략적인 설명이다.

sel_prompt

geometry를 선택하기 위해 사용자에게 보여주는 프롬프트이다.

sel_mask

특정 primitive 타입들의 선택을 허용하는 패턴이다. 가능한 primitive 타입들의 리스트는 :

all

모든 primitive 타입들

face

Polygons, NURBs 또는 Bezier curves

surface

Mesh, NURBS 또는 Bezier surfaces

quadric

Primitive circles, spheres 또는 tubes

poly

Polygons

nurbscurve

NURBS Curves

bezcurve

Bezier curves

mesh

Meshes

nurbs

NURBS surfaces

bezier

Bezier surfaces

circle

Primitive circles

sphere

Primitive circles

tube

Primitive tubes

meta

Metaballs

particle

Particle systems

primitive 타입들은 기존 Houdini 그룹 메카니즘으로 합쳐질 수 있다. 예를 들어 :

  • all, ^p* : polygon과 particle을 제외한 모든 primitive 타입들을 선택한다.
  • face, surface : face와 surface primitive들을 선택한다.
  • *, ^quad*, ^meta : 사각(quadric) 또는 metaball을 제외한 모든 primitive를 선택한다.

allow_dragging

1로 설정되면, 사용자가 마우스 우클릭으로 선택을 완료하도록 강제하지 않고도 선택이 변경될 수 있다.

이는 사용자가 선택과 변경을 한 단계에서 할 수 있게 한다. (마우스를 드래깅하는 것은 선택을 완료하고 마우스 움직임을 연산자 핸들로 전달한다).

group_type_parm

선택 그룹이 가지는 geometry 타입을 표시하는 파라미터의 이름이다. 일반적으로 이 값은 “Points”, “Primitives”, 또는 “Guess from group”을 선택하는 메뉴를 가진 파라미터 이름을 정한다.

asterisk_sel_all

1로 설정되면, 선택자(selector)는 모든 geometry가 선택된 것을 표시하기 위해 선택 string을 “*”로 설정할 필요가 있다. 0이면, 선택자는 빈 그룹 파라미터가 모든 geometry가 선택되었다는 것을 의미한다고 추측한다.

input_index

per-parameter selector들에 대한 것이다. 사용자가 geometry를 선택할 때, 선택자는 선택한 연산자로부터 아웃풋을 이 연산자의 인풋으로 연결해야만 한다. 이 파라미터는 연결되어야만 하는 연산자에 인풋 숫자의 index를 지정한다. 만약 선택자가 다수의 인풋 연산자를 이 연산자에 연결할 필요가 있다면, -1을 사용한다.

input_required

per-parameter selector들에 대한 것이다. 만약 사용자가 이 인풋에 대해 geometry를 선택해야만 한다면, 1로 설정한다.

1
2
3
4
5
#pragma bindselector prims “Switch Geometry” \
“Choose the geometry to switch between” \
    all “” 0
#pragma bindhandle input_number ladder Input parm0
sop switcher(int input_number=0) { import(“P”, P, input_number) }
cs

#pragma bindselectorreserved

#pragma bindselectorreserved reserved_parm_name sel_type sel_name sel_promptsel_mask allow_dragging group_type_parm asterisk_sel_all input_indexinput_required

bindhandlereserved pragma와 유사하다. 이 것은 선택자들을 사용자의 스크립트된 연산자들에 있는 파라미터들을 예약하기 위해 바인드 한다. 이 pragma의 그 인수들은 bindselector pragma에 전달된 것과 동일하다. 한가지 차이점은 파라미터 인름 인자가 예약된 파라미터를 지정해야만 한다.

#pragma callback

#pragma callback name script

콜백 HScript 스크립트 또는 Python 함수를 name 파라미터에 바인드 한다. 파라미터가 변경될 때, Houdini는 script string을 실행한다.

Houdini에서의 개발적 제한 때문에, 파라미터와 스크립트는 다음 특정 조건을 거쳐야만 한다 :

  • 다이얼로그 스크립트는 Houdini 노드에 바운드 될 필요가 있다. (예, SHOP, POP, SOP, 등).
  • 파라미터는 버튼을 토글하거나 또는 그 것에 바인드된 메뉴를 가지던가 해야한다.

콜백(HScript 또는 Python)의 언어를 표시하기 위해, #pragma parmtag를 사용한다. 만약 콜백에 대해 #pragma parmtag를 사용하지 않으면 디폴트는 HScript다. 그러나, 프로그래밍 콜백 스크립트에 대해 권장되는 메소드는 Python이다.

1
2
3
4
5
#pragma callback parm1 “message $script_parm”
#pragma parmtag parm1 script_callback_language hscript
#pragma callback parm2 “import hou; hou.ui.displayMessage(kwargs)”
#pragma parmtag initialize_menu script_callback_language hscript
cs
  • HScript 콜백에서는, script는 HScript 문법이 될 수 있거나 또는 $HOUDINI_PATH/scripts 경로에 있는 스크립트의 이름이 될 수 있다.
  • Python 콜백에서는, script가 Python 소스 코드여야만 한다.

Houdini는 어느 파라미터가 변경되었는지 표시가 가능한 특정 변수들을 가진 context에서 script를 실행한다.

  • HScript 콜백에서는, Houdini가 어떤 파라미터가 변경된 노드의 경로를 포함하는 $node변수들을 생성한다.
  • Python 콜백에서는, Houdini가 변경된 파라미터에 대한 정보의 디렉토리를 포함하는 kwargs 변수를 생성한다.

#pragma disablewhen and #pragma hidewhen

#pragma disablewhen parm_name conditional_expression

conditional_expression이 참 값을 구할 때 parm_name을 비활성화 한다.

#pragma hidewhen parm_name conditional_expression

conditional_expression이 참 값을 구할 때 UI에서 parm_name을 숨긴다.

conditional_expression의 문법이 파라미터에 있는 Disable when Hide when 옵션과 동일하다.

1
2
3
4
5
// Disable ‘samples’ parameter when ‘enable’ parameter is toggled off
#pragma disablewhen samples { enable == }
// Hide ‘choice_dep1’ parameter when string menu ‘choice’ is set to ‘off’.
#pragma hidewhen choice_dep1 { choice == “off” }
cs

#pragma export

#pragma export parm_name (none | dialog | all)

파라미터 UI를 연산자 파라미터 다이얼로그에 추가하고, 선택적으로 연산자 툴바에 추가한다.

none or 0

추출하지 않는다. 연산자의 기존 다이얼로그에만 나타나는 파라미터다.

dialog or 1

연산자의 파라미터 창에서 나타나는 파라미터다.

all or 2

연산자이 파라미터 창과 연산자 툴바에서 나타나는 파라미터다.

이 pragma와 #pragma hint hidden을 함께 사용할 수 있다.

#pragma group

#pragma group group_name parameter_name1 parameter_name2

명명화된 파라미터들을 UI에 있는 탭으로 그룹화 한다.

1
2
3
// Group Ka, Kd, Ks, roughness into a folder called BRDF
#pragma group BRDF Ka Kd Ks
#pragma group BRDF roughness
cs

** Note **

/를 그룹 이름에 넣어 중첩 그룹을 생성할 수 있다. 예를 들어, 다음은 두 개의 서브 탭을 가진 Group 탭을 생성한다.

1
2
#pragma group “Group/Sub Group 1” p1 p2
#pragma group “Group/Sub Group 2” p3 p4
cs

#pragma help and #pragma info

#pragma help “text

다이얼로그 스크립트에 있는 도움말에 text를 추가한다. 이 것을 document 함수들과 파라미터들에 사용할 수 있다.

1
2
#pragma help “This is help for the VEX function.”
#pragma help “It gets added automatically to the help text”
cs

#pragma help처럼, #pragma info 텍스트는 다이얼로그 스크립트에 있는 도움말에 추가된다. 그러나 info 텍스트는 도움말의 시작부분에 있는 분할 섹션 안에 있다. 이 것을 저작권, 버전, 정보 등을 지정하는데 사용할 수 있다.

1
#pragma info “Created by Bob Loblaw – (c) 2006”
cs

현재는, SOP들만이 info 텍스트를 디스플레이 한다.

#pragma hint

#pragma hint parameter_name hint_type

파라미터가 표현할 어떤 값의 타입에 대한 정보를 추가한다. (예를 들어, VEX vector는 공간, 색, 또는 방향에서 point 하나로 표시된다). hint는 값을 편집하기 위한 UI를 특별화 하는데 사용된다.

hint_type은 다음 중 하나가 된다 :

none

힌트가 없다.

toggle

integer 또는 float로 on/off 변경을 표현한다 (1은 on, 0은 off).

color

파라미터가 색이다. UI는 color slider를 제공할 것이다.

direction

파라미터가 방향이다. UI는 방형을 지정하기 위한 가젯을 제공할 것이다.

vector

파라미터가 공간상의 3D vector이다. UI는 3 float를 가진 파라미터에 대한 디폴트 UI와 동일하지만, 채널 이름이 1, 2, 3 대신 x,y,z 으로 끝날 것이다.

vector

파라미터가 공간상의 4D vector이다.  UI는 4 float를 가진 파라미터에 대한 디폴트 UI와 동일하지만, 채널 이름이 1, 2, 3, 4 대신 x, y, z, w 으로 끝날 것이다.

uv

파라미터가 UV 좌표이다. 이 UI는 세 개가 아닌 두 개의 입력 칸으로 되어 있고(VEX로 전달되는 세 번째 요소는 항상 0이다), 채널 이름은 1, 2 대신 u, v로 끝날 것이다.

uvw

파라미터가 UV 좌표이다. 이 UI는 세 개가 아닌 두 개의 입력 칸으로 되어 있고(VEX로 전달되는 세 번째 요소는 항상 0이다), 채널 이름은 1, 2 대신 u, v로 끝날 것이다.

angle

파라미터가 direction vector이다. UI는 direction 가젯을 제공할 것이다.

file

string 파라미터는 파일 이름이다. UI는 파일을 지정하기 위한 브라우저 버튼을 추가한다.

image

string 파라미터는 이미지 파일의 파일 이름이다. UI는 파일을 지정하기 위한 브라우저 버튼을 추가하고, 브라우져는 이미지 파일 타입만을 디스플레이 한다.

geometry

string 파라미터는 geometry 파일의 파일 이름이다. UI는 파일을 지정하기 위한 브라우저 버튼을 추가하고, 브라우저는 geometry 파일 타입만을 디스플레이 한다.

hidden

이 파라미터를 파라미터 리스트에 포함하지 않는다. 이는 파라미터가 geometry attribute에 의해 오버라이드되게 할 때 유용하다. 이 것은 invisible과는 다른 형식이며, 기초를 이루는 씬 파라미터가 생성되지 않을 것이다.

invisible

생성된 파라미터가 연산자 안에 존재할 것이지만 사용자 인터페이스에서 숨겨진다. hidden과 달리 실제 씬 파라미터가 생성되며, 보이지 않을 뿐이다.

inputinvisible

#pragma optable vop을사용해 만들어지는 VOP 연산자에 대해 , 이 힌트는 새로운 노드가 생성될 떄 VOP 인풋 커넥터가 디폴트로 숨겨지도록 표시한다 이 힌트는 VOP 연산자 타입이 아닌 것을 만들거나 파라미터를 추출할 때 영향이 없다.

oplist [opfilter]

파라미터는 object의 리스트 이다. 선택적으로 opfilter를 지정해 리스트에서 연산자의 타입들을 제한할 수 있다. #pragma parmtag를 사용해 object의 리스트 안에 있는 번들들 또는 그룹들을 해결할 수 있다.

oppath [opfilter]

파라미터는 object 경로이다. 서택적으로 opfilter를 지정해 선택 될 수 있는 연산자들의 타입들을 제한 할 수 있다.

joinnext

GUI에서 같은 열에다 이 것 옆에 파라미터를 넣는다. 정밀한 조작을 위해 이 것은 parameter editor에서 공간을 절약할 수 있다.

예 : #pragma hint myParm joinnext

1
2
3
4
5
#pragma hint __nondiffuse toggle // Define as a toggle button
#pragma hint specularcolor color // This represents a color
#pragma hint rest hidden         // Don’t show rest parameter in UI
#pragma hint mapname image       // This represents an image file
#pragma hint nullobject oppath “obj/null” // Only null objects
cs

#pragma inputlabel

#pragma inputlabel inputnum label

VEX 연산자 타입에 대해서, 연산자 인풋에 대한 라벨을 설정한다. 이 라벨은 사용자가 연산자 인풋 중 하나를 마우스 가운데 버튼을 누를 때 나타난다. inputnum은 인풋의 index이다. 1부터 시작한다.

1
#pragma inputlabel “Geometry to Modify”
cs

#pragma label

#pragma label parameter_name text

파라미터를 설명하는 라벨을 지정한다.

1
2
3
4
#pragma label amp    “Noise Amplitude”
displacement bumpy(float amp=0) {
}
cs

#pragma name “text”

UI에서 나타나는 라벨을 설정한다. 이 pragma는 라벨은  연산자 테이블 정의에서 이제 정의되는 것 때문에 더이상 쓸모가 없다.

#pragma opicon

#pragma opicon “text

이 pragma는 이 연산자 타입을 위래 아이콘을 설정하는데 사용한다. 외부 .icon 또는 .bicon 파일, 혹은 기존 아이콘들중 하나의 이름의 경로가 될 수 있다.

vcc의 -C 커맨드 라인 옵션은 이 pragma를 오버라이드 한다.

#pragma opminiput and #pragma opmaxinput

#pragma opmiinputs num

VEX 연산자 타입들에서는, 연산자들에 연결되어야만 하는 인풋들의 최소 숫자를 설정한다. 이 값은 인풋을 가지지 않는 SHOPs에서는 무시된다. 노드에 연결되어야할 인풋의 갯수보다 더 적으면 연산자는 오류를 발생시킬 것이다. -t 커맨드 라인 옵션은 이 pragma를 오버라이드 한다.

#pragma opmaxinputs num

VEX 연산자 타입들에서는, 연산자들에 연결될 수 있는 인풋의 최대 숫자를 설정한다. 이 값은 인풋을 가지지 않는 SHOPs에서 무시된다. -T 커맨드 라인 옵션은 이 pragma를 오버라이드 한다.

1
2
#pragma opmininputs 1
#pragma opmaxinputs 4
cs

#pragma opname and #pragma oplabel

#pragma opname “text

이 연산자 타입의 내부 연산자 이름 을 지정한다. 디폴트로 컴파일러는 소스 파일의 이름을 사용한다. vcc의 -n 커맨드 라인 옵션은 이 pragma를 오버라이드 한다.

#pragma oplabel “text

이 연산자 타입에 대한 설명가능한 이름을 지정한다. 디폴트로 컴파일러는 내부 연산자 이름을 사용한다. vcc의 -N 커맨드 라인 옵션이 이 pragma를 오버라이드 한다.

1
2
#pragma opname “myshop”
#pragma oplabel “My New Shop”
cs

#pragma opscript

#pragma opscript “text

만약 이 연산자 타입이 Mantra 외의 다른 렌더러에서 사용될 수 있는 쉐이더라면, 이 pragma는 그 렌더러가 찾아 볼 수 있도록 쉐이더 파일의 이름을 설정할 수 있게 한다. 만약 이 pragma를 사용하면, 연산자 타입 이름은 쉐이더 파일 이름과 동일하지 않아도 된다. -S 커맨드 라인 옵션은 이 pragma를 오버라이드 한다.

1
#pragma opscript “rman_myshader”
cs

#pragma parmhelp parameter_name “text”

#pragma parmhelp parameter_name text

parameter_name위에 마우스 커서를 올려다 놓았을 때 나타나는 툴팁을 설정한다.

1
2
3
4
#pragma parmhelp amp “Increase this value to add more noise.”
displacement bumpy(float amp=0) {
}
cs

#pragma parmtag

#pragma parmtag parmName token value

연산자에서 정의되는 각 파라미터는 그에 상응하는 토큰/값 태그들의 세트를 가지고 있다. 이 pragma는 토큰/값 페어를 파라미터에 추가한다.

다음 토큰들이 사용 가능하다 :

autoscope

각 파라미터의 구성요소들에 상응하는 1들과 0들의 string(예 “1101”)이다. 1은 노드가 선택되었을 때 파라미터가 자동으로 검색된다는 의미이다.

구성요소들의 갯수에 대한 string에 충분한 문자가 있지 않으면, 마지막 문자가 남은 구성요소들을 위해 확장될 것이다. 이는 모든 구성요소들을 자동 검색하기 위해서는 “1”을 지정하고, 모든 구성요소들이 자동 검색되지 않기 위해서는 “0”을 지정한다.

이 태그가 파라미터에 대해 정의되지 않으면, Houdini는 파라미터가 검색되어야하는지 아닌지를 가정하게 된다.

editor

string 파라미터들에 대해, 이는 단일 라인 인풋 칸 대신 멀티 라인 에디터를 보여주는데 사용될 수 있다. “1”로 활성화 한다.

editorlines

멀티 라인 에디터가 보여지게 되면, 이는 얼마나 많은 줄의 텍스트가 보여질 것인지 지정하는데 사용될 수 있다. 디폴트 값은 10이다.

opfilter

object 경로들에 정보를 제공하는 파라미터들에서, 이 것은 OP chooser에서 나타날 어느 OPs의 타입들이 필터되는지 지정하게 한다. 만약 이 태그를 설정하면, oprelative 태그 또한 설정해야  한다.

또한 이 태그는 ]#pragma hint oppath|/vex/pragmas] paragma에 의해 설정될 수 있지만, 다른 포맷을 사용한다.

사용 가능한 값들은 :

!!OBJ!!

object들만을 보여준다.

!!OJB/GEOMETRY!!

geometry object들만 보여준다.

!!OJB/LIGHT!!

light object들만 보여준다.

!!OJB/CAMERA!!

camera object들만 보여준다.( light들은 camera들로 간주 된다)

!!OJB/BONE!!

bone object들만 보여준다.

!!OJB/FORCE!!

force object들만 보여준다.

!!SOP!!

SOP 연산자들만 보여준다.

!!POP!!

POP 연산자들만 보여준다.

!!CHOP!!

CHOP 연산자들만 보여준다.

!!COP2!!

COP 연산자들만 보여준다.

!!VOP!!

VOP 연산자들만 보여준다.

!!ROP!!

ROP 연산자들만 보여준다.

!!DOP!!

DOP 연산자들만 보여준다.

!!SHOP!!

SHOP 연산자들만 보여준다.

!!SHOP/ATMOSPHERE!!

atmoshpere shader SHOP만을 보여준다.

!!SHOP/BACKGROUND!!

background shader SHOP만을 보여준다.

!!SHOP/CONTOUR!!

contour shader SHOP만을 보여준다.

!!SHOP/CONTOUR_CONTRAST!!

contour-contrast shader SHOP만을 보여준다.

!!SHOP/CONTOUR_STORE!!

contour-store shader SHOP만을 보여준다.

!!SHOP/DISPLACEMENT!!

dsplacement shader SHOP만을 보여준다.

!!SHOP/EMITTER!!

emitter shader SHOP만을 보여준다.

!!SHOP/GEOMETRY!!

geometry shader SHOP만을 보여준다.

!!SHOP/IMAGED3D!!

image3d shader SHOP만을 보여준다.

!!SHOP/LENS!!

lens shader SHOP만을 보여준다.

!!SHOP/LIGHT!!

light shader SHOP만을 보여준다.

!!SHOP/LIGHT_SHADOW!!

light-shadow shader SHOP만을 보여준다.

!!SHOP/OUTPUT!!

output shader SHOP만을 보여준다.

!!SHOP/PHOTON!!

photon shader SHOP만을 보여준다.

!!SHOP/PHOTON_VOLUME!!

photon volume shader SHOP만을 보여준다.

!!SHOP/SURFACE!!

surface shader SHOP만을 보여준다.

!!SHOP/SURFACE_SHADOW!!

surface-shadow shader SHOP만을 보여준다.

oprelative

어떻게 경로가 분해되는지이다. 일반적으로, 이 토큰의 값은 “.”이어서 경로들이 현재 연산자에 상대적으로 분해된다. 그러나 object들을 레퍼런스할 때 태그를 “/obj”로 설정할 수 있다.

opexpand

SHOP에서 “oplist”를 사용하면 파라미터들이 완전한 경로 이름들로 활장된다. 번들 또는 패턴이 선택되면, 그 패턴은 렌더러에 전달되기 전에 확장될 것이다.

opfullath

opexpand 태그와 함께 사용될 때, object들의 경로 이름이 완전히 oprelative 태그의 값과 관계하는 것보다도 완전히 수식되게 한다.

rampshowcontrolsdefault

자동적으로 ramp 파라미터 컨트롤들을 숨길 수 있게 한다. 1 혹은 0 값을 사용한다.

script_callback

파라미터와 관계되는 콜백 스크립트.

script_ritype

RIB stream을 생성하고 파라미터를 적절한 renderman 타입으로 매핑해 지정하는데 사용된다. 그 값은 renderman 타입에서 사용 가능해야만 한다 (예, “uniform color”).

script_unquoted

VOP 정의에서 string 파라미터를 표시하려면 따옴표 형식이 사용되어야만 한다. 이는 메뉴에 있는 string이 코드 블록에 위치될 수 있게 한다.

sop_input

point/primitive의 그룹 메뉴를 만들 때 그룹을 검색을 할 장소를 SOP이 결정할 때 내부적으로 사용된다.

1
2
3
4
5
6
#pragma parmtag lightmask opfilter “!!OBJ/LIGHT!!”
#pragma parmtag lightmask oprelative “/obj”
#pragma parmtag lightmask opexpand 1
#pragma parmtag reflectmask opfilter “!!OBJ/GEOMETRY!!”
#pragma parmtag reflectmask opexpand 1
#pragma parmtag reflectmask opfullpath 1
cs

#pragma ramp

ramp 파라미터를 생성하고 shader 함수 인자들에 연결한다.

  • #pragma ramp_rgb ramp_parm basis_parm keys_parm values_parm
  • #pragma ramp_flt ramp_parm basis_parm keys_parm values_parm
1
2
3
4
5
6
7
8
#pragma ramp_rgb color color_the_basis_strings color_the_key_positions color_the_key_values
surface
sky(
    string color_the_basis_strings[] = { “linear”“linear” };
    float color_the_key_positions[] = { 01};
    vector color_the_key_values[] = { {0,0,0}, {0,0,1} };
) { … }
cs

shader에서 정의된 파라미터에 대한 UI를 셋업하는 다른 pragma와 달리, ramp pragma는 Houdini에서 새로운 UI 요소를 만든다.

ramp_parm

Houdini UI에서 ramp 파라미터의 이름이다. shader에서 정의된 모든 파라미터와 충돌될 수 없다.

basis_parm

string의 배열을 포함하는 파라미터다. 이 string들은 각 키의 basis 값을 결정한다. (예, “linear”, “constant”). 만약 constant basis가 지정되면, basis_parm 인자는 비어있는 string (“”)에 주어질 수 있다. 그러나 이 사실을 보여주는 UI는 필요 없어도 된다.

keys_parm

float의 배열을 포함하는 파라미터다. 만약 spline이 uniform이면(예, 키가 없는 경우), key_parm 인자는 비어있는 string (“”)에 주어질 수 있다. 그러나 이 사실을 보여주는 UI는 필요 없어도 된다.

values_parm

float의 배열 또는 vector의 배열을 포함하는 파라미터다. basis 또는 key 파라미터와 달리 이 것은 필수로 사용되어야 한다.

디폴트 값들은 현재 Houdini ramp 파라미터에서 지원되지 않는다. 그래서 주어진 초기 값들은 UI에 전달되지 않는다.

비록 값들이 전달되지 않더라도, value 파라미터에 주어진 key의 갯수는 ramp에서 key의 초기 갯수를 설정하는데 사용될 것이다.

#pragma range

#pragma range parameter_name[!] min_value max_value[!]

파라미터의 이상적인 범위를 정의한다. 값에 !를 추가하면, 파라미터 값은 그 범위로 고정될 것이다. UI 또한 이 정보를 사용해 슬라이더의 범위를 설정한다.

1
2
3
#pragma range seed    10
#pragma range roughness 0.001! 1!
#pragma range gamma     0.001! 10
cs

#pragma rendermask

#pragma rendermask (VMantra | RIB | OGL)

이 pragma는 SHOP 다이얼로그 생성에 대해서만 유용하다. 각 SHOP은 어떤 렌더러들이 그 SHOP을 사용할 수 있는지 정의하는 마스크를 가지고 있다. VEX 또는 RenderMan Shading Language에서 작성된 shader와 유사한 shader를 가질 수 있다. 이 경우 rendermask는 VMantra 외 그 이상을 포함하도록 지정될 수 있다.

rendermask 파라미터는 렌더러에 대한 씬 설명을 생성하는 코드에 근접하게 바인드된다. 게다가, 렌더러 이름들은 좀 명확하다. SHOP을 지원하는 렌더러들은…

RIB

RenderMan을 따르는 렌더러에 대한 RIB 생성이다.

VMantra

shading에 대한 VEX를 사용하는 Mantra의 버전이다.

OGL

OpenGL 렌더링이다. 이는 특별한 렌더러로 자동적으로 스스로를 대부분의 rendermask에 추가한다. 현재로써 이를 하지 못하게 할 방법이 없다.

#pragma optable

#pragma opbale vop

이 pragma는 어떤 연산자 타입을 생성할 것인지 표시하는데 사용될 수 있다. 현재 지원되는 옵션은 vop으로 VOP 연산자를 생성하게 한다.

매우 특정한 구조를 가진 이 옵션을 사용해 vop otl들이 생성된다 :

  • VOP에 있는 인풋들은 non-export(추출되지 않는) shader 파라미터에서 생성된다.
  • VOP에 있는 아웃풋들은 export shader 파라미터들에서부터 생성된다.
  • VOP에 있는 파라미터들은 모든 non-export shader 파라미터들을 위해 생성되었다.
  • outer code는 import 명형을 사용한 외부 파일들에서부터 shader 함수를 임포트 한다.
  • inner code는 shader call 문법을 사용해 이 shader를 호출한다.

shader의 임플리멘테이션이 생성된 VOP에 실제로 저장되지 않기 때문에, VOP이 정확히 작동되게 하려면 외부 .vfl 또는 .vex 파일을 통해 접근되어야만 한다. .vfl 또는 컴파일된 .vex 파일을 VEX 검색 경로로 접근 가능한 shader에 배치하는 것은 이를 필요로 할 것이다.

#pragma rename

#pragma rename oldname newname

shader 인터페이스에서 사용되는 연산자 파라미터에 대해 서로 다른 이름을 지정한다. 이 명령은 모든 다른 #pragmas가 그 파라미터를 조회하도록 한 뒤에 발생한다.

#pragma optable vop을 사용할 때, 이는 VOP 인풋 또는 아웃풋이 VEX 전역 번수와 동일한 이름을 사용하도록 하는데 유용할 수 있다. VEX는 아니지만 VOP에서는 이름 중복이 사능하기 때문이다.

How to create menus for parameters

파라미터에 대한 메뉴 UI를 생성하기 위해choice pragma를 정의할 수 있다.

다음 중 하나로 인해 파라미터에 대한 리스트를 만들 수 있다 :

  • 파라미터에 다수의 choice pargma들을 사용해 menu 항목들을 생성한다 (choice, choicescript, choicetoggle).
  • 파라미터에 하나의 choicescript pragma를 사용해 menu 항목을 생성하는 script를 생성할 수 있다 (choicescript, choicereplacescript, shoicetogglescript).이 스크립트는 Houdini가 메뉴 엔트리를 생성할 필요가 있을 때마다 싱행된다. (예, 생성된 값들은 캐시되지 않는다). 그래서 이 스크립트는 가능한 효율적이 되어야만 한다. 그 스크립트의 아웃풋은   choice pragma에서 value와 label 칸과 같은 의미를 가지는 value/label 페어의 시리즈여야만 한다.

choice pragma는 사용자가 메뉴에서 값들을 선택하도록하는 UI를 생성한다. choicereplace pragma는 메뉴를 가진 UI를 생성하는 반면 사용자가 다른 값을 직접 입력할 수 있게 한다. choicetoggle pragma는 사용자 입력을 허용하는 반면 메뉴 항목을 선택해 입력에 추가하거나 제거하도록 한다.

#pragma choice parameter_name value“”label

parameter_name에 대한 메뉴 항목을 추가한다. 상호 배타적인 선택들의 메뉴를 디스플레이한다.

#pragma choicescript parameter_name language scriptline

parameter_name에 대한 메뉴 항목을 생성하는 스크립트를 정의한다. language는 Python 또는 HScript 모두 사용 될 수 있다. 상호 배타적인 선택들의 메뉴를 디스플레이한다.

#pragma choicereplace parameter_name value” “label

parameter_name에 대한 메뉴 항목을 추가한다. 유저가 메뉴 또는 인푸세서 항목을 선택할수 있는 UI를 디스플레이한다.

#pragma choicereplacescript parameter_name scriptline

parameter_name에 대한 메뉴 항목을 생성하는 스크립트에 있는 라인을 정의한다. 유저가 메뉴 또는 인푸세서 항목을 선택할수 있는 UI를 디스플레이한다.

#pragma choicetoggle parameter_name value” “label

parameter_name에 대한 메뉴 항목을 정의한다. 유저가 메뉴 또는 인푸세서 항목을 선택할수 있는 UI를 디스플레이한다.

#pragma choicetogglescript parameter_name scriptline

parameter_name에 대한 메뉴 항목을 생성하는 스크립트에 있는 라인을 정의한다.  유저가 입력한 것에 항목을 추가/제거하는 선택의 메뉴를 디스플레이한다.

1
2
3
4
5
6
7
8
9
10
11
#pragma choice operation “over”    “Composite A Over B”
#pragma choice operation “under”    “Composite A Under B”
#pragma choice operation “add”    “Add A and B”
#pragma choice operation “sub”    “Subtract A from B”
cop texture(string operation=“over”)
{
if (operation == “over”) …    // texture coordinates
if (operation == “under”) …    // parametric coordinates
if (operation == “add”)     …    // orthographic
if (operation == “sub”)     …    // polar
}
cs

이 것은 파라미터 “연산”에 대한 메뉴를 정의할 것이다. 그 메뉴는 4 개의 엔트리를 포함할 것이다. string 파라미터에 대한 그 값들은 “over”, “under”, “add”, “sub” 중 하나가 될 것이다. 그러나, 사용자는 연산 타입에 대한 더 의미 있는 lavel을 나타낼 것이다.

1
2
3
4
5
6
7
8
9
10
11
#pragma choice operation “0”    “Use texture coordinates”
#pragma choice operation “1”    “Use parametric coordinates”
#pragma choice operation “2”    “Orthographic Projection”
#pragma choice operation “3”    “Polar Projection”
sop texture(int operation=0)
{
if (operation == 0) …    // texture coordinates
if (operation == 1) …    // parametric coordinates
if (operation == 2) …    // orthographic
if (operation == 3) …    // polar
}
cs

 

** Note **

다른 것보다도 choicereplace와 choicetoggle pragma를 사용해 정수 파라미터에 대한 메뉴를 생성할 수 있지만, 메뉴 항목은 label들을 무시하고 choice들이 0에서 시작하도록 숫자를 부여할 것이다. choicereplace와 choicetoggle pragma들은 string 파라미터에서만 사용 가능 하다.

 

Operator list filters

다음은 특정 pragmas의 opfilter 인자에 사용할 수있는 파라미터들이다.

obj

모든 object

sop

모든 SOP

pop

모든 POP

chop

모든 CHOP

cop

모든 COP

vop

모든 VOP

rop

모든 ROP

obj/geo

모든 geometry object

obj/null

모든 Null object

obj/light

모든 light

obj/camera

모든 camera

obj/fog

모든 Fog object

obj/bone

모든 bone

shop/surface

모든 surface SHOP

shop/displace

모든 Displace SHOP

shop/interior

모든 Interior SHOP

shop/light

모든 Light SHOP

shop/shadow

모든 Shadow SHOP

shop/fog

모든 Atmosphere SHOP

shop/photon

모든 Photon SHOP

shop/image3d

모든 Image3D SHOP

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s