JUST DO IT PROJECT

[CG] 컴퓨터그래픽스 01.기본개념 본문

CSE

[CG] 컴퓨터그래픽스 01.기본개념

웨일.K 2020. 4. 6. 15:25
반응형

2020/04/06 - [CSE] - [CG] 컴퓨터그래픽스 01.기본개념

2020/04/06 - [CSE] - [CG] 컴퓨터그래픽스 02. Rasterization

2020/04/07 - [CSE] - [CG]컴퓨터 그래픽스 03. 기하 변환 Geometric Transformation

1. 컴퓨터그래픽스란

컴퓨터 그래픽스란, 추상적인 표현을 시각화해 이미지를 만들어내는 것을 의미하는 것으로 크게 세가지로 분류할 수 있습니다.

  • 모델링: 수학적(기하학적) 방식으로 물체를 정의하는 것. 실제 존재하는 것들을 3D 스캔하여 쓰거나, 기하학적 모델로 만들어 사용.
  • 렌더링: 물리적(광학적) 방식으로 물체를 시각화하는 것. 빛과 모델 속성, 사용자의 눈 위치 정보를 기반으로 모델의 음영, 색깔을 결정하는 과정.
  • 애니메이션: 물리적(역학적)으로 시간에 따라 물체를 움직이게 하는 것. 키프레이밍, 모션캡쳐, 시뮬레이션 방식이 있음

2. 기본 개념

렌더링

렌더링이란 3D Scene을 2D 이미지로 변환하는 것을 의미합니다. 3D 씬은 모델들로 구성되어 있고, 3D 공간에 존재합니다. 그리고 이 모델들은 다시 primitives로 구성됩니다.

Geometric Primitives

모델을 구성하는 이 기하학적 기본단위들은 하드웨어나 소프트웨어에서 지원이 되는 경우와 그렇지 않은 경우가 있습니다. 전자는 기본적인 점, 선, 다각형으로 따로 로우레벨 프로세스가 필요 없지만, 후자는 polynomial curves, implicit surface, voxels 등, 렌더링을 위한 함수를 직접 프로그래밍 해야합니다.

Graphics Rendering Pipeline

모델을 시각화하기 위한 과정은 사진을 찍는 것과 비슷합니다.

(1) 모델을 만들고,
(2) 모델을 3D 공간에 배치하고
(3) 모델의 어느 부분을 찍을 지 결정해서 카메라를 설치한 후
(4) 사진을 찍어 2D 이미지로 만듭니다.

이런 일련의 과정은 여러가지 좌표계와 그들간의 좌표 변환의 연속입니다.

(1) Model coordinate system(MCS)
: 각자의 모델을 자기 자신의 기준점(원점)을 기반으로 한 좌표계를 통해 만들어지고

(2) World Coordinate System
: 어떤 3D 공간에 모델들을 배치하게 되면, 모델들이 다같이 공유할 수 있는 좌표계를 사용해 서로의 위치를 정의할 수 있습니다. 이때 모델 좌표계를 월드좌표계로 변환하는 과정(Modeling Trasformation)을 거치게 됩니다.

(3) Viewing Coordinate System
: 다음에는 이 모델들을 어디에서 바라볼지 결정하고, 그 카메라를 원점으로 했을 떄 모델들의 상대적인 좌표를 계산합니다. (Viewing Transformation)

(4) Normalized Device Coordinate System(NDCS)
: 사진을 찍으면 이 모델들은 카메라 화면에 projection 됩니다. 3D 좌표계가 2D 좌표계로 변환되는 것입니다. 이제 이 2D 좌표계에 표시된 모델들을 어떤 디스플레이에든 볼 수 있게 하기 위해서 normalize를 하면 가로세로 최대 값이 1인 2차원 좌표계로 변환할 수 있습니다.

(5) Device Coordinate System / Screen Coordinate System
: 마지막으로 원하는 디스플레이/스크린에 이 정규화된 좌표계의 모델들을 픽셀 하나하나의 색상값으로 변환하는 Rasterization을 통해 2D 이미지를 얻을 수 있게 됩니다.

즉 이 파이프라인을 정리하면 아래와 같습니다.
MCS
|
Modeling Transformation
|
WCS
|
Viewing Transformation
|
VCS
|
Projection
|
NDCS
|
Rasterization
|
DCS

그래픽스 파이프라인을 공부하고 싶으시다면, 각 좌표계 사이에서 일어나는 일들을 공부하시면 됩니다.

Graphics Package

OpenGL, DirectX와 같은 그래픽스 라이브러리들은 기본적인 primitives 들을 제공하고, 더 복잡한 모델을 만들고 유지보수 할 수 있는 함수를 제공합니다. 특히 GPU 같은 하드웨어가 지원해주는 다양한 연산을 이용해 작업을 할 수 있습니다.

Frame Buffer

프레임버퍼는 픽셀값을 저장하는 2D 배열입니다. 최종 2D 이미지는 프레임버퍼에 저장되고, 각각의 줄은 scan-line이라고 불립니다. 각각의 픽셀은 색상값을 가집니다. 24bit 컬러의 경우 RGB를 사용하고, 각각의 채널이 8bits를 차지합니다. 즉, 각각의 채널은 0~255까지의 값으로 색상을 표현할 수 있습니다. 최근에는 32bit 컬러를 사용해 실수를 사용해서 훨씬 정교한 색상 표현이 가능하기도 합니다.

Deeper Frame Buffer

현대의 프레임 버퍼는 보통 최소 96 bits를 가집니다.

  • alpha channel 알파값: 투명도. 0~255
  • z-buffer (depth buffer): 거리값을 저장. 정렬을 통해서 가장 가까운 것을 렌더링할 때 사용
  • Double buffering: 두개의 프레임버퍼를 사용해 flickering를 없앨 수 있음. 모든것은 back buffer에 그려지고, front buffer와 swap.

GPU, Graphics Processing Unit

프레임 버퍼와 디스플레이 컨트롤러, 디스플레이 프로세서로 구성된 하드웨어입니다. z-buffer, line drawing, clipping, texture mapping 등을 지원하며 Shading language를 이용한 GPU 프로그래밍을 통해서 그래픽스 파이프라인을 수정할 수도 있습니다.

아래목록은 차차 업로드할 예정입니다.

3. 선 그리기. 다각형 채우기 Line Drawing, Polygon Filling

4. 2D 기하변환, 2D Geometric Transformations

5. 3D 기하변환, 3D Geometric Transformations

6. 3D Viewing

7. Clipping Algorithm

8. Illumination Models and Surface-Rendering Methods

9. Ray Tracing

10. Texture Mapping

11. Visible Surface Determination

12. 3D Object REpresentation

반응형