1. 최종 색 결정
- 결국 픽셀의 최종 색을 결정할 때, 픽셀마다 phong illumination을 적용하여 값을 도출한다.
* illumination의 값은 (R,G,B)로 구성된 vector이다.
- 만약 이게 계산량이 너무 많다면 특정 부분들(예를 들면 vertex 혹은 특정 구역의 pixel들)에서 phong illumination을 적용하고 그 중간 픽셀들은 interpolation등의 approximate를 수행한다.
- 그럼 특정 구역의 픽셀 혹은 vertex를 선택하냐에 따라 계산의 시간과 결과물이 달라진다.
- 여러 methods에 대해 알아보자.
2. Ray casting
- 눈으로 보게될 화면의 픽셀들로 ray를 쏜다고 생각하자.
- 그럼 그 ray들이 물체에 맺히는 지점들에 대해 light강도를 계산해 illumination color를 결정한다.
- 가장 쉽고 확실한 방법이지만 시간이 오래 걸릴 수 있다.
3. Polygon Shading
- 인접한 픽셀들이 비슷한 값을 가질 것이라는걸 활용해 예측하는 것이다.
- 크게 세가지 방법이 있다.
Flat Shading
- polygon마다 동일한 색을 갖도록 한다.
- 하나의 polygon마다 normal vector를 구하면 그 polygon의 illumination을 구할 수 있다.
- 부드러운 표면을 표현하기 어렵다.
Gouraud Shading
- 각 vertex마다 normal vector를 가지고 illumination을 구한다.
- 각 vertex가 위치한 픽셀의 색을 가지고 나머지 픽셀들에 대해서 linear interpolation하여 색을 결정한다.
* vertex -> edge -> 삼각형 속 순서대로 interpolation이 수행된다.
- scan line(x축)을 따라 한번 쭉 훓으면서 interpolation을 한다.
- 이렇게 하나의 폴리곤에 대해서 매끄러운 illumination을 구현할 수 있다.
- 각 vertex의 normal vector를 구하는 방법은 아래 나와있다.
- 삼각형의 normal vector를 구할 때는 vertex순서가 매우 중요하다 시계반대방향으로 순서를 잘 지키자.
- 단점은 vertex에는 specular값이 거의 없기 때문에 interpolation을 하다가 물체의 specular light가 사라질 수 있다.
Phong Shading
- 각 pixel 마다 normal vector를 가지고 illumination을 한다.
- 그럼 각 pixel의 normal vector는 어떻게 구할까? 각 vertex의 normal vector를 interpolation해서 구한다.
- 모든 픽셀에 대해 작업을 수행하기 때문에 시간이 많이 걸릴 수 있다. 대신 Ray-casting보다는 절약적이고 gouroud보다는 specular light를 잘 표현할 수 있다.
'ComputerScience > Computer Graphics' 카테고리의 다른 글
CG - 8. Texture filtering (0) | 2021.10.13 |
---|---|
CG - 7. Texture (0) | 2021.10.13 |
CG - 5. Lighting (0) | 2021.09.29 |
CG - 4. Viewing System (0) | 2021.09.24 |
CG - 3. Transformation (0) | 2021.09.24 |