Programming/Houdini - TWA

[Houdini] Joy of VEX (Day 12-1)

와들S 2023. 8. 6. 09:51

1. Outputs

 

2. Reviews

1) 선으로 익히는 물결 효과 알고리즘 1

- 좌측 우측 동일한 결과를 내나, 오른쪽이 nearpoint 함수를 사용하여 더 간단히 효과를 낼 수 있다.

- 코드를 분석해보면, 먼저 nearpoint로 근처 점을 구하고, 다음 줄에서 2번째 인풋으로 받은 점의 위치를 vector 변수(getpos)에 저장한다. 이후 distance 변수를 이용하여 각 점과 getpos의 거리를 구한 후 distance 변수에 넣고 y 값에 적용한다.

 

2) 선으로 익히는 물결 효과 알고리즘 2

- 위와 동일한 방법을 이용하나 fx, fxA 변수를 이용해 더 직관적으로 사용하였다. 위 5줄은 비슷하고, 가운데 코드가 중요한데, 한 줄 한 줄 설명하자면,

  1. fxA = d -@Time;
    fxA에 거리값 - 시간을 넣는다. 시간을 뺀 이유는 점에서부터 퍼져나가도록 하기 위함이다.
  2. fxA -= floor(fxA);
    floor함수를 이용해 소수점만 남기는 처리를 한다.
  3. fxA = fit(fxA, 0, 1, 1, 0);
    fit함수를 이용해 모양을 뒤집는다. 0~1이었던 출력값을 1~0 형태로 출력한다. 해당 알고리즘은 빗물이 떨어지는 효과로서 맨 처음 값이 커야하고 갈수록 작아져야하기 때문이다.
  4. fxA = chramp("fxA", fxA);
    chramp 함수를 사용해 그래프를 손수 그린다.

 

3) 그리드 - 물결 효과 알고리즘 1

- 코드가 조금 길다.

- 2)에서 썼던 알고리즘과 거의 유사하다. 12번째 줄과, 16번째 줄이 추가되었다.

  • 12번째 줄에서 rand(pt)를 한 이유는 모든 빗방울이 동일한 타이밍에 떨어지는 게 아니므로 시간에 대한 랜덤값을 추가했다.
  • 16번째 줄에서 fxA를 나눠주었는데, fxA를 큰 값으로 나누기 위해 pow함수를 사용하였다. pow함수는 제곱을 하는 함수로 첫 번째 인자는 제곱할 값, 두 번째 인자는 제곱할 정도를 넣는다. 여기서 제곱할 정도를 chf를 사용해 후에 조절할 수 있게 하였다. 

- 여기까지 한 후, 선생님께선 일정 구간을 정하여 그 구간을 넘어서면 값이 달라지도록 구간별 값을 정할 알고리즘을 만들었다. 이 알고리즘엔 3 가지 변수가 필요하다.

  • cutoff: 각 점과, 기준이 되는 가장 가까운 빗방울 점 사이의 거리
  • keep: 값을 보관해야할 최댓값. 즉 keep까지의 값은 원래값 온전히 그대로 적용한다. 
  • end: 이 값을 넘어서면 이제 0이 되어야 한다.

- 해당 알고리즘은 먼저 현재 거리가 [ keep <= 현재거리 <= end ] 이 조건을 충족하는지 따진다. 만약 충족한다면 fit함수를 이용해 이 범위의 값을 1~0 사이로 출력한다.

- 만약 충족하지 않으면 else 로 넘어가 새 기준으로 다시 따진다. 만약 거리가 keep보다 작으면 1로 전체 다 충족시키게 하고, keep보다 크다면, 즉 end보다도 크다면 cutoff를 0으로 두어 아예 값이 없어지게 한다. 왜나면 아래에서 fxA에 cutoff를 곱했기 때문이다.

- 다만 이 알고리즘은 한 가지 문제점이 있다. 만약 빗방울 수가 많아질경우 각 빗방울끼리의 가장자리가 어색하게 딱 끊어지는 형태를 띈다. 왜냐하면 각 점은 서로 소통하지 않고 오로지 얼마나 가까운지에만 따지고 그것에만 의존해 출력되므로 어색하게 나올 수밖에 없다. 

- 이 해결방법은 앞으로의 강좌에서 보완한다고 한다. 

'Programming > Houdini - TWA' 카테고리의 다른 글

[Houdini] Joy of VEX (Day 12-3)  (0) 2023.08.06
[Houdini] Joy of VEX (Day 12-2)  (0) 2023.08.06
[Houdini] Joy of VEX (Day 11)  (0) 2023.08.04
[Houdini] Joy of VEX (Day 10)  (0) 2023.08.04
[Houdini] Joy of VEX (Day 9)  (0) 2023.08.03