Computer Graphics
- Graphics System & Model -
그래픽스 시스템 전반의 각종 요소와 용어들에 대해서 다 살펴본다. 일단 그래픽스 시스템에 무엇이 있고 과거엔 무엇을 사용했는지 간단하게 훑어보고, 이 중에 중요한 것들은 나중에 자세하게 다룰 것이다.
그래픽스 시스템(하드웨어)에 대해서 알아보자
그래픽스 시스템은 PC의 영역과 그래픽의 영역이 있다.(포함 관계이다.)
- PC 영역 : CPU, Memory, Disk, Graphics Card, Sound Card, Network, Peripherals : keybboard, mouse, monitor
- Graphics Card 영역 : GPU, Memory, Video Output
시대가 지날수록 그래픽 성능이 더 많이 요구되고 있기 때문에 Graphics Card라는 별도의 하드웨어를 통해 그래픽 처리를 전담할 수 있도록 해야한다.
과거에는 CPU중심적으로 그래픽을 처리했으나 GPU성능이 많이 요구됨에 따라, GPU의 도움을 받아 그래픽을 처리하도록 한다. 그리고 Frame Buffer 즉, 화면에 그려질 화면 전체에 대한 정보(Color + Depth + Stencil 등)를 담고 있는 메모리에 저장되고 이를 통해 Monitor에 렌더링되는 것이다.
01. Vector Graphics System
옛날에 사용되던 그래픽스 시스템, 지금은 오실로스코프나 레이더 등에 사용
디스플레이에 선만 그려도 충분한 시스템에 사용되는 그래픽스 시스템으로 화소의 개념이 없어 해상도가 무한이다. 따라서 엘리어싱 문제(픽셀이 소실되는 문제), 프레임 버퍼 등이 없다.
02. Raster-Based Graphics System
현대의 그래픽스 시스템으로 화소의 개념과 프레임버퍼가 존재함.
래스터(Raster)는 그래픽스 시스템 안의 프레임 버퍼에서 화소(Pixel)의 2차원 배열(Array)을 의미한다. 한 픽셀들은 단일 색을 가지고 있고 이 픽셀을 채워나감으로써 하나의 그림이 완성되는 것.
디스플레이도 간단하게 살펴보자
01. Cathode-Ray Tube(CRT)
CRT는 음극선관 진공관이라고도 불리며 받는 신호를 전자총에서 음극선(전자빔)을 발사하여 유리에 칠해진 형광물질과 충돌하여 빛을 내는 방식이다.
쉽게 말해, CRT는 아날로그 디스플레이이고, 전자총에서 전자빔을 발사해서 화면에 발라진 형광물질과 충돌시켜 빛을 내는 방식이다. 굉장히 옛날에 사용되던 디스플레이이므로 상식적으로만 알아두자.
02. Liquid Crystal Display(LCD)
최근 널리 쓰는 TFT LCD는 박막트랜지스터와 화소 전극이 배열되어 있는 하판과 색상을 나타내기 위한 컬러 필터 및 공통 전극으로 구성된 상판, 그 사이에 채워져 있는 액정으로 구성. 그리고 두 유리기판의 양쪽 면에는 가시광선을 선형 편광하여주는 편광판(빛을 특정 방향으로 굴절시켜주는 역할)이 각각 부착되어 있고, 상하판 전극 사이의 액정으로 축전기(capacitor)가 형성되고 이곳에 영상정보가 저장.
주사 변환(Scan Conversion = Rasterization)에 대해서 살펴보자
그림을 하나하나의 픽셀 값으로 변환하여 프레임 버퍼에 저장하는 것
01. Rasterization
나중에 다룰 내용이지만 Rasterization에 대해서 간단하게 알아보자. Rasterization은 주사 변환(Scan Conversion)이라고도 한다.
기하학적인 도형을 프레임버퍼 안의 픽셀과 색과 위치로 변환시키는 작업, 즉 프레임버퍼에 저장되어 있는 데이터를 화면에 주사하기 위한 변환 과정이다. 3차원의 데이터들은 부동소수점인 Float, Double값을 이용해서 계산하지만 픽셀에 데이터를 저장하기 위해서는 정수 좌표로 변환해줄 필요가 있고, 또 물체를 실제 화면에 표시하기 위한 화면 좌표를 얻어낼 필요가 있다. 따라서 이러한 변환을 해주는 것이 Rasterization이다.
이 네모블럭을 본다고 삼각형과 선이 생각이 날까? 계단모양의 거친 경계선(Aliasing)문제로 인해서 생각이 안날 것이다. 따라서, Anti Anliasing을 적용시켜서 계단 현상을 최소화한다.
02.Raster Image
프레임 버퍼로 생성한 이미지
직사각형 형태의 이미지를 화소 (pixel, Picture Element)라 부르는 조그마한 영역으로 나누어 각 화소를 해당 영역을 대표하는 색깔로 칠함. 연속적인 영상을 유한개의 화소를 사용하는 영역으로 표현하므로 오차가 발생(Aliasing)
03. Frame Buffer
화면에 출력되는 Raster Image에 대한 데이터를 담고있는 메모리
- 화면에 출력되는 레스터 이미지에 대한 픽스맵 데이터는 프레임 버퍼라고 불리는 메모리 한 부분에 저장되어야 한다.
- 해상도는 프레임버퍼의 픽셀 수 - 640x480, 1024x768
- 프레임버퍼의 깊이(Depth of Frame Buffer)는 시스템이 얼마나 많은 색을 한 픽셀에서 표현할 수 있는지를 결정한다. - 8bits : 256color
넓은 의미로 화면에 도시할 래스터 이미지 뿐만 아니라, 그러한 이미지를 생성하는데 필요한 여러 부류의 정보를 저장해주는 포괄적 의미의 그래픽스 전용 메모리를 뜻한다. 아래와 같이 여러 종류로 나뉘지만 Frame Buffer = Color Buffer라고 보면된다.
- 색깔 버퍼(Color Buffer) - 더블 버퍼(Double Buffering), 스테레오 버퍼, 알파 버퍼(투명도)
- 깊이 버퍼(Depth Buffer) - 3차원의 깊이감 표현을 위한 계산데이터 버퍼
- 스텐실 버퍼(Stencil Buffer) - 특정 영역을 그리느냐 그리지 않느냐를 결정하는 버퍼
- 축적 버퍼(Accumulation Buffer) - 총알 날아갈때 잔상같은 것을 표현하는 버퍼
- 픽셀 버퍼(Pixel Buffer)
04.Double Buffering
비디오 제어기가 항상 완성된 이미지를 도시하도록 함.(부드럽게 다음 프레임을 렌더링하기 위함)
비디오 메모리만을 사용한 싱글 버퍼링으로 그래픽을 그릴 경우 데이터를 저장하는 동안에는 다음 그림의 데이터를 전송할 수 없기 때문에 지우고 그리고 지우고 그리고 할 경우 필연적으로 발생하는 깜빡임, 찢어짐 등의 상황을 막기 위해서 사용되는 기법이다.
색깔 버퍼를 전면 후면버퍼 두가지로 사용한다. 다음 프레임에 출력할 이미지를 미리 계산하여 후면에 저장해놓음. 전면버퍼는 현재 처리해야할 레스터이미지를 렌더링함. 작업이 끝나면 Swap되어 전면이 후면이되고 후면이 전면이됨.
이미지와 시각시스템에 대해서 알아보자
01.Image
컴퓨터 영상(Computer-generated images)은 물체가 실제 존재하지 않는다는 점에서 인공영상이다. 즉, 컴퓨터가 만들어낸 영상이라는 것이다. 컴퓨터가 영상을 생성하는 방법은 인간의 시각 시스템과 같은 전통적인 방법이다. 그리고 우리들의 눈에 Raster Image를 만들어낼 때 필요한 개념 세가지가 있다.
- Object(객체) : 영상생성 과정이나 관측자와는 관계없이 공간에 존재하고있는 물체. 그려낼 대상이 있어야 하는 것.
- Viewer(관측자) : 물체의 영상을 형성하는 것. 즉, 시각으로치면 망막 카메라로치면 필름이다.
- Light(광원) : 빛이 있어야 영상의 밝기가 있을 것이다.
02. Human Visual System
- 각막을 통해 빛이 들어온다
- 홍채는 빛의 양을 조절한다
- 동공의 틈을 통과하고 수정체의 모양근이 수축 이완함으로써 초점을 맞춘다
- 망막은 카메라의 필름같은 역할을 하며 빛을 신경신호로 바꿔 뇌에 전달해준다
- 망막은 강상체와 원추체로 구성되어 있다
- 간상체는 주로 어두울 때 활동하며 흑백의 음영망을 구분하고 파란색 스펙트럼에 민감하다
- 원추체는 밝은 환경에서 활동하며 원추체의 밀집이 시력을 결정한다. RGB에 대응하는 빛의 파장 세기에 따라 구분한다.
03.Synthetic Imaging Process
Synthetic 이미지 처리 과정, Computer Graphics의 영상을 만들어내는 과정
이미지를 만들기 위해선 Object, Viewer, Light가 필요하다고 앞서 설명했다. 하지만 컴퓨터 그래픽스에서 실제와 똑같이 인공영상을 만들어내기에는 너무나도 연산량이 많다. 따라서, 제시된 방법이 Synthetic Imaging Processing이다.
- 점 광원(Point Light Source) : 한 점에서 시작하여 모든 방향으로 빛이 방출되는 것(실제로는 존재하지 않고 그래픽스 세계에서 만들어낸 것)
- 관측자(Viewer)는 카메라이다.
- 광선(Ray)는 한 점(관측자로부터)에서 시작하여 임의 방향으로 무한히 진행하는 반직선이다. 이 빛은 무한히 진행할 수도, 투영할 수도, 반사될 수도 있다.
- 광선추적(Ray Tracing) : 빛은 계속적으로 반사한다. 따라서 모든 동물들은 사물을 관측할 수 있다. 레이트레이싱은 계속적으로 반사하는 빛을 최대한 현실처럼 똑같이 흉내내고자하는 그래픽 작업이다. 내가 이해한 바로는 이미지 픽셀 하나하나를 통과하는 Ray가 있다고 가정했을 때, 이를 추적하여 보다 현실감있게 표현하는 것이다. 자세한 것은 나중에 알아보자 지금은 겉핥기니까.
- 라디오시티(Radiosity) : 사물의 표면에서 발산되는 빛의 반사를 세밀하게 분석한 것을 기반으로하는 랜더링 기법이다. 즉, 점진적 음영을 표현할 수 있다.
컬러와 컬러모델에 대해서 알아보자
01. Color Perception
- 우리는 자외선을 볼 수 없다. 사람이 볼 수 있는 빛의 파장 영역인 가시분광(Visual Spectrum)은 400nm(보라색) ~ 700nm(빨강색)사이에 펼쳐져 있다.
- 세상의 물체들은 극단적인 경우를 제외하고 여러 파장들을 반사하므로 망막의 동일 지점이 이들에 의해 자극을 받는다.
- 망막의 원추체는 S,M,L 세가지가 있는데, 각각 파랑,초록,빨강에 대응하는 빛의 파장 범위에 대하여 민감한데 색깔의 지각은 이 세 가지 원추체의 동시작용의 결과이다.
- 따라서 색맹이라는 것은, 이 세 가지 원추체의 결함으로 인해 발생하는 현상이다.
02.Chromatic Color
- 색상(Hue) : 우리가 색깔이라고 부르는 시각 경험
- 채도(Saturation) : 색깔의 채도란, 특정 색이 흰색/회색으로 인해 순수성이 떨어지는 정도 진한색(빨강,파랑)은 채도가 높은 것. 회색으로부터 멀리 있음. 파스텔톤(분홍,하늘)은 채도가 낮은 것. 회색에 가까워짐
- 명도(Brightness) : 빛 자극에 의해 결정되는 것. 흑색에서부터 명도가 최대인 백색까지 가능
03.Color Model
- RGB(Computer Graphics에서 사용하는 Color Model)
- CMY(프린터 컬러 모델, 색의 삼원색)
- HSV/HSB(색상,채도,명도에 따른 컬러 모델)
- YUV/YIQ - PAL/NTSC Television(TV 컬러모델, 명도(Y)와 색차(U:푸른정도,V:붉은정도)로 변환하여 표시)
04.RGB
- 빛의 삼원색으로, 컬러 디스플레이에 적합한 컬러 모델이다.
- RGB 컬러 모델은 각 화소 값이 그 화소에 칠할(RED,GREEN,BLUE)값을 더해 표현하는 방식이다.
- ex) Black (0,0,0) White (1,1,1)
05.CMY
06.HSV/HSB
07.YUV/YIQ
08.Luminance
- 색의 밝기를 뜻한다.(Brightness)
- RGB컬러의 각 색깔들은 고유의 밝기를 가지고 있다.
카메라(관측자)에 대해서 알아보자
01.Pinhole Camera Model
- Pinhole Camera 기법은 우리의 눈의 원리와 같으며 기존의 카메라에서 사용한다. 그래픽스에서는 사용하지 않는다.
- Pinhole Camera는 상자의 한쪽 면에 작은 구멍이 나있고 필름이 안쪽의 반대쪽 면에 놓인 상자이다.
- (x,y,z)좌표를 가진 3D Object가 구멍(Pinhole, Lens, 수정체)를 지나서 반대쪽 면(망막, 2D z값이 사라진 x,y값)에 맺힌다.
02.Synthetic-Camera Model(그래픽스에서 사용)
컴퓨터 그래픽스에서 사용하는 카메라 모델
- Pinhole Camera Model에서 Image Plane을 앞으로 움직인 것.
- 쉽게 얘기해서 3D모델을 2D평면에 찌부시킨것.
- Clipping Window 즉, 물체를 찍을 수 있는 영역이라는 것이 존재한다. 모든 장면을 다 담을 순 없다.
Graphics API에 대해서 알아보자
본인은 Low Level의 OpenGL로 실습하겠다.
- Low Level Graphics Library : OpenGL, Direct3D
- Scene Graph Library : SGI Performer, Open Inventor, Open Scene Graph, Java3D
- Scientific visualization & Advanced Graphics Toolkits : OpenDX, AVS, Unity도 여기 속할듯
01. Low Level Graphics Library이 제공하는 명령어
- 점, 선, 폴리곤, 곡선과 곡면 등의 기하학적 모델링
- 위치, 회전, 크기
- 컬러
- 조명
- 재질
- 관측 - 카메라 위치, 방향, 초점 거리, 필름 면
- 텍스쳐 로딩
Graphics Pipeline에 대해서 알아보자
01. Graphics Pipeline
- 그래픽스 파이프라인은 PC메모리에 있는 프로그램과 데이터이다.
- CPU가 메모리에 올라와 있는 프로세스의 데이터들을 읽어서 실행하는데, 그래픽스 명령어와 데이터는 그래픽스 카드로 넘김
- 영상(Images)는 그래픽스 카드 메모리에서 렌더링됨
- CPU와 그래픽스 카드를 연결해주는 인터페이스는(PCI, AGP, PCI Express)
- 그래픽스 카드와 디스플레이를 연결해주는 인터페이스는(VGA,DVI,Composite,S-Video)
02. Graphics Pipeline 구조 = GPU의 Rendering Pipeline이라봐도 무방할듯 하다
- 정점 처리(vertex processing)
- 클리핑과 기본요소로 조립(clipping and primitive assembly)
- 래스터화(주사변환) (Rasterization)
- 단편처리(Fragment Processing)
02-1. 정점처리(이 또한 파이프라인이 있지만 나중에 알아보자)
그래픽 아티스트에 의해 폴리곤 메쉬가 완성되고, 게임 프로그램에 넘어오게되면 폴리곤 메쉬의 각 정점들이 정점 버퍼에 저장된다. 우리의 목표는 폴리곤 메쉬를 단순히 화면에 그리는 것이 아니라, 게임 내 적절한 공간에 배치하는 것이다. 이를 위해선 정점 버퍼에 저장된 정점들을 그대로 사용하면 안되고, 변환을 통해 적절한 공간으로 이동시킨 후에 사용해야 한다. 이처럼 각 정점에 대해 여러 변환을 수행하는 단계를 정점 처리라고 한다.
02-2.Projection & Clipping
- Projection은 관측자(Viewer)가 구도를 잡았을 때, 3차원에 존재하는 Object의 정점이 2차원 평면인 화면의 어느 지점으로 투영할지를 결정하는 것이다. 직교 투영법과 원근 투영법이 있는데 직교는 카메라로부터 거리를 고려하지 않은 투영방식이고 원근 투영법은 거리까지 계산해서 오브젝트가 멀리 있는 경우 작게 투영하는 방식이다.
- Clipping은 클리핑은 카메라가 비추고 있는 외부의 물체를 추려내서 그리지 않는 방식이다.
02-3.Primitive Assembly
- 클리핑은 정점단위로 이루어지기 보단 요소 단위로 이루어진다.
- 즉, 기본 요소 단위로 정점들을 조립할 필요가 있다. 기본 요소라면 선분, 다각형, 곡선과 곡면 등이 존재한다.
02-4.Rasterization
- 기하학적인 도형을 프레임버퍼 안의 픽셀과 색과 위치로 변환시키는 작업, 즉 프레임버퍼에 저장되어 있는 데이터를 화면에 주사하기 위한 변환 과정이다. 클리핑기를 통해 나온 기본 요소는 아직 정점으로 표현되어 있는데, 이를 프레임 버퍼의 픽셀로 변환해주어야 한다.
- 래스터기의 출력은 각 기본 요소의 단편(Fragments)의 집합이다.
- 단편은 색과 위치 정보, 깊이 정보(다른 단편의 앞에 있는지 위에 있는지)를 전달하는 잠정적인 픽셀이다.( 단편은 거의 픽셀과 동일한 의미라고 볼 수 있지만 프레임 버퍼의 한 픽셀이 되기 바로 전단계라고 이해하면 된다.)
02-5.Fragment Processing
- 래스터기에서 생성한 단편(Fragments)을 받아들여서 프레임 버퍼 안에 있는 픽셀을 갱신한다.
- 단편에 대응하는 픽셀의 색은 프레임 버퍼로부터 읽혀지거나 또는 반투명 효과를 주기 위해서 단편의 색과 혼합된다.
- 단편의 색은 택스쳐 매핑 혹은 범프 매핑으로 바꾸거나 또는 정점의 색으로 보간한다.
- 카메라에서 가까운 단편은 다른 단편을 보이지 않게 할 수 있다.(은면 제거, 다른 오브젝트에 의해 가려진 부분 제거)
'Computer Graphics' 카테고리의 다른 글
Chapter04. 애니메이션과 더블버퍼링 (0) | 2021.05.28 |
---|---|
Chapter03. 입력 콜백 (0) | 2021.05.27 |
Chapter02. OpenGL 시작 및 실습코드 (0) | 2021.05.26 |
Chapter 01-02. 시작과 상식 (0) | 2021.05.19 |
Chapter 01. 들어가기에 앞서 (0) | 2021.05.18 |