Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

테드옹의 VFX

point cloud 본문

Houdini

point cloud

Tedd_Kim 2021. 12. 6. 22:53

max points의 숫자와 거리에 따른 가중치를 필터링해서 값을 가져올 땐 pcfilter함수를 쓰고

거리가 가까울 수록 그 포인트가 가지고 있는 값의 가중치가 늘어남

w_i = 1-smooth(0, maxd * 1.1, d_i) //maxd는 가장 먼 거리의 포인트, w_i는 가중치

단일 점의 값을 가져올 땐 pcimport함수를 쓴다

 

아래는 SideFX에서 제시해준 pcfilter함수의 코드

float pcfilter (int handle; string channel) { //channel은 가져올 어트리뷰트의 이름

    float sum, w, d; 

    float value, result = 0;

    

    while ( pciterate(handle) ) {

        pcimport(handle, "point.distance", d); //거리를 d에 저장

        pcimport(handle, channel, value); //어트리뷰트 값을 value에 저장

        w = 1 - smooth(0, radius, d); //가중치를 거리에 따라 계산

        sum += w; //가중치의 합을 sum에 저장

        result += w * value; //가중치를 가져온 어트리뷰트값에 곱셈하여 result에 저장

        }

    result /= sum; //결과값을 가중치의 합으로 나눗셈

    return result; //결과값 리턴

}

 

- int pciterate(int handle)

point cloud에 있는 모든 포인트들을 순회한다. 아직 루프 중이면 1을리턴하고 루프가 끝나면 0을 리턴한다

그리하여 while(pciterate(handle))을 사용하면 배열을 활용하는 foreach()와 정확히 같음

 

- int pcimport(int handle, string channel_name, <type>&value)

채널이름에는 point.number와 point.distance라는 특수한 문자열을 사용할 수 있다

전자는 처리되고 있는 포인트의 번호, 후자는 기준점에서부터 처리되고 있는 포인트와의 거리

value는 값을 저장할 변수(위의 코드처럼 while문 전에 미리 선언)

import가 성공하면 1을 리턴하고 실패하면 0을 리턴한다

 

간단히 포인트와 그리드를 깔고, pcfind()함수를 사용하여 거리와 ptnum을 배열에 삽입

 

배열의 결과를 보면 단순히 거리 내에서 랜덤한 포인트를 뽑은게 아니라, 최소거리에 있는 포인트부터 최대한 많이 (이 경우엔 10개)를 탐색하는 것이다. 거리값을 저장한 배열을 보면 오름차순으로 정렬되어있음

 

배열 대신 pcopen()함수를 사용하여 포인트 클라우드를 이용한 코드. 마찬가지로 ptnum과 거리값을 배열에 삽입한다

 

pcfind()의 결과와 정확하게 일치!

다만 pcfilter()함수의 경우엔 거리값에 비례하여 가중치를 설정하게 되는데, 배열을 사용할시 pointattrib() 함수등을 사용해서 어트리뷰트값을 읽어올 순 있겠으나 가중치를 줄 수는 없기 때문에 그런 면에서는 point cloud의 방식이 조금 더 유리할 것 같다.

 

 

 

영상에 사용된 vex코드

addpoint함수와 id어트리뷰트를 설정한 후에 add노드를 사용하여 라인을 생성한 간단한 예시

point cloud로도 정확히 같은 작업을 할 수 있다!

'Houdini' 카테고리의 다른 글

까먹으면 안되는 테크닉들  (0) 2021.12.14
Constraints  (1) 2021.12.12
그래픽스 이론 관련  (0) 2021.11.27
Guided simulation  (0) 2021.11.26
그리드마켓 사용시 주의사항  (0) 2021.11.07