#include "rmannotes.sl"

surface crosstile()
{
  color surface_color, layer_color;
  color surface_opac, layer_opac;
  float fuzz = 0.05;

  /* background layer */

  surface_color = Cs;
  surface_opac = Os;

  /* vertical bar layer */

  layer_color = color (0.1, 0.5, 0.1);
  layer_opac = pulse(0.35, 0.65, fuzz, s);
  surface_color = blend(surface_color, layer_color, layer_opac);

  /* horizontal bar layer */

  layer_color = color (0.1, 0.1, 0.3);
  layer_opac = pulse(0.35, 0.65, fuzz, t);
  surface_color = blend(surface_color, layer_color, layer_opac);

  /* output */

  Oi = surface_opac;
  Ci = surface_opac * surface_color;
}


위의 RSL 쉐이딩을 이렇게..하였다... 둘 다 C언어 기반이라 그런지 똑같다. 함수만 다를 뿐..



결과물


'Houdini > VEX shader' 카테고리의 다른 글

...  (0) 2013.01.10
RSL의 함수와 Houdini의 함수 대응관계  (0) 2013.01.10
Ambient, Lambert, Specular Shader  (0) 2013.01.09
illuminance loop 함수 활용  (0) 2013.01.08
RSL 을 vfl로...  (0) 2012.12.15
Posted by scii
:


curvature_shader.vfl

dturb.vfl

fire_shader.vfl

ex1_.vfl

ex2_.vfl

ex3_dot.vfl

ex4_Quaternion.vfl


cross product 구하기.

vex로 하니까 정말 간단히 된다.


두번째 인풋으로 들어오는 포지션을 원래 포지션의 노말이 가리키도록 하고있다.


카메라의 노말을 구한 후의 일이다.

카메라의 노말과 원래 노말과 dot product를 구하고있다. 그래서 카메라의 노말과 현재 노말이 90도를 넘는지를 판단.


쿼터니언의 회전방식을 적용하고있다.


'Houdini > VEX' 카테고리의 다른 글

vex로 만들어 본 노이즈의 적용방식  (0) 2012.12.11
VEX의 특성  (0) 2012.12.02
나름 약간 변경해본 것...  (0) 2012.11.30
inline code노드  (0) 2012.11.17
Posted by scii
:

구문 강조 적용


1. $HOME/.vim/ 에서 syntax 디렉토리를 만든다. 이 디렉토리는 구문강조를 위한 디렉토리이다.


2. syntax 디렉토리안에 확장자.vim 파일(구문 강조파일이 된다)을 만든다. 파일이 있으면 그 디렉토리안에 갖다둔다.

내가 만든 vex 구문 강조 파일

vfl.vim

vfl(130225_new).vim


3. $HOME/.vimrc 파일을 연다. 기본적으로 syntax on은 되어있을 것이다.

제일 끝 줄에 이것을 추가한다.

au BufRead,BufNewFile *.vfl set filetype=vfl.vim 

이것은 확장자가 vfl인 파일을 열거나 새로운 파일을 만들 때 자동적으로 vfl.vim을 쓴다는 것이 된다.


이로써 구문 강조는 끝이난다. 


내가 수정한 jellybeans 컬러스키마!!  vex에 맞게 수정하였다.

jellybeans_VEX.vim






들여쓰기 적용

※  참고로 vex는 C언어를 기반으로 만들어져있기때문에 C언어의 들여쓰기를 그대로 적용시키면 된다.


1. /usr/share/vim/vim73/indent 디렉토리로 이동한다.


2. c.vim 파일을 하나 복사하여 vfl.vim 파일로 만든다.(여기있는 파일들은 모두 관리자모드로 해야한다)

내가 만든 vex 들여쓰기 파일

vfl.vim


3. $HOME/.vimrc 파일을 연다.

set ci

이것을 적용시킨다. 이것은 c 스타일로 들여쓰기를 셋팅한다는 것이다.


이로써 구문 강조 및 들여쓰기 적용이 끝이난다.

Posted by scii
:



EditPlus로 컴파일하면 Houdini에 바로바로 연동되니까 참 좋다~!!

계속 왔다갔다 ctrl+c, ctrl+v 안하니까... 굿! 편하다

'Houdini > Houdini Data' 카테고리의 다른 글

EditPlus v3.41.966 Potable  (0) 2012.12.03
VEX 구문강조(Edit Plus3)  (0) 2012.12.03
JEdit  (0) 2012.11.18
Posted by scii
:

VEX의 특성

Houdini/VEX 2012. 12. 2. 22:43 |



굳이 이렇게까지 할 필요가 없는데 예제로서 간단히 한번 작성해보았다.

참조자로 받는데 리턴까지할 필요는 없지만, 리턴되는 것을 확인하기 위하여!

둘 중 하나를 택하면된다. 리턴으로 받을 것인지... 아니면, 변수를 인자로 보내서 참조자 형태로 할 것인지...참조자(Call-By-Reference)


'Houdini > VEX' 카테고리의 다른 글

