벡터의 기본 연산


제어하기 편하도록 벡터를 정규화 시켜서 사용합니다.

후디니에서는 이렇게 식으로 사용해서 활용합니다.
벡터의 덧셈/뺄셈

*Position – Vecter(x,y,z) = 방향
= v@v = v@P – {0,0,0} ;
=> v@v = v@P
=> 벡터 어트리뷰트 속력 = 벡터 어트리뷰트 포지션
=> v@P 가 {15,5,9} (점의 위치가 여기에있으면)
=> v@v -> 벨로시티가 {15,5,9} 라는 뜻
그럼 점에서 보이는 벨로시티(v@v)의 크기는 어떻게 보일까?

정 가운데는 0일 것이고,
점점 바깥으로 갈수록 속력이 강해지는 것처럼 보입니다
= v@v = v@P * 5
이렇게 포지션에 상수를 곱해줘서
보기 편하게 극단적으로 표현해줍니다

v@v = normalize(v@P) * 5;
v@P 값을 0~1로 정규화시키면
속력값은 똑같고, 방향만 다르게 표현될 것입니다.
벡터의 곱셈

벡터의 곱셉에는 2가지 방법이 있는데,
우선 Cross부터
cross (A,B)

cross 는 A 와 B를 곱한값 만큼 이동
(넓이 값 만큼 수직으로 이동시키면 그게 곱한 값)

cross 함수에 2개의 벡터를 넣으면,
그 두개의 벡터에 대해 수직인 방향인 벡터가 나온다고 생각하면 좋습니다.

곱해줄 벡터 : vector b = {0,1,0};
내가 만든 벡터 : v@P
v@P += cross(v@P, b);
(내가 만든 벡터와 곱해줄 벡터를, 내가 만ㄷ든 벡터에 더한다는 뜻)
현재 찍어놓은 점은 (1,0,0) 이고
여기에 벡터의 곱셈인 cross함수에
(1,0,0)와 벡터b인 (0,1,0)을 넣으면
(0.0.1)만큼 이동하게 됩니다.

Solver

solver 노드는 이전 프레임에서 어떤 동작을 수행하는 노드입니다.
이렇게 Solver 노드 안에 Tranform 을 넣으면 매 프레임마다 반복이 됩니다
(1프레임마다 X 1만큼 이동, Y축으로 30도씩 회전 .. 등등)

이걸 Solver 에 넣으면 어떻게 될까?


이렇게 축을 기준으로 정점들이 회전하는 것 처럼 보입니다.
하지만 값을 좀 크게 주면 오른쪽처럼 점점 밖으로 나가는 형태가 됩니다.
(나이아가라에 Vortex Force 같은 느낌?)
왜 밖으로 나가는 형태가 될까?

곱해서 더하고, 곱해서 더하고 …
반복하게 되면 프레임이 지날수록
값이 계속해서 커지기 때문입니다.
이를 해결하기 위해서 Normalize 를 사용합니다.

vector b = {0,1,0};
v@P += normalize(cross(v@P, b)) /20;
Cross (a.b) 에 Normalize 를 씌우면
Normailze(Cross(a.b)) 가 되는데
그렇게 되면 방향만 남기고 값은 1이 됩니다.
결과는 위처럼 나타납니다.
Dot Product


코사인의 두 벡터 사이의 각도가 들어갑니다
-> 두 벡터를 알면 각도를 알 수 있다.

Dot product로 각도를 두 벡터 사이의 각도를 구할 수 있다.

normalize를 하면 곱해도 1이니 생략합니다.