1. Outputs
2. Reviews
- 사용한 변수
초침 | 분침 | 시침 | ||
시작 시각 입력 | IS | IM | IH | |
F/초/분/시 관계 | SF | MS | HM | DH |
초침 | 분침 | 시침 | |
시작 각도 | SS | SM | SH |
움직인 각도 | AS | AM | AH |
결과 각도 | FS | FM | FH |
프레임 당 각도 | 식 | |
S | 프레임 당 초침의 각도 | (360 / MS) / SF |
M | 프레임 당 분침의 각도 | S / HM |
H | 프레임 당 시침의 각도 | M / DH |
프레임에 따른 시간 정의 | 식 | |
FPS | Frame Per Second | |
TIME | 현재 프레임은 몇 도? | @Frame / FPS |
COUNT | 현재 프레임에 몇 번 초침이 움직임?(int) | floor(TIME) |
DECI | 그 소수점 차 | TIME - COUNT |
시작 각도 | 식 | |
SS | 초침 시작 각도 | IS * (360 / MS) |
SM | 분침 시작 각도 | {IM + (IS / MS)} * (360 / HM) |
SH | 시침 시작 각도 | [ IH + (IM / HM) + {(IS / MS) / HM}] * (360 / DH) |
[ 시 + (분 / 분당시) + {(초 / 초당분) / 분당시}] * (한바퀴 / 몇 시) |
변수명 | 뜻 | 식 |
AS | 초침의 움직인 각도 | (COUNT * FPS) * S |
AM | 분침의 움직인 각도 | (TIME * FPS) * M |
AH | 시침의 움직인 각도 | (TIME * FPS) * H |
FS | 초침의 마지막 각도 | SS + AS |
FM | 분침의 마지막 각도 | SM + AM |
FH | 시침의 마지막 각도 | SH + AH |
1) Prepare for Attribute Wrangle
- 그냥 Attribute Wrangle만 쓰면 이 노드는 그 어떠한 점도 없으므로 제대로 이용할 수 없음. 따라서 위에 add를 연결해 점을 하나 추가한다. 그리고 Wrangle노드 아래에 INFO 란 이름의 NULL 노드를 추가해서 해당 속성들을 그대로 inherit 시킨다.
- 시험삼아 만든 FS, FM, FH 속성들을 각 시침, 분침, 초침들의 z축 회전값에 넣는다.
- 넣을 때는 속성값을 받아오는 것이므로 point 함수를 사용한다. (이전 강의 참고)
- 위의 코드를 설명하면,
노드의 위치(주소값- 상대주소), 첫번째 점이므로 0, 속성의 이름, 속성의 첫번째 값이므로 0
- 해당 attribute wrangle 은 점이 있으므로 그 점에서 직접 속성 값을 받아오면 되니 point함수를 쓴 것이다.
2) Attributes & Channels
- 원래라면 이후에 이용할 것들만 속성으로 만들고, 나머지는 변수로 써야 하지만, 연습을 위해 전부 속성으로 만들었다고 하셨음. 나도 따라서 연습을 위해 속성으로 만들었다.
- spare input 및 channel을 이용해서 아래에서 제어할 수 있는 변수를 만들었다. Channel을 의미하는 ch옆에, 해당 변수가 float면 f, int면 i, vector면 v 등의 값을 넣어줄 수 있다. 계산을 위해 전부 float으로 만들었으므로 chf로 적고 vex 입력창 우측상단 버튼을 눌러 아래에 생성한다.
- 그럼 이렇게 입력이 되어 쉽게 값을 바꿀 수 있다.
3) Point Function in Parameter VS. Wrangle
(1) 파라미터에서의 point()
- point ("노드 주소", 몇 번 점, "정보 이름", 그 정보의 몇 번째 정보)
ex) point ("../INFO/", 0, "FS", 0)
※ 타 노드나 현 노드에서의 정보를 가져옴.
예를 들어 point ("../INFO/", 1, "Cd", 1) 일 경우 해당 노드의 두 번째 점에서 Cd 속성의 Y (=G)을 가져온다고 선언
(2) Attribute Wrangle (VEX) 에서의 point()
- point (몇 번째 인풋, "원하는 속성 이름", 몇 번 점);
ex) point (1, "Cd", 0);
※ 해당 인풋은 Attribute Wrangle의 총 4가지 인풋 점들을 가리킴.
예를 들어 위의 예시인 경우 2번째 인풋의 Cd 속성 중 X(=R)을 가져오는 것
4) Tickling Clock
- 먼저 해당 point 함수를 이용해 Carve에 DECI 정보를 넣었다.
- 그리고 Attribute Wrangle을 하나 더 만들어 해당 코드를 적는다. Vibe라는 이름의 float 속성에 해당 점의 y 좌표값을 넣는 코드다.
- INFO 아래로 새 Attribute Wrangle을 연결해 해당 속성을 받을 것이다. 하지만 저렇게 연결만 한다고 해서 속성이 받아지지는 않기 때문에 위에서의 point() 함수를 써야 한다.
- 위의 코드를 적어 새 속성에 2번째 인풋으로 받은 속성을 가져온다. Geometry Spreadsheet을 보면 Vibe가 뜬 걸 볼 수 있다.
- 얼마나 바뀔 지 Multi 속성도 만들어 곱해준다.
- 이 때, 이 FS 값은 아직 위 초침의 transform에 연결이 안되있으므로 attribute 아래에 Clock이란 null 붙여주어 다시 경로를 입력해준다.
- 마지막으로 변수들을 정리해주면 된다.
5) VOP
- Parameter 노드를 쓰면 노드 안에 또 변수를 만들 수 있다. Parameter로 만든 변수는 VOP 바깥에서만 값을 수정할 수 있다.
- 위에서 했던 식과 변수들을 노드를 짜주면 된다. 이후에 할 작업도 거의 비슷하다. 그래서 수업 듣기 전 미리 쭉 해보고 있었다.
- 하지만 한 가지 모르겠는 게 있었다.
- attributevop2에서 만든 VIBE를 가져오기 위해서 어떻게 해야하는지 알 수 없었다.
- 정답은 Import Point Attribute란 노드를 써서 2번째 인풋과 연결한다음 (두번째 인풋에 연결했으므로), 불러올 속성에 VIBE란 불러올 속성 이름을 적으면 가져올 수 있다!
- 나머지 과정은 VEX로 했을 때보다 동일하다.
- VOP로 해보고 느낀점은 이런 복잡한 연산과 과정은 VEX가 훨씬 쉽고 직관적이란 거다. 못해먹겠눼....
6) Apply to FBX
- VOP로 만든 걸 FBX로 적용해봤다. 옆의 식과 vop들 싹다 가지고오면 된다. 물론 그 전에 원래 있던 걸 싹 지우고. 이후 transform을 복사해오거나 point() 함수를 다시 써주면 된다.
'Programming > Houdini - TWA' 카테고리의 다른 글
[Houdini] Open The Houdini 8-2 (2) | 2023.07.18 |
---|---|
[Houdini] Open The Houdini 7-1, 8-1 (0) | 2023.07.17 |
[Houdini] Open The Houdini 6-2 (0) | 2023.07.14 |
[Houdini] Open The Houdini 6-0~6-1 (0) | 2023.07.14 |
[Houdini] Open The Houdini 5-3 (0) | 2023.07.13 |