STUDY: TWA후디니 랭글러 2기 Beginner

최초입문 6강 part 3 (2023. 1. 18)

랭글러 오후 2023. 1. 19. 13:09

 

Attribute VOP, Attribute Wrangle 기본이해와 비교

VEX

후디니에서 수학을 알아야하는 이유: 램프 만들기

램프 만들기 아이디어, if A와 B가 같을 때

If A와 B가 다를 때, 램프 컨셉 다지기

램프 뼈대 만들기

램프 면 작업하기

FX와 IK에 대하여

 

과제:

램프 만들기

-좌표 값은 base와 target에만 입력

-target이 멀어질수록 head의 관심이 줄어든다.

-target이 가까우면 일정 거리를 두고 비춘다.

 

 

6part 3

시계 애니메이션을 Attribute VOPAttribute Wrangle(Basic VEX)로 만들어보기

 

1. 변수 체크 최소이론 확인

2. 작업 세팅

3. Attribute Wrangle VEX code Style

4. Attribute VOP TEX node Style

 

- (시작하는) 시간 입력

- frame, 초침, 분침, 시침 관계

- frame에 따른 시간 정의: FPS

- 관계에 따른 frame 당 움직일 각도

- 시작 각도, 움직인 각도, 결과 각도

 

- 변수 이름 정하기

 

시간입력

- 초침, 분침, 시침 시작 시간 IS, IM, IH

 

frame, 초침, 분침, 시침의 관계

- 시침이 한바퀴 돌 때 몇 시간인지? DH

- 1시간에 몇 분인지? HM

- 1분에 몇 초인지? MS

- 1초에 몇 프레임인지? SF

 

frame에 따른 시간 정의

- 우리가 정의한 1초는 몇 프레임인지? FPS

- 현재 frame은 몇 초인지? TIME

- 현재 frame에 초침이 몇 번 움직였는지? COUNT

- (float – int ) DECI

 

관계에 따른 frame 당 움직일 각도

- 1frame 당 초침이 움직일 각도 S

- 1frame 당 분침이 움직일 각도 M

- 1frame 당 시침이 움직일 각도 H

 

시작 각도

- 시작 초침 각도 SS

- 시작 분침 각도 SM

- 시작 시침 각도 SH

 

움직인 각도

- 움직인 초침 각도 AS

- 움직인 분침 각도 AM

- 움직인 시침 각도 AH

 

결과 각도

- 최종 초침 각도 FS

- 최종 분침 각도 FM

- 최종 시침 각도 FH

 

예시: 2시 45분 30초 라면,

IH = 1, IM = 45, IS = 30

DH = 12, HM = 60, MS = 60, SF = 24

FPS = 24, TIME = @Frame / FPS, COUNT = floor(TIME), DECI = TIME – COUNT

S = (360 / MS) / SF, M = S / HM, H = M / DH 분침은 초침보다 얼마나 느릴까? 시침은 분침보다 얼마나 느릴까?

 

- 예를 들어 13045초라고 했을 때, 초시간과 분시간의 영향으로 시침의 위치가 결정된다. 또한 분침은 초시간에 영향을 받는다.

 

SH = (IH + (IM / HM) + ((IS / MS) / HM)) * (360 / DH))

SM = (IM + (IS / MS)) * (360 / HM)

SS = IS * (360/MS)

 

- frame이 얼마나 지났는지 * 프레임 당 각도

 

AS = (COUNT * FPS) * S

AM = (TIME * FPS) * M

AH = (TIME *FPS) * H

 

FS = SS + AS

FM = SM + AM

HM = SH + AH

 

 

시계 애니메이션

- Attribute VOPAttribute Wrangle로 표현하더라도 같은 논리가 적용된다는 것을 이해해야 한다.

 

- 00:00:00 에서 시작하는 시계 애니메이션.

 

- Attribute로 값을 나타내기 위해서는 점이 있어야한다.

- Add로 점을 만들고 Attribute Wrangle연결

- Null도 연결한 후 info로 네이밍

 

