[Unity] 그래픽-2. 실시간 렌더링 주요 개념
매핑
(x, y, z) → (u, v, w)
메시 최소 단위(삼각형)의 버텍스를 매핑함.
스프라이트 아틀라스의 (u, v) 는 (0, 0)..(1, 1)이고, right top.
- 범위를 그 안에서 지정해서 해당하는 texture 범위를 가져오는 방식.
- 메시 파일(fbx) → Mesh컴포넌트 → mesh.uv로 접근 가능
- 메시 파일 안에 (x, y, z) → (u, v), normal, index(삼각형 구성 정보)
버텍스 순서는 right top부터 반시계방향이 통례임.
아래 세개 합쳐서 draw
- ambient - 주변광
- diffuse, albedo - base color
- specular - 광택
Normal vector
surface의 법선. 이거 기준으로 빛 반사 계산
- Directional Light의 dir과 계산 등
Normal Map이 이걸 편집함(법선인데 법선이 아니도록 기울일 수 있음)
계산
- Normal과 Light가 둔각을 이룰 때에만 활성. 내적해서 각도 계산. 각이 좁을 수록 밝다.
- normal dot lightDirection < 0 이면 그리는 느낌인 듯.
- (추가) cull front/back/both 옵션이 이거 바꾸기도 하는 듯함.
Smooth
- Normal map이 Normal들을 보간함. 메시를 실제로 smooth하는게 아니라 빛 반사만 smooth 가능
Z-buffer / Depth buffer
겹친 픽셀 중 어느 것을 그릴지에 대한 버퍼. 2D 행렬임.
먼 것을 먼저 그리더라도 가까운걸 나중에 그리면 덮어써버릴 테니까 OK임.
- 각 위치에 해당하는 픽셀의 값이 화면으로부터의 거리를 의미한다면, 거리가 가장 짧은 걸 그리게 되는거.
알파 블렌딩
픽셀은 투명도가 없음.
해당 위치에 그려질 픽셀들의 색상을 덮는 방식으로 투명도 표현
- 앞 픽셀 * (1 - 투명도) + 뒤 픽셀 * (투명도) == 그려질 픽셀 색깔
셰이더 프로그래밍
각 파이프라인 단계는 독립적. 이전/이후 단계와 분리됨.
셰이더 프로그래밍이란 특정 단계의 명령을 교체하는 것.
주로 정점셰이더(Vertex), 픽셀셰이더(Fragment Shader) 단계에 적용함
- 래스터라이저 단계는 그래픽 하드웨어 전용 단계로 변경 안됨

![[Unity] 제네릭과 가변성(variance)](https://data.develog.develrocket.com/upload/develog/gmumdev/1791297148427-udtfz5/_____.png)