본문 바로가기
유니티 공부/Unity

Unity - 랜더링 파이프라인(Rendering Pipeline)

by 코딩하는 돼징 2024. 5. 8.
반응형

랜더링 파이프라인개념을 들어가기 앞서 먼저 Render 영어 단어에 대해서 알아보자

Render는 표현, 묘사의 뜻을 가지고 있는 단어이다.

 

랜더링 파이프라인(Rendering Pipeline)

간단히 말하면 3D화면을 2차원으로 표현하는 과정이다.

3D 입체들을 전부 그물로 표현하고, 이를 적절한 위치에 배치하여 2차원으로 납작하게 하고 그 그물의 구멍들에 어떤 색을 채워줄지를 결정하는 것이다.

https://vulkan-tutorial.com/Drawing_a_triangle/Graphics_pipeline_basics/Introduction

Input Assembly

이 그물이 Mesh라고 불리는 기능이다. 이는 삼각형의 세개의 꼭짓점으로 이루어져있다.

왜 삼각형으로 생겼을까?

삼각형의 조합으로 다양한 형태를 만들 수 있기 때문이다. 예를 들어 삼각형 두개를 붙이면 사각형이 되고, 삼각형 3개를 붙이면 오각형이 된다. 이러한 조합으로 물체의 겉면을 수많은 삼각형으로 표현할 수 있다.

ex) 예를 들어 캐릭터의 얼굴을 만든다고 가정해보자, 실제 사람과 같은 형태의 캐릭터의 얼굴은 평평하지 않고 울퉁불퉁할 것이다. 이러한 형태를 정확히 표현하기 위해서는 많은 다각형이 필요하다.

https://www.youtube.com/watch?v=BMT0xCxP6w8

컴퓨터는 이 삼각형의 꼭짓점 좌표들을 기억함으로써 그 대상을 알 수 있다. 

이러한 삼각형들의 좌표는 XYZ축으로 표현된 공간 좌표(x,y,z)와 함께 수직인 방향과, 색상 정보가 저장된다.

하지만 각각의 삼각형들은 서로 연결되어 있기 때문에, 서로 붙어있는 삼각형은 똑같은 정보를 중복으로 기억하는 것은 엄청난 자원 낭비이다.

https://www.youtube.com/watch?v=BMT0xCxP6w8

그러므로 꼭짓점 정보를 최대한 중복없이 순서대로 저장하는 Vertex Array라고 하는 꼭짓점 리스트를 만들어 놓고 삼각형을 엮는데 필요한 정보를 따로 저장하는 IndexArray을 사용한다.

 

간단히 정리하자면 가상의 공간 속에서 3차원의 입체적인 정보를 삼각형으로 쪼개어 거대한 그물 뭉치로 표현하는 과정을 Input Assembly라고하며 렌더링 과정의 가장 처음 수행하는 단계이다.


Vertex Shading

Input Assembly에서 만들어진 입체물들을 하나의 공간으로 모으는 작업이다. 즉 컴퓨터 그래픽스에서는 플레이어, 몬스터, 배경들이 독립적인 그래픽 툴에서 만들어지고(Object Space), 이 사물들의 크기나 각도를 조정하고 적절한 위치에 배치하며 하나의 세상(World Space)을 구축하게 된다.

 

예를 들어 우리의 눈이 냉장고 안을 들여다보고 있다면 거실에 있는 소파가 현실에 있더라도 우리의 눈(View Space)에는 보이지 않는다. 냉장고 안을 가까이에서 보고 있다면 우리 눈의 시야 각에 따라 그 외부에 부분들이 잘라서 보인다(Clip Space). 

 

컴퓨터 그래픽스 관점에서 보면 서로 다른 공간에 있던 각 입체 삼각형 그물 꼭짓점 정보들을 크기를 조절하고 회전시키며 위치를 이동(Transform Matrix, 변환 행렬)할 수 있도록 행렬(Model Matrix)을 곱해준다. 각각의 공간들을 Local Space라고 부르고 각각의 공간에 존재하던 녀석들을 연속된 행렬 연산을 통해 하나의 우주인 WorldSpace속에서 그 크기와 위치 회전 등이 적절하게 바뀌어 예쁘게 자리 잡게된다.

