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

최초 입문 6강 part 1 (2023.1.16)

랭글러 오후 2023. 1. 17. 00:23

 

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

VEX

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

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

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

램프 뼈대 만들기

램프 면 작업하기

FX와 IK에 대하여

 

과제:

램프 만들기

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

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

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

 

 

6part 0 

1.인터페이스상 분류

Scene View + Node + Parameter

Animation Editor

Dynamics & Simulation

 

인터페이스 분류

 

 

VEX Builder

옆으로 쌓이는 노드이며 속성이 다르다.

Attribute Vop & Wrangle을 반드시 알아야한다.

 

01
VEX Builder 노드

 

 

익숙해질 때까지 절대 쉬워지지 않는다.

 

2.TWA와 쌓아온 Build-up

노드와 파라미터를 이용한 제작

CONTROL 노드로 각종 파라미터들을 한번에 통제하기

 = 사용자화

질문1. 다른 사람이 쓰기 편한가?

질문2. 재사용이 (예외없이)가능한가?

 

(사용자화) 시스템을 만드는 것 ↔ VEX를 통해 정보를 다루는 것

 

기능들의 조합 & 연산을 통해 사용자화 학습

 

 

3.VEX 언어가 뭘까?

필요한 부분(기능)만을 가지고 직접 메커니즘을 만드는 것

 

4.VEX가 뭐고 어떻게 작용해 왔는가?

VEX언어를 이용한 코딩

 

5.VEX를 이용해 뭘 하려는 걸까?

사용자가 이용하기에 따라 기존 노드(SOP)에서 구하지 못하는 정보를 다뤄낼 수 있다 일종의 개발자 모드

 

VEX 대한 이해가 필요하다

 

노드보다 작은 단위의 단일 명령인 function 함수를 이용한다.

 

VEX의 최종목표: 후디니가 노드로 준비해주지 않은 연산 작용과 과정을 사용자 스스로 만들고, 이용하기.

 

6.Attribute VOP vs Attribute Wrangle 특징과 차이점

역할과 수행 능력에서 같다. 

Attribute VOP Attribute Wrangle
Code & Function 노드화 & 시각화(function에 필요한 내용이 parameter로 존재함) 코딩 방식 그 자체로 VEX의 문법을 알아야 함

 

7. Attribute VOP vs Attribute Wrangle 뭐가 더 편한가?

코드를 다 알고 있다면, 노드를 연결하는 것이 번거로울 수 있다.

 

8. Node(SOP) vs Attribute VOP, Attribute Wrangle; VEX

역할이 다르다. 무엇이 우월하다고 할 수 없다.

 

작업면에서는 효율이 좋은게 더 중요하고, 후디니를 공부하는 면에서는 Node 작업 외에 VEX는 필수

 

 

6part 1

Attribute VOP & Attribute Wrangle (VEX)

1.  VEX 언어기본지식; All about

2.   Attribute Wrangle (VEX): Step by step

3.   Attribute VOP: Step by step

4.   VOP & Wrangle 비교

 

동시에 고려되어야할 내용이다.

VEX 정보의 형태

②내장 기능& 사용자 정의 기능

③DATA-TYPE

④Dot Operators

⑤연산작용

⑥연산자 Operators

⑦ TYPE CASTING

⑧Variables & Attributes

⑨Global Variables 그리고 이미 할당이 되어있는 몇몇 Attributes

 

숫자, 알파벳, 특수문자로 이루어진 VEX 정보의 형태

 

 

①VEX 정보의 형태

내장 기능& 사용자 정의 기능

③DATA-TYPE

④Dot Operators

⑤연산작용

⑥연산자 Operators

⑦ TYPE CASTING

⑧Variables & Attributes

⑨Global Variables 그리고 이미 할당이 되어있는 몇몇 Attributes

 

Built-in Functions

 

 

- 또는 기능을 직접 정의한다.

int test ( int a, b ; string c ) {

        if ( a > b ) {

        print f(c);

        }

}

 

①VEX 정보의 형태

②내장 기능& 사용자 정의 기능

DATA-TYPE

④Dot Operators

⑤연산작용

⑥연산자 Operators

⑦ TYPE CASTING

⑧Variables & Attributes

⑨Global Variables 그리고 이미 할당이 되어있는 몇몇 Attributes

 

int: integer;정수

 

integer 예시

 

 

