Joy of Vex

Joy of Vex [Day09]

후디니하는 돌 2023. 2. 13. 20:50

input과 run over 에 대한 이해

점 두개를 생성하고 위와 같은 코드를 입력했을때,

첫번째 input / run over : points 일 때 addpoint할 때마다 점이 두개(점 하나당 점 한개)씩 더 생겨서 총 점의 개수는 6개

첫번째 input / run over : detail 일 때는 점 두개가 더 생겨나서 총 점의 개수는 4개이다.

첫번째 input으로 넣었을 때는 선의 정보도 살아있다.

두번째 input / run over : points 는 현재 점이 없기 때문에? 점이 생성이 안된다. 총 점의 개수 0개

두번째 input / run over : detail 이면 점이 두 개가 생성된다. 총 점의 개수 2개 

 

normalize

원점으로부터의 위치벡터를 동일한 방향으로의 크기 1짜리 벡터로 변환하는 과정

target에서 a 만큼 떨어진 거리를 구하고 싶을 때, normalize 함수를 활용하면 쉽게 구할 수 있다.

지금은 1.7을 곱해줬는데 1.7의 자리에 chf("newsecond")를 넣어주면 점의 위치를 파라미터로 편하게 조절해줄 수 있음

 

carve로도 선 위의 점 두개를 구할 수 있는데, 비율로 구하기 때문에 정확한 위치값을 구하기 어려움

선의 길이를 넘어가는 점의 위치도 표현해줄 수 없음

 

내적 Dot & 외적 Cross

normalize (vector)  ➔ vector

dot (vector, vector) ➔ float

cross (vector, vector) ➔ vector

cross(A,B)

A,B 두 벡터가 공유하고 있는 평면에 수직이되는 방향으로, A,B 길이만큼 만들어진 평행사변형의 넓이를 크기로 가지는 벡터

방향은 면의 노말 방향이 되는 것!

 

dot(a,b)

 

cross(a,b)는 순서에 따라 방향이 달라지는데 /cross(b,a)는 반대방향이 됨/

dot(a,b)는 순서 상관없이 동일한 값을 나타내줌

 

노말라이즈된 두 벡터의 내적은 cosθ 값

>닷프로덕트를 활용해서 각도를 구해줄 수 있다!

 

cross product로 한 지점에서 수직이 되는 벡터값을 구해주고, 

그 지점에서 빛을 향하는 벡터와 dot product 해주면 빛이 어느정도 세기로 맺힐지 계산을 할 수 있다.

빛과 cross product의 결과의  각도값을 구해서(dot product로) 빛이 얼마나 영향을 줄지 밝기를 구할 수 있음

이 과정에서 벡터는 모두 normalize로 계산되어야 함

 

attribute delete로 uv를 지워줌 (vertex에 uv를 입력하는데 왜 vertex인지는 잘 모르겠다..)

빛이 위에서 아래로 비추는 것 처럼 색이 변하게 됨

면이 위쪽을 바라보면 값이 1에 가깝게 되어서 흰색, 아래쪽을 바라보면 값이 -1에 가깝게되어서 검은색

 

점과 원을 만들어주고 원에 attribute wrangle로 원에서 수직으로 바깥으로 향하는 노말 값을 만들어줌

원 위의 모든 점에서 원점 base를 뺀 벡터값을 구해주고, 그 벡터값을 노말라이즈해줌

원의 center 값을 카피해서 base파라미터에 붙여넣어서 원점 (0,0,0)이 아니라도 같은 결과가 나오도록 해주기

어트리븃을 하나 더 만들어주고 add를 input2로 넣어 point함수로 불러오기

원에서 태양(add로 만들어준 점)으로 바라보는 벡터값을 노말라이즈해주고,

dot product로 -1에서 1의 값을 얻어냄 

dot(Ndir,@N) 여기서 @N은 첫번째 어트리븃에서 새로 구해진 노말값이 불러와진다.

이를 컬러로 표현하면 태양빛이 닿는 부분만 밝아진 것 처럼 보이게 만들 수 있음

태양에서 가장 가까운 원 위의 점의 dot 값은 1, 

태양에서 원까지 선을 그었을 때 가장 멀리 닿는 점의 값은 0

cos 0º = 1, cos 90º = 0 이라서 위와 같은 결과가 나오는 것

 

dot 실습

howmuch에 add 파라미터를 더해주고 mult 파라미터를 곱해줌

add의 값을 조절하면 빛을 받는 부분의 영역이 달라지고, mult의 값을 조절하면 빛의 세기를 조절할 수 있음

 

태양 역할을 하는 점이 2개일 때

@Cd = set(av,av/2+bv/2,bv); 를 해주어 a와 가까운 점은 빨간색, b에 가까운 점은 파란색으로 나타내줌

set에 어떤 값을 넣어줘야 원하는대로 색이 보이는지에 대한 부분은 좀 헷갈린다..

 

토미에도 위의 방법을 똑같이 적용하면 점의 움직임에 따라서 빛을 받는 것처럼 보이는 토미를 만들어줄 수 있다.

광원 점 : pos

강의에서는 여기서 Ndir 과정은 생략한다. 노말라이즈를 하면 Cd의 값은 좀 달라지는데 결과적으로는 비슷하다.

 

cgwiki에서는 광원 점으로부터  토미의 모든 점에 대해서 dir 값으로 dot 값을 구해주는 게 아니라

원점으로부터 광원 점의 벡터값으로 dot 값을 구해준다.

cgwiki의 방법으로는 굉장히 멀리 있는 태양빛이 한 방향으로 내려오는 느낌

twa 강의의 방법은 가까이에 있는 불빛이 사방으로 뻗어나가는 느낌

 

cross 실습

0에서 1방향 벡터 A, 3에서 2방향 벡터 B

cross product는 주로 원하는 방향으로 노말방향을 변경해줄 때 사용

normal 노드에서 add normal to 를 points로 바꿔줌 (기본은 vertex에 노말값이 생성되어있음)

*@N과 temp의 순서가 바뀌면 노말 방향이 반대로 됨

위에서 했던 거에서 한번더 cross를 해준 셈이 됨

계속 한번씩 더 cross를 할때마다 90도 씩 돌아간다. 

 

노말이 바뀜에 따라 빛이 맺히는 느낌이 바뀜

노말이 향하는 방향이 빛이 맺히는 방향

 

벡터의 연산

 


오늘 배운 내용으로 많은 것을 만들어볼 수 있을 것 같은데 활용을 하려면 많이 써봐야할 것 같다. 어려워..

복습하면서 이것저것 만져봐야지..