OpenGL의 역사

 

OpenGL 소개

 

openGL은 computer graphics rendering API 중 하나로,

이것을 이용하여 여러 고품질 컬러 이미지를 생성할 수 있다.

 

 

 

우리는 GPU 리소스를 보다 효율적으로 사용하기 위해, 그래픽을 렌더링할 때 openGL을 사용하여 프로그래밍한다.

하지만 과거 openGL은 programmable한 pipeline이 아니었다.

 

programmable한 pipeline이 아니기 때문에 간단한 3D 그래픽스 애플리케이션을 만드는 데 사용될 수 있지만,

고급 그래픽스 효과를 구현하거나 정교한 렌더링을 수행하는 데는 제한적이었다.

 

 

버전 업데이트를 거듭하며, 지금은 과거 classic한 기능들을 지원하지 않지만

어떤 방식으로 개선되어 왔는지 간단하게 알아보자.

 

 

 

 

 

 

 

openGL1.0

 

1994년 7월 1일에 처음 출시된 openGL1.0은 완전히 고정된 단계와 기능을 가진 pipeline 이었다.

 

 

vertex와 픽셀 data를 초기설정과 픽셀화(rasterization) 시킨 후,

fragment 들에 색깔과 무늬를 넣어서 혼합하여 이미지를 생성했다.

 

 

 

 

 

 

openGL2.0

 

 

이후 openGL2.0은 프로그래밍 가능한 shader가 추가되어 vertex들의 변환과 조명기능을 증가시켰다.

(vertex shader와 fragment shader 단계가 추가)



하지만 여전히 shader 기능을 추가한 것 외에는 고정 기능 방식을 사용했다.


 

 

 

 

 

 

 

openGL3.0



openGL3.0부터 큰 변화가 있었는데

2.0 버전까진 셰이더 프로그래밍 언어를 이용하지 않는 이전의 방식으로도 화면에 폴리곤을 출력할 수 있었지만,

3.0 버전부터는 프로그래밍 언어( GLSL )를 사용하지 않으면 화면에 폴리곤을 출력할 수 없게끔 필수가 되었다.

 

게다가, 이전에는 새로운 버전에서도 모든 기존 기능을 유지했으나

이제는 불필요한 기능들을 점진적으로 폐기하여 더 효율적인 구조를 유지할 수 있게 했다.

아직까지는 이전 버전과 파이프라인은 동일하게 유지되었다.

 

 

 

 

 

 

openGL3.1

 

 

2009년 3월 24일 출시된 OpenGL 3.1에서는 고정 기능 파이프라인이 제거됐다.

이전 OpenGL에서는 고정된 기능(기본 변환, 조명 등)을 사용했으나, 3.1부터는 모든 그래픽 연산이 셰이더 프로그램에 의해 처리된다.

(programmable pipeline)

 

거의 모든 데이터가 GPU에 있고, 모든 vertex data가 buffer 객체를 통해 GPU에 전달된다.

 

 

 

 

이 버전부터

OpenGL 함수를 호출하고 GPU와 상호 작용하는 데 필요한 환경을 설정하는데 사용되는 context type이 도입되었다.

이것은 OpenGL의 어떤 버전과 기능을 사용할 것인지 결정하고, 그에 따라 애플리케이션의 그래픽 렌더링 동작이 달라진다.



context type은 full 과 forward compatible 둘 중 하나를 설정할 수 있다.

 

  • Full: 현재 버전의 OpenGL에서 폐기된 기능을 포함하여 모든 기능을 사용할 수 있는 컨텍스트.
  • Forward Compatible: 폐기되지 않은 기능만 포함하여, 다음 버전의 OpenGL에 가까운 환경을 제공

 

 

 

 

 

 

 

 

openGL3.2

 

 

2009년 8월 3일 출시된 3.2 버전부터 추가 셰이딩 단계로 geometry shader가 도입됐다.

이를 통해 그래픽스 파이프라인 내에서 기하학적 요소를 수정할 수 있게 됐다.

예를 들어, vertex의 위치를 변경하거나, 새로운 기하학적 요소를 추가할 수 있다.

 

 

 

또한 OpenGL 3.2에서는 context profile 개념이 도입됐다.

프로파일은 어떤 기능이 노출되는지를 제어한다.

이를 통해 개발자는 필요한 기능만 사용할 수 있도록 설정할 수 있다.

 

 

profile은 core와 compatible이 있다. 

core는 현재 릴리스의 모든 기능을 사용할 수 있고, compatible은 openGL의 모든 기능을 사용할 수 있다.

 

 

 

 

 

 

전체적으로 3.0부터 각 단계별로 추가 shader 작업이 가능하게 됐다.

vertex와 fragment 이후, geometry까지 shader가 추가되었다.

 

 

 

 

 

 

 

 

 

 

 

 

openGL4.1

 

2010년 7월 25일 출시된 4.1은 추가적인 shading 단계가 포함되어 있다.

( tessellation control과 tessellation evaluation shader )

 

 

 

Tessellation(테셀레이션)은 3D 모델의 표면을 세분화하거나 분할하는 과정을 의미한다. 

이것은 그래픽 렌더링에서 곡면을 부드럽게 표현하거나 높은 디테일을 가진 모델을 다룰 때 유용하다.


당연히 programmable shader를 사용하여 구현한다.

 

https://youtube.com/shorts/KS3mv6vWG5A?si=CBB8wYho8d88hMeD

 

 

 


새로 추가된 단계들 TCS와 TES는 다음과 같다.

 

 

Tessellation Control Shader (TCS)

TCS는 입력 모델의 제어 포인트를 받아들여 테셀레이션 수준을 제어한다.

각 제어 포인트는 테셀레이션 레벨 및 다른 테셀레이션 관련 매개변수를 설정하는 데 사용된다.

TCS는 입력 모델의 곡면을 분할하기 전에 어떻게 분할할지를 결정한다.

 

 


Tessellation Evaluation Shader (TES)

TES는 TCS에 의해 생성된 제어 포인트와 원본 모델의 정보를 사용하여 실제 테셀레이션된 점을 생성한다.

이 단계에서 모델의 곡면을 부드럽게 표현하기 위해 새로운 정점을 생성한다

 

 

 

Tessellation을 사용하면 고해상도 모델의 세부 정보를 더 정확하게 표현할 수 있거나, 곡면을 부드럽게 표현하여 모델이 자연스럽게 보이도록 할 수 있다.

 

이를 기반으로 주로 지형 또는 지형 기반 모델에서 지형 디테일을 추가하는 데 사용된다.