2018년 1월 14일 일요일

Vector Graphics and Raster Graphics

Vector Graphics and Raster Graphics

컴퓨터 그래픽은 다음과 같이 두가지로 나눌수 있다.

  1. Vector Graphics
  2. Raster Graphics

Vector Graphics 에 대하여 위키에서는 다음과 같이 정하고 있다.

Vector Graphics는 컴퓨터 시스템에서 그림을 보여줄 때 수학 방정식에 기반한 점, 직선, 곡선, 다각형과 같은 물체를 사용하는 것을 말한다. 객체 지향 그래픽스라고도 한다.


또한 Raster Graphics에 대하여는 다음과 같이 정하고 있다.
컴퓨터 그래픽에서 래스터 그래픽스(Raster graphics)이미지, 곧 비트맵은 일반적으로 직사각형 격자 화소, 색의 점을 모니터, 종이 등의 매체에 표시하는 쟈료구조이다. 다양한 포맷의 그림파일로 저장할 수 있다. 비트맵은 화면에 표시되는 그림의 비트대 비트와 일치하며, 일반적으로 장치 독립 비트맵으로서, 디스플레이의 비디오 메모리의 기억 장치에 쓰이는 포맷과 일치한다. 비트맵은 기술적으로 화소단위로, 또 화소당 비트수 (이를 색의 깊이라고 한다)로 그림의 가로, 세로에 따라 구분한다.
“래스터 (Raster)라는 낱말은 라틴어 radere(문지르다 의 뜻)에서 유래한 rastrum(갈퀴라는뜻)에서 비롯하였다.



색상
각 화소는 RGB 색 공간에서 개별적으로 정의된 색을 가지고 있다.  색 공간(color space)는 색 표시계(color system)  을 3차원으로 표현한 공간이다. 색 표시계의 모든 색들은 이 색 공간에서 3차원 좌표계로 표시할 수 있다. 컴퓨터 그래픽에서 사용하는 색 공간은 그 용도에 따라 여러가지가 있으며 대표적으로

  1. RGB 색공간
  2. CMYK 색공간
  3. HSV 색공간
  4. CIE 색공간

등이 있으나 OpenGL 과 Direct3D 를 사용한 컴퓨터 그래픽스 프로그래밍에서는 RGB 색공간을 사용한다. 가장 큰 이유는 그래픽 카드의 버퍼 메모리의 구조가 RGB 색공간의 구조와 같기 때문이다.
어떤 그래픽 편집 프로그램에서는 CMYK 색공간을 사용하기도 하고 HSV 색공간을 사용하기도 한다. 이렇게 어플리케이션 프로그램에서 서로 다른 색공간을 사용할 수 있다는 것은 이들 각각의 색 공간 사이에 변환을 수행할 수 있기 때문이다.

색공간은 3차원 구조로 표현할 수 있으며 우리는 수학적으로 3차원을 2차원 또는 그 다른 형태의 차원으로 변환 할 수 있는 수학적 지식과 기술이 있기 때문에 이러한 일이 가능한 것이다.

어쨌든 우리는 RGB 색 공간에 대하여 관심을 갖고 다루어야 할 것이다.

RGB 는 Red, Green, Blue 의 약자로 이루어진다. 즉 RGB 는 색의 삼원색을 말하고 있으며 이러한 각각의 컴포넌트를 믹스하여(적당히 계산하여) 각종 색상을 표현하는 것이 된다.

화질과 해상도
래스터 그래픽스의 화질은 총 화소수(해상도) 와 각 화소의 정보량(색 깊이)에 의하여 결정된다.

예를 들면 24비트의 색 정보를 저장하고 있는 그림은 한 화소에 16비트로 저장한 사진보다 더 부드럽게 표현될 수 있다. 그러나 48비트로 저장된 그림보다는 부드럽지 못하게 된다.

또한 640x480의 화소를 갖는 그림은 1280x1024를 가진 그림과 비교해 볼때 더 거맃고 울퉁불퉁해질 것이다.

고화질의 그림을 저장하기 위해서는 더 많은 양의 자료를 저장해야 하고 결국 메모리 또는 디스크 저장 공간을 더 많이 요구하게 된다.

래스터 그래픽스 이미지는 해상도에 종속적이다. 화질의 명백한 손실 없이 해상도를 자유롭게 조절하는 것은 가능하지 않다.  이는 이미지 크기를 조절할 때 렌더링을 하여 화질을 떨어뜨리지 않게 하는 벡터 그래픽스와는 대조적인 단점이기도 하다.

렌더링 Rendering

비디오 메모리의 이미지에 대한 정보는 래스터 이미지형식을 갖는다. 결국 화면에 나타나는 각 장면의 그림은 래스터 그래픽의 형식인 것이다.
비디오 메모리의 생성에 있어 그 근원의 정보가 래스턱 이미지 였다면 해상도의 변화나 화질의 변화에 대하여 손실을 가져올 수밖에 없다.
즉 지금 표현하고자하는 화면의 해상도나 그림의 크기를 조절할 때 이러한 손실에 의하여 좋은 화질을 만들어 내기 힘들다는 것이다.

그러므로 우리는 벡터그래픽 정보를 그림의 소스로 하여 실제로 비디오 메모리에 이를 래스터링 하여 각 장면을 만들어 내는 방법을 사용하는 것이다.
이러한 과정을 렌더링 Rendering이라 부룬다.

또한 이러한 렌더링 과정은 여러단계의 스테이지로 나뉘며 이를 Rendering Pipeline 이라 부르고 있으며 이에 대해서 설명한 글이 따로 있으니 참조하기 바란다.


댓글 없음:

댓글 쓰기

Vertex , 정점 정보의 확장

Vertex , 정점 정보의 확장 그동안의 설명에 있어서 우리는 VERTEX 정보에 대하여 3 차원의 위치 정보만 사용하였다. struct VERTEX {float x,y,z;}; 이제 이를 확장하여 색상을...