FX/Houdini_Joy of VEX

Joy of Vex - Day 1: basic assignment, component assignment, arithmetic manipulation

Gamestonk118 2022. 6. 20. 20:02

중요했던 부분:

- Arttribute Wrangle (Run Over): 모든 point/primitive/etc 에 대하여 ~

eg) run over가 points 일때

@Cd = @P; // 모든 포인트에 대하여 @Cd (Colour) 값은 @P (Point Location)과 같다. 

@Cd = @N; //모든 포인트에 대하여 @Cd (Colour)값은 @N (Normal) 값과 같다. 

>> @N - 노멀값: 포인트가 향하는 방향을 x/y/z 값으로 준것.

 

- @P.x or @Cd.x or @N.y etc - Attribute 값들 중에 x/y/z중 한가지만 불러 올 수 있다. 

 

- @Cd에서 rgb 값이 모두 동일하다면 무채색을 띈다 - 검은색 ~ 흰색 (RGB 값이 동일했을때 vector값을 하나만 써도 vex는 작동된다)

eg) @Cd = 0.1; // r = 0.1, g = 0.1, b = 0.1

 

- Resample (Length): Add 점들 사이에 있는 공간을 점들로 쪼갬. Length는 그 쪼갠 포인트들의 간격을 나타냄.

 

- Attribute에 숫자를 집어넣어 수학적인 식을 만들면 그에 맞는 모양을 형성함.

eg) @Cd = (@P.x - 6)*0.3; // @P.x값들에서 모두 6을 빼서 흑백을 나누는 기준선을 이동시키고 0.3을 곱하여 밝기를 더욱 높게 만든다. 

 

- Built-In Attributes such as @ptnum and @numpt

@ptnum은 지오메트리를 구성하는 각각의 포인트들의 넘버를 나타낸다.

@numpt는 지오메트리를 구성하는 총 포인트들의 갯수를 나타낸다.

 

- float이나 integer 같은 값들을 계산할때 결과 값은 항상 먼저 적힌 cast type으로 나타난다.

eg) float * int = float

eg ) int/int = int

 

- ch(): Channel Function

channe은 코드에 적힌 constant를 parameter으로 나타네어 유저가 슬라이더로 조정할수 있게 만드는 function.

eg) @Cd = float (@ptnum)/chf ("SCALE"); // chf()을 이용하여 parameter으로써 스케일 값을 조정 가능.

 

- sin(): Sine Function & cos(): Cosine Function

파동을 형성함. 

eg) @Cd = sin (float (@ptnum)/ch("SCALE"))); // sine function으로 인해 본래 그라데이션을 형성했던 쉐입들이 파장을 이루며 @Cd값들이 양수와 음수를 넘나들어 일정한 패턴을 생성함.

*파장이 넓어지길 바란다면 sin function안에 있는 값을 나누고 좁아지길 원한다면 1보다 큰값을 곱한다.

 

- Variables (변수)

Attribute와 마찬가지로 작동되지만 지금 이용중인 attribute wrangle node안에서만 그 값이 존재함.

eg) float foo = float (@P.x)/chf ("SCALE"); // @P.x는 @P.x에대한 float 값. Scale은 간격을 조정하는 parameter

@Cd = sin (foo); // foo를 sine function에 집어넣어 파동의 형태로 바꿈. @Cd에 따라 색이 일정한 패턴으로 반복되는 쉐입을 형성함.

 

Exercises:

1. Sin waves on z? on y?

Grid에서 sine function이 내포하는 값을 @P.z 값으로 바꾸면 위에서 보았을때 horizontal 방향으로 바뀜. 

Sphere에서 sine function이 내포하는 값을 @P.y값으로 바꾸면 옆에서 보았을때 수직적으로 패턴을 형성함.

 

@P.x가 들어간 sine 형태의 쉐입 (default)
@P.z가 들어간 sine 형태의 쉐입
@P.y가 들어간 sine 형태의 쉐입

2.cos waves? (wont look hugely different, cos is just sin shifted by 1/4 of a wave)

모든 geometry에 sine function을 cos function으로 대체하면 파동의 1/4만큼의 방향으로 움직임.

 

cos()를 사용한 웨이브 - 맨 처음 사진에서 웨이브가 살짝 움직인것이 관찰됨

 

3. waves bases on @N components?

pighead나 sphere와같은 입체적인 geometry와 함께 @N (Normal)에 sine function이나 cosine function을 적용하면 각각의 포인트가 향하는 방향의 위치에 따라 파동을 형성한다. 

 

sin()에 @N (Normal)을 적용하였을때

4. tight sine waves on red, medium cos on blue, a wide ramp on green, each driven by a different thing (position vs normal vs point number)

 

Multiple waves covering the geometry_Sphere
Multiple waves covering the geometry_Pighead

Normal을 cos에 적용시키기 위해 입체적인 3D 형태의 geometry를 사용하였다.

- VEX I have written:

float red = @P*ch ("SCALE_X"); // 좁은 파장의 웨이브를 형성하기 위해 1보다 큰 값의 스케일을 곱한다

float green = float (@ptnum)/ch ("SCALE_Y"); // 넓은 파장의 웨이브를 형성하기 위해 스케일을 나눈다

float blue = @N*ch ("SCALE_Z"); // 적당한 파장을 가진 웨이브를 형성

 

// each position, normal, ptnum에 따라 지정된 변수들을 알맞은 @Cd attribute에 store한다. 

@Cd.r = sin (red);

@Cd.g = sin (green);

@Cd.b = cos (blue);

 

이해가 안되었던 부분:

- @P나 @ptnum이 아닌 @N (Normal)이 웨이브를 만드는 sin()이나 cos()같은 function들에게 적용되었을때 어떠한 과정을 통해 특정 쉐입을 형성하는지 궁금하다. 

- Geometry Spreadsheet을 보고 각각의 수치들을 한눈에 파악하기가 어렵다. 

 

공부하면서 들었던 생각:

생각보다 쓰면서 글이 길어졌다. Day 1 강의는 생각보다 엄청 길었다. 생각보다 할 수 있다는 생각과 와 이거 어떻게 하냐라는 생각이 동시에 든다. Normal Attribute가 강의에서 자세히 다루어지지 않아 조금 햇갈리지만 아마 다음 강의때 선생님께서 더욱 깊게 설명하시고 내가 완전히 이해하게 된다면 나중에 3번째와 4번째 Exercises를 더욱 자신있게 풀 수 있을거라고 생각한다.