개발/Graphics

OpenGL Super Bible 그래픽스 공부하기 - 1. OpenGL 기본개념이해

huiyu 2018. 1. 13. 17:40


공부를 시작하며...
새해엔 미루고 미루던 그래픽스, OpenGL 공부를 시작하려한다...
그동한 GL은 이것저것 하느라 구현은 해봤지만, 항상 제대로 알고 있진 않다고 생각했다.
제대로 공부를 안했었기 때문인거 같은데 2018년부터 'OpenGL Super Bible'을 통해 공부해보려 한다.
이 책은 몇번씩 앞장은 봐보긴 했다. 그렇게 앞장만 몇번씩 봤다... 일단 두꺼운 책 두께 때문에 꾸준히 공부하긴 힘들었다.
이번에 시작할 땐, 한번에 많은 양을 나가기보단 블로그에 조금씩 정리해나가면서 천천히라도 진도를 나가는 걸 목표로 해야겠다.

첫 장은 OpenGL에 대한 기본적인 설명부터,


Part 1. OpenGL 기초

   - 파이프라인이란?
   - OpenGL의 역사와 현재
   - 개념 정리

  OpenGL이란?
   - Application이 그 하부에서 동작하는 장치의 그래픽스 서브시템에 접근/제어를 위한 인터페이스 (API)

-> 이식성 증대, 고품질 제품 생산에 집중 가능



1.1 OpenGL과 그래픽스 파이프라인

  1) OpenGL은 할당받은 작업들을 병렬화 할 수 있는 기본 단위로 분할한다.
     => 작업을 분할/병렬화하여 성능 향상 
    (*이는 공장에서 각 부품을 각각 나눠 생산하여 생산성 향상과 대량생산이 가능하게 한 것과 같다.)

  2) OpenGL은 그래픽스 서브시스템의 추상 레이어를 제공함으로써 GPU에 대한 자세한 정보를 알 필요가 없다.
     *OpenGL의 설계원칙은 너무 높지도(!?) 너무 낮지도(!?) 않은 추상화 수준의 균형을 이루는 것이라고...(이렇게 어려운 목표를?!)
     - 높은 수준의 추상화 : 프로그래밍은 쉬우나 고급 하드웨어 기능 사용 어려움.
     - 낮은 수준의 추상화 : 수행되는 아키텍쳐의 수준 특성으로 개발엔 어려움

  3) 현재의 GPU는 ?
     - teraflop의 컴퓨팅파워, 초당 수백 기가 바이트의 속도로 엑세스 가능한 기가바이트급 메모리, 높은 화면 갱신률
     - GPU는 매우 유연해서 물리 시뮬레이션, 인공지능, 오디오 프로세싱 등의 작업도 수행

   *GPU는 쉐이더(Shader)라 불리는 작은 프로그램을 실행하는 쉐이더 코어로 구성
    (쉐이더 코어 : 다수의 작은 프로그래밍 가능한 프로세서)



 - 개별은 상대적으로 처리량이 낮음
 - 비 순차적 명령 실행/고급 기능 부족
 ==> 수십/수천개의 Core를 가져, 이를 통합해 어마어마한 양의 일을 수행

* 단순화된 그래픽스 파이프 라인


1.2 OpenGL의 기원과 진화

  - Silicon Graphics, Inc(SGI)의 Iris GL로 시작
    (이식성 중요 인식, 시스템 의존 제거, 공개 표준 릴리즈)
  * 1992년 6월 OpenGL 1.0, 그 후 20년...

  * OpenGL Core Profile
    - 처음 고성능 그래픽 가속기는 개인용 컴퓨터엔 일반적이지 않음. 고성능 그래픽 워크스테이션에서만 사용.
    - 시간이 흘러 그래픽스 하드웨어의 가격이 내려가고 성능향상
       -> 구매 가능한 프로세서에 새로운 기능이 추가되며, OpenGL에도 새로운 기능 추가
   - 다양한 기능이 추가되며 여러가지 방법이 혼재한 상태로 20년이란 세월이 흐름...
   - 이러한 기능들은 성능에 영향을 미치거나, 현재 GPU와는 맞지 않는 경우도 다수 존재.(이런걸 모두 맞추기 위해선 많은 비용 필요)
   **그래서 두가지 Profile로 분리되었다.
      -Core profile : 현대에 맞는 기능만 남긴 프로파일
      - Compatibility profile(호환성 프로파일) : 1.0v부터의 호환성 유지, 92년도에 작성한 sw도 현재에 실행이 가능하다고 한다.
      ->그러나 Core profile을 사용하길 권고

1.3 프리미티브, 파이프라인, 픽셀

  - 프리미티브(Primitive) : OpenGL 렌더링 기본단위, 기본 렌더링 타입은 점, 선, 삼각형
    => 보통 복잡한 서피스를 많은 수의 삼각형으로 분할하고,
       OpenGL로 보내어 래스터라이저(Rasterizer)라고 불리는 하드웨어 가속기를 사용하여 렌더링한다.
     *래스터라이저(Rasterizer) : 3차원으로 표현된 삼각형을 화면에 그려질 일련의 픽셀로 변환하는 전용 하드웨어
  - 버텍스(Vertex) : 좌표 공간상의 하나의 점
  - 그래픽스 파이프라인 : 단방향, 데이터 형태로 파이프라인의 앞단에 들어오고, 각 스테이지를 거쳐 최종 파이프라인에 도달.
    -> Front-end : Vertex, primitive 처리, 점/선/면 구성 -> 래스터라이즈
    -> Back-end : 래스터라이저 이후, 깊이 및 스텐실 테스트, 프레그먼트 쉐이딩, 블렌딩, 이미지 갱신

728x90
반응형