2024. 2. 27. 21:43ㆍ내일배움캠프
2월 27일
이제 2월도 얼마 남지 않았다.
오늘 TIL에 정리할껀 바로 그래픽스에 대해서 정리해보려고 한다.
단순 용어정리에 가깝지만 나름 차를 만드는데 타이어에 대해서 모르면 안 되듯이
차곡차곡 정리해서 누가 물어보면 아 그거 이거에요~ 라고 말할정도는 되야한다.
게임의 시각적 표현
게임에서의 시각적 표현은 3가지로 나뉜다.
많이 들어봤겠지만 모든 시각적 표현의 기본이라고 할 수 있는 점,선,면이다.
점.
점은 공간에서 크기가 없는 위치를 나타낸다. 게임에선 객체의 위치를 표현하는데 사용된다.
선.
선은 두 점을 연결한 경로를 말한다. 게임에선 주로 경계 혹은 경로를 나타내는 데 사용된다.
면.
면은 세 개 이상의 점으로 둘러싸인 평면 영역을 나타낸다. 게임에선 주로 객체의 표면, 화면을 나타내는데 사용된다.
렌더링 용어
버텍스(vertices) :
버텍스는 그래픽 객체의 꼭짓점을 나타낸다. 평면에서 x,y좌표로 3D 공간에서는 x,y,z 좌표로 표현된다.
객체의 형태와 구조를 정의하는데 사용된다.
모서리(Edges) :
모서리는 두 개의 버텍스를 연결하는 선분* 을 의미한다 3D 객체를 구성하는 각각의 면을 정의하는 데 사용하며
모서리는 보통 폴리곤이나 다각형의 경계를 형성한다.
면(Faces) :
면은 버텍스나 모서리로 둘러싸인 평평한 영역을 말한다. 3D 모델에서 가장 중요한 구성 요소 중 하나이며
일반적으로 폴리곤으로 표현된다. 면은 객체의 외관을 결정하는 데 중요한 역할을 한다.
다각형(Polygons) :
다각형은 폐점된 평평한 도형을 나타낸다. 버텍스나 모서리로 둘러싸인 영역으로 두개 이상의 삼각형으로 구성된다.
폴리곤은 3D 모델의 표면을 나타내는 데 사용된다.
표면(Surfaces) :
표면은 3D 모델의 외부 영역을 나타낸다. 일반적으로 외부를 형성하는 면 또는 다각형을 포함한다.
렌더링 과정에서 빛과 재질의 효과가 표면에 적용된다.
선분* : 수학에서는 기본적으로 직선상의 두 점과 그 사이의 점으로 구성되는 유한인 직선의 부분이라 정의하고 있다 그러나 직선과는 달리 양 끝에 점 2개가 존재한다. 쉽게 말해 평면 위의 두 점을 최단거리로 이은 선.
랜더링 파이프라인
렌더링 파이프라인(Rendering Pipeline)은 컴퓨터 그래픽스에서 3D 모델이나 장면을 화면에 표시하는 과정을
단계적으로 나열한 것이다. 각 단계는 객체를 입력으로 받아 최종적으로 화면에 출력하는 데
필요한 정보를 계산하고 처리한다.
- 고정 기능 파이프라인 (Fixed Function Pipeline)
고정 기능 파이프라인은 예전에 주로 사용되었지만 현재는 권장되지 않는 방식이다.
그래픽 하드웨어로 구현된 고정된 단계들로 구성되어 있으며 각 단계를 직접 수정 또는 변경할 수 없으며
제한적인 기능을 사용해야 한다. 대부분의 고급 그래픽 효과를 구현하기 어려우며 유연성이 부족하다
- 가능 기능 파이프라인 (Programmable Pipeline)
가능 기능 파이프라인은 고정 기능 파이프라인의 한계를 극복하기 위해 개발되었다.
그래픽 카드의 프로그래밍 가능한 스테이지를 사용하여 사용자가 단계를 직접 제어할 수 있다.
사용자 정의 쉐이더를 사용하여 더 많은 그래픽 효과를 구현할 수 있으며 높은 유연성을 제공한다.
대부분의 현대적인 그래픽 애플리케이션에서 사용되는 방식이다.
- 전체 실시간 렌더링 파이프라인 (Full Real-Time Rendering Pipeline)
실시간 렌더링을 위해 최적화된 파이프라인이다 주로 게임 및 시뮬레이션 등의 실시간 그래픽 애플리케이션에
사용된다. 전체 파이프라인은 전통적인 렌더링 파이프라인에 더해 추가적인 단계 및 최적화가 포함된다.
실시간 렌더링에서 필요한 모든 단계를 다루고 최신 기술을 적용한다.
- 레이 트레이싱 파이프라인 (Ray Tracing Pipeline)
레이 트레이싱은 광선이 물체와 상호작용하는 방식을 시뮬레이션 하는 기술이다.
최근 그래픽 카드와 API 업데이트로 레이 트레이싱이 실시간 그래픽스에서 가능해졌다.
기존의 레스터라이제이션 방식과는 다른 파이프라인을 사용하여 레이 트레이싱을 구현한다.
유니티에서 사용되는 렌더링 파이프라인
유니티에서는 그래픽 처리를 위해 다양한 렌더링 파이프라인이 사용된다.
최신 버전의 유니티에서는
Scriptable Render Pipeline(SRP)이라고 불리는 사용자 정의 렌더링 파이프라인을 사용한다.
- 유니버설 렌더링 파이프라인(Universal Render Pipeline, URP)
경량화된 렌더링 파이프라인으로 모바일 및 다중 플랫폼에 적합하다.
효율적인 성능과 모바일 기기의 제한된 자원을 고려하여 설계되었다.
- 하이브리드 렌더링 파이프라인(Hybrid Render Pipeline, HRD)
2018 이후 법전에서 사용 가능한 파이프라인이다. 범용성과 성능을 모두 고려하여 개발하였다.
- 유니티 렌더링 파이프라인(Unity Built-in Render Pipeline, BRP)
유니티 엔진의 기본 렌더링 파이프라인으로 간단한 설정과 사용이 가능하다. 기본적인 렌더링 파이프라인이며
대부분의 프로젝트에 적합하다.
렌더링 파이프라인의 과정
렌더링 파이프라인은 3D 세계에 대한 기하학적 표현과 이 세계를 바라보는 관점을 정의하는
가상 카메라를 이용해 2D 이미지를 만들어내는 역할을 담당한다.
- 1. 로컬 스페이스
- 모델링 스페이스라고도 불리는 로컬 스페이스는 우리가 물체의 삼각형 리스트를 정의하는 데 이용하는 좌표 시스템이다.
- 로컬 스페이스는 모델링 과정을 쉽고 단순하게 만들어주며, 자체의 로컬 좌표 시스템을 이용하는 것이 월드에서 직접 모델을 구성하는 것보다 훨씬 쉽다.
- 예를 들어, 로컬 스페이스를 이용하면 위치나 크기, 월드 내의 다른 물체와의 관계 등을 고려하지 않고도 모델을 구성할 수 있다.
- 2. 월드 스페이스
- 자체의 로컬 좌표 시스템 내에 다수의 모델을 구성한 다음에는 이를 전역(월드) 좌표 시스템으로 옮겨 하나의 장면을 구성해야 한다.
- 로컬 스페이스의 물체들은 이동, 회전, 크기 변형 등을 포함하는 월드 변환이라는 작업을 거쳐 월드 스페이스로 옮겨진다.
- 월드 변환은 위치와 크기, 방위를 포함하는 각 물체 간의 관계를 정의함으로써 이루어진다.
- 3. 뷰 스페이스
- 월드 스페이스 내에서 기하물체와 카메라는 월드 좌표 시스템과 연계되어 정의된다.한편, 카메라가 월드 내 임의의 위치나 방위를 가진다면 투영이나 그 밖의 작업이 어렵거나 덜 효율적이 된다.
- 따라서 작업의 수월함을 위해 카메라를 월드 시스템의 원점으로 변환하고, 카메라가 양의 z축을 내려다보도록 회전시켜야 한다.
- 이때 월드에 대한 관점이 바뀌지 않도록 하기 위해서는 카메라에 맞추어 월드 내의 모든 기하물체를 변환해야 하는데, 이와 같은 변환을 뷰스페이스 변환이라 하며, 이변환을 거친 뒤의 기하물체는 뷰스페이스 내에 위치한다고 말할 수 있다.
- 4. 후면 추려내기
- 폴리곤은 두 개의 면을 가지고 있으며 하나의 면을 전면, 다른 면을 후면이라 부른다.일반적으로 폴리곤의 후면은 절대 보여지지 않는데, 이는 장면 내의 물체들이 내부로 카메라를 넣는 것이 허용되지 않기 때문이다.카메라는 절대로 폴리곤의 후면을 보지 못한다. 이와 같은 사실은 매우 중요하한데, 폴리곤의 후면을 볼 수 있는 경우에는 후면 추려내기가 작동하지 않기 때문이다.
- 그림에 카메라에 전면을 향하고 있는 폴리곤을 전면 폴리곤, 후면을 향하고 있는 폴리곤을 후면 폴리곤이라 한다.전면을 향하고 있는 폴리곤들이 뒤쪽의 후면 폴리곤들을 가리고 있음을 알 수 있다.Direct3D는 후면 폴리곤을 추려냄으로서(이후의 처리에서 제거) 상당한 이득을 추한다. 이와 같은 과정을 후면 추려내기(backface culling)라 한다.
- 카메라의 입장에서 후면은 어차피 가려져 보이지 않으므로 동일한 이미지가 만들어진다.이와 같은 처리를 위해서는 어떤 폴리곤이 전면 폴리곤이고 후면 폴리곤인지를 확인할 수 있어야 한다.디폴트로 Direct3D는 두르기 순서의 시계 방향에(뷰 스페이스에서) 지정된 버텍스를 가진 폴리곤을 전면 폴리곤으로 취급하며,두르기 순서의 시계 반대 방향에 지정된 버텍스를 가진 폴리곤을 후면 폴리곤으로 취급한다.
- "뷰 스페이스"로 시점을 정의했다는 데 주의하자. 이것은 삼각형이 180도 회전할 경우 두르기 순서가 뒤집히기 때문이다. 즉, 로컬 스페이스에서 시계 방향의 두르기 순서를 가지고 있던 삼각형이라도 뷰 스페이스로 변환하면 회전에 의해 시계 방향의 두르기 순서가 아니게 될 수 있다.
- CW - 시계 방향 두르기를 가진 삼각형을 추려낸다. CCW - 시계 반대 방향 두르기를 가진 삼각형을 추려낸다. CW는 Clock-Wise 시계방향이고 CCW는 Counter-Clock-Wise
- OPENGL은 CCW 방식을 기본으로 하며 DX는 CW방식을 기본으로 한다.
- 5. 조명
- 광원은 월드 스페이스 내에 정의되지만 뷰 스페이스 변환에 의해 뷰 스페이스로 변환된다.광원은 물체에 명암을 추가하여 장면에 사실감을 더해준다.
- 6. 클리핑
- 시야 볼륨 외부의 기하물체를 추려내야 한다. 이 과정을 클리핑이라 한다.
- 시야 철두체에서의 삼각형 위치는 다음과 같이 세 가지로 분류할 수 있다. 완전한 내부 - 삼각형이 완전히 절두체 내부에 위치하면 그대로 보존되어 다음 단계로 진행한다. 완전한 외부 - 삼각형이 완전히 절두체 외부에 위치하면 추려내어진다. 부분적 내부(부분적 외부) - 삼각형이 부분적으로 절두체 내부에 위치하면 삼각형을 두 개의 부분으로 분리힌다. 절두체 내부의 부분은 보존되며, 나머지는 추려내어진다.
- 7. 투영
- 뷰 스페이스에서는 3D 장면의 2D 표현을 얻는 과정이 남아있다. 이와 같이 n 차원에서 n-1 차원을 얻는 과정을 투영(projection)이라 한다.투영은 여러가지 방법이 있지만 원근 투영(perspective projection)이라는 방법으로, 원근법을 이용하여 기하물체를 투사한다.
- 즉, 카메라에서 멀리 떨어진 물체는 가까운 물체에 비해 작게 나타난다. 이와 같은 타입의 투영은 3D 장면을 2D 이미지로 표현하는 데 가장 적합하다.
- 투영 변환은 우리의 시야 볼륨(절두체)을 정의하고, 절두체 내의 기하물체를 투영 윈도우에 투영하는 과정을 담당한다.
- 8. 뷰포트 변환
- 뷰포트 변환은 프로젝트 윈도우의 좌표를 뷰포트라 불리는 화면의 직사각형으로 변환하는 과정을 말한다.
- 게임에서의 뷰포트는 보통 직사각형의 전체 화면이 되지만, 윈도우 모드에서 실행하는 경우에는 클라이언트 영역이나 화면의 일부가 될 수도 있다.
- 뷰포트 사각형은 이를 포함하고 있는 윈도우와 상대적이며, 윈도우 좌표를 이용해 지정된다.
- 9. 래스터라이즈
- 스크린 좌표로 버텍스들을 변환한 다음에는 2D 삼각형들의 리스트를 가지게 된다.래스터라이즈 단계는 각각의 삼각형을 그리는 데 필요한 픽셀 컬러들을 계산하는 과정이다.
- 래스터라이즈 과정은 엄청난 작업 양을 필요로 하므로 반드시 전용 그래픽 하드웨어에서 처리되야 한다.래스터라이즈의 결과물은 모니터에 바로 디스플레이 할수 있는 2D 이미지가 된다.
후 말은 자동차의 타이어에 빗대어 말하긴 했는데
타이어 하나를 알아가는 과정이 순탄치는 않은거 같다.
2월 27일 TIL은 여기서 마치도록 하겠다.
'내일배움캠프' 카테고리의 다른 글
240229-TIL (0) | 2024.02.29 |
---|---|
240228-TIL (0) | 2024.02.28 |
240226-TIL (0) | 2024.02.26 |
240223-TIL (0) | 2024.02.23 |
240221-TIL (0) | 2024.02.21 |