일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 플레이어 이동
- 2870번 c++
- 백준 c++ 2870번
- 2468 c++
- 프로그래머스
- 백준
- 백준 1103번 게임
- 백준 c++ 2468번
- 코딩테스트
- Beakjoon
- dfs
- Unity
- 2870번 수학숙제 c++
- C#
- 2870번 수학숙제
- 오브젝트 풀링
- 17070번
- Lv2
- 백준 1103번 c++
- c++
- 유니티
- 백준 2870번
- 2870번
- 수학숙제
- 백준 17070번 c++
- Algorithm
- 백준 17070번
- 코테
- Lv.3
- 백준 1103번
- Today
- Total
주녘공부일지
[Graphics] DX 렌더링 파이프라인(Rendering Pipeline) 본문
렌더링 파이프라인(Rendering Pipeline)
가상 3D 세계의 존재하는 물체를 카메라가 비추는 것을 기준으로 2D 이미지로 추출하는 과정
1단계 : 로컬 스페이스(Local space) // 모델링 스페이스
다른 모델들과 전혀 상관이 없는 각각의 모델을 구성하고 있는 고유 공간
- 삼각형의 리스트를 정의하는데 이용하는 좌표시스템이다.
- 3D 상의 모든 물체는(카메라 포함) 고유의 로컬 좌표계를 가지고 있다.
2단계 : 월드 스페이스(World space)
각 로컬 스페이스의 모델들을 하나의 장면(공간)으로 구성하는 단계
- 개별적인 좌표를 가지고 있는 물체들이 하나의 공간안에 모여있을 때 이 공간을 월드라고 하며, 각각의 오브젝트들의 이동, 회전 변환 등을 포함하는 월드변환을 통해서 옮겨지게 된다.
3단계 : 뷰 스페이스(View space)
월드 공간에 있는 물체들을 화면에 출력하기 위해 가상의 카메라를 만드는 단계
- 월드 스페이스 내에서 오브젝트 들과 카메라는 월드 좌표 시스템과 연계되어 정의된다.
- 만약, 카메라가 월드 위치상에 임의의 위치에 있다면 이후 처리될 투영이나 다른 작업에 대해서 비 효율적으로 되기 때문에 “카메라를 원점에 두고 하나의 축(+Z축)을 내려보도록 배치시켜야 하는데 이때 월드에 대한 관점이 변하지 않게 하기 위해서 다른 물체들과 이동이나 회전을 시켜야 한다. 이러한 변환을 뷰 스페이스 변환이라 하고 이 변환을 거치면 오브젝트들이 뷰 스페이스 내에 있다고 할 수 있다.
4단계 : 후면 추려내기(Backface Culling)
전면 후면을 판단하는 단계
- 폴리곤을 그리면 2개의 면을 가지게 되는데(보이는 면이 전면, 안보이는 면이 후면) 거의 대부분의 상황에서 전면이 후면을 가리고 있다.
- 일반적으로 앞면과 뒷면에 대한 판단은 폴리곤을 그리는 순서(두루기 순서)에 따라서 결정되는데 DirectX는(뷰 스페이스에서) 기본적으로 시계방향(CW)이냐 반시계방향(CCW)이냐를 기준으로 앞면과 뒷면을 판단한다.
5단계 : 조명(Lighting)
3D 물체에 대해 사실감을 표현해주기 위한 단계
- 광원은 월드 스페이스 내에 정의되지만 뷰 스페이스 변환에 의해 뷰 스페이스로 변환된다.
- 조명을 쓰는 이유는 빛에 의한 명암으로 사실감과 원근감 그리고 재질을 표현하기 위함이다.
- DirectX에서 지원하는 광원의 종류는 크게 3가지이다.
1) 방향성 광원(Directional Light) : 위치는 가지지 않지만 지정된 방향으로 평행하게 빛을 발산
2) 점광원(Point Light) : 월드 스페이스 내에 위치를 가지며 모든 방향으로 빛을 발산
3) 스포트 광원(Spot Light) : 위치를 가지며 특정한 방향으로 원 뿔 모양의 빛을 발산 (손전등과 유사)
6단계 : 클리핑(Clipping)
카메라의 시야 밖으로 벗어난 물체들에 대해 출력하지 않는 작업을 거치게 됨
- 시야 외부의 기하 물체를 추리는 단계
- 시야 절두체(View Frustum)에서의 폴리곤은 크게 3가지로 분류할 수 있다.
1) 완전한 내부 : 삼각형이 완전히 시야 내부에 위치하며 그대로 보존된다.
2) 완전한 외부 : 삼각형이 완전히 시야 외부에 위치하며 추려진다.
3) 부분적 내부 : 삼각형이 부분적으로 절두체 내부에 위치하면 삼각형 두 개의 부분으로 분리되어 추려지고 보존된다.
- 4단계인 컬링 단계에서는 추려지는 면은 렌더링과 연산이 모두 적용되지 않지만 본 단계에서는 일반적으로 렌더링만 안될 뿐 연산은 정상적으로 이루어진다.
7단계 : 투영(Projection)
n차원에서 n-1차원을 얻는 과정
- 뷰 스페이스에서의 3D 장면을 통해 2D 장면을 얻는 과정
- 일반적으로 원근법이 적용된 원근투영과 원근법이 적용되지 않은 평행투영, 직교투영이 있다.
8단계 : 뷰포트(Viewport) 변환
프로젝트 윈도우의 좌표를 뷰포트라 불리는 화면의 직사각형으로 변환화는 과정
- 렌더링할 대상의 화면 영역을 뷰포트라 한다.
- 뷰포트 사각형은 이를 포함하고 있는 윈도우와 상대적이며, 윈도우 좌표를 이용해 지정된다.
9단계 : 래스터라이즈(Rasterize)
삼각형으로 이루어진 정보를 픽셀로 변경하는 과정
- 스크린 좌표로 버텍스들을 변환한 다음에는 2D삼각형들의 리스트를 가지게 되는데 래스터라이즈 단계는 각각의 삼각형을 그리는데 필요한 픽셀 컬러들을 계산하는 과정이다.