World Space에서 어느 시선으로 보고 있는지 처리하기 위해 다시 한번 행렬(View Matrix)연산으로 카메라 시선에 따라 변환을 해준다. 이는 카메라 시점에 따라 World Space를 변환하여 원하는 시점으로 변환해주는 것이다.

https://steadycodist.tistory.com/entry/%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84Graphics-%EB%A0%8C%EB%8D%94%EB%A7%81-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8Rendering-Pipeline

모니터의 2차원 면에서 보았을 때의 이미지 단면 정보만을 추려내는 행렬(Projection Matrix) 연산을 수행한다. 이 과정에서는 3차원 공간을 2차원으로 투영하여 화면에 표시될 최종 이미지를 생성한다. 이러한 단면 정보를 추려내는 과정에서 Clip Space가 만들어진다.

 

정리

각각의 공간에서 각각의 크기로 독립적으로 존재하던 3D입체물들의 삼각형 그물 Mesh 정보를 하나의 공간으로 합치고 적절하게 변형하여 배치한 뒤 이를 바라보는 카메라 시점에 따라 2차원으로 바꾸는 과정을 거친다. 각 삼각형 꼭짓점 Vertex 정보를  변형하는 과정이라고 하여 Vertex Shading이라고 한다.


Rasterization

Vertex Shading 마치고나면 오브젝트가 삼각형의 그물로만 표현되어있다. 그물안도 픽셀로 가득 메워져야 실제 우리가 바라던 오브젝트의 형상을 볼 수 있다. 그래서 여러 삼각형들 중에 실제로 픽셀 채워야 할 영역이 어디인지를 계산해야 한다.

래스터화 과정을 거치면 각 삼각형들의 꼭짓점들이 제각각 가지고 있는 색깔과 방향 정보를 기반으로 그 사이사이를 그라데이션 같이 서서히 색이 변해가는 것으로 채워주며(Interpolation, 보간) 색 뿐만 아니라 방향 위치 등 모든 것의 정보를 그 사이사이 값으로 부드럽게 채워주게 된다.

모니터 Full HD / 4K UHD 크기를 벗어난 부분들은 픽셀로 채우지 않고 실제로 삼각형 그물 속 픽셀로 표현이 되어야 할 부분들을 계산하는 과정을 Rasterization이라고 한다.


Fragment Shader(Pixel Shader)

래스터화 과정 후 각 픽셀이 어떤 색을 가지느냐 어떤 질감을 가지느냐 등이 결정되는 Pixel Shading라고 하는 과정을 거치면 최종적인 픽셀의 색이 결정된다.

 

컴퓨터 그래픽스에서의 Shading이란?

조명과 재질의 상호작용을 고려해서 색을 결정하는 작업이다. 삼각형 접점 단위로 이루어지기도하고 픽셀 단위로 이루어지기도 한다.

https://www.youtube.com/watch?v=e_YJ45cZ3zE

 

Phong Shading

사실적인 픽셀 색감을 결정하기 위해 포장지로 삼각형 그물로된 물체를 감싸는 텍스처링이라는 기법이다. 음영을 다양한 특성으로 추출한다.

 

https://www.youtube.com/watch?v=e_YJ45cZ3zE

1) 주변광(Ambient light ) - 지역 조명에서 발생하는 일반적인 빛

2) 난반사(Diffuse light ) - 빛을 물체 표면에 부딪혀 여러 방향으로 확산되는 반사이다.

3) 경면광(Specular light) - 표면이 얼마나 윤곽이 뚜렷한지와 같은 특성에 따라 달라지며, 반사되는 빛의 방향과 강도를 결정한다.

 

Physically Based Shading 

질감에 따른 빛 반사, 사실적인 물리현상을 구현하는 방법을 사용한다.

 

 

 

 

 

 

본 게시글은 https://www.youtube.com/watch?v=BMT0xCxP6w8을 참고하여 작성하였습니다.

 

반응형

댓글