Posted: April 13, 2018
Version: Houdini 16.5
Rand VEX Function
rand() 함수는 인자에 따라 랜덤한 수를 리턴한다.
이때 리턴하는 값은 0 과 1 사이의 실수(float) 이다.
rand() 함수의 기본형태는 다음과 같다.
rand(a)
괄호안에는 한개의 인자(a) 가 필요하다.
만약 인자가 변하지 않는 특정 숫자라면 리턴값도 한개이므로 보통 다음과 같이 사용한다.
도형의 점마다 각기 다른 랜덤값을 얻기위해 점번호를 뜻하는 @ptnum 을 인자로 쓴다.
도형의 면마다 각기 다른 랜덤값을 얻기위해 면번호를 뜻하는 @primnum 을 인자로 쓴다.
Rand 함수 예제
rand() 함수를 이용해서 그리드에 랜덤한 색상을 적용해 보자.
후디니를 열고 /obj 에 그리드 지오메트리를 하나 만든다.
만들어진 'grid1' 노드를 더블클릭하여 Geometry 레벨로 들어간다.
Attribute Wrangle SOP 을 만들고 다음과 같이 연결해 준다.
연결한 뒤에는 'attribwrangle1' 노드의 Display Flag 를 선택한다.
'attribwrangle1' 노드의 VEXpression 란에 다음과 같이 VEX 를 입력한다.
VEXpression 칸에 입력하는 동안은 결과를 볼수 없다. 마우스 커서를 VEXpression 칸 밖으로 이동시켜 클릭해야 입력된 VEX 가 적용된다. 바로 결과를 볼 수 있는 단축키는 Ctrl + Enter 이다.
그 결과, 그리드의 색상이 검정/흰색 계열로 랜덤하게 바뀌었다.
이제 VEX 코드를 한문장씩 차근차근 보도록 하자.
우선 rand() 함수의 인자로 @ptnum 을 넣었다.
@ptnum 은 그리드 각 점번호이므로 이를 인자로 받은 rand() 함수도 서로 다른 랜덤값을 리턴한다.
이 리턴값을 'rval' 라는 float 타입 변수 에 할당하였다.
'Cd' 어트리뷰트 를 만들고 그 값에 위에서 만든 'rval' 변수를 대입했다.
이와 같이, 변수는 VEX 안에서 원할 때마다 불러져 쓰일 수 있다.
'attribwrangle1' 노드의 Geometry Spreadsheet 을 열고 만들어진 어트리뷰트를 확인한다.
그리드 점마다 랜덤한 Cd 값을 얻었지만 그 범위는 0 과 1 사이 안에 있다.
현재 Cd 는 Point 어트리뷰트임을 이해한다.
현재 'rval' 변수의 타입이 float 이므로 각 점마다 r,g,b 모두 같은 값이 된다.
이 때문에 흑백계열의 색만 얻은 것이다.
'rval' 변수의 타입을 vector 로 바꿔보자.
VEX 코드를 다음과 같이 고친다.
@Cd = rval;
이번에는 그리드 색이 알록달록하게 바뀌었다.
Geometry Spreadsheet 을 다시 열고 Cd 어트리뷰트를 확인한다.
각 점마다 r,g,b 모두 다른 값이 된다.