프로그래밍 공부
작성일
2023. 7. 13. 22:11
작성자
WDmil
728x90

3D 그래픽의 출력 결과를 생성하기 위해 여러 단계를 거처 처리하는 과정이다.

CPU와 GPU의 협업으로 동작한다.

 

  1. IA(입력 어셈블러, Input Assembler)
  2. VS(정점 쉐이더, Vertex Shader)
  3. HS(헐 쉐이더, Hull Shader)
  4. TS(분할기, Tessellator)
  5. DS(도메인 쉐이더, Domain Shader)
  6. GS(지오메트리 쉐이더, Geometry Shader)
  7. SO(스트림 출력, Stream Output)
  8. RS(래스터 라이저, Resterizer)
  9. PS(픽셀 쉐이더, Pixel Shader)
  10. OM(출력 병합기, Output Merger)

순으로 동작한다.


 

IA(입력 어셈블러, Input Assembler)

 

정점 버퍼와 인덱스 버퍼를 사용하여 기본 도형을 생성해준다.

 

이러한 도형은 기본 그래픽객체의 기본 구성 요소이며, 정점 데이터의 입력 형식을 지정한다.

 

IA에서는, 정점 버퍼에서 각 도형의 선분 끝에 점을 찍어주고, 인덱스 버퍼에서는 그 점간의 선분을 이어준다.


VS(정점 쉐이더, Vertex Shader)

 

IA에서 받아온 도형의 정점 위치를 변환하여, 원하는 공간 위치에 배치한다.

 

즉, 원하는 도형을 위치에 비틀어서 설치한다. 만들어진 도형의 기울기, 각도 등을 정해주는 부분이라고 생각하면 된다.


HS(헐 쉐이더, Hull Shader)

 

공간분할 단계로, 모델의 표면을 분할하는 작업을 수행한다. 즉, 각 도형을 가능한 디테일하게 삼각형으로 잘라준다.

 


TS(분할기, Tessellator)

 

테셀레이션 단계를 수행한다.

 

받아온 입력데이터를 더 많은 점으로 나누어 더 자세한 세밀한 모델을 생성해준다.

 

HS에서 TS로 더 세분화시켜서 분할작업을 수행한다고 이해하면 좋다.

 


DS(도메인 쉐이더, Domain Shader)

 

TS에서 수행된 분할작업에 다른 알고리즘을 넣어 세분화된 지점의 꼭지점 위치를 다시 재구성하여

 

더 자세한 모델을 구성한다.

 

특정지점에서의 추가계산을 수행한다. 노말벡터를 계산하여 조명계산에 활용할 수 있다.

 


GS(지오메트리 쉐이더, Geometry Shader)

 

테셀레이션에서 생성된 정점 데이터를 받아서 처리한다.

 

더 많은 선을 추가하거나 필요없는 선을 판단하여 지워준다

 


SO(스트림 출력, Stream Output)

 

정점 데이터를 캡처하고 저장하는 단계이다.

 

정점 데이터를 저장할 필요가 없다면, 스트림 출력은 생략된다.

 

백업이라고 생각하면 될듯?


RS(래스터라이저, Resterizer)

 

3D공간에서 정의된 3D 모델을 2D 화면으로 변환한느 과정이다.

 

각 모델을 2D화면의 픽셀로 변환하고, 픽셀에 대한 정보를 계싼하여 렌더 타겟뷰에 출력하게 된다.

 

쉽게 생각하여, 설계도에 사용하는 모눈종이에 삼각형을 그었다면, 선분이 지나가는 모눈종이의 사각형 칸은

 

대부분은 삼각형 안에 들어있겠지만, 외각부분의 칸은 선분에 걸쳐있을것 이다.

 

이때, 걸쳐있는 선분의 사각형 칸의 일정 % 이상이 모델의 내부로 들어와있다면 표시하고 아니면 표시하지 않는것을 계산한다.

 


PS(픽셀 쉐이더, Pixel Shader)

 

픽셀 쉐이더는 화면에 출력되는 각 픽셀에 대한 정보를 계산한다.( 색상, 깊이 등)

 

모델이 화면에 차지하는 픽셀의 개수만큼 픽셀 쉐이더가 실행되어 각 모델의 픽셀에 대한 색상을 계산하여 출력하게 된다.

 


OM(출력 병합기, Output Merger)

 

위의 모든 항목이 직렬이 아닌 병렬적으로 도출됨으로, 도출된 모든 결과를 OM에서 모아서 합산한 뒤

 

버퍼에 출력결과를 생성하게 된다.

728x90

'컴퓨터 용어 정리' 카테고리의 다른 글

업 케스팅(Up casting)  (0) 2023.10.10
멀티셈플링 Multisampling(표본화)  (0) 2023.10.05
Device Context  (0) 2023.07.13
Delta_Time  (0) 2023.06.21
Window API  (0) 2023.06.14