ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 최초 입문 6강 part 1 (2023.1.16)
    STUDY: TWA후디니 랭글러 2기 Beginner 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로 제어가 가능해진다

     

     

    댓글

Copyright ⓒ 오후