Programming/Houdini - TWA

[Houdini] Open The Houdini 6-3

와들S 2023. 7. 17. 11:21

1. Outputs

Clock with VEX, Attribute Wrangle
FBX with VOP Nodes

 

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