주의 : 이 글의 목적은 자기계발 용도와 게임에서 쓰이는 각종 그래픽옵션 관련 단어 (안티에일리어싱, 셰이더, 텍스쳐 품질등) 들이 처음 보는 사람에게는 굉장히 생소하고 어려워 보이기 때문에 해당 부분에 대한 이해를 쉽게 하기 위해 작성되었습니다.
주의 : 해당분야는 전문적인 분야이며 그리고 실시간 발전되는 기술입니다. 지금도 새로운 기술들이 나오고 있어 틀린 부분이 있을 수도 있습니다.
이 글은 안될공학님 유튜버님의 자료와 저의 의견이 들어간 글입니다.
1. 렌더링 파이프라인
2023년 아바타2가 개봉했다. 아바타2를 보면 판도라라는 행성을 실제로 가본다면 정말 이런 풍경이지 않을까라는 생각이 들정도로 3d 그래픽이 장난이 아니였다. 영화의 스토리가 지루하니 뻔하니 등은 일단 옆에 살짝 내려두고 이 아바타2에서 보여주는 아름다운 해양 풍경, 물 속은 가슴을 두근거리게 했으며, 한편으로 3D 기술이 현실과 크게 구분이 없어지고 있다는 것을 새삼 느끼게 해준다.
흔히 3D게임의 아버지, 시초라고하면 대부분의 사람들이 둠을 떠올릴 것이다. 둠슬레이어 형님의 악마 사냥을 하다보면 악마가 불쌍해지는 이 시리즈의 최신 둠이터널을 플레이 해보면 정말 악마가 이렇게 생기지 않았을까? 라는 이런 생각이 들면서 동시에 3d게임 그래픽 발전이 매우 실감나게 느껴진다.
이 3D 화면을 만들기 위해 쉐이딩(Shading), 레스터화(Rasterization) 등과 같은 입체구성 부터 이제 게임 화면 속에서는 태양, 조명이 어디있는지 까지 파악하여 실제 빛의 원리를 이용하는 Ray Tracing 까지, 실사와 비슷한 3D 화면을 만들어 내는 렌더링 파이프라인 원리에 대해 한번 알아보자.
2. 게임 속 화면은 어떻게 구성 되어 있을까?
우리는 일반적으로 그림을 그릴 때 동일한 물체를 가까이 두고 싶을 때는 크게, 그리고 멀리 표현하고 싶을때는 작게 그리는 것처럼 원근법으로 평평한 스케치북 에서도 입체감을 표현 할 수가 있다.
마찬가지로 우리가 게임을 할때 보이는 3D화면들도 결국 모니터 화면에 담기는 순간에 평평한 화면 2D에 표현이 되는 것인데 이 게임화면을 확대하고 확대하다보면 네모난 점 픽셀로 표현이 된다. 우리가 스케치북에 그림을 원근감을 넣으면서 입체감을 높이는 것처럼 컴퓨터 3D그래픽도 픽셀을 통해 입체적이고 사실적으로 그려낸다.
3D 영상 화면을 2차원으로 표현해주는 렌더링파이프라인(Rendering Pipeline) 의 과정들을 요약하면 3D 입체들을 전부 그물로 표현하고 이를 적절한 위치에 배치한 뒤 2차원이 되도록 납작에 만들어주고 그 그물의 구멍들에 어떤 색을 채워줄지를 결정하는 것이다.
위 내용을 좀 더 쉽게 이해 하기 위해, 한번 메시가 축구공을 차는 모습을 만드는 것으로 한번 따라가보도록 하자.
먼저 축구공을 만들기 위해서는 동그란 모양의 입체적인 모양을 만들면 될 것 같지만 실제로는 완벽한 구형태는 아닐 것이다. 축구공은 그렇다 쳐도 메시의 몸부터 얼굴 모양 하나하나는 이 축구공을 만드는 것보다 훨씬 복잡할 것이다. 우리가 초등학교 시절 모자이크를 만들기 위해 색종이, 달력등을 손톱만하게 잘게 뜯어서는 색색별로 모아 붙여 하나의 그림을 만들어 내듯이 축구공과 메시 역시 모자이크처럼 잘게 쪼개어 뜯어다 붙이는 방식을 사용한다.
3. Input Assembly
삼각형으로 다양한 다각형을 만들 수 있기 때문에 이 삼각형으로 둥글둥글한 축구공도 그 겉면을 수많은 삼각형으로 표현 할 수 있다. 그리고 메시의 피부표면, 모공, 여드름, 콧구멍들을 표현할 때도 마찬가지로 이 삼각형을 아주 작게 만들어 감싼다면 구현할 수 있다.
축구공의 겉면을 수많은 삼각형으로 구성된 그물인 Mesh로 표현하고 축구보다 훨씬 섬세한 표현이 필요한 메시 역시 바로 이 삼각형 그물인 Mesh 전체적인 윤곽을 표현 한다면 컴퓨터는 이 삼각형들의 꼭짓점(버텍스) 좌표들을 기억함으로써 그 대상을 알 수 있게된다.
이렇게 수많은 삼각형들로 어떤 입체를 표현하려고 할 때 모든 삼각형의 정보를 죄다 저장하고 있어야 할텐데, 기본적으로 꼭짓점들의 정보들은 XYZ 축으로 표현된 공간 좌표 (x,y,z)와 함께 삼각형 평면의 수직인 방향은 무엇인지 각 꼭짓점의 색깔은 무엇인지 등을 함께 저장하게 된다.
그런데 위에 설명했듯이 삼각형들이 여러개 모여 다양한 다각형으로 만들어 지듯이 그림 2처럼 삼각형들은 서로 연결되어 있기에 서로 붙어있는 삼각형들 끼리는 똑같은 정보를 중복으로 일일이 다 기억한다는 건 엄청난 낭비로 보인다. 자 우리가 어렸을 때 자주 하던 점선 잇기 그림 기억 하는가?
번호를 따라 점선을 제대로 그리지 않으면 이상한 그림이 되는데 제대로 연결 해서 그리면 아주 예쁜 그림이 나오게 되는데 바로 이 원리를 위에 삼각형들을 저장할 때에도 적용하게 된다. 축구공 모든 삼각형들의 꼭짓점(Vertex) 정보(x,y,z)들로부터 최대한 중복 없이 순서대로 쭉 저장하는 Vertex Array 라고하는 꼭짓점 리스트를 만들어 놓은 뒤 리스트의 각각의 꼭짓점들 중 특정 꼭짓점 세 개를 골라 연결하면 원하는 삼각형을 만들 수 있는지 알 수 있는 Index Array라는 정보를 따로 저장하게 되면
마치 점선 잇기 그림과 같이 입체를 구성하는 점들을 여러번 저장할 필요 없이 먼저 점들만 표현해놓고 (Vertex Array) 삼각형 연결에 대한 정보는 어떤 순서로 삼각형을 엮는지만 저장(Index Array) 해놓으면 수많은 삼각형 그물의 정보를 효율 적으로 저장 할 수 있다.
이렇게 가상의 공간 모니터 너머의 화면 속에서 3차원의 입체적인 정보를 삼각형으로 쪼개어 거대한 그물 뭉치로 표현 하는 과정을 Input Assembly 라고 하며 이는 렌더링 과정의 가장 처음 수행하는 단계이다. 축구공, 메시, 골대, 잔디 각각이 잘개 쪼겨진 삼각형들의 꼭짓점 위치, 색깔 방향등 정보들로 구성된 입체적인 그물로 표현하는 것이 완성 되었다면 이제 본격적으로 어떻게 표현되는지를 바꾸는 작업이 시작된다. 다음 게시글에서 알아보자.
'게임 > 알고 싶다' 카테고리의 다른 글
GPU의 렌더링 파이프라인이란? 2편 (0) | 2023.01.08 |
---|---|
게임에서 화살, 총은 어떻게 동작하는걸까? (2) | 2022.12.26 |
비등방성필터링이란? (0) | 2022.12.19 |
HDR이란? (2) | 2022.12.18 |
포스트프로세싱이란? (0) | 2022.12.18 |
댓글