개발면접준비

포워드 렌더링과 디퍼드 렌더링

개발지식 블로그 2025. 1. 2. 18:35

서론

렌더링, 즉 어떤 오브젝트를 화면상에 그릴 때 포워드 렌더링을 하는 방법과 디퍼드 렌더링을 하는 방법이 있다. 각각은 어떤 것을 의미하고 어떤 상황에서 쓰며, 장단점은 무엇일까?

 

본론

포워드 렌더링이란?

포워드 렌더링은 말 그대로 해석해보면 앞에서 렌더링 한다는 말이다.

vertex buffer에 있는 정보를 CPU에서 GPU로 전달. 즉, object 단위로 vertex shader와 fragment shader를 거쳐서 렌더링 한다. 이때 fragment shader에서 라이팅 처리를 수행한다.

따라서 각 오브젝트와 각 광원에 대해 실시간 라이팅을 계산한다. 

 

 

디퍼드 렌더링이란? 

디퍼드 렌더링은 말 그대로 해석 해보면 지연된 렌더링이란 뜻이다.

즉, 각각의 정보를 바로바로 CPU에서 GPU로 전달 하는 것이 아니라 gBuffer(Geometry buffer)라는 곳에 저장 후 gBuffer에 대한 정보로 렌더링 하는 것이다. gBuffer에 object의 Diffuse, Depth, Specular, position, normal, ambient 등의 정보들을 저장한다. 즉 모든 오브젝트와 광원의 정보들을 한 번에 GPU로 전달하여 렌더링 한 후 이 과정에서 얻은 정보들로 라이팅을 처리하기 때문에 화면에 보이는 픽셀만으로 계산을 하기 때문에 오브젝트와 광원의 수가 증가하더라도 일정량 이상의 계산만이 필요하다. 따라서, 많은 수의 실시간 lighting계산을 요하는 scene에서 drawcall을 줄일 수 있어 유리하다.

 

장단점

포워드 렌더링은 벌텍스 정보들을 바로 전달하여 계산 하기 때문에 높은 메모리 대역폭이 필요하지 않다.

각각의 정보를 바로 바로 계산하기 때문에 세세한 표현에 유리하다.

수많은 오브젝트와 광원을 묘사하려면 계산 수가 기하급수적으로 늘어나므로 불리하다.

 

디퍼드 렌더링은 결국 gBuffer를 주고받아야 하므로 높은 메모리 대역폭을 요구한다.

모든 정보를 한 번에 처리하므로 세세한 표현에 불리하다. 겹치는 오브젝트에 대해 계산하지 않기 때문에 알파값을 요구하는 오브젝트(투명한 오브젝트 등)를 표현하지 못한다.

오브젝트와 광원의 수가 늘어나도 일정한 량의 계산만 하면 되기 때문에 대규모 scene 묘사에 유리하다.

결론

포워드 렌더링과 디퍼드 렌더링에 대해서 알아 보았다.

마무리

위의 내용을 바탕으로 개발자 면접 간

1. 포워드 렌더링이란?

2. 디퍼드 렌더링과 비교해서 말해보세요

3. 각각의 렌더링의 장단점?

4. 어떤 장면에서 각각의 렌더링이 최적으로 적용될 수 있을까요?

등에 대한 질문을 생각해 볼 수 있겠다. 스스로에게 질문을 해보고 답해보자.

 

헷갈리는 부분은 보완하기! 찡긋 O.<

 

틀린 부분이나 보완해줬으면 하는 내용이 있으면 댓글로 알려주세요! 추가 설명이 필요하신 부분도 댓글로 알려주세요.

어떠한 피드백도 환영입니다. 긴 글 읽어주셔서 감사합니다.