2010-05-02 오픈클래스 | Distance와 fit range VOP을 이용한 영역 지정
오늘의 오픈클래스 내용은 VOP에서 distance와 fit range를 중심으로 영역 지정과 fit range의 값을 조정하여 영역을 확장, 조정하는 내용이었습니다. 특히 fit range를 컨트롤해서 범위를 조정해주는 것이 가장 주요한 내용이었고, fit은 익스프레션에서든 VOP네트웍에서든 아주 유용하고 많이 쓰이게 되는 것이니 만큼 꼭 이해하고 넘어가야할 부분이라고 생각합니다. 오늘 진행된 내용은 첨부된 hip파일을 참조해 주시기 바랍니다.
파일을 열어보시면 sphere노드 아래 세개의 vopsop노드가 달려있는데, 왼쪽부터 오늘 클래스에서 진행하며 만든네트웍, for loop를 이용해서 다중의 마스크를 만드는 구성, 그리고 마지막것은 distance를 이용하지 않고 noise를 fit으로 조정해서 마스크로 활용하는 구성입니다. 디스 플래이 플러그를 옮겨가며 플레이해보면서 각각 어떤 점이 다른지 확인해보시면 되겠습니다.
hipnc 파일 다운 ---> mfiles.naver.net/13860fbca8f3f72b03e683b58c6b176fcc926d850f/20100503_90_blogfile/dls503_1272825844304_x2OTs8_hipnc/2010_05_02.hipnc
이중에서 오늘 마저 진행하지 못한 for loop에 대한 설명을 하고 글을 마치도록 하겠습니다.(첨부된 파일의 구성을 중심으로)
1. for loop VOP 살펴보기.
우선 for loop라는것은 주어진 연산을 각각의 요소들마다 한번씩 반복해주는 반복문입니다.

for loop VOP를 만들면 기본적으로 주어지는 값들중 i는 초기값, step은 초기값(i)에서부터 정해진 수만큼 카운터를 증가시키는 역할, end는 step에 의해 증가된 카운터값이 정해진 값에 도달했을때(test에서 지정해준 법칙에 따라서) loop를 멈추게 하는 역할을 합니다. 자세한 내용은 help문서를 참조하시기 바랍니다.
그리고 for loop를 더블클릭해보면 내부로 들어가게 되는데, for문이 연산을 진행할 내용을 구성할 수 있는 공간이 나옵니다. 기본적으로 i, step, end값이 기본적으로 있고, 연산에 필요한 변수들은 그림과 같이 for문에 연결해 줄 수 있습니다.
2. 첨부된 파일에서의 for loop 구성.
첨부된 파일에서는 global variables에서 P와 Npt, 그리고 loop내에서 step에 따라 1씩 증가되는 값을 저장하기위한 counter와 for loop에 의해서 만들어지는 각각의 mask들을 저장하기 위한 변수를 parameter vop으로 만들어서 연결해 주었습니다.(여기서 parameter vop은 단순히 forloop안에서 연산된 내용을 저장하기 위한 것으로 그냥 기본값으로 만드시면 되겠습니다. 코드로 치면 a = a+1 요런것을 위한 부분이라고 생각하시면 됩니다.)
아래샷은 for loop의 내부 모습입니다.

내부로 들어가보면 클래스를 진행하면서 만들었던 부분중 mask를 만드는 부분이 for loop안으로 들어온것을 알 수 있습니다.
기본적인 아이디어는 특정 포인트의 포지션을 받아오는 import attrib노드의 ptnum에 랜덤한 번호를 넘겨서 루프가 돌면서 랜덤한 지점들을 기준으로 영역을 만드는 것입니다.
mask 네트웍 박스외의 부분들이 바로 위에서 for loop에 연결시켰던 counter와 mask 파라미터에 연산된값을 저장하기 위한 것입니다.
아래쪽에 add_for_counter_increase가 하는일은 counter에서 받은 값에 1을 더해주는 역할을 하는데 더해진값을 다시 counter로 보내고, 다시 그 값을 받아서 1을 더하고, 또 더해진 값을 받아서 1을 더하고 이런작업을 end에 의해서 루프가 끝날때까지 반복하게 됩니다. 결국 한 루프당 1씩 더해지는 꼴이 되는것인데(counter = counter + 1),
첨부된 파일에서는 이런 작업이 10번 진행되게 됩니다. 그러면 첫번째 루프부터 마지막 까지 0,1,2,3,4,5,6,7,8,9의 값이 차례로 counter에 저장이 되고, 이값들을 seed로 하는 random값을 만들어서 import attribute의 ptnum으로 넣게되면 루프마다 랜덤한 값이 ptnum에 지정이 되는것이 이 예제에서의 기본적인 구성입니다. 다만 랜덤값은 0에서1사이의 값으로 나오기 때문에 이것을 npt-1과 곱해서 그 값을 0에서부터 끝번 포인트 넘버 사이로 나오도록 하고 있습니다.(fit을 사용할 수 도 있겠죠?)
마찬가지로 fit에서 나온 값(마스크영역)도 add를 통해서 mask에 계속 더해지며 저장이 되는데, 만약 이렇게(add) 하지 않고 바로 sub output에 연결을 하게 된다면 마지막 루프에서 연산된 값만 내보내게 되니 주의 해야 합니다.(마지막에 연산된 mask하나만 내보내게 되어서 위치만 바뀔 뿐 마스크 숫자는 여전히 하나만 나오게 되는것입니다.)
음.. 제가 설명을 쉽게 하는 능력이 부족해서 좀 햇갈리는 부분이 있을 수 있을 것같은데 이해가 잘 되지 않는 내용은 질문을 남겨주시기 바랍니다. ㅎ 이상입니다~
redsky9011
Fri, 05/07/2010 - 16:59
Permalink
hipnc파일 링크가 깨진듯합니다.
설명을 잘하셔서 저는 이해가 쉽게 된듯합니다.
hipnc의 링크가 깨져서 나중에 다른분이 받으실때 문제가 있을수도 있겠습니다.
잘보았습니다^^
Inseong
Mon, 05/10/2010 - 00:54
Permalink
링크가 자꾸 깨지는군요;
파일 링크가 자꾸 깨지네요 ㅡㅡ;
다운이 안되시는 분은 여기서 받으세요~ http://blog.naver.com/dls503/40105845729
Inseong
Sun, 06/27/2010 - 01:28
Permalink
여기서 counter는
subinput1의 I로 대체 할 수 있습니다. 구태여 1씩더하는 구성을 하지 않아도 I값이 그 역할을 해줍니다.. 일깨워주신 김정환님께 감사를.. ㅎㅎ