오늘은 게임 그래픽스와 관련한 내용을 정리 해보고자 합니다.
면접에서 가끔 그래픽스와 관련한 질문들도 한다는 이야기를 듣고
정리 해보면 좋겠다는 생각에 이렇게 글을 작성해 봤습니다.
사실 그동안에도 꾸준히 그래픽스와 관련한 용어들을 마주하긴 했었습니다.
렌더 파이프라인이라던지 드로우 콜이라던지
2024.10.24 - [유니티/3D] - 유니티 3D - 머티리얼(Material) 분홍색 해결 방법 (feat : URP )
2024.10.25 - [유니티/공통] - 유니티 - Batching에 대해 알아보자.(feat. Draw call, Set Pass Call, 아틀라스)
이외에도 학습은 했지만, 아직 블로그에 작성(정리) 하지 않은 내용까지.
그중에서 오늘은 렌더링 파이프라인에 대해 좀 더 자세하게 다뤄보고자 합니다.
렌더 파이프에 대한 개념은 위 링크 글에서도 간단하게 다뤘었습니다만
여기에 추가로 덧붙여 설명해 보겠습니다.
렌더 파이프 ?
이전에는 간단하게 3D를 2D 이미지로 변환하는 과정이라고만 설명하고 넘어갔었는데,
정확한 표현은 3D 정점 데이터들을 2D 레스터 이미지로 변환하는 일련의 단계를 말합니다.
3D 정점 데이터들에는 무엇이 있나?
Vertices :
그래픽 객체의 꼭짓점
Edges :
두 개의 Vertices를 연결하는 선분
Faces :
vertices나 Edges로 둘러싸인 평평한 영역
Polygons :
버텍스나 모서리로 둘러싸인 영역( 폐점된 평평한 도형, 두 개 이상의 삼각형으로 구성될 수 있다)
Surface :
3D 모델의 외부 영역(일반적으로 객체의 외부를 형성하는 면이나 다각형을 포함한다.)
+ 위치, 각도, 색상 등의 정보 등이 있습니다.
레스터 이미지 ?
픽셀 격자로 정의된 이미지 파일을 말합니다.
렌더링 파이프 라인의 과정
렌더링 파이프라인의 초기 과정부터 레스터화 까지의 과정을 축약한 그림입니다.
각각에 대해 좀 더 자세하게 설명하자면
로컬 스페이스(local Space):
로컬 좌표에 3D 모델을 띄우는 단계
월드 스페이스(World Space):
로컬 좌표 시스템에 구축한 3D 모델을 전역(월드) 좌표로 옮기는 단계
이때 로컬 스페이스의 물체들은 이동, 회전, 크기 변형 등을 포함하는 월드 변환이라는 작업을 거쳐 월드 스페이스로 옮겨진다.
뷰 스페이스(View Space):
카메라가 월드 시스템의 원점으로 변환됨과 동시 z축을 내려다보도록 회전하는데,
변환한 카메라에 맞추어 월드 내의 모든 기하 물체를 변환하는 단계
후면 추려내기(backface Culling) :
카메라에서 보이지 않는 뒷면(후면, backface)의 폴리곤들을 제거하는 과정/단계.
조명(Light) :
빛의 영향을 계산하는 단계
World Space내에 정의 되지만, View Space변환에 의해 View Space로 전환된다
클리핑(Clipping)
시야 볼륨(절두체) 외부의 기하물체를 추려내는 단계
절두체 : 피라미드 같은 모양의 윗부분을 밑면에 병렬로 잘라낸 입체 형상
투영(Projection)
3D 공간을 2D 평면으로 표현하는 과정/단계
주로 원근 투영(Perspective)이나 직교 투영(Orthographic)을 사용
뷰포트(Viewport)
화면의 크기와 위치에 맞게 좌표를 조정하는 단계.
게임에서의 뷰포트는 보통 직사각형의 전체 화면이 되지만,
윈도우 모드에서 실행하는 경우에는 클라이언트 영역이나 화면의 일부가 될 수도 있다.
레스터라이즈(Resterizer)
스크린 좌표로 버텍스들을 변환한 다음에는 2D 삼각형들의 리스트를 가지게 되는데,
이때 각각의 삼각형을 구성하는 픽셀 컬러를 계산하는 과정
마무리
오늘은 그래픽스와 관련한 내용을 이전보다 조금 더 자세히 정리해 봤습니다.
사실 텍스처 적용과 렌더 백엔드 등 더 세세한 내용까지 정리해 보려다가
대부분 이 정도까지 정리를 하더군요.
그래서 저도 일단 비슷한 수준에서 마무리를 했습니다만,
아래 참고 자료 내용들은 꼭 한번 보셨으면 좋겠습니다.
카메라에 관한 내용도 한번 다루려고 했었는데
오늘 내용과 이어지는 것 같아서 다음 글은 카메라에 관한 내용을 정리해 보겠습니다.
참고한 내용
https://docs.unity.cn/kr/2021.1/Manual/BestPracticeLightingPipelines.html
렌더 파이프라인 및 조명 솔루션의 선택과 설정 - Unity 매뉴얼
이 가이드는 Unity 블로그 게시물 Spotlight Team 베스트 프랙티스: 조명 파이프라인 설정 - Pierre Yves Donzallaz의 업데이트 버전입니다.
docs.unity.cn
https://docs.unity3d.com/kr/2021.2/Manual/UnderstandingFrustum.html
뷰 절두체 이해 - Unity 매뉴얼
절두체 는 피라미드 같은 모양의 윗부분을 밑면에 병렬로 잘라낸 입체 형상을 가리킵니다. 이는 원근 카메라에 의해 보여지고 렌더링되는 영역의 형상입니다. 다음의 실험 예제를 통해 그 이유
docs.unity3d.com
https://www.slideshare.net/slideshow/3d-156951985/156951985
3D 게임 그래픽스의 이해
3D 게임 그래픽스의 이해 - Download as a PDF or view online for free
www.slideshare.net
https://m.blog.naver.com/jsjhahi/206651669
DirectX 그래픽스 파이프라인 순서 및 기본 설명과 기본 지식
고정 기능 파이프 라인( Fixed Pipeline ) - D3D에 미리 정해진 연산을 수행할 수 있...
blog.naver.com