VEX functions
Houdini/VEX functions 2012. 11. 18. 17:20 |set VEX function
vector4 set(float, float, float, float)
set() 함수는 float 타입의 자료를 3개 받아 vector로 반환해주는 함수이다.
하나의 벡터 컴포넌트를 바꿔주고 그것을 vector로 반환
※ vop의 Set Vector Component 노드와 같다.
getbbox VEX function
void getbbox(vector min&, vector max&)
getbbox() 함수는 매개변수로 들어오는 2개의 vector 타입의 인자를 참조형으로 받아서 getbbox 안에서 해당 지오메트리의 min, max를 구해준다.
※ vop의 Bounding Box와 같다.
getneighbour VEX function
getneighbours VEX function
int[] getneighbours(int ptnum, input)
Returns an array of the point numbers of the neighbours of a point.
getneighbourcount VEX function
addattribute VEX function
1. void addattribute(string name, int value)
2. void addattribute(string name, float value)
3. void addattribute(string name, vector value)
4. void addattribute(string name, vector4 value)
5. void addattribute(string name, matrix value)
6. void addattribute(string name, matrix3 value)
7. void addattribute(string name, string value)
8. void addattribute(string name, float values[]; int capacity, ...)
-> 인수에 type을 정의할 수도 있다.
vector(3 floats), normal(3 floats), point(3 floats), quaternion(4 floats), indexpair
float f[] = array(1,2,3,4,5,6,7,8);
addattribute("a1", arraylength(f));
=> 이렇게 하면, 포인트의 a1 속성에는 8이라는 배열길이가 들어간다.
/* addattribute는 각각의 포인트마다 값들이 들어간다. */
sop create_attribs() { float f[] = array(1,2,3,4,5,6,7,8); // Add an attribute called "a1" with length 8 addattribute("a1", f, arraylength(f));
=> 배열의 길이만큼 들어간다. 즉, 포인트마다 a1[0]~a1[7]이 생기고 1~8의 숫자가 들어간다. 0포인트에는 1, 1포인트에는 2, ... 이런식으로 들어간다.
// Force the attribute size to be 3 addattribute("a2", f, 3);
=> 배열의 3번째 요소까지만 포인트에 a2라는 속성이 생기며 들어간다. 1, 2, 3
// Set the "vector" qualifier so the attribute is transformed // differently. addattribute("a3", f, 3, "type", "vector");
=> "type", "vector"로 인하여 속성이 다르게 변한다. 즉, a3라는 속성이 생기는데 a3[x], a3[y], a3[z] 이렇게 생기고 배열의 첫번째부터 세번째까지의 값이 차례대로 들어간다. a3[x] = 1, a3[y] = 2, ...
주의할 점은, 길이가 꼭 3이어야만 한다는 점이다. 2나 4나 이런숫자가 들어가면 vector의 속성이 생기지 않는다.
// Set the "index-pair" qualifier (array length must be even) addattribute("a4", f, 8, "type", "indexpair");
=> a4 regn[0], a4 w[0.0], a4 regn[1], a4 w[1.0], ... 이런식으로 속성이 생기는데.. 이걸 어떨때 써야하는지 감이 잘 안온다.
"type", "indexpair" 는 배열의 길이는 되어야 한다고 써있는데.. 그 이유는 잘..
// Add some random values in a 2-tuple f = array( float(nrandom()), float(random(ptnum)) ); addattribute("rnd", f, arraylength(f));
=> f는 길이가 2인 배열로 바뀌면서 rnd[0]에는 nrandom()으로 생성된 랜덤값이, rnd[1]에는 random(ptnum)으로 생성된 랜덤값이 들어간다.
}
Adds a new point attribute (or Writes to an existing attribute)
파티클이나 포인트에 VEX를 이용해서 새로운 attribute를 부여하고자 할 경우나 Output에 없는 attribute의 경우에 이 노드를 이용해서 Output 시킬 수 있다.
addattribute 함수나 vop 노드는 따로 output variables에 연결되지 않고 자체적으로 끝마친다. 왜냐면, 그 애트리뷰트에 넣어주는 것이므로.
※ vop의 Add Attribute와 같다. 또한 sop의 Create Attribute와 비슷하다.
import VEX function
Possible reasons for failure are:
-
No input is connected to the specified index.
-
The attribute doesn’t exist on the input geometry.
-
The attribute size/type doesn’t match the VEX type.
-
The input geometry has fewer points than the VEX SOPs geometry.
-
The point number given is larger than the number of points in the input.
There are two forms of the import() function. The first form will import the attribute data from the current point that the VEX function is working on. The second form allows you to specify an arbitrary point number of the input. Point numbers are indexed from 0.
sop에서 UV Texture node를 이용하여 만든 UV값을 vop에서 불러오고자 할 때, Global Variables에 없는 Attribute를 불러올 때 유용하게 사용이 가능하다.
OP Input Index를 이용하면 vop의 다른 Input에 연결된 node의 Attribute도 불러올 수 있다.
그리고, 첫번째 output인 Integer 값은, 잘 갖고오면(성공하면) 1을 반환하고 그렇지 않으면 0을 반환하기 때문에 그것을 이용하여 'Two Way Switch node' 와 같이 사용할 수 있다.
resize VEX function
array VEX function
arraytype array(...)
효율적으로 배열의 인수를 만든다.
만약, vector v1[] = array(1, 2, {1,2,3}, 4, 5, 6, 7, 8); 이런식으로 문장이 구성되면, 아래의 그림과 같이 v1배열이 구성된다.
저 수식에서 array를 빼면 2번째 인덱스에 들어가는 {1,2,3} 때문에 에러가 난다. 즉, 이런식으로 효율적으로 배열의 요소들을 구성하려면 array()함수를 써야만 한다.
그리고,
vector v[] = vector(array( 1, {1,2,3}, 3, s, t, Cl, P, N)); float f[] = float(array(1, 2, s, t, length(P-L), length(N)));
올바른 배열의 구성을 가지려면 함수스타일형 변환을 하라고하는데... 이렇게하면 에러가 난다. 왜 그러지..
nrandom VEX function
rotate VEX function
Set Vector Component VEX node
dihedral VEX function
qconvert VEX function
Make Transformer VEX node
Builds a general 4×4 transform matrix given an order of transformations (trs), an o...
This operator builds a general 4×4 transform matrix given an order of transformations (trs)
, an order for rotations (xyz
), vectors representing the translation (t
), rotation (r
) and scale (s
) amounts, and optionally a pivot.
Transform Matrix VEX node
Transforms an input position, normal, or vector by a matrix specified by the translate, rotate, and scale parameters.
Make Transformer 노드와 Transform Matrix 노드는 비슷하다. 단지, output이 매트릭스냐 벡터냐의 차이 뿐!
'Houdini > VEX functions' 카테고리의 다른 글
VEX Functions Definition (0) | 2013.01.18 |
---|---|
VEX shading functions (0) | 2012.12.13 |