본문 바로가기

ComputerScience/Computer Graphics

CG - 6. Surface Rendering

728x90

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를 잘 표현할 수 있다.

728x90
반응형

'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