- 초침, 분침, 시침에 기존의 Transform 노드를 삭제하고 새로운 Transform 노드 연결

 

- 새롭게 연결한 [Transform] – [Rotate: z]Attribute Wrangle에서 만들어 준다.

 

- 그렇게 만든 값을 null(info)가 받고 info가 받은 FS, FM, FH 정보를 초침, 분침, 시침의 [Transform] – [Rotate: z]에 넣어준다.

 

- 정보가 많을 때 필요한 정보만 Attribute로 뽑아낸다.

- 연습할 때는 Geometry Spreadsheet에서 확인할 수 있도록 모든 정보를 Attribute으로 만들기

 

f@IH = 2;

f@IM = 45;

f@IS = 30;

//input time// : 메모처럼 작성할 수 있다

 

f@DH = 12;

f@HM = 60;

f@MS = 60;

f@SF = 24;

 

f@FPS = 24;

f@TIME = @Frmae/@FPS;

f@COUNT = floor(@TIME);

f@DECI = @TIME - @COUNT;

 

//relation//

 

f@S = (360/@MS)/@SF;

f@M = @S/@HM;

f@H = @M/@DH;

 

f@SH = (@IH + (@IM / @HM) + ((@IS /@ MS) / @HM)) * (360 / @DH);

f@SH = (@IH + (@IM / @HM) + ((@IS / @MS) / @HM)) * (360 / @DH);

f@SM = (@IM + (@IS / @MS)) * (360 / @HM);

f@SS = @IS*(360 / @MS);

 

f@AS = (@COUNT*@FPS)*@S;

f@AM = (@TIME*@FPS)*@M;

f@AH = (@TIME*@FPS)*@H;

 

f@FS = @SS+@AS;

f@FM = @SM+@AM;

f@FH = @SH+@AH;

 

01
Attirbute로 확인할 수 있는 값

 

 

- point(surface_node, point_number, attribute, index)

- surface_node: null(info)의 경로

- point_number: 0번 점

- attribute: FS, FM, FH

- index: 하나의 값 = 0 (첫 번째 정보)

 

- Attribute Wrangle에 파라미터를 만들어서 편리하게 통제하자 ch(  ) 활용

 

- Input time의 입력값을 채널 펑션으로 수정

- 시간은 integer 속성이지만, float 속성으로 진행

- ch(“파라미터 이름”)

 

01
채널 명명으로 파라미터가 생겼다

 

 

- Attribute Wrangle에 작성한 f@DECI의 값을 [Carve] – [First U]값에 넣는다.

- DECI값으로 움직이는 (떼어낸) 0번점의 높이를 반동에 대한 Attribute로 이용할 것이기 때문에 Attirbute WrangleAttribute화 시킨다.

 

Attribute Wrangle 노드 연결

 

 

f@VIBE;

@VIBE = @P.y;

 

- 반동을 만든 Attribute Wrangle노드와 info 노드를 하나로 묶어준다.

 

- 먼저, infoAttribute Wrangleinput1 연결한다.

- 반동을 만든 Attribute Wrangle을 새로 만든 Attribute Wrangleinput2에 연결한다.

- Point(  )으로 새로운 Attribute Wrangle에 불러와야한다.

 

f@VIBE;

@VIBE = point(1,"VIBE",0);

 

012
최신 노드의 값을 Geometry Spreadsheet에서 확인

 

 

- 이미 있는 정보를 불러올 때 타입캐스팅은 하지 않아도 된다.

 

@FS = @FS+@VIBE;

 

012
반동을 더한 값

 

 

- Null(info)에 있는 Rotation: z값을 최종 코드로 업데이트 해야 하므로 새로운 Null을 연결하고 경로를 수정한다.

 

01
최종 노드 CLOCK으로 업데이트

 

 

- 반동의 크기를 조절하기 위해 mult 코드 추가하고 채널 펑션으로 만든다.

 

채널(  )가 파라미터가 되었다

 

 

