공부/컴퓨터 그래픽스

OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 Chapter 01 서론

bokob 2024. 6. 25. 15:16

컴퓨터 그래픽스

  • 컴퓨터를 이용하여 영상(image)을 생성하는 작업

프레임(frame)

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

 

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

5개의 단계로 구성

첫 세 단계인 모델링(modeling), 리깅(rigging), 애니메이션(animation)은 그래픽 디자이너가 오프라인으로 수행

런타임(run-time)에는 프레임 별로 애니메이션이 재생되고 렌더링(rendering)과 후처리(post-processing) 수행

 

모델링(modeling)

모델링 단계에서는 모델을 만들어 낸다.

  • 모델(moel)
    • 가상의 그래픽스 환경을 구성하는 각각의 물체를 컴퓨터가 처리할 수 있는 방식으로 표현한 것
    • 보통 폴리곤(polygon)들로 구성된다. 폴리곤으로 구성된 물체는 폴리곤 메시(polygon mesh)라 부른다.

 

모델링의 범위는 3차원 물체에 국한되지 않는다. 예를 들어, 3차원 물체에 입혀져서 시각적 사실성을 높여주는 텍스처(texture)의 제작 또한 매우 중요한 모델링 작업

가장 간단하면서도 가장 많이 사용되는 텍스처는 물체 표면에 입혀지는 이미지

이 텍스처는 런타임에 야구선수 캐릭터 폴리곤 메시에 입혀지고 위의 우측 사진처럼 된다.

 

리깅(rigging)

뼈가 움직일 때 그 주변의 폴리곤이 따라서 움직이도록 설정하는 과정

폴리곤 메시로 표현된 캐릭터의 애니메이션을 위해 뼈대가 캐릭터 메시에 삽입된다.

위 사진에서 각각의 뼈는 3차원 물체인 것처럼 표현되었지만, 대개 행렬(matrix)로 표현되는 수학적인 개체이다.

 

애니메이션(animation)

애니메이션을 위해서는 골격(skeleton)을 구성한 후, 각각의 뼈(bone)의 움직임이 야구선수의 폴리곤 메시에 어떻게 반영될 것인가를 정의해야 한다. 정의하는 과정을 리깅이라 한다.

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

 

렌더링(rendering)

하나의 3차원 장면이 주어졌을 때 이를 2차원 영상, 즉  프레임으로 만드는 작업을 렌더링이라 한다.

렌더링은 매우 복잡한 연산을 요하는 단계로, 텍스처를 물체 표면에 입히는 텍스처링(texturing), 그리고 빛과 물체의 상호 작용을 처리하는 라이팅(lighting)이 그 핵심을 이룬다.

 

후처리(post-processing)

모션 블러(motion blur)

  • 빠른 속도로 진행되는 애니메이션의 경우, 한 프레임에 그 이전 프레임의 잔영을 남기면 시각적 사실성을 높일 수 있다.

초점 심도(depth of field)

  • 일반 사진과 같이 초점이 맞춰지는 영역 바깥 부분을 흐릿하게 처리하면 사실감을 높일 수 있는데, 이를 초점 심도(depth of field)라 한다. 

 

1.2 그래픽스 API

그래픽 디자이너는 오프라인 상태에서 모델링, 리깅, 애니메이션 작업 수행.

이를 위해 Maya, Blender 같은 소프트웨어가 쓰인다.

런타임 애니메이션, 렌더링, 후처리는 응용 프로그램에 의해 실행된다. 게임 프로그램은 대체로 게임 엔진을 이용하여 제작

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

 

그래픽스 API(Application Programming Interface)

  • 일반적으로 게임 엔진은 그래픽스 API를 기반으로 개발
  • 대표적으로 Direct3D, OpenGL이 있다. OpenGL ES(OpenGL for Embedded System)는 모바일 기기를 위한 API로 OpenGL 기능의 일부로 정의되어 있다.
  • 그래픽스 응용에 필수적인 함수들을 제공. 이러한 함수들은 대부분 GPU(Graphics Processing Unit) 내에서 하드웨어로 구현되어 있다.
  • 그래픽스 API는 GPU에 대한 소프트웨어 인터페이스라고 할 수 있다. 그래픽스 API는 그래픽스 응용 프로그램 혹은 게임 엔진에서 호출하는 함수를 GPU에서 실행 가능한 명령들로 바꿔주는 역할을 한다.

 

출처

[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]을 보고 공부하고 정리한 내용