디스플레이에 출력하는 방식은 2가지가 존재함
벡터, 래스터
벡터는 수학식을 이용해서 선으로 출력을 하는거고
래스터는 픽셀을 이용해서 필요한 부분에 알맞은 색상을 쏘는거임
먼저 모델이 있음
2D, 3D등 다양함
얘네들을 디스플레이에 어떻게 출력하냐
정점계산, 가중치를 이용한 AA(안티 앨리어싱)등을 사용함

이런 단계를 거침
정점을 계산 -> 각 정점이 어떻게 연결되어있는지 계산(UV등) -> 래스터화(픽셀화) -> 조각단위로 계산 -> 버퍼를 통해 컬러, 깊이(normal)등을 이용하여 출력
3D 모델의 정점 데이터를 받아 모델, 뷰, 투영 행렬을 적용해 화면상의 클립 공간(2D위치)으로 정점을 변환
버텍스 애니메이션(물결 효과 등)에 사용

이런 노드로 구성되어있음
Position 위치, Normal 법선, Tangent 접선
Position : 오브젝트의 좌표
Normal : 오브젝트의 한 면에 직각인 선분(외적)
Tangent : 오브젝트의 UV중 U(가로)에 평행한 선분
래스터라이저가 버텍스 사이를 보간하여 전달한 픽셀 정보를 받아 최종적인 픽셀 색상을 계산

이런식으로 구성되어있는데
어떤 종류의 머티리얼을 사용하냐에 따라 달라지므로
필요할때 하나씩 공부
float
half
fixed
int
샘플러란...
모델의 표면에 텍스처(이미지)를 입힐 때, 텍스처의 어느 픽셀(텍셀, Texel)을 어떤 방식으로 가져와서 화면에 보여줄지 결정하는 역할
sampler 2D

sampler 3D

sampler cube

각 샘플러는 정밀도를 위한 자료형을 가질 수 있음

이런식으로 ㅇㅇ
위의 데이터 타입을 이용해서 배열을 만들 수 있음

이런식으로 자료형 뒤에 길이에 해당되는 숫자를 붙이면 됨
fixed4 color1 = (1,1,1,1)
이런식으로 ㅇㅇ
color1.r = 1
color1.x = 1
이런식으로 수정도 가능함
RGBA, XYZW임
fixed4 color1 = (0,1,1,0);
fixed3 color2 = color1.rgb;
fixed3 color3 = color1.xyz;
//swizzle
fixed2 color4 = color1.ga;
fixed3 color5 = color1.gab;
//smearing
fixed3 color6 = 1
fixed3 color7 = (1,1,1) //위 아래 동일
빛을 다루기 때문에
많은 행렬연산이 필요함
그래서 그에 따른 행렬 자료형도 존재함
행렬은 그냥 2차원배열 ㅇㅇ
fixed4x4 m
fixed, float같은 자료형이 먼저 오고
행x열로 표현함
fixed v = m._m13
이런식으로 값을 찾을때는
._m00으로 행,열 순서대로 인덱스 입력해 찾음
fixed4 color = m._m01_m02_m03_m04;
이런식으로 값을 나열해서 가져올수도 잇음
fixed4 color2 = m[0]
이런식으로 행렬의 행 전체를 가져와서 사용할 수도 있음

이렇게 존재함
single은 float에 완벽하게 매핑되는 자료형임
GPU에 사용되는 32비트 부동소수점 자료형임
콘솔, 모바일이면 해당 기기의 사양에 32비트가 아닐 수 있음
half는 half랑 똑같음
16비트 ㅇㅇ
마찬가지로 콘솔, 모바일이면 플랫폼에 따라 크기가 다를수 있음

vertex노드는
각 꼭지점에 대해 딱 한번만 실행된다
fragment노드는
잠재적 픽셀의 갯수만큼 실행된다
한 삼각형 면에 50개의 픽셀이 있으면 50번 실행되는거임ㅇㅇ
그냥 커스텀 쉐이더 노드임

이런식으로 input과 output을 이용해 커스텀 노드를 작성하는거임
texture는 바로 색상에 매핑을 못함
그러니 sampling을 한다음 매핑해줘야함
그게 texture2D파라미터와 Sample Texture 2D파라미터임
(무조건 2D인건 아님;;)

UV는 대체 뭐임?
그냥 U = Width-Horizon, V = Height-Vertical
가로 세로임
텍스쳐가 평면에 매핑이 될때

이처럼 각 버텍스가 매핑되는 거임

UV의 각 꼭짓점 좌표는 무조건 정규화되어서
0,0~1,1까지 이어짐
UV는 반시계방향 좌표(CCW, 오른손좌표계)임
이에 따라 앞면, 뒷면 렌더링이 결정되게 됨
만약 텍스쳐의 좌측상단 절반만큼만 텍스쳐로 이용하고 싶으면

이렇게 (0, 0.5)좌표에서 X,Y로 각 0.5씩만 이동되도록 하면 됨(/2)
또 드로우콜(gpu에서 렌더링 하는 횟수)를 줄이려면
텍스쳐 아틀라스를 사용하면 됨

이런식으로 각 좌표를 n개의 정사각형(대개 2의 n배수)로 나눠서 1/n의 좌표를 가지는 식으로 처리하기도 함