Image-driven Aniamtion 02
Step 3 : VOPSOP node를 이용하여 Grid에 texture 효과주기
Grid node 아래 VOPSOP node를 생성한다. VOPSOP node를 double click하여 안으로 들어가면 global1, output1 node가 기본적으로 생성되어 있을 것이다. VOPSOP node 와 Vex node들은 houdini help file을 참조 하기 바랍니다.
Global1 node의 "P"(position) 속성을 output1 "Cd"(color) 속성에 연결한다. 그러면 grid1에 색상이 입혀진 것을 볼 수 있을 것이다. 이것은 grid에 존재하는 point의 position 정보를 이용하여 색상을 입힌 것이다. 만약 Point number 1 의 position 값이 <<1, 0, 0>> (x, y, z)이라 하면 그 값이 rgb로 전환되어 red color를 띄게 된다.
이제 grid1에 houdini가 제공하는 나비 texture를 mapping 해보자. 우선 생각해 볼 것은 texture를 mapping 할 땐 uv좌표가 사용된다. 그런데 "P" 속성은 vector 이고 uv는 0~1 사이값을 가지는 float 속성이 2개 존재한다. 따라서 vector 속성을 float 속성 3개로 분리해야 한다. 이 때 쓰이는 node가 vectortofloat node다. Vectortofloat node를 생성하고 global1 "P" 속성을 vectortofloat1 "vec"(vector)속성에 연결한다. 그러면 vector의 인자들이 각각 fval1, fval2, fval3(float value) 속성에 대입된다.
이제 이미 만들어진 img>default_pic image에서 color 정보를 추출하여 대입시켜 본다. Image를 가져오기 위해 colormap node를 생성하고 vectortofloat "fval1", "fval2" 속성을 colormap1 "u", "v" 속성에 각각 연결한다.
여기서 fval1, fval2, fval3 속성은 grid1 point들의 좌표 값들이 x y z 순으로 대입되어 있다. Grid1의 Orientation의 값이 무엇인가에 따라 "u", "v" 속성에 연결해야 하는 값이 변경된다. Xy plane으로 되어 있으면 fval1, fval2를 연결해야 하고, yz plane라면 fval2, fval3를, zx plane라면 fval1, fval3을 연결해야 한다.
이제 colormap1 node의 Color Map 속성에 다음과 같이 적는다
op:/img/comp/default_pic
colormap1 "color" 속성을 output1 "Cd" 속성에 연결한다.
이제 obj category로 가서 image를 살펴보면 grid에 texture가 입혀 있기는 한데 먼가 이상 할 것이다. 생각해 보면 당연한 결과다. Position이 <<0, 0, 0>>(원점) 위치에 texture uv 가 (0 ,0)인 부분이 들어가니 이미지가 grid에서 밀려나 mapping된 것이다. 그리고 grid의 size가 1, 1이 아니라면 그 수만큼 반복되는 이미지를 보게 될 것이다. 이 부분을 수정하기 위해 position에 임의 값을 더하거나 빼거나(uv는 repeat 됨으로 0.5 나 1.5는 같은 값을 가짐) 또 곱하거나 나누어 grid 에 딱 맞게 mapping을 한다.
임의 값을 사용자가 입력하기 위해 constant node를 생성하고 1 Float Default 값에 0.5를 입력한다. (0.5를 입력하는 이유는 위에 언급한 내용을 조금만 생각해 보면 알 것이다)
이제 add node를 하나 생성하고 "input1", "input2"에 constant1 node의 "constant", vectortofloat1 node의 "fval1"을 연결한다. 그리고 add node의 "sum"을 color node "u" 속성에 연결한다. "v" 속성에 대해서도 같은 작업을 해주면 이미지가 제 위치에 mapping된 것을 볼 수 있다. 그리고 grid의 사이즈가 1, 1이 아니라면 constant node를 하나 더 생성해 grid의 size와 같은 값을 입력하여(expression을 이용하여 값을 가져온다면 grid의 size가 조정될 때마다 값을 바꿔야 하는 수고를 덜 수 있다) Multiply, Divide node를 이용하여 작업하면 정확히 mapping 될 것이다.
Step 4 : 검은 부분의 point를 삭제하고 sphere를 point위치에 복사 및 color 정보전달하기
검은 부분의 point를 선택적으로 삭제하기 위해 delete node를 사용한다. 삭제 방법은 expression을 이용하여 각 point의 color를 추적 그 값이 black에 근접하면 삭제시킨다.
Delete node를 생성하고 Entity 속성을 Point로 변경, Number tap에 Operation을 Delete by Expression으로 변경, Filter Expression에 다음과 같이 적어준다.
($CR + $CG + $CB)/3 < 0.1
point의 RGB값을 더하고 3으로 나누어 그 값이 0.1 이하면 삭제
위의 작업 과정을 설명하면 delete의 Entity의 속성이 point임으로 삭제할 대상이 point가 되고 Operation이 Delete by Expression으로 되어 있음으로 다음 Filter Expression이 참(true)이 되는 대상이 삭제된다.
다음으로 sphere node를 하나 생성하고 copy node를 생성한다. Copy node의 첫번째 입력부에 sphere1 node를 연결하고 두번째 입력부에 delete1 node를 연결한다.
그 후 copy1 node의 Attribute tab으로 이동하여 Use Template Point Attributes 옵션을 check한다. 이 옵션을 check하지 않으면 sphere의 color가 default 상태로 유지 된다.
지금의 상태는 나비 비슷하고 color또한 그럭저럭 들어 갔다. 하지만 이미지를 더 효과적으로 만들기 위해 sphere의 크기를 각각 color에 따라 다르게 적용해 보기로 한다.
크기를 조절하기 위해 copy를 이용한 stamp 함수를 이용할 수도 있지만 여기서는 Primitive node를 이용해 크기를 조절해 보기로 한다. Primitive node를 하나 생성하고 Transform tab의 Do Transformation 옵션을 check하고 Scale에 다음의 expression을 적어준다.
($CR + $CG + $CB)
이제 transform 등 여러 node를 이용하여 크기를 변경한다던가 여러 가지 effect 작업이 가능할 것이다.