■ Computer Graphics
3차원 물체를 보여준다는 것은, 기반이 되는 것은 3차원이지만 사진을 찍으면 2차원으로 변하는 것처럼, 우리 눈에 3차원 물체를 2D로 보여주는 것이다. 그래서 3D Computer Graphics라고 하고
렌더링 파이프라인 과정을 거쳐서 계산 후 나오는 결과 이미지를 '프레임 (fps; Frames Per Second)'이라고 한다.
컴퓨터 그래픽스의 종류는 크게 두 가지인데 내가 공부하고자하는
(1) 실시간 [온라인] 컴퓨터 그래픽스 와
(2) 비실시간 [오프라인] 컴퓨터 그래픽스이다.
종류 | 특징 |
실시간 컴퓨터그래픽스 | 시간으로 초당 30프레임 이상을 그려내야하기 때문에 작업을 간략화하고 GPU에서 집중해서 병렬처리를 하는 것이다. 이와 같은 실시간 그래픽스가 필요한 것은 대표적으로 게임 분야이다 |
비실시간 컴퓨터그래픽스 | 하나의 장면을 만들기 위해 짧게는 몇 분 길게는 일주일 이상의 시간을 소요하기에 비실시간 컴퓨터그래픽스라고한다. 대표적으로 애니메이션, 영화 등에 사용된다. |
아래는 컴퓨터 그래픽스의 구성 요소다.
모델링, 리깅, 애니메이션은 주로 아티스트의 분야이고 내가 공부하고자 하는 렌더링, 포스트프로세싱, 런타임-애니메이션은 프로그래머 분야이다.
GPU가 렌더링을 수행하도록 하기 위해선 Graphics API를 호출해줘야하는데 그렇게 호출하도록 설계된 API의 대표적인 예는 DirectX3D와 OpenGL이 있다.
종류 | 특징 |
DirectX | - 주로 Windows 플랫폼에 특화되어 있음 - 일부 개발자들이 더 읽기 쉬운 문법을 가지고 있다고 생각하지만, 이는 주관적임 - 주로 C++기반이며, Windows 환경에서는 COM(Component Object Model)을 사용한다. |
OpenGL | - 크로스 플랫폼을 지원하여 Windwos, MacOS, Linux등 다양한 플랫폼 사용 가능 - 개방형 표준이기 때문에, 여러 제조사의 GPU에서 일관된 동작을 제공 - C언어 기반이지만 다양한 언어에서 사용 가능하다. |
등의 많은 차이가 있다. 주로 게임쪽으로 간다고하면 DirectX를 사용하지만, C++를 공부할 때 전북대 교수님의 무료 강의로 공부하기도 하였고 교수님께서 OpenGL을 활용한 그래픽스 강의를 또한 제공해주시기 때문에 '게임'이라기 보다는 '컴퓨터 그래픽스' 자체에 대한 깊은 이해를 겸하기 위한 목적으로 강의에 따라 OpenGL을 활용하여 공부하기로 결정했다.
■ 공부 이유 및 목표
렌더링 같은 경우 게임엔진 (언리얼, 유니티)에서 잘 해주고 있는데 이를 굳이 왜 공부하냐면 예전부터 그래픽 쪽에 관심이 많았을 뿐더러 코딩을 매우 좋아하기에 이 두가지를 섞어 기술적인 측면으로 컴퓨터 그래픽스에 깊은 이해도를 겸한체 추후 북미에서 그래픽 프로그래머로 일을 하거나 1인 개발을 할 때에도 높은 품질의 그래픽을 보유한 게임을 최적화된 상태로 개발하고 싶어서이다.
먼저 OpenGL을 활용하여 저수준의 그래픽 API로 그래픽스 파이프라인을 직접 제어해보는 경험을 통해 이에 대한 깊은 이해도를 겸하도록 노력할 것이고 추후 게임 엔진 내에 쉐이더 스크립트를 자유롭게 작성하는 능력을 갖추는 것을 목표로 하고있다 (Ex. Unity의 HLSL).
프로그래머 출신 그래픽 프로그래머의 역할은 아래와 같이 여러 가지다
특징 | 설명 |
그래픽스 프로그래밍 | - GPU(그래픽 처리 장치)를 활용하여 그래픽스 파이프라인을 최적화하고 구현한다. - 쉐이더 프로그래밍을 수행하여 렌더링 기술을 개선하고 효과를 추가한다. |
게임 엔진 개발 | - 게임 엔진의 그래픽 부분을 개발하고 최적화한다. - 렌더링, 조명, 그림자 및 특수 효과와 같은 그래픽 기능을 구현한다. |
프로토타이핑 및 실험 | 새로운 기술이나 알고리즘을 실험하고 프로토타입을 만들어 성능 및 효율성을 평가한다. |
최적화 및 성능 향상 | - 그래픽 파이프라인 및 렌더링 프로세스를 최적화하여 게임이나 응용 프로그램의 성능을 향상시킨다. - 메모리 사용량을 최적화하고 최신 GPU 기술을 활용한다. - 컴퓨터 그래픽스 및 이미지 처리 알고리즘에 대한 깊은 이해를 바탕으로 문제를 해결하고 혁신적인 솔루션을 찾습니다. |
툴과 에디터 개발 | 그래픽스 관련 툴과 에디터를 개발하여 아티스트 및 디자이너가 콘텐츠를 쉽게 작업할 수 있도록 지원한다. |
협업과 통합 | 다른 팀과 협력하여 게임 개발 또는 프로젝트의 다양한 부분을 통합한다. 아티스트, 디자이너, 엔지니어와 소통하여 그래픽 콘텐츠의 품질을 유지하고 향상시킨다. |
위와 같은 능력을 갖추기 위해 겪을 과정이 다소 험난하겠지만, 열정과 노력이 있는 한 시간이 해결해줄 문제이다. 이를 위해서 수학도 같이 공부하고있으니 앞으로 다가올 미래가 기대된다. :)
'Computer Graphics > OpenGL' 카테고리의 다른 글
[OpenGL] 모델 행렬, 원근투영행렬 구현 및 적용 (1) | 2024.01.07 |
---|---|
[Computer Graphics] OpenGL, 더블 버퍼링 (0) | 2023.11.16 |