Post

[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 1. 서론

이 글은 제 개인적인 공부를 위해 작성한 글입니다. 틀린 내용이 있을 수 있고, 피드백은 환영합니다.

[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 1. 서론

개요


컴퓨터를 이용하여 영상을 생성하는 작업을 컴퓨터 그래픽스라 하는데, 이 작업의 입력이 3차원 데이터로 주어지는 경우 3차원 그래픽스라 부른다. 지난 30년간 우리는 영화 특수효과와 게임 등에서 3차원 그래픽스의 엄청난 발전을 보아왔다.

컴퓨터를 생성하는 영상을 프레임이라고도 하는데, 움직이는 장면을 묘사하기 위해서는 조금씩 변화하는 연속적인 프레임을 스크린 상에 빠르게 보여주면 된다. 이러한 연속적인 프레임들은 실시간(real time)에 만들어질 수 있는데, 실시간 그래픽스의 대표적인 예는 게임이다. 실시간 그래픽스 시스템의 성능은 1초당 몇 프레임을 만들어낼 수 있느냐, 즉 frames per second(fps)로 측정된다. 예를 들어, 게임이 1초당 60개의 프레임을 생성할 경우 60fps라 한다.

한편, 영화 특수효과 등에서는 실사와 구분하기 어려운 정교한 영상을 만들어내기 위해서 프레임당 몇 분에서 몇 시간을 투자하기도 한다. 실시간 그래픽스와 비실시간 그래픽스 작업에 사용되는 기법들은 상당히 다른데, 이 책은 실시간 그래픽스에 초점을 둔다.


1.1 컴퓨터 그래픽스 제작 단계


컴퓨터 그래픽스 제작 과정은 통상 5개의 단계로 구성된다.

1
모델링 -> 리깅 -> 애니메이션 -> 렌더링 -> 후처리

모델링, 리깅, 애니메이션은 그래픽 디자이너가 오프라인으로 수행한다. 런타임에는 프레임 별로 애니메이션이 재생되고 렌더링(rendering)과 후처리(post-processing)가 수행된다.

가상의 그래픽스 환경을 구성하는 각각의 물체를 컴퓨터가 처리할 수 있는 방식으로 표현한 것을 모델이라고 한다. 모델링 단계에서는 바로 이러한 모델들을 만들어 낸다. 야구 게임의 경우, 선수, 배트, 공 등의 모델이 필요하다. 이들은 보통 폴리곤(polygon; 다각형)들로 구성된다. 이렇게 폴리곤으로 구성된 물체는 폴리곤 메시(polygon mesh)라 부른다.

모델링의 범위는 3차원의 물체에 국한되지 않는다. 예를 들어, 3차원 물체에 입혀져서 시각적 사실성을 높여주는 텍스처(texture)의 제작 또한 매우 중요한 모델링 작업이다. 가장 간단하면서도 많이 사용되는 텍스처는 물체 표면에 입혀지는 이미지다. 이 텍스처는 런타임에 야구선수 캐릭터의 폴리곤 메시에 입혀진다.

폴리곤 메시로 표현된 캐릭터의 애니메이션을 위해 뼈대가 캐릭터 메시에 삽입된다. 각각의 뼈는 마치 3차원 물체인 것처럼 그려졌지만, 실제로는 대개 행렬로 표현되는 수학적인 개체들이다. 이에 대해서는 13장에서 자세히 다룬다.


야구선수는 공을 치고, 베이스를 향해 뛰고 슬라이딩 할 수 있어야 한다. 이러한 애니메이션을 위해서는 통상 야구선수의 골격(skeleton)을 구성한 후, 각각의 (bone)의 움직임이 야구선수의 폴리곤 메시에 어떻게 반영될 것인가를 정의해야 한다. 예를 들어, 팔의 뼈가 움직일 때 그 주변의 폴리곤이 따라서 움직이도록 설정되어야 한다. 이러한 과정을 리깅(rigging)이라고 부른다.

애니메이터들이 캐릭터 골격을 움직여 캐릭터의 애니메이션을 정의하면 이는 런타임에 프레임 별로 재생된다.


하나의 3차원 장면이 주어졌을 때 이를 2차원 영상, 즉 프레임으로 만드는 작업을 렌더링이라 한다. 렌더링은 매우 복잡한 연산을 요하는 단계로, 텍스처를 물체 표면에 입히는 텍스처링(texturing), 그리고 빛과 물체의 상호 작용을 처리하는 라이팅(lighting)이 그 핵심을 이룬다.


빠른 속도로 진행되는 애니메이션의 경우, 한 프레임에 그 이전 프레임의 잔영을 남기면 시각적 사실성을 높일 수 있는데, 이를 모션 블러(motion blur)라 한다. 또한, 일반 사진과 같이 초점이 맞춰지는 영역 바깥 부분을 흐릿하게 처리하면 사실감을 높일 수 있는데, 이를 초점 심도(depth of field)라 한다. 이와 같은 작업은 모두 컴퓨터 그래픽스 제작의 마지막 단계인 후처리를 통해 이루어진다. 그런데, 시간이 허락하지 않는다면 후처리는 생략될 수 있다.


1.2 그래픽스 API


그래픽 디자이너는 오프라인 상태에서 모델링, 리깅, 애니메이션 작업을 수행하는데, 이를 위해 Autodesk의 3ds Max 혹은 Maya와 같은 소프트웨어가 널리 쓰인다. 반면, 런타임 애니메이션, 렌더링, 후처리는 응용 프로그램에 의해 실행된다. 게임 프로그램은 대체로 게임 엔진을 이용하여 제작된다.

게임 엔진은 애니메이션, 렌더링, 후처리에 필요한 필수불가결한 요소들을 망라하는 개발 툴인데, 근래의 게임 엔진은 여기에 더불어 물리 기반 시뮬레이션, 사운드, 인공지능 등의 기능도 제공한다. 대표적인 게임 엔진으로는 유니티와 언리얼이 있다.


일반적으로 게임 엔진은 그래픽스 API(Application Programming Interface)를 기반으로 개발된다. 많이 쓰이는 두 가지 APIDirect3DOpenGL이다. Direct3D는 마이크로소프트사의 DirectX API의 구성 요소 중 하나로, 마이크로소프트 플랫폼에서만 쓸 수 있다. OpenGL은 국제 표준 단체인 크로노스 그룹에 의해 관리되는데, 다양한 플랫폼에서 사용되는 표준 API이다. OpenGL ES(OpenGL for Embedded Systems)는 모바일 기기를 위한 API로 OpenGL 기능의 일부로 정의되어 있다.

이들 API는 그래픽스 응용에 필수적인 함수들을 제공한다. 오늘날 이러한 함수들은 대부분 그래픽스 전용 프로세서인 GPU (Graphics Processing Unit) 내에서 하드웨어로 구현되어 있다. 따라서 그래픽스 API는 GPU에 대한 소프트웨어 인터페이스라고 할 수 있다. 즉, 그래픽스 API는 그래픽스 응용 프로그램 혹은 게임 엔진에서 호출하는 함수를 GPU에서 실행 가능한 명령들로 바꿔주는 역할을 한다.


참고

This post is licensed under CC BY 4.0 by the author.