- 하나의 노드에서 조절하기 위해 CLOCK_SYSTEM 노드를 만든다.

- 시작 시간 입력을 위한 Float Vector 3 속성의 INPUT_TIME 파라미터 추가

- 시, , 초의 관계 설정을 위해 Float Vector 4속성의 RELATION 파라미터 추가

- 반동 설정을 위해 Float 속성의 MULT 파라미터 추가

 

- CLOCK_SYSTME에 생성된 파라미터들을 Copy Parameter하고  Attribute Wrangle에서 만들었던 값들에 Paste Relative References

 

012
각각의 값을 제어하고자 하는 파라미터에 연결

 

 

필요한 부분만 Attribute로 만들어 보자

- 변수를 한번에 선언

- 관계 작성

- 결과로 활용해야 하는 부분을 Attirbute로 만들기

 

Attribute는 Geometry Spreadsheet에서 확인할 수 있다

 

 

 

Attribute VOP으로 시계 애니메이션 만들기

- Add노드에 점을 만들고 [Attribute VOP] – [Run Over: Points] 연결

- VOP 안으로 들어와서 Parameter 생성, 채널의 속성 floatType에서 선택

 

0123
VOP 안에서 만든 파라미터

 

 

TIME = @Frame / FPS

COUNT = floor(TIME)

DECI = TIME - COUNT

 

VOP 노드 연결1

 

 

S = (360 / MS) / SF

M = S / HM

H = M / DH

 

VOP 노드 연결2

 

 

SH = (IH + (IM / HM)) + ((IS / MS) / HM)) * (360/DH

SM = (IM + (IS / MS))) * (360 / HM)

SS = IS * (360 /MS)

 

VOP 노드 연결3

 

 

AS = (COUNT * FPS) * S

AM = (TIME * FPS) * M

AH = (TIME * FPS) * H

 

VOP 노드 연결4

 

 

- 굉장히 복잡한 노드가 생성되었다.

- 마지막 결과값을 따로 작업하기 위해 새로운 Attribute VOP을 생성해 연결한다. 이전 Attribute VOP의 정보를 그대로 승계한다.

 

- 필요없는 VOP노드를 bypass에서 꺼준다.

 

활성화된 VOP 노드만 확인할 수 있다

 

 

- 필요한 Attirbute Bind 노드로 불러온다.

 

FS = SS + AS

FM = SM + AM

FH = SH + AH

 

 

- Attirbute VOP으로 만든 값을 시계침의 Transform Rotation값에 point(  )으로 불러온다.

 

- Carve Deci point(  )으로 불러온다.

 

- 반동 P.y Attribute VOP 불러와 Attirbute 만들어준다.

- Position 존재하는 x, y, z값에서 y값만을 VIBE Attirbute 만들어주기 위해 Vector to Float으로 y값을 추출하고 Bind Export VIBE Attirbute 만들기

- 시계침과 반동을 Attribute VOP 노드로 묶기

 

- Opinput: Attribute VOP노드의 input순서와 같다

 

01
input 노드의 순서 확인

 

 

- 불러오고 싶은 순서에 있는 input Import Point Attribute 연결한다.

- 그 정보의 속성을 설정: [Signature: Float]

- Bind Export 확인

 

Attirbute가 된 VIBE

 

 

- Attribute Null(CLOCK)노드를 연결한다.

- 반동을 주기 위해 Attirbute VOP 파라미터 MULT 만든다.

 

반동을 주는 MULT 파라미터 만들기

 

 

- 최종값을 가진 CLOCK노드로 Transform Rotate 경로를 수정한다.

 

FBX 모델링에 각각 VEX VOP 만든 시스템을 연결하면 완성..!?

 

 

완성..을 하고 싶었으나 VOP에서 오류가 발생했다.

일기를 쓰면서도 계속 확인해보았으나 결국 찾지 못하였다.

그리고 파일을 날렸.......(저장과 백업을 생활화 합시다...😂)

 

주말에 다시 한 번 Attritbue VOP로 시스템 만들기를 복습해야겠다.