

Rendering is the process of generating an image from a 2D or 3D model (scene) by means of a computer program. [Wikepedia]
컴퓨터 그래픽를 이용해 우리가 볼 수 있는 무언가를 만드는 행위라고 할 수 있다.
2D 또는 3D 이미지, 위의 "아바타" 영화 모두 rendering을 통해 만들어졌다.
그렇다면 이러한 rendering된 것들은 우리는 어떻게 볼 수 있을까?
우리는 "모니터"를 통해 컴퓨터가 rendering한 것들을 보게 된다.
컴퓨터는 이 모니터에 어떠한 화면을 보일지 계산하기 위해 그래픽 카드를 사용하는데
여기에 frame buffer라는 게 있다.
화면 픽셀 하나하나에 무슨 색으로 채울 것인지를 결정한다.
흔히 말하는 4K UHD는 3840x2160x32(가로, 세로, 높이) 크기의 frame buffer를 가지고 있다.
가로, 세로는 화면의 가로, 세로이고 높이는 다음 화면을 의미한다고 볼 수 있다.
하지만 하나의 frame buffer만으로는 변화하는 화면을 표현하기엔 끊임이 심했다.
그래서 두개의 frame buffer를 사용하기로 한다.
화면은 다 만들면 front buffer 와 back buffer를 스위칭한다.
이러한 방법을 double buffering이라고 한다.
이 버퍼에 저장되는 화면은 어떻게 계산할까?
우리는 3차원에 살고 있지만 사실 우리 눈은 2차원으로밖에 세상을 보지 못한다.
물체의 앞면과 뒤면을 동시에 볼 수 없고 왼쪽을 보면서 오른쪽을 볼 수도 없다.

위 사진처럼 우리는 가상의 image plane을 만들어 모니터에 어떤 화면을 표시할 결정한다.
image plane에 rendering할지는 크게 두가지 방법이 있다.
Rasterization은 단순하기 때문에 빠르다. 하지만 도형 자체를 사영하기 때문에 그림자, 반사, 투명도 같은 것들을 계산하기 힘들다.
Ray tracing을 복잡하기 때문에 느리다. 또한 hardware에서 구현하기 힘들다는 단점이 있다. 하지만 Rasterization이 하지 못하는 것들을 다 할 수 있다.
과거에는 그랬지만 ray tracing도 이제 충분히 빨라졌다.
색을 계산한다는 것은 광선을 계산한다는 말과 거의 동일하다.
물체가 보이는 것은 물체가 반사한 빛이 우리 눈에 도달했다는 뜻이니까.
그러한 광선에는 여러 종류가 있다.