Houdini Basic

[9일차] 시계 애니메이션 (3)

후디니하는 돌 2023. 1. 12. 17:14

똑딱거리는 시계 만들기

 

새로운 파라미터를 만들어준다.

ch(INTERVAL)은 R_SF이고, 나중에 이름을 바꿔준 것

ch(FRAME)을 ch(COUNT)*ch(R_SF)로 변경해줌

기존에는 $F으로 한프레임마다 값이 변경되었는데, 초수*24를 해줘서 24의 배수(1초)마다 값이 바뀌도록 만들어 준 것

원래는 각도에 (1,2,3,4 ··· 23)이 곱해지면서 23프레임까지도 계속 움직이는데,

초수*24는 각도에 23프레임까지는 0, 24프레임부터 47프레임까지는 1, 48프레임부터 71프레임까지는 2 가 곱해지게 됨

 

함수 더하기

 

초침에 반동 주기

 

F_S = S_S + S x (COUNT x INTERVAL) + Value(반동)

 

1. 선을 만들고 Carve로 Point0가 DECI값에 따라 움직이게 만든다. 그리고 그 점을 떼어낸다.

2. 1에서 만든 점에 attribute를 주고 CONTROL 노드에 load

3. CONTROL 노드에서 필요한 몇 가지 파라미터들을 더 만들어 주고 F_S를 보정해준다.

 

point expression function

point(surface_node, point_number, attribute, indx)

surface_node에는 어떤 노드에서 정보를 불러 오고 싶은지

point_number에는 불러온 노드 중 몇 번 점

attribute에는 요구한 점에서 어떤 속성의 값을 알고 싶은지

index에는 attribute 중 몇 번 째 정보를 줄지

 

조건을 충족 하지 않으면 0 값이 나오게 됨

 

point( "/obj/geo1/box1", 3, "P" , 0 )

obj의 geo1의 box1 노드에서 3번 점의 position 값(x,y,z) 에서 0번인 x 값을 불러와 주세요.

 

*주소 입력할 때

ch("/obj/CLOCK/CONTROL/C")

= ch("../CONTROL/C")

위의 주소는 Absolute References 이고 아래는 Relative References

CLOCK이라는 geo 안에 있는 box의 uniform scale에 입력을 할 때 이런 식으로 ../을 한번만 써주면 된다. 한번만 하면 CLOCK

box가 다른 geo(geo2)에 있다면,  ch("../../geo2/CONTROL/C") 이런 식으로 ../을 두 번 적어줘야함. 두 번 하면 obj

 

 

반동을 위한 그래프 만들어주기

0과 1에 포인트 하나씩 만들어서 선 만들어주고,

subdivide 노드로 선을 쪼개주기 (depth 4)

점의 위치를 이동 시키기 위해 select mode로 만들어주기 키보드 S, move를 활용하기 위해 키보드 T

S로 점을 잡고 T를 누르면 자동으로 edit 노드가 생성됨

S로 점을 잡고 다시 S를 누르면 방금 전에 이용했던 툴로 변경됨 (방금 전에 사용한 T)

 

이런 형태로 선 수정해주고, convert로 NURBS Curve로 만들어주기

 

carve 노드의 First U 값에 앞서 만들어 두었던 DECI 값을 불러와

0에서 1로 점이 반복적으로 이동하게 만들어 준다.

 

Attribute Wrangle

float VIBE라는 새로운 어트리뷰트는 vector인데 Position y 값을 불러올 것이다 ; (세미콜론으로 잘 닫아주기)

 

CONTROL 노드에 새로운 VALUE 파라미터 아래와 같이 만들어주기

SET VIBE는 Attribute Wrangle에 정해준 이름

VIBE의 값은 하나밖에 없으므로 index는 0으로 해주면 된다.

F_S에 ch(VALUE)를 더해주면 초침에 반동을 더해줄 수 있다!

 

MULT라는 파라미터 하나 더 생성해서 F_S의 ch(VALUE)에  *ch(MULT)를 해주면 진폭을 더 늘리게 만들어 줄 수 있음

 

add로 만든 선과 control을 외부 fbx파일에 그대로 붙여넣으면 완성!

똒딲똒딲

 

+++

point 함수가 특정 점의 값을 불러오는 거라면 굳이 attribute wrangle로 어트리뷰트를 하나 더 만들지 않고 그냥 포인트 y 값을 불러와도 똑같이 적용되야하지 않나 싶어서 한번 해봤다.

blast 아래에 null을 하나 연결해두고,

VALUE에 point("../null1",0,"P",1) 라고 입력해서 적용하니 똑같이 적용이 된다!

(맞겠지?)

 

 


너무 잘 설명해주셔서 내용을 이해하는 것 자체에는 문제가 없는데, 이런 원리들을 활용해서 다른 무언가를 만들 때 적용시킬 수 있을지는 모르겠다.. 계속 하다보면 할 수 있겠지?