주의 : 이 글의 목적은 자기계발 용도와 게임에서 쓰이는 각종 그래픽옵션 관련 단어 (안티에일리어싱, 셰이더, 텍스쳐 품질등) 들이 처음 보는 사람에게는 굉장히 생소하고 어려워 보이기 때문에 해당 부분에 대한 이해를 쉽게 하기 위해 작성되었습니다.
주의 : 해당분야는 전문적인 분야이며 그리고 실시간 발전되는 기술입니다. 지금도 새로운 기술들이 나오고 있어 틀린 부분이 있을 수도 있습니다.
이 글은 안될공학님 유튜버님의 자료와 저의 의견이 들어간 글입니다.
1. Vertex Shading
지난 1편에서는 축구공과 메시를 모니터 화면속에 표현하기 위해 여러가지 삼각형이 각각의 Vertex, Index Array를 통해 꼭짓점 정보와 특정 꼭짓점 연결 정보를 저장된 상태로 축구공과 메시를 수많은 삼각형으로 구성된 그물인 Mesh로 표현 하는 Input Assembly 과정을 보았다.
우리가 흔히 마블에서 볼 수 있는 스파이더맨과 닥터 스테리인지 멀티버스에서와 같이 메시와 축구공 골대가 여러개의 우주속에 존재한다고 가정 해보자. 예를 들어 한 우주에는 아무 것도 없고 축구공만 있다. 다른 우주에는 골대, 또 다른 우주에서는 메시가 허공에서 공을 차고 있다고 한번 가정해보자.
이렇게 각각 우주에서 만들어진 3D 입체물들을 하나의 우주로 통합하여 배치한 뒤 하나의 세상을 만든다고 해보자. 우리가 흔히 살고 있는 집에 각각 가구공장에서 만들어진 소파는 거실에, 침대는 안방에, 냉장고는 부엌에 설치해서 집 인테리어를 완성하듯이,
컴퓨터 그래픽스 에서는 축구공, 메시, 골대 각각의 사물들이 독립적으로 그래픽 툴(공장) 에서 만들어지고 (이 과정을 Object Space) 이 사물들의 크기를 조절하거나 기울어진 각도 등을 바꾸어 준 뒤 적절한 위치에 배치하여 하나의 세상 (World Space)을 만들게 된다. 실제로 우리의 눈이 냉장고 안을 보고 있다면 등을 지고 있는 소파가 현실에 있다고 하더라도 우리 눈에는 보이지 않게 되며 (View Space) 냉장고 안을 아주 가까이 보고있다면 우리 눈의 시야각에 따라 그 외부의 부분들은 잘려서 보일 것이다(Clip Space)
같은 원리로 컴퓨터 그래픽스를 들여다 보자면 한 우주에서 태양만큼 컸던 축구공 크기를 실제 축구공 크기만큼 아주 작게 만들고 다른 우주에서 북극에 위치해 있던 메시를 축구공 앞으로 배치하는 등 서로 다른 우주에 있던 각 입체 삼각형 그물 꼭짓점 정보들을 크기를 조절하고 회전 시키며 위치를 이동(TRS Matrix) 할 수 있도록 행렬(Model Matrix)를 곱해 준다.
이렇게 각각의 우주 Local Space에 존재하는 녀석들은 연속된 행렬 연산들을 통해 하나의 우주인 World Space 속에서 그 크기와 위치 회전 등이 적절하게 바뀌어 예쁘게 배치되면서 위 그림 과 같이 하나의 세상에 배치된 메시를 앞에서 보느냐, 옆에서 보느냐, 위에서 보느냐에 따라 3D 화면이 다르게 나타나듯이 World Space에 존재하는 축구공과 메시를 어느 시선으로 보고 있는지 처리하기 위해 다시 한번 행렬(View Matrix) 연산으로 카메라 시선에 따라 변환을 해준다(View Space)
여기에 모니터의 2차원 면에서 보았을 때의 이미지 단면 정보만을 추려내는 행렬(Projection Matrix) 연산까지 해주게 된다면 이 우주 World Space에서 필요없는 3차원 정보들을 탈탈 털어낸 단면을 보여주는(Clip Space)를 만드다. 이렇게 각각의 우주에서 각각의 크기로 따로 놀고 있던 3D 입체물들의 삼각형 그물 Mesh 정보를 하나의 우주에 적절하게 사이즈, 위치를 변형하여 배치한 뒤 바라보는 카메라 시점에 따라 2차원으로 바꾸는 과정을 각각의 삼각형 정보 Vertex를 변형하는 과정이라고 하여 Vertex Shading 이라고 한다.
2. Rasterization (레스터화)
이렇게 각각의 우주에 있는 객체 (메시, 축구공, 골대, 잔디등) 을 하나의 우주로 가져와 공간을 변형해 가면서 3차원 속의 그물망이 2차원으로 표현되었는데 문제는 축구공도 메시도 아직 삼각형의 그물로만 표현되어 있다. 그물 안도 픽셀로 가득 메워져야 그물 인간이 아닌 실제 메시의 모습을 볼 수가 있다.
그래서 여러 삼각형들 중에 실제로 픽셀을 채워야 할 영역이 어디인지를 계산하는데 모니터 FHD, 4K등 크기를 벗어난 부분들은 픽셀로 채우지 않는 섬세한 처리를 포함하여 실제로 삼각형 그물속을 픽셀로 표현이 되어야 할 부분들을 계산하는 과정을 레스터화(Rasterization)이라고 한다.
3. Pixel Shading
이러한 레스터화 과정을 거치면 각 삼각형의 꼭짓점들이 제각각 가지고 있는 색깔과 방향 정보를 기반으로 그 사이사이를 서서히 색이 변해가는 것으로 채워주며(InterPolation) 색 뿐만 아니라 방향 위치 등 모든 것의 정보를 그 사이 사이 값으로 부드럽게 채워주게 된다. 각 픽셀이 어떤 색을 가지느냐 어떤 질감을 가지느냐 등이 결정 되는 Pixel Shading 과정을 거치면 최종적인 픽셀의 색이 결정이 된다.
사실적인 픽셀 색감을 결정하기 위해 포장지로 삼각형 그물로 된 물체를 감싸는 텍스터링 기법이나 음영을 다양한 특성으로 추출하는 퐁 쉐이딩(화소 컬러에 조명과 음영을 계산), 물리 기반 쉐이딩(질감에 따른 빛반사, 물리현상 구현) 등의 방법이 있기도 하다.
이러한 삼각형 그물 속에서 어떤 부분을 픽셀로 표현할지 결정하는 레스터화나 각 픽셀을 어떤 색으로 할지의 픽셀 쉐이딩 과정에서 한 장면의 한 픽셀 한 픽셀 처리에는 엄청난 연산량이 필요하다. 그래서 그래픽 카드가 바로 이러한 연산에 특화된 엄청나게 많은 하드웨어 연산 유닛을 때려 박아 동시에 수천개 수만개가 넘는 픽셀에 대해 처리 할 수가 있다.
4. 마지막으로
지금까지의 과정들을 거쳐서 3D로 입체가 표현되기는 했지만 정말 표현만 될 뿐 빛 효과나, 그림자 효과 등 사실적으로 보이는 기술들이 추가로 구현되야 한다. 근데 빛 효과나 그림자들도 마찬가지로 물체인 마냥 결국 삼각형으로 표현해야 한다.
그래서 RayTracing 기술등 이러한 것으로 빛과 그림자 등이 실제적으로 표현 할 수 있게 과정이 끝난다면 간혹 메시와 축구공이 말도 안되게 겹쳐져 있다거나 둠가이가 그냥 물체를 뚫고 가거나 겹쳐져 있는등의 표현이 된 부분 까지 말끔하게 처리된 OutPut Merge 출력 병합과정까지 거치게 된다면 드디어 렌더링 파이프라인을 마치고 우리 두눈으로 피파, 위닝에서 메시가 골차는 장면을 볼 수 있게 되는 것이다. 지금까지 우리는 렌더링파이프라인 과정을 아주 쉽게 알아 보았다.
아바타같은 3D영화나 애니메이션의 경우 슈퍼컴퓨터를 이용해 렌더링만 수개월이 걸릴 정도로 오래 시간이 걸리는 경우가 많은데 이는 더욱 더 사실적인 표현을 위해 삼각형을 더욱더 많이 쪼개거나 Ray Tracing의 조명 개수가 늘어나는 등 연산량이 어마무시하게 많은 경우이다.
하지만 피파나 위닝에서 메시가 공을 찰때나 둠이터널을 할때 화면을 어디에서 어디로 바라보는지에 따라 실시간으로 3차원 세상이 어떻게 2차원으로 바뀔지가 바뀌어 버리기에 고사양 게임일 수록 그래픽 카드 사양 요구치가 높은 거라고 생각하면 된다.
'게임 > 알고 싶다' 카테고리의 다른 글
GPU의 렌더링 파이프라인이란? (0) | 2023.01.08 |
---|---|
게임에서 화살, 총은 어떻게 동작하는걸까? (2) | 2022.12.26 |
비등방성필터링이란? (0) | 2022.12.19 |
HDR이란? (2) | 2022.12.18 |
포스트프로세싱이란? (0) | 2022.12.18 |
댓글