vex로 만들어 본 노이즈의 적용방식  (0) 2012.12.11
vex로 코딩해 본 여러가지  (0) 2012.12.11
나름 약간 변경해본 것...  (0) 2012.11.30
inline code노드  (0) 2012.11.17
Posted by scii
:

sop    // context => sop type

twistScrips(float deg = 0; vector vec = {0,1,0})

{

        vector min, max, center;

        matrix3 mtx3 = {{1,0,0}, {0,1,0}, {0,0,1}};

        float rad = (deg*3.14)/180;

        

        getbbox(min, max);

        center = (min+max)/2;

        

        rad *= ((P.y-min.y) / (max.y-min.y));

        rotate(mtx3, rad, normalize(vec));

        

        P = (P-center) * mtx3 + center;

}

'Houdini > VEX' 카테고리의 다른 글

vex로 만들어 본 노이즈의 적용방식  (0) 2012.12.11
vex로 코딩해 본 여러가지  (0) 2012.12.11
VEX의 특성  (0) 2012.12.02
inline code노드  (0) 2012.11.17
Posted by scii
:

VEX functions

Houdini/VEX functions 2012. 11. 18. 17:20 |


set VEX function

vector set(float, float, float)

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

int import(string attrib_name, type result&; int input)
int import(string attrib_name, type result&; int input; int pt_num)
int import(string attrib_name, float values[] &; int input; int pt_num)


This from lets you import attributes containing arbitrary length arrays of floats, such as capture data.

Import attribute data from the SOP or POP connected to the specified input. Returns 1 and puts the data in result on success, or returns 0 on failure.


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

void resize(arraytype &array; int size)

If you enlarge the array, intermediate values may be uninitialized (return 0 or "").




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

1. float nrandom()
2. vector nrandom()
3. vector4 nrandom()
4. float nrandom(float)

이 함수는 랜덤을 발생시키는 함수인데.. 랜덤을 발생하고 그 다음 랜덤을 또 발생시키면 7번 포인트가 가졌던 랜덤 값을 6번포인트가 갖고 6번 포인트가 갖고 있던 랜덤 값을 5번 포인트가 갖도로 해준다. 즉, 랜덤 값이 모든 포인트마다 새롭게 생기는 것이 아니라 하나씩 번갈아가며 랜덤 값을 갖는다.



rotate VEX function

1. void rotate(matrix &, float amount(radians), vector axis)
2. void rotate(matrix3 &, float amount(radians), vector axis)

이 함수는 주어진 매트릭스에 회전을 적용한다. 
그리고 각도는 radians로 해주어야 하며, 축은 정규화를 해주어야 한다.

그리고 첫번째 인수로 matrix 자료형을 받는데, 참조형으로 받아서 반환형이 void이다. 내부에서 matrix 값을 변환하는가보다.




Set Vector Component VEX node


Assigns a value to one of the vector's components.
This operator assigns a value to one of the vector's components.

vector의 한가지 요소를 할당한다. 
그리고 vex에서 어떻게 쓰이는지 예제가 없는것은 vex에서 기본적으로 되어있다는 뜻이다. 
즉, 이 vex node 같은 경우에는 vex에서 P.x = v.x로 할당할 수 있다.



dihedral VEX function

matrix3 dihedral(vector a, vector b)


computes the rotation matrix which rotates the vector 'a' onto the vector 'b'

vop sop의 노드로는 Align 노드가 있다.



qconvert VEX function

matrix3 qconvert(vector4 quaternion)

Converts a quaternion represented by a vector4 to a matrix3 representation.

쿼터니언을 matrix3로 변환해서 반환해준다.
vop의 노드로는 Quaternion To Matrix3 노드가 있다.



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
Posted by scii
:

inline code노드

Houdini/VEX 2012. 11. 17. 13:26 |

inline code 노드는 vex를 후디니 안에서 쓸 수 있도록 해주는 노드이다.

단, 외부에서 vex를 코딩할 때와 inline code 노드에서 vex를 코딩할 때 차이점이 있다. 

그 차이점은 변수앞에 '$'를 붙여준다는 점이다. inline code 노드에서 vex코딩을 할 때에는 변수명 앞에 $를 필히 붙여주어야 한다.

이유는 inline code에서 $를 붙여주어야만 vex코드로 변환시킬 때 변수로 인식하는 것 같다.



view vex code에서 확인한 결과, $를 붙여준 변수가 모두 그냥 변수처럼 바뀌었다는 것을 확인할 수 있다.

그리고 외부에서 만들어져 들어오는 변수같은 경우, '$'를 붙여줘도 되고 안붙여줘도 된다는 것을 확인할 수 있다.

FF 같은 경우는 $를 붙이게 되면 후디니에서 쓰는 $FF local variable와 헛갈리므로 $를 빼내었다.


외부에서 vex language를 쓸때면...

이렇게 된다.



'Houdini > VEX' 카테고리의 다른 글

vex로 만들어 본 노이즈의 적용방식  (0) 2012.12.11
vex로 코딩해 본 여러가지  (0) 2012.12.11
VEX의 특성  (0) 2012.12.02
나름 약간 변경해본 것...  (0) 2012.11.30
Posted by scii
: