💡
pipeline recap
8개의 정점을 가진 큐브 mesh를 렌더링할 때
VBV
는 8개의 data가 들어가 있다.IBV
삼각형 단위로 렌더링 할 것이니 3*8개의 데이터가 들어가 있다.⇒ 이 정보가 Input Assembler로 들어온다. (여기서부터 GPU)
IA
에서는 VBV와 IBV의 데이터를 이용해 삼각형 데이터로 자르면 되는 것을 VS로 알려준다.
VS
에 정점이 일렬로 세워지고 이게 한 번에 동시에 parallel하게 넘어가는 것까지가 vs의 작업
- object space → clip space (world, view, projection matrix) 바꾸어 준다.
Rasterizer
버텍스 정보를 활용해 버텍스 내부의 픽셀을 생성을 한다.
Pixel Shader
내부에 있는 p_1 ~ p_n까지의 픽셀 데이터가 가득 차 있다. PS에서는 이 픽셀 하나하나에 다 접근이 가능하다. 픽셀 정보를 쭉 읽어오고 (일렬로) 한 번에 병렬로 처리해 return을 얻게 된다.여기서도 내 인접해 있는 픽셀의 데이터에 접근이 불가능 하다.
가장 큰 역할은 픽셀의 색상을 결정하는 것이다.
색상에 영향을 주는 가장 큰 것이 Textureing & Lighting이다.
모델링 스텝에 texture coordinate가 적용이 된다.
Rasterizer 단계에서 3개 정점의 정보를 barycenteratic coordinate를 이용해 위치, 노말, uv 정보들이 바뀌었었다. 이 때 texture coordinate도 결정이 된다.
정규화된 텍스처 좌표 (s, t)는 텍스처 공간으로 투영된다.
(s’, t’) = (s, t) · (텍스처의 너비, 텍스처의 높이)
→ nomalized 된 값으로 0-1 사이 값을 가진다
→ nomal된 값에 이미지의 width와 height를 곱해주면 원본 값이 나온다
texture coordinate를 nomalized된 값을 쓰는 이유
텍스처 좌표는 모델링 될 때 정해진다.
즉, 텍스처를 어떻게 바르게 할지는 이미 결정되어 있다. 그래서 해상도가 다른 것이 들어와도 nomalized된 값을 쓴다고 했다. 이미지 크기를 모델링 한 사람이 원하는 정도로 맞춰주지 않으면 발랐을 때 비율이 달라지는 등의 현상이 일어나게 된다.
이는 모델링 단계에서 이미 텍스터 좌표가 결정되어 있는 상태에서 비율을 신경 쓰지 않고 넣어서 생기는 일이다.
Surface Parameterization
메쉬를 쪼개서 하나하나를 chart 각각 만들고 나서 하나의 atlas로 묶는다. 데이터가 여러개 있으면 불편하니까.
보통 0-1사이로 노멀라이즈 한다고 했는데 항상 그렇지만은 않다.texture wrapping mode
가 이것을 핸들링 한다.
텍스처를 그냥 박으면 문제가 생길 때가 있다.
(s', t') are floating-point values in almost all cases.
스크린에 쿼드를 그리는데 실제 이미지 사이즈보다 큰 경우
사진 찍었는데 저해상도 저장하려고 용량을 낮춰서 저장했다가 확대하면 블락블락 처럼 보이는것 → magnification
픽셀은 스크린에서 색을 보여주고 하는 것, 텍셀은 텍스처 하나하나의 데이터를 의미
pixel > texel
→ 1개의 texel로 4개의 pixel을 칠하는 상황 발생
rasterizer를 통과하여 생긴 pixel(fragment)이 texture map의 texel보다 많은 경우
Option 1: Nearest point sampling
Option 2: Bilinear interpolation
💡 가장 가까운 점 샘플링이 선호되는 이유는 블록 형태의 이미지 문제가 최종 결과에 훨씬 적게 영향을 미치기 때문 뿐만 아니라 그래픽 하드웨어가 일반적으로 이중 선형 보간을 최적화하도록 설계되어 있기 때문이다.
⇒ Magnification 에서는 인터폴레이션하면 문제가 대부분 적당히 잘 해결된다.
rasterizer를 통과하여 생긴 texture map의 texel이 pixel(fragment)보다 많은 경우
실제로 이걸로 인해 발생하는 문제가 조금 더 크다.
⇒ aliasing problem
픽셀은 텍스처 공간에서 큰 점프를 하며, 많은 텍셀이 텍스처링에 관여하지 않게 된다.
mipmap
이라고 합니다.✔ level1 ex
사각형을 항상 top down 뷰로 보지 않고 좀 측면에서 보기도 한다. 이러면 이 한 픽셀이 차지하는 영역이 달라진다. 카메라와 얼마나 가깝고 각도에 따라.
픽셀의 텍스처 공간으로의 투영은 점이 아닌 (s', t')를 중심으로 하는 영역이다.
이 투영된 영역을 픽셀의 발자국(footprint)이라고 한다.
✔level2 ex
✔Level 1.585 example
Option 1: We can take the nearest level. l = round(λ).
→ 그냥 round 하기
Option 2: we can take both of levels and linearly interpolate the filtering results. (bilinear interpolation)
→ 인터폴레이션 하기
💡 텍스처를 가지고 올 때도 필터링 기법(nearlist, bilenear , …)을 정의해야 한다.
근데 실제로 입힐 때 minmap을 결정할 때도 interpolation을 한다.
즉, 2번 한다.
해당 포스트는 강형엽 교수님의 게임그래픽프로그래밍 [GGP-23-1] 수업을 수강하고 정리한 내용입니다. 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다😊