본문 바로가기

ComputerScience/Computer Graphics

CG - 8. Texture filtering

728x90

1. Filtering

1) frame buffer에 있는 픽셀의 texture coordinate을 구한다.

2) 그 위치를 가지고 texture image에서 근접한 네개의 texel을 interpolation하여 texture color를 꺼내온다.

- 위 경우는 magnification에 해당하여 interpolation으로 처리된다. 즉 여러 pixel을 interpolation하여 image의 픽셀을 채운다.

- 하지만 만약 frame buffer의 image 픽셀이 texture pixel의 크기보다 크다면 interpolation이 아니라 여러 texel을 평균내서 하나의 image pixel을 구하게 된다. 이를 Minification: Averaging이라고 한다. 

- 하지만 minification average는 시간이 많이 걸리기 때문에 대안으로 mip mapping을 사용한다.

2. Mip Mapping

- 원래 texture map을 미리 평균을 내놓는 것이다. 

- 그래서 Frame buffer에서 픽셀의 크기를 texture image에 가져다 댔더니 4*4였다면 미리 준비한 1*1짜리 texture image로 평균값을 사용하는 것이다.

- 만약 frame buffer의 픽셀 크기가 평균 내놓은 texture image의 픽셀과 다르다면 trilinear interpolation으로 구하면 된다.

- resolution들을 저장할때는 아래처럼 하나의 사각형으로 저장한다. 

*anisotropic filtering

- 만약 texture map이 좌우로 같지 않다면(정사각형이 아님) 좌우로는 약하게 mapping하고 세로로는 많이 mapping할 수 있을 것이다. 

 

*전체적인 그래픽스 파이프라인은 다음과 같다.

3. Bump Mapping

- 참고로 texture map은 단점이 하나 있는데, 바로 무늬들은 생기나 물체가 평평해(flat) 보인다.

- 이를 보완하기 위한 방법이 bump mapping이다.

- 물체의 깊이가 다르다는 것을 활용한다.

- bump map은 texture에 height field를 저장하는 것이다. 즉 각 픽셀마다 높이에 대한 정보를 함께 저장하는 것이다.

- 이렇게 저장된 height를 가지고 normal vector를 알 수 있고 이를 통해 illumination으로 각 픽셀의 깊이정보를 구현하게 된다.

- bump map을 적용한 구의 모습이 우측에 있다.

4. Normal Mapping

- normal map 픽셀에 (color(RGB) 값대신) normal vector값들을 저장하는 것이다. 이 값들이 illumination을 통해 깊이가 구현된다.

- 여기에 texture map을 가지고 물체의 질감을 구현한다.

- bump map에는 픽셀당 깊이정보만 가지고 있다. 대신 normal vector를 계산해야 하기 때문에 computation이 많다.

- normal map에는 픽셀당 x,y,z normal vector 값을 가지고 있다. 대신 normal vector를 계산할 필요가 없으니 computation이 적다

- 4M개의 triangle을 rendering이 오래걸리니 500개만으로 그리되 height정보를 구현하면 사실적인 구현이 가능하다.

5. Displace Mapping

- bump mapping, normal mapping에서 경계 부분까지 완전히 flat함을 극복할 수 없다.

- 그래서 displacement mapping를 사용한다.

- 마찬가지로 height map을 사용하되 geometry를 실제로 구불지게 하는 것이다.

6. Environment Map

- scene이나 물체 주변을 둘러싸고 있는 환경을 하나의 box 같은데 mapping해놓는 것을 말한다.

- shiny한 물체를 구현할때 특히 도움이 된다. 표면이 주변 배경을 반사하기 때문에 주변 물체를 환경을 미리 mapping해 놓으면 편하기 때문이다. 

- 물체 주변의 환경을 미리 mapping해 놓으면 주전자를 그릴때 주변 정보를 가지고 texture를 씌울 수 있다.

- 빛이 물체에서 반사되어 도달하는 점을 enviromnet map에서 찾는 것이다.

- 이런 sphere말고 cube를 활용해 mapping을 할 수도 있다.

- 그럼 environment map을 어떻게 구할까?

- 옛날에는 반사가 잘되는 구를 앞에두고 사진을 찍어서 environment map을 얻었다.

- chrome ball을 두고 사진을 찍기도 하고 fisheye lense라고 화각이 매우 넓은 렌즈로 주변을 찍기도 했다.

7. 3D texture

- 이제까지는 2D texture만 살펴봤지만

- 3D로도 texture map을 만들 수 있다.

- texture value에 x,y,z 위치 정보도 함께 저장하는 것이다.

728x90
반응형

'ComputerScience > Computer Graphics' 카테고리의 다른 글

CG - 10. Triangle Mesh  (0) 2021.10.28
CG - 9. Modeling  (0) 2021.10.28
CG - 7. Texture  (0) 2021.10.13
CG - 6. Surface Rendering  (0) 2021.10.08
CG - 5. Lighting  (0) 2021.09.29