렌더링

1 일반적 의미

Render의 기본 의미는 무엇인가를 지금과는 다른 어떤 상태로 만든다는 뜻.

음악에서 연주자가 악보에 있는 기록된 음악을 연주자 자신만의 기술과 감성으로 표현(연주)하는 것을 렌더링이라고 부른다. 마찬가지로 작곡 프로그램에서 기보된 대로 실제 들을 수 있는 음악을 추출하는 작업도 렌더링이라고 부른다. 음악하는 사람들에게 아주 친숙한 용어.

요리에서 동물의 지방에서 기름을 추출하는 것도 렌더링이라고 부른다. 당신이 한국에서 일하는 경우, 주방에서 왕따가 되고 싶지 않다면(...) 렌더링이라고 하지 말고 그냥 기름을 추출한다고 하자.

2 그래픽에서의 의미

3D분야의 최종보스

또는 2차원 또는 3차원 장면을 바탕으로 컴퓨터를 이용해 사진이나 영상을 만들어내는 과정 또는 그러한 기법을 말하기도 한다. 보통 '3D 렌더링'과 같이 3D 이미지/영상과 깊은 관련을 맺고 있으며, 기술적 발전도 이곳에서 주로 이루어진다.
건물 설계, 게임, 애니메이션 등에 주로 사용된다.

이 문서에서는 3D 렌더링을 주로 다루고 있다.

해외에서는 영화 촬영과 동시에 레이트레이싱 렌더링이 이루어지는 기법을 적용한 단편 영화가 나왔다. 제작 영상. VRay를 이용했는데, 실시간 레이트레이싱 뷰포트는 프로그램 자체가 지원하는 경우가 있으므로 별로 신기할 것은 없으며[1], 보통 그 뷰포트는 보통 미리보기로만 쓰인다. 실제 렌더링은 이후에 오랜 시간을 걸쳐 이루어진다. 광선 추적을 적게 하면 출력에 노이즈가 생기며, 당장 영상 속 카메라를 보아도 화면에 자글자글한 점들이 보인다. 그래서 노이즈를 없애려면 광선의 개수를 높여야 하는데, 이렇게 되면 사진 하나를 렌더링하는 데에도 GTX960급 GPU에서 수 분에서 수십 분이 걸리는 경우가 많다. 이것이 영화와 게임 사이에 그래픽 차이가 생기는 이유이기도 하다. 게임은 부드럽게 하려면 최소 초당 30번 렌더링해야 하지만, 영화는 시간이 게임보다 주어진 시간이 엄청나게 차이가 나기 때문.

2.1 방식

2.1.1 와이어프레임 렌더링


이름 그대로 골격만 렌더링하는 방식이다. 모양만을 보여주고 렌더링에 걸리는 시간도 빠르기 때문에 주로 작업용으로 쓰인다.
참고로 1972년에 이 방식을 이용해서 최초의 단편 애니메이션을 만들기도 했다.

위 사진은 보이지 않는 면에 대해서도 선이 보인다. 이러한 선들을 제거하는 기술이 바로 은선 제거 기술이다.

2.1.2 Local Illumination

Phong-shading-sample.jpg
위의 와이어프레임의 면에 색을 입힌 것이 Local Illumination이다. 이를 이용해서 드디어 실제와 유사한 모양의 사진을 만들 수 있다.
와이어프레임에 그대로 색만 입혔기 때문에 렌더링하면 왼쪽(Flat Shading)과 같이 투박한 모양이 나온다. 여기에 그림자 등을 추가하여 실제와 유사한 모양으로 바꾸는 것이 셰이딩이며, 오른쪽은 Phong Shading 기법을 사용하여 나온 결과물이다.[2] 셰이더에는 Phong 셰이딩 말고도 여러가지 셰이더가 있으며, 게임에서 가장 많이 쓰이는 것 중 하나는 SSAO가 있다. 로컬 일루미네이션의 근본적 한계로 색을 입히고 셰이딩을 하여 현실적으로 만드는 것이기 때문에, 반사와 산란, 간접광에 취약하다. 로컬 일루미네이션에서는 빛의 반사와 산란이 일어나지 않아 게임 개발 등지에서는 거울이나 간접광을 만들 때 반사 텍스쳐나 간접광을 일일이 배치해야 한다. 수준 높은 게임엔진은 그 과정을 한번에 할 수 있게 하겠지만, 기본적으로는 저 과정이 모두 들어가 있다. 물론 이런 단점이 있는데도 왜 쓰는가 하면, 아래 항목에 비하면 연산량이 없다고 봐도 무방하기 때문.

2.1.3 Path tracing

[1]
Ray tracing혹은 Global illumination이라고 불리기도 한다. 픽셀 하나하나를 통과하는 광선들이 있다 가정하고 그 광선을 추적하는 방식으로 당연히 현실에 가장 가까우며 셰이더의 필요성이 위 방식에 비해 현저히 낮다. 셰이더 자체가 패스 트레이싱을 할 수 없는 로컬 일루미네이션에 현실감을 주기 위해 많이 쓰이기 때문.[3] 대신 픽셀 하나하나를 통과하는 광선이 있다 생각하기 때문에, 연산량이 하늘을 찌른다. 게다가 광선의 산란이나 반사를 추적하기 위해서는 한 픽셀에 여러 번 연산을 해야 하는데[4] 이 정도의 연산은 GPU가 엄청난 발전을 거듭한 현재에도 영화에나 쓰이며 1080p의 해상도는 아득히 높고 540p에 GTX1080을 4개 SLI해도 노이즈 없이 60프레임을 달성하려면 갈 길이 멀다.

레이트레이싱을 이용한 게임 엔진이 개발중이다. 해당 영상은 Titan 2개[5]로 찍은 것이며 그럼에도 불구하고 이동중에는 노이즈가 엄청나게 많이 생긴다. 정지 화면에서는 괜찮지만 게임 엔진 특성상 정지 화면에서만 잘 나오는 것은 큰 문제다.

하지만 파스칼 타이탄x를 4way sli 한다면? 그래도 1080p는 멀었다 애초에 파스칼은 최대가 2way sli다
  1. 대표적으로 Blender
  2. 참고로 퐁 쉐이딩은 화소별로 색을 계산하여 컬러와 하이라이트를 표현할 수 있지만 계산 시간이 Flat Shading보다는 훨씬 오래 걸린다.
  3. 물론 후처리에 뭔가를 합성한다든지 하는 것들에도 쓸 수 있다.
  4. 반투명한 물체에서는 10의 광선 중 5의 광선이 산란되고 5의 광선만 통과하는 등의 변수가 있으며, 산란의 경우 방향이 모두 다르다. 이런 이유로 연산이 적을수록 노이즈가 많다.
  5. Titan 하나가 970보다 낮으며 1080 성능의 약 2/3이다.