1. Outputs
2. Reviews
1) 사용한 식 - 선분 위 비율 값
- x, y 두 점에서 a:b란 비율을 가진 중간의 점은 위의 식을 가지고 계산할 수 있다.
- 위의 식을 이용하여 벡터로 된 값들에 대한 식을 도출하였다.
2) Points VS Detail (Only once)
- wrangle을 쓸 때, 그냥 points와 detail (only once) 란 선택지가 있다. 그냥 points는 모든 점에 대해 계산하는 것이므로 모든 점에 대해 새로운 점들이 생겨 총 10개의 점이 생성된다. 반면 Detail only once 같은 경우에는 딱 점 하나만 추가된다.
- 그 어떠한 점도 없는 wrangle 노드라고 생각해보자. points의 경우 addpoint(0, V) 란 함수를 써도 그어떠한 점도 받지 않았으므로 그 어떠한 점도 생성하지 않지만, detail의 경우 점 생성에 대한 명령 그 자체를 실행하므로, 아무런 점을 받지 않더라도 점 하나를 생성한다. 즉 우리가 add노드로 점을 만든 것처럼 wrangle 그 자체에서도 detail only once 를 이용해 점을 생성할 수 있다.
3) 실제 해본 실습 예제들
- 직접 푼 두 점 사이의 중간값 가진 점
- 직접 푼 비율 문제. base와 neck을 어떻게 불러와야할지 몰라서 개노가다 했는데 선생님은 쉽게 하셨다. 다음엔 저렇게 해야지. ch뒤에 쓸 자료형을 잘 맞춰야겠다.
- 실제로 하실 땐 나처럼 굳이 float 변수들을 만들어 값을 보관하지 않고 바로 하셨다.
vector middle = ((base * B) + (neck * A)) / (A+B); 이렇게
- 나도 다음엔 더 깔끔히 쓸 방법이 있나, 더 효율적인 코딩이 있나 고민해보고 완성해야겠다.
4) 2가지 방법
- 피타고라스 정리로 구했을 때 위 식이 나온다.
즉, 이를 정리하면,
1. 피타고라스의 정리로 구할 경우 -> Attribute Wrangle (VEX)
2. 작도로 구할 경우 -> Node Base Style
5) 제작 방법 with VEX
(1) Attribute Wrangle: Generate Points
vector base = chv("base");
vector neck = chv("neck");
addpoint(0, base);
addpoint(0, neck);
- 첫 Attribute Wrangle에 두 가지 값을 Control(null) 에서 받아와 점을 만든다. 설정은 당연히 Detail(only once)이다.
(2) Attribute Wrangle: get X & RAD
vector base, neck;
base = point(0, "P", 0);
neck = point(0, "P", 1);
float A, B, C;
float X, RAD;
A = ch("A");
B = ch("B");
C = distance(base, neck); // distance
X = (pow(A, 2) - pow(B, 2) + pow(C, 2)) / (C*2);
RAD = sqrt(pow(A, 2) - pow(X, 2));
f@X = X;
f@RAD = RAD;
- 여기서 주의할 점은 이 노드는 Detail이 아니고 Points 라는 점이다. 왜 이렇게 안되나 대체 왜 속성이 안만들어지나 고민했었는데 문제는 바로 Points로 해두지 않았기 때문이었다. 위 노드에서 만들어진 점을 받아 속성만 더하는 거니 Points로 써야 하고, 점을 만드는게 아니니 Points로 만들어도 괜찮다.
(3) Attribute Wrangle: generate Temp
vector base = point(0, "P", 0);
vector neck = point(0, "P", 1);
float RAD = point(0, "RAD", 0);
float X = point(0, "X", 0);
vector temp, dir, Ndir;
dir = neck - base;
Ndir = normalize(dir);
temp = base + Ndir*X;
addpoint(0, temp);
- 'temp = base + Ndir*X' 란 코드를 주의깊게 봐야한다. temp (temporary)로 만들어진 점을 만드는 식이다. dir를 노말화한 백터에 위 노드에서 계산한 X 값을 곱하고, 그걸 base 벡터에 더해 중간 점을 만든다.
(4) Attribute Wrangle: get N
- 이 노드는 points로 작업해야 한다. 왜냐하면 모든 점에 대해 노말을 만들기 때문이다. 노말을 neck - base로 벡터를 형성하고, 이를 copy to point를 이용해 붙인다. 여기서 가운데 2번점의 원만 필요하므로 blast로 필요한 것만 떼어내 보이게 한다.
(5) Sort: The highest point for 'middle'
- 먼저 저 원의 반지름에 point함수를 이용해 RAD 값을 넣는다.
- 원 위의 점들 중 가장 y값이 높은 (높이 있는) 점을 가지고 연결해야 한다. 왜냐하면 가장 높이 있는 점이 가장 똑바로 서 있는 점이기 때문이다. 그 점을 구하기 위해선 원 자체의 Division을 크게 올리고 sort란 노드를 사용한다. sort는 점을 특정 분류에 의해 순서를 재배치해주는 노드이다. 첫 번째 sort1엔 y값으로 분류 위해 by y를 쓰고, 그 아래 sort에서 reverse란 기준을 사용한다. 여기서 가장 높이 있는 점이 0으로 놓아져있으므로 그 0점을 blast로 따로 떼어 준다.
- 마지막으로 세 점을 merge로 묶어주면 된다!
6) 제작 방법 with Nodes
- 노드 쓴다는 것 외엔 과정은 비슷하다. 하지만 VEX보단 훨씬 연산이 많아 (Boolean 때문인듯) 느리고, 점도 정확히 원에 있는 것도 아니라서 조금 끊기는 느낌은 있다. 역시 VEX가 좋은 듯
- 이 노드에선 Boolean을 썼고, 그 와중에 이제 두 원의 노말을 맞추기 위해 새 attribute wrangle을 사용하였다.
🥕🥕🥕🥕🥕
- 재밌었다. 일단 스터디 그룹은 8-2까지 보는 거긴 한데 시간이 나면 뒤에것도 보면서 마무리해야겠다.
'Programming > Houdini - TWA' 카테고리의 다른 글
[Houdini] Joy of VEX (Day 3) (0) | 2023.07.20 |
---|---|
[Houdini] Joy of VEX (Day 2) (0) | 2023.07.20 |
[Houdini] Open The Houdini 7-1, 8-1 (0) | 2023.07.17 |
[Houdini] Open The Houdini 6-3 (0) | 2023.07.17 |
[Houdini] Open The Houdini 6-2 (0) | 2023.07.14 |