그래픽스 파이프라인
- 3차원 컴퓨터 그래픽스에서 그래픽스(또는 렌더링) 파이프라인은 3차원 이미지를 2차원 래스터 이미지로 표현하기 위한 단계적 방법을 말한다.
- 위 다이어그램은 DX3D 11에서의 파이프라인이며 입력에서 출력으로의 데이터 흐름을 보여준다.
- 다이어그램에서 직사각형 단계는 하드웨어 처리이기 때문에 프로그래밍이 불가능하고, 둥근 블록의 단계는 HLSL(High Level Shader Language)을 사용하여 프로그래밍이 가능하다.
- 보통 쉐이더 프로그래밍이라 말할 때는 '버텍스 쉐이더'와 '프래그먼트(픽셀) 쉐이더'를 제어하는 코드를 작성하는 것을 가리킨다.
- Input-Assembler(입력 조립) Stage : GPU가 CPU부터 정점 데이터를 받아 프리미티브들을 만든다.
- Vertex Shader(정점 쉐이더) Stage : 정점들의 공간 변환을 수행한다.
- Rasterizer(래스터라이저) Stage : 정점 데이터들을 기반으로 보간된 프래그먼트(픽셀)를 생성한다.
- Pixel Shader(픽셀 쉐이더) Stage : 프래그먼트를 받아 화면에 그려질 픽셀들의 색과 깊이 값을 출력한다.
- Output-Merger(출력 병합) Stage : Z 테스트, 스텐실 테스트, 알파 블렌딩을 통해 최종적으로 화면에 그려질 색상을 결정한다.
※※※ 프리미티브 : 가장 원시적인 단위를 뜻하는 것으로 여기서는 삼각형을 뜻한다.
- 다이어그램을 조금 더 세부적으로 표현하면 다음과 같다.
- 로컬 스페이스
- 모델링 스페이스라고도 하며, 모델링 과정을 월드에 직접 구성하는 것보다 쉽기 떄문에 로컬 좌표 시스템을 이용하여 모델링을 쉽고 단순하게 만들어준다.
- 로컬 스페이스에서는 위치, 크기와 월드 내에서의 다른 물체와의 관계를 고려하지 않고 구성이 가능하다.
- 월드 스페이스
- 로컬 좌표 시스템 내에 다수의 모델을 구성한 다음, 이들을 월드 좌표로 옮겨 하나의 장면을 구성한다.
- 행렬을 이용해 로컬 스페이스의 물체들을 위치, 회전, 크기의 변경작업을 수행하게 된다.
- 뷰 스페이스
- 월드 좌표에서 카메 중심으로 좌표변환을 한다.
- 카메라를 월드 내의 임의의 위치나 방위를 가지면 투영 및 그 밖의 작업이 어렵다.
- 그래서 카메라를 월드의 원점으로 변경하고 양의 Z축을 보도록 한다.
- 컬링(후면 추려내기)
- 카메라에 대해 뒤집혀있는(뒷면)의 프리미티브 처리를 건너뛰는 작업이다.
- GPU가 고속화 되더라도 모든 면을 연산하기에는 GPU에 부담이 되므로 렌더링 축소는 항상 해야된다.
- 조명
- 물체에 명암을 주어 사실감을 더해준다.
- 조명은 정반사광(Specular), 난반사광(Diffuse), 환경광(Ambient)등이 있다.
- 광원은 방향성 광권(Directional light), 점 광원(Point light), 점적 광원(Spot light)이 있다.
- 클리핑
- 시야 볼륨 외부의 기하물체를 추려내는 과정이다. (절두체 컬링)
- 절두체 : 투영행렬을 계산할 때 범위의 모양이 삼각뿔의 머리를 잘라둔 것처럼 생겨서 절두체라고 한다.
- 완전한 내부 : 폴리곤이 완전히 절두체 내부에 위치하면 그대로 보존
- 완전한 외부 : 폴리곤이 완전히 절두체 외부에 위치하면 추려낸다.
- 부분적 내부 : 폴리곤이 부분적으로 절두체 내부에 위치하면 폴리곤은 두 부분으로 나누어 내부에 위치한 부분은 보존하고 나머지는 추려낸다.
- 투영
- 3D를 2D로 표현 (N차원에서 N-1 차원을 얻는 과정)
- 원근 투영(Perspective projection)을 사용하여 2차원의 화면을 얻는다.
- 뷰포트
- 화면에 표시되는 영역
- 윈도우의 뷰포트라 불리는 화면의 직사각형으로 변환하는 과정
- 투영된 이미지를 모니터에 표시할 수 있는 크기로 다시 변환
- 래스터라이즈
- 각각의 폴리곤을 그리는데 필요한 픽셀 컬러를 계산 (각 정점 좌표로 부터 선형 보간에 따라 생성된다.)
- 픽셀 하나하나를 계산하는 작업을 하기에 엄청난 양의 연산처리가 필요하므로 전용 그래픽 하드웨어에서 처리되어야한다.
'Develoment > Graphics' 카테고리의 다른 글
[유니티] 배칭(다이나믹, 스태틱) (0) | 2022.04.27 |
---|---|
[유니티] 모바일 기본 쉐이더 (0) | 2022.04.24 |
[유니티] 오클루전 컬링 - 설정 (0) | 2022.04.21 |
[유니티] 오클루전 컬링 - 기본 개념 (0) | 2022.04.20 |
[유니티] 벚꽃잎 흩날리는 파티클 (0) | 2022.04.18 |