일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- bttask
- c++porinter
- 영단어정리
- 월드아웃라이너
- unrealengineai
- c언어정리
- 언리얼엔진공부
- 프로그래밍일기
- 언리얼비헤이어비어트리
- leveleditor
- 프로그래밍
- 수학용어정리
- 언리얼엔진5
- ipc(inter process communication)
- c++
- 언리얼ai
- 자료구조
- c++class
- 25.06.11dir
- DX
- c++용어정리
- 각도변환
- directx
- 게임엔진튜토리얼
- 자료구조정리
- 언리얼엔진
- 게임개발
- livrary
- uaiperception
- 자료형타입
- Today
- Total
루리코딩 세상
랜더링 파이프라인 본문
그래픽처리 과정의 문법과 디바이스에 대한 개념을 조금 익히고나서 새롭게 등장한 개념은
그래픽 처리과정이다. Direct3D 프로그래밍의 파이프 라인은 실시간 게임 APP용 그래픽을 생성하도록
설계되었다는 것이다. 파이프라인의 단계는 다음과 같으며,
각 단계를 통한 입출력 간의 데이터 흐름에 대해서 이해하도록 해보자.
Input-Assembler :
입력 어셈블러 스테이지는 파이프라인에 데이터(삼각형, 선 및 점)을 제공한다.
Vertex-Shader :
정점?꼭짓점 셰이더 단계는 일반적으로 변환, 스키닝 및 조명과 같은 작업을 수행하여 정점을
처리한다. 정점 셰이더는 항상 단일 입력 정점을 사용하고 단일 출력 정점을 생성한다.
Geometry-Shader :
기하 도형 셰이더 단계는 전체 기본 형식을 처리한다. 해당 입력은 전체 기본 형식이다.
또한 각 기본 형식에 대한 정점 데이터를 포함할 수 도 있다. 여기에는 삼각형에 대해
최대 3개의 정점이 추가되거나 선에 대한 두개의 꼭짓점이 추가로 포함 될 수도 있다.
기하 도형 셰이더는 제한된 기하 도형 증폭 및 증폭 해제도 지원한다.
입력 기본 형식이 지정된 경우 기하 도형 셰이더는 기본 형식을 삭제하거나 하나 이상의
새 기본 형식을 내보낼 수 있다.
Sream Output :
스트림 출력 단계는 레스터라이저로 가는 길에 파이프라인에서 메모리로 기본 데이터를
스트리밍하도록 설계되었다. 테이터를 스트리밍 또는 레스터라이저로 전달 할 수 있다.
메모리로 스트리밍 된 데이터는 입력 데이터로 파이프 라인으로 다시 순환하거나 CPU에서
다시 읽을 수 있다.
레스터라이저 :
레스터라이저는 기본 형식을 클리핑하고, 픽셀 셰이터에 대한 기본 형식을 준비하고,
픽셀 셰이더를 호출하는 방법을 결정한다.
Pixel Shader :
픽셀 셰이더 단계는 기본 형식에 대해 보간된 데이터를 수신하고 색상과 같은 픽셀별 데이터를 생성한다.
Output Merger :
출력 병합 단계는 다양한 유형의 출력 데이터(픽셀 셰이더 값, 깊이 및 스텐실 정보)와 렌더링 대상의
내용 및 깊이/스텐실 버퍼를 결합하여 최종 파이프라인 결과를 생성한다.
입력 어셈블러 단계 | Direct3D 10 이상 API는 파이프라인의 기능 영역을 단계로 구분합니다. 파이프라인의 첫 번째 단계는 IA(입력 어셈블러) 단계입니다. |
버텍스 셰이더 단계 | VS(꼭짓점 셰이더) 스테이지는 입력 어셈블러의 꼭짓점을 처리하여 변환, 스키닝, 모핑 및 꼭짓점별 조명과 같은 꼭짓점별 작업을 수행합니다. 꼭짓점 셰이더는 항상 단일 입력 꼭짓점에서 작동하고 단일 출력 꼭짓점을 생성합니다. 파이프라인을 실행하려면 꼭짓점 셰이더 단계가 항상 활성화되어 있어야 합니다. 꼭짓점 수정 또는 변환이 필요하지 않은 경우 통과 꼭짓점 셰이더를 만들고 파이프라인으로 설정해야 합니다. |
태셀레이션 단계 | Direct3D 11 런타임은 테셀레이션을 구현하는 세 가지 새로운 단계를 지원합니다. 이 단계는 낮은 세부 세분화 표면을 GPU의 상세 기본 형식으로 변환합니다. 테셀레이션은 높은 차수의 표면을 렌더링에 적합한 구조로 분할하거나 세분화합니다. |
기하 셰이더 단계 | GS(geometry-shader) 단계는 꼭짓점을 입력으로 사용하고 출력에서 꼭짓점을 생성하는 기능을 사용하여 애플리케이션에서 지정한 셰이더 코드를 실행합니다. |
스트림 출력 단계 | 스트림 출력 단계의 목적은 기하 도형 셰이더 단계(또는 기하 도형 셰이더 단계가 비활성 상태인 경우 꼭짓점 셰이더 단계)에서 하나 이상의 버퍼(스트림 출력 단계시작 참조)로 꼭짓점 데이터를 지속적으로 출력(또는 스트림)하는 것입니다. |
래스터라이저 단계 | 래스터화 단계에서는 실시간 3D 그래픽을 표시하기 위해 벡터 정보(셰이프 또는 기본 형식으로 구성됨)를 래스터 이미지(픽셀로 구성됨)로 변환합니다. |
픽셀 셰이더 단계 | PS(픽셀 셰이더 단계)를 사용하면 픽셀별 조명 및 후처리와 같은 풍부한 음영 기술을 사용할 수 있습니다. 픽셀 셰이더는 상수 변수, 텍스처 데이터, 보간된 꼭짓점 값 및 기타 데이터를 결합하여 픽셀당 출력을 생성하는 프로그램입니다. 래스터라이저 단계에서는 기본 형식으로 덮인 각 픽셀에 대해 픽셀 셰이더를 한 번 호출합니다. 그러나 셰이더를 실행하지 않도록 NULL 셰이더를 지정할 수 있습니다. |
출력 병합 단계 | OM(출력 병합기) 단계는 파이프라인 상태, 픽셀 셰이더에서 생성된 픽셀 데이터, 렌더링 대상의 내용 및 깊이/스텐실 버퍼의 내용을 조합하여 최종 렌더링된 픽셀 색을 생성합니다. OM 단계는 표시되는 픽셀(깊이 스텐실 테스트 포함)을 결정하고 최종 픽셀 색을 혼합하기 위한 마지막 단계입니다. |
스텐실 버퍼(Stencil Buffer)
3D 그래픽스에서 화면의 특정 픽셀에만 렌더링을 제한하거나 허용하기 위해 사용하는 버퍼다.
주로 복잡한 이미지 마스킹, 그림자, 반사, 아웃라인 효과 등을 구현할 때 사용한다.
✅ 스텐실 버퍼 구조
- 일반적으로 8비트 정수 버퍼
→ 픽셀마다 0~255의 값을 가짐
→ 각 픽셀은 렌더링 전, 이 값을 검사(=스텐실 테스트)
✅ 스텐실 버퍼 사용 과정 (요약)
- 스텐실 값 설정 (마스크 영역 정의)
→ 어떤 영역의 스텐실 값을 원하는 값으로 씀 - 스텐실 테스트 설정
→ 이후 렌더링할 때, 픽셀의 스텐실 값이 특정 조건(=예: 값이 1일 때만 그리기)을 만족해야만 렌더링됨 - 필요한 부분만 렌더링됨
→ 조건을 만족하지 않는 영역은 렌더링되지 않음
✅ 스텐실 vs 깊이 버퍼(Depth Buffer)
목적 | 렌더링 영역 제한/마스킹 | Z축 깊이 테스트 |
값 | 0~255 (8bit) | 보통 부동소수점 |
사용 예 | 반사, 그림자, 선택 강조 등 | 앞뒤 판단 (Z-fighting 방지) |
Ref
https://learn.microsoft.com/ko-kr/windows/win32/direct3d11/overviews-direct3d-11-graphics-pipeline
'이론 > DirectX' 카테고리의 다른 글
Assimp Lib 활용 및 정리 (2) | 2025.06.11 |
---|---|
수학적 처리 방식에 따른 연산 개념 정리 (~rise) (2) | 2025.06.09 |
ID3D11_DeviceContext _인터페이스 (0) | 2025.06.07 |
DirectX : SwapChain 구조체, Factory 생성 및 Device 불러오기 (0) | 2025.06.07 |
싱글, 더블 버퍼링(Single Buffering, Double Buffering) (0) | 2025.06.03 |