본문 바로가기
Unreal Pipeline/Rendering Pipeline

05 BasePass (G-Buffer & Material) - Unreal Engine

by pp336 2026. 5. 30.

 

 

 


GPU 

 

 

 

 


 이전 주제에서 컴퓨터에서 도형을 그리는 과정에 대하여 다루었습니다. 버텍스 셰이더의 역할과 무엇을 하는지에서부터 래스터 라이즈를 하여 화면상의 픽셀의 어디에서 그림을 그려야 할지에 대한 정보를 알아내는 과정까지 입니다. 디퍼드 렌더링에서는 래스터화를 할때 지오메트리에 대한 정보를 Geometry Buffer(G-buffer)에 기록해둡니다. G-Buffer는 이전까지 도형을 렌더링 하는 과정에서 생성된 다양한 정보를 저장해 두는데, 지오메트리 렌더링 과정에서 래스터화를 거치면서 생성된 픽셀 단위 정보를 기록합니다.   래스터라이즈는 어떤 픽셀을 그려야 하는지를 찾아내는 명령을 한다면, 픽셀 셰이더는 해당 픽셀의 입혀야할 색을 결정합니다. 픽셀셰이더는 래스터 라이저가 생성한 각 프래그먼트(픽셀 단위)에 조명이나 텍스처링, 색상 연산을 수행합니다. 파이프 라인에서 버텍스 셰이더와의 관계도는 다음과 같습니다.

 

 

정점 셰이더(Vertex Shader) → 래스터라이저(Rasterizer)  픽셀 셰이더(Pixel Shader)

 

 

 이제부터는 이야기 되는 주제들은 정점 셰이더와 레스터라이저를 벗어나 픽셀 셰이더에서서 담당하게되는 내용이 주를 이루게 됩니다.

 

 

 


 

 

G-Buffer

 

 

 

 

 G-Buffer는 지오메트리 버퍼라고 불리며, 오브젝트나 및 머티리얼 속성을 픽셀 단위로 기록하여 보관하고 있습니다.  G-Buffer A는 텍스쳐에서 읽은 색상을 저장하고, G-Buffer B에는 Normal 텍스쳐 등등 이미지들이 저장되는 규칙이 있습니다만 현재에서 중요한 포인트는 아닙니다. 여기서 알아야 하는 내용은 이 정보를 활용하여 추후에 다양한 이미지를 합성한다는 점입니다. 라이팅이나 머티리얼의 특정한 용도 및 포스트 프로세스 같이 만들어 내고자 하는 목적에 따라 이미지를 활용합니다. 완성된 이미지를 활용하는게 아니라 중간과정의 이미지를 저장해 두었다가 다양한 최종 결과물을 만들어내는 사용하기에 GPU를 효율적으로 사용합니다. 

 

 

가운데의 이미지를 렌더링하는데 사용되는 정보들의 기반이 되는 G-Buffer의 이미지 리스트 항목

 

 

 

  위의 이미지를 보시면 G-Buffer는 다양한 이미지를 만들어내며 약 10가지의 종류로 렌더링 합니다. 이 이야기는 초당 1프레임의 이미지를 1장을 뽑기 위해서 10장의 G-Buffer의 이미지가 만들어지게 됩니다. 만약 60fps를 기준을 두고 작업을 하게 되면 초당 60프레임이 아닌 600장의 이미지를 생성하게 된다는 말이 됩니다. 이미지는 다양한 합성에 사용됨으로 미압축이 기준으로 되어있고 GPU에서 일정량의 메모리 대역폭을 차지하는 구조가 됩니다. 즉, G Buffer는 어느정도의 메모리를 사용하게 됨을 알 수 있습니다.

 

 

 

 

 

 


 

 

Material Shader

 

 

 

 

 

 

 

 

 

 셰이더는 많은 계산을 하는데 적합 합니다. GPU는 단순하고 많은 작업을 필요로 하는 작업에 특화되어 있습니다. 즉 머티리얼 셰이더는 그래픽 카드에서 픽셀의 색을 수정하여 계산하는 프로그램이라는 의미가 됩니다.  G-Buffer의 지오메트리 렌더링 과정을 마친 이후로 부터 전체 렌더링 끝날 때까지 사용됩니다. 전체 머티리얼 시스템은 픽셀 셰이더로 구동되고, 현재까지 다뤄지지 않은 라이팅이나 반사, 포스트 프로세스, 컬러 보정 또한 픽셀 셰이더로 구동됩니다.

 

 주제를 벗어나지 않게 머티리얼 셰이더로 돌아와서 설명하자면 포토샵에서 이미지를 열거나 혹은 단순 이미지 한장을 확대하다 보면 박스 형태의 블록이 보이게됩니다. 이를 픽셀이라 부르는데, 머티리얼 셰이더는 해당 픽셀에 대한 입력 값을 의미합니다. 어떠한 의도로 사용되서 작성된 현재 값이나 변화를 의도하려 다른 입력 변수를 만들게 되면 계산을 한 다음에 결과를 출력합니다. 계산값이 적용되도록 적용된 규칙에 대한 픽셀에 모두 적용됩니다.

 

현재 이미지에서 보이는 격자의 블록 한칸을 픽셀이라 정의한다.

 

 

 

 픽셀 셰이더는 셰이더 언어로 작동 됩니다. 깊게 들어가는 것이 목적이 아니라 셰이더 언어는 플랫폼 마다 다르고, 거기에 사용되는 별도의 셰이더 언어 코드가 있다고 보시면 됩니다. 게임 엔진과 리얼타임 렌더러는 보통 이렇게 구성 된다고 생각하면 됩니다. 해당 인젠에서 사용되는 언어코드를 사용자 입장에서 보기 쉽게 풀어놓은 것이 언리얼에서 마스터 머티리얼 입니다. 작성되고 핵심 요소들이 결정 되며 텍스쳐를 사용해서 모델에 출력하여 렌더링을 합니다.

 

 

머티리얼 셰이더에 입력된 값은 현재 그림에서 해당 머티리얼이 사용되도록 정의된 오브젝트의 해당 된 픽셀을 그리는데 사용된다.

 

 

 

좌측의 이미지가 만들어진 모델링이고, 모델링에 텍스쳐 정보를 표현되면 우측과 같은 느낌으로 변화하게 됩니다.

 

 

머티리얼 셰이더와 결합을 하게 되면 보다 사물이 현실적인 그래픽으로 보일 수 있는 작업을 더할 수 있다.