float: 실수

 

float 예시

 

 

vector vector2 vector4

: 크기와 방향을 갖는 물리량

 

- 기하학적 방식: 시점에서 종점까지의 크기

- 대수적 방식: 원점을 기준으로 종점까지의 위치 차이로 설명

 

01
후디니에서 vector란 세가지 정보를 나타내는 동적 배열

 

 

array: 배열

- 단일 식별자를 통해 Data type의 여러 변수에 접근할 수 있게 하는 집계 데이터 유형 (같은 데이터 타입의 변수를 일렬로 늘어놓은 집계 데이터 유형)

- 반복문 for(  )와 결합하여 연속적이고 반복적인 정보 처리

 

{1, 2, 3, 4, 5, 6, 7}

{vector2, vector2}

{vector, vector, vector}

{vector4, vector4, vector4, vector4}

 

matrix matrix2 matrix3

: 행렬

- 행row column

 

행렬 값을 작성하는 방법

 

 

- Array, Matrix, Vector의 관계를 이해해야 한다.

 

Array, Matrix, Vector 값의 표현

 

 

string: 텍스트 속성으로 정보처리가 가능하다

- "Dog", "Cat", "TWA101", "Hello World"

- 숫자도 입력값이 아닌 텍스트 속성

 

bsdf, struct: 추후 다룰 속성

 

①VEX 정보의 형태

②내장 기능& 사용자 정의 기능

③DATA-TYPE

④Dot Operators

⑤연산작용

⑥연산자 Operators

⑦ TYPE CASTING

⑧Variables & Attributes

⑨Global Variables 그리고 이미 할당이 되어있는 몇몇 Attributes

 

- 정보 택하기

- integer와 float은 정보 그 자체로서 선택해야 할 정보가 없다.

 

integer일 때 vector 값, float일 때 vector 값

 

array의 vector값

 

matrix의 vector 값

 

 

①VEX 정보의 형태

②내장 기능& 사용자 정의 기능

③DATA-TYPE

④Dot Operators

⑤연산작용

⑥연산자 Operators

⑦ TYPE CASTING

⑧Variables & Attributes

⑨Global Variables 그리고 이미 할당이 되어있는 몇몇 Attributes

 

- 계산을 위한 안전한 아이디어: 같은 데이터 값끼리 연산하는 것으로 시작해보자.

 

int * int

float * float

vector * vector

 

- 서로 속성의 정보끼리 계산을 해야 하는 경우 연산 순서에 따라 결과 값이 달라진다.

 

int * float = int

float * int = float

vector * float = vector

float * vector = float

vector * vector4 = vector

 

대원칙: 먼저 작성된 속성을 따라가는 결과 값

 

01
속성이 정의되지 않았을 때는 예외1, 2, 3

 

속성이 정의되지 않았을 때의 예외4

- 특별한 설정을 하지 않은 경우 frame 값을 integer 속성이다.

- 0 프레임, 3프레임, 7프레임에 있는 키프레임에 x1.6과 x1.7을 했을 때의 결과 값이 다르다.

 

012
1.6배속, 1.7배속의 차이

 

 

속성이 정의되지 않았을 때의 예외5

- 0 프레임, 3프레임, 7프레임에 있는 키프레임에 x0.5(2배 빠르게)한다음 x2(2배 느리게)을 했을 때, 연산으로 보자면 원래 값으로 돌아갈 것 같지만 integer의 속성 때문에 원래 값과 달라진다.

 

01
달라지는 결과 값

 

- 서로 다른 속성의 정보들을 계산할때 마다 조금씩 다른는 규칙들을 알아가야 한다.

 

 

①VEX 정보의 형태

②내장 기능& 사용자 정의 기능

③DATA-TYPE

④Dot Operators

⑤연산작용

⑥연산자 Operators

⑦ TYPE CASTING

⑧Variables & Attributes

⑨Global Variables 그리고 이미 할당이 되어있는 몇몇 Attributes

 

연산 Operators

 

 

➡ 괄호 안의 조건을 판별하고 그 안의 내용대로 결과 값을 도출하는 연산에 도달할 수 있다.

function(  )의 기능을 직접 정의하고 후디니가 제공하지 않는 함수를 만들어서 사용할 수 있다.

 

 

①VEX 정보의 형태

②내장 기능& 사용자 정의 기능

