본문 바로가기

Joy of Vex

Joy of Vex [Day17-3]

quaternion의 angle은 radian으로 정보를 받고 있음

- 3.14의 값이 써진다면 각도는 180도

 

실제 각도를 써서 보는 게 더 직관적이므로

radians function을 활용

 

180 degree = 3.1415... radian = 𝝅 = $PI

 

float angle = radians(chf("angle"));
vector axis = chv("axis");

@orient = quaternion(angle, axis);

이렇게 하고 angle 값에 180을 입력하면 180도 회전하게 만들 수 있음

 

axis에 angle을 곱해주는 게 아니라 rand 값과 noise의 값을 각각 곱해줘서 결과를 확인해보면

rand는 0에서 1 사이의 무작위한 값을 도출,  프레임마다 다른 각도, 각각의 점들이 모두 무작위의 결과를 가짐

noise는 0에서 1 사이 값이 패턴을 가짐, 시간에 지남에 따라  꿀렁꿀렁 회전하는 느낌

 

0도, 90도, 180도, 270도의 값을 각각 얻어내기 위해서

1) noise에 4를 곱해서 0에서 4 사이의 값이 나오도록 만들어줌 

2) floor() 나 trunc() 을 써줘서 

값들이 정수로 나오도록 만들어주기

0,1,2,3으로 값이 도출됨

프레임마다 똑딱똑딱 움직이게 됨

3) *$PI/2 (90도를 곱해줌) 를 해서 값이 0, 90, 180, 270이 되도록  

 

4를 곱하기 전에

@A = fit(@A,0.4,0.6,0,1); 를 해주면 적극적으로 노이즈가 움직이는 것처럼 보임

0.5를 기준으로 그 주변이 가장 많이 움직이게 되기 때문

@A = chramp("TWA",@A); 로 그래프를 움직여서 원하는 느낌을 찾아줄 수도 있음

 

@P.y의 값도 변경해서 키보드 타이핑하는 느낌도 만들어줄 수 있음

 

4. 실제 각도값을 오리엔트의 값으로 변환하는 법

여기서 rot 옆에 쓰인 0의 의미는

x,y,z 순서로 각도를 회전시키겠다는 뜻

이 순서가 중요해지는 날이 오게 됨... 미래에...

 

5. 오리엔트값을 믹스(블랜드)해주는 법

lerp

1) float을 쓸 때

lerp(0,10,0.1) = 1

0에서 10까지에서 0.1만큼의 비율 1

2) vector를 쓸 때

vector A = {0,0,0}, vector B = {2,4,6}

Vector C = lerp(A,B,0.5) = {1,2,3}

 

lerp의 마지막 input은 0에서 1사이의 amount 값을 써주면 됨

 

slerp(vector4, vector4, float)

blend의 값이 0이면 a, 1이면 b의 값이 나타남

 

blend에 @Time%1을 넣어 반복되서 돌아가게,

채널램프 값으로 적용시킬 수도 있음

 

blend의 값이 0이면 base의 값이 나오고, 1이면 target의 값이 나옴

target은 위에서 만들었던 프레임마다 똑딱거리며 돌아가는 모션\

이 둘을 blend 해서 스무스하게 돌아가게 만들어줌

그래프를 바꾸면서 느낌 보기

attribute wrangle 아래에 transform을 달아서 회전시키면 전체가 통으로 회전되는데,

attribute에 ^orient를 써주면 우측의 결과가 된다.

attribute wrangle 위에 transform을 달아서 회전시키면 그냥 오른쪽의 결과가 된다.

 

6. 오리엔트 값끼리의 곱, 효과의 중첩

qmultiply

slerp(A,B,0.2) 면 Ax0.2 + Bx0.8 이라면

qmultiply(A,B)는 A+B

 

angle 값이 0이면 위에서 정의한 @orient의 결과가 나타나고, (돼지들이 노말방향을 향해 바라보고 있는 모습)

angle 값이 높아질수록 돼지들은 아래를 바라보는 느낌이 됨

 

headshake 변수를 추가

0,1,0  축을 기준으로 시간에 따라 20도씩 회전한다는 의미가 됨. 3을 곱해줘서 더 빨리 도리도리하도록

sin(@Time) 값은 -1에서 1 사이의 값을 반환하여 20도가 -20에서 20 이 되도록

wobble 변수를 추가

돼지들마다 다르게 noise 먹여줌, z축을 기준으로 회전되어 갸우뚱 됨

 

7. 오리엔트 값을 매트릭스로, 매트릭스 값을 오리엔트로

qconvert

@orient를 다시 matrix로

@orient와 matrix는 상호관계에 있음

8. 오리엔트에서 얻어낸 매트릭스값에서 @n과 @up만 따로 뽑아내는 법

의 결과는 (g,h,i)이다. @N

{0,1,0} 을 곱했을 때는 (d,e,f) @up

 

A[ ] = [{a,b,c}, {d,e,f},{g,h,i}]

A[0] = {a,b,c}

 

 matrix3 m = qconvert(@orient);
 @N = {0,0,1}*m;
 @up = {0,1,0}*m;
 matrix3 m = qconvert(p@orient);
 vector axes[] = set(m);
 @N = normalize(axes[2]); // z axis
 @up = normalize(axes[1]); // y axis

 


하나 하나씩 설명을 들었을 때는 이해가 되는데 뭔가 전체적으로 파악하기가 어려운 느낌이다.😥

@N 과 @up 설명강의부터 다시 들어봐야겠다..!

'Joy of Vex' 카테고리의 다른 글

Joy of Vex [Day18]  (2) 2023.03.04
Joy of Vex [Day17-1,2]  (0) 2023.03.01
Joy of Vex [Day16]  (0) 2023.02.28
Joy of Vex [Day15]  (0) 2023.02.27
Joy of Vex [Day14]  (0) 2023.02.23