개인 공부/컴퓨터그래픽스

01. Rendering Pipeline

Sanyo 2025. 6. 7. 16:39

현실 세계와 비슷하게 만들기

 

Model

 

 

 

최대한 현실과 같은 그래픽을 만들기 위해 현실을 모방하려고 노력해야 한다. 먼저, 모델링을 살펴보면 현실 세계에 있는 물체를 그래픽으로 표현하기 위해, Polygon을 사용하는 걸 볼 수 있다. 많은 수의 폴리건을 사용하게 되면 더 정교한 모델을 만들 수 있지만 그로 인해 발생하는 손해 또한 감수해야만 할 것이다.

 

Camera

 

모델을 만들었으면 이제 카메라를 구현해야 한다. 현실세계에서 우리는 눈을 통해 물체를 볼 수 있다. 이 눈을 모방한 것이 카메라라고 볼 수 있는데, View mode는 2가지가 있다. (Perspective, Orthographic)

 

 

Perspective는 원근법이 적용된 것이다. 인간의 눈과 유사한 것이라고 생각하면 되고, Orthographic은 원근감이 없는 것을 말한다. 그래서 거리와 상관없이 동일한 크기가 적용된다. 컴퓨터 구조상 존재하는 카메라 뿐 아니라 실제 카메라도 Orthographic을 제공하는 것이 있다.

 

Lights

 

 

현실세계의 빛은 정말 여러 종류가 있다. 이걸 다 구현하는 건 불가능하기 때문에 이와 유사하게 구현하기 위해서 몇개의 종류만 사용한다.

 

  • Point light
  • Directional light
  • Spot light

 

 

Attributes

 

현실 세계에서 물체는 그저 구조만 존재하지 않는다. 재질, 굴곡, 색깔 등 다양하게 이루어져 있다. 이와 유사하게 구현하기 위해서, 많은 기법들을 사용한다.

 

위 내용들은 나중에 더 깊게 다뤄볼 것이다.

 

Rendering Pipeline

Rendering Pipeline은 컴퓨터 그래픽에서 데이터를 처리하는 순서, 과정이라고 생각하면 된다. Open GL에서는 다음과 같은 Rendering Pipeline이 있다.

 

 

Vertex processor

Vertex processor는 물체의 Vertices를 하나의 좌표계로 변환해준다. 이게 무슨 소리냐면 물체 그 자체의 정보는 고정되어 있지만 게임을 보면 물체는 계속 움직일 수도 있다. 그래서 미리 정해둔 특정 좌표계로 변환을 해서 물체가 원하는 위치에 갈 수 있도록 해 주는 것이다. 나중에 더 자세히 알아보겠다.

 

Clipping, Rasterization

Clipping은 소프트웨어적으로 구현할 수도 있지만 하드웨어가 지원해주기도 한다. Clipping은 쓸모 없는 것을 잘라낸다고 보면 된다. 오픈월드 게임을 생각해 보면 맵에 정말 수많은 오브젝트들이 있는데 안 보이는 것까지 전부 다 그려줄 필요는 없을 것이다. 

 

 

Rasterizer는 이 정보들을 실제 화면에 보여줄 정보들로 변환하는 과정을 진행한다. 즉, 픽셀로 변환해준다.

 

당연히도 모니터 픽셀은 한정되어 있기에 기존의 정보, 선들을 잘 유지하면서 변환하는 것이 중요할 것이다.

이렇게 생성된 픽셀 정보를 Fragment라고 부른다.

 

Fragment Processing

 

이제 이제 각 Fragment를 받아서 화면에 그리기 전, 각 Fragment의 색깔을 결정하는 작업이 남았다. 이때 이 색깔은 Texture에서 받아올 수도 있고, Vertex에 정보가 담겨져서 올 수도 있다. 위에는 설명을 안 했지만 Vertex Processor에서 Vertex를 반환할 때 색깔, Normal, 등등 여러가지 정보를 담아서 넘겨줄 수 있다.

 

또한, 빛 등 여러 요소들을 적용해서 색깔을 결정하는 단계이기도 하다.

 

이렇게 해서 나온 pixel들을 그려주면 끝이다.

 

Rendering Pipeline의 종류 & Shader

Fixed Rendering pipeline과 Programmable Rendering Pipeline이 있다. 요즘은 Fixed Rendering Pipeline은 거의 쓰지 않는다.

Fixed는 말 그대로 고정되어 있다는 뜻으로, 위 Rendering Pipeline의 Processor들을 변경할 수 없는 것을 말한다.

 

Programmable Rendering Pipeline은 자기 입 맛에 맞게 Programming을 해서 넣어줄 수 있어서 훨씬 많이 쓰는 방식이다.

이렇게 만든 Program을 Shader라고 한다.