③DATA-TYPE

④Dot Operators

⑤연산작용

⑥연산자 Operators

⑦ TYPE CASTING

⑧Variables & Attributes

⑨Global Variables 그리고 이미 할당이 되어있는 몇몇 Attributes

 

- 타입 캐스팅을 번역하면 형 변환

- 컴퓨터 언어로 규칙에 따라 순서대로 입력해야 한다.

- 정보의 타입 정의할 때, 후디니 문법으로 정의된 function들은 type casting이 필요하지 않다.

 

예를 들면

 

 

①VEX 정보의 형태

②내장 기능& 사용자 정의 기능

③DATA-TYPE

④Dot Operators

⑤연산작용

⑥연산자 Operators

⑦ TYPE CASTING

⑧Variables & Attributes

⑨Global Variables 그리고 이미 할당이 되어있는 몇몇 Attributes

 

변수와 attribute 작성 방법

- 변수를 선언하고, 변수의 값과 관계 선언, 위치 속성 @P에 입력

 

변수 선언 ➡ 변수 값, 관계 선언 ➡ @P 값과 단순 계산

 

변수와 attribute를 type casting 하는 방법

 

 

- 변수는 노드 내에서만 임시로 사용되는 정보

- attribute는 계산 과정과 결과에 남아 다음 노드에서 제공되는 정보

 

01
변수와 attribute의 영향 범위

 

 

①VEX 정보의 형태

②내장 기능& 사용자 정의 기능

③DATA-TYPE

④Dot Operators

⑤연산작용

⑥연산자 Operators

⑦ TYPE CASTING

⑧Variables & Attributes

⑨Global Variables 그리고 이미 할당이 되어있는 몇몇 Attributes

 

- 파라미터와 VEX에서 불러오는 방식이 다르다.

 

$F ➡ @Frame

$T ➡ @ Time

 

- 표기와 용도가 정해져 있는 attribute

 

@P

@Cd

@N

@V

@ptnum

@numpt

 

 

in Houdini

인터페이스 정리

Geometry Spreadsheet를 확인하기 위한 인터페이스로 수정

 

[Geometry] – [Attribute Wrangle]

[Geometry] – [Attribute VOP]

 

Attribute Wrangle

코드를 직접 입력할 수 있는 VEXpression 파라미터

 

VEXpression

 

 

어떤 속성에다 기능을 수행할 것인지 결정하는 파라미터 [Run Over]

 

Run Over의 옵션을 반드시 확인

 

 

Detail (only once): 특정 정보에 대해 한 번만 정보 처리 과정을 거쳐주세요.

 

Points 옵션과 Detail (only once) 옵션의 차이

 

 

Point: input에서 받은 모든 점(point)에 대해 사용자가 말한 정보 처리 과정을 거쳐주세요.

Primitives: input에서 받은 모든 면(primitives)에 대해 사용자가 말한 정보 처리 과정을 거쳐주세요.

Vertices: input에서 받은 모든 Vertices에 대해 사용자가 말한 정보 처리 과정을 거쳐주세요.

Numbers: input에서 받은 모든 Numbers에 대해 사용자가 말한 정보 처리 과정을 거쳐주세요.

 

  

VEX 문법(언어): 사용자가 후디니와 대화하는 방법

반드시 입력해야 하는 코드: 문장 종결 세미콜론(;)

1. 선언

-  존재 선언: 타입 캐스팅과 함께 어떠한 변수나 속성을 사용할 예정이라고 선언, 또는 존재한다고 선언 이후 타입 캐스팅을 계속하지 않더라도 존재 인지

-  값 선언: 존재 선언과 병행되어 선언된 존재의 값을 알려준다. 그 값은 타입 캐스팅에서 정의된 값이어야 한다. 값 입력 or 연결

 

2. 계산 요청과 명령

-  단순 계산 or 단순 명령 계산 or 함수 기능 수행

-  후디니가 스스로 판단하고 계산을 수행하는 조건문, 반복문 등 계산 or 수행

 

 

Attribute: float

Run Over: Points인 문장일 때, 

f@AA; (존재의 선언: float attribute AA가 존재한다.)

@AA = 2.7; (값 선언: float attribute AA의 값은 2.7이다)

 

f@BB; (존재의 선언: float attribute BB가 존재한다.)

@BB = 3.9; (값 선언: float attribute BB의 값은 3.9이다)

 

@P.y = @BB; (이미 P라는 attribute를 알고 있으므로 존재 선언을 하지 않아도 되고 불러내기만 하면 된다. 그리고 값을 선언.)

 

정보 확인

 

 

- 아무런 input이 없으므로 input이 될 정보를 연결한다.

- Addpoint를 생성하고 switch 노드로 box와 연결한다. 

 

01
Add의 @AA 값

 

Box의 @AA 값

 

01234
@P.y = @BB

 

 

원래 Box가 가지고 있던 position y값의 방향성을 무시한 채 모든 point가 값을 선언한 position y값으로 치환되었다.

 

 

변수: float

float CC; (float 변수 CC가 존재한다.)

CC = 2.7; (float 변수 CC의 값은 2.7이다.)

 

float DD; (float 변수 DD가 존재한다.)

DD = 3.9; (float 변수 DD의 값은 3.9이다.)

 

@P.y = DD; (position y값은 DD이다.)

 

01
변수는 결과 값으로 나오지 않았다

 

 

Attribute & 변수: float

float KK; (변수 KK 존재 선언)

f@LL; (attribute LL 존재 선언)

 

KK = 7.2; (값 선언)

@LL = 2.9; (값 선언)

 

@P.x = @LL + KK; (값 선언 + 단순 계산)

 

 

0123
@P.x의 값만큼 이동하였다

 

 

Attribute & 변수: float의 존재 선언과 값 선언을 동시에

f@TWA = 0.7; (존재 선언과 동시에 값 선언)

float TWB = 0.4; (존재 선언과 동시에 값 선언)

f@TWC = (@TWA*2) + (TWB*0.7); (존재 선언과 동시에 단순 계산)

 

01
존재 선언과 값 선언을 동시에

 

 

Attribute & 변수: vectorfunction의 단순 기능

vector home; (존재 선언)

vector away; (존재 선언)

home = {0, 2, 0}; (값 선언)

away = set(3, 1, 2); (값 선언 + 단순 기능 수행)

{  }vector 값을 만들기보다 set(  ) functions으로 vector 값 만드는 것을 권장

 

v@Dir; (존재 선언)

@Dir = away – home; (값 선언 + 단순 계산)

 

01
존재 선언을 먼저 다 하고난 다음 값 선언하기(개인의 취향)

 

 

Attribute & 변수: vectorfunction의 단순 기능

존재 선언 + 값 선언 + 단순 기능 수행

v@home = set(0.5, 0.9, -0.3);

v@away = set(-4, -2, 6.2);

 

v@Dir = (@away - @home) * 0.5;

f@power = length(@Dir);

 

length(  )vector 값을 받아서 float 값을 반환한다.

, vector @home, @away로 만든 @Dir의 길이(length)@power에 나타낸다.

 

01234
결과 값을 Geometry Spreadsheet에서 확인

 

 

값 선언 과정에서 attribute가 다시 사용된다 (왼쪽 값을 오른쪽 값으로 업데이트)

값 선언 + 단순 계산

 

@P.x = @P.x + 1;

Transform 노드의 Translate 값과 동일한 속성

 

01
x축 방향으로 1만큼 이동한 point

 

 

@P.x = @P.x + @Frame;

시간이 변함에 따라 바뀌는 @Frame으로 인해 x축방향으로 이동하는 것처럼 보일 것

키프레임 없이 애니메이션이 가능

 

존재 선언 + 값 선언 + 단순 계산

v@Dir = set(@Frame, (@Frame / 2), 0);

@P = @P + @Dir;

 

01
프레임이 증가하면서 애니메이션이 된다

 

 

이동거리 = 시간 x 속도 (시간당 이동 방향)

vector VEL = set(1, 0.5, 0.3); (변수 선언, 값 선언, 단순 기능)

 

VEL값이 너무 클 수도 있기 때문에 나눠주기

float Divide = 20; (변수 선언, 값 선언)

 

float TT = @Frame; (변수 선언, 값 선언, 단순계산)

@P = @P + (VEL / Divide) * TT; (값 선언, 단순 계산)

 

속도 제어가 가능한 움직임

 

 

만약, 속도를 제어할 수 있는 Divide값에 수치가 아닌 채널값을 넣어준다면 파라미터가 생성된다.

 

012
CONTROL로 제어가 가능해진다