계산 셰이더(Compute Shader)
- DirectX가 제공하는 프로그램 가능 셰이더 중 하나
- 렌더링 파이프 라인 외부에 따로 존재한다 => 그럼에도 화면에 렌더링하지 않고도 GPU 자원에 읽고(Read) 쓰는게(Write) 가능하다
- 병렬적 알고리즘 구현에 용이하다 => GPGPU 프로그래밍에 유용하다
- 계산 셰이더의 출력 결과를 렌더링 파이프라인에 다시 바인딩 할 수 있다
GPGPU(General Purpose GPU) 프로그래밍
GPU를 비그래픽 분야에 응용하는 것.
장점 : 많은 양의 데이터를 병렬적으로 처리할 수 있다 ex) 파티클 시스템
단점 : 그래픽 연산과 달리 GPU의 연산 결과를 다시 CPU로 보내야 한다(물론 GPU를 통한 연산으로 보는 이득이 더 크다)
지금은 계산 셰이더로 하는 계산들을 계산 셰이더가 지원되기 전에는 픽셀 셰이더로도 많이 처리 했다고 한다. 그렇다면 픽셀 셰이더와 비교했을 때 계산 셰이더의 장점은 뭐가 있을까?
픽셀 셰이더와 비교했을 때 계산 셰이더의 장점
- 출력할 곳의 리소스를 임의의 위치로 쓸 수 있음 => 예를 들어 특정 RWStructuredBuffer에 쓴다고 하면 몇번째 인덱스에 쓸지 지정할 수 있다는 의미
- Dispatch, numthreads 같은 기능과 동기화 기법으로 멀티 스레딩 환경에서 프로그래밍이 쉽다 => Dispatch는 계산 셰이더를 호출하는 함수. GroupMemoryBarrierWidthGroupSync()라는 쓰레드 동기화를 위한 함수이다. 이 함수는 모든 스레드가 이 함수 호출에 도달할 때 까지 나머지 모든 스레드는 블락한다.
- 지정한 수의 스레드만 명시적으로 구동시켜서 퍼포먼스 최적화 가능
- 렌더링 파이프라인 외부에 있으므로 디버깅이 용이하다? 렌더링 파이프라인처럼 드로우 콜 한다고 입력 조립기부터 -> 정점 처리 -> 래스터라이저 -> 픽셀 처리-> 출력 병합 이렇게 한번에 도는게 아니라 Compute Shader만 따로 실행하고 그 결과를 확인할 수 있으니까?
단점
- 계산 결과를 다시 CPU에서 접근해야 할 경우엔, 비디오 메모리(VRAM)에 담긴 결과를 시스템 메모리(RAM)로 복사해야하는 비용이 있다(ex. 스키닝 연산 결과의 Bone Matrix를 Socket에도 적용하기 위해 계산 셰이더 결과를 CPU로 가져와야 할 때)
'공부 > Graphics, DirectX, 포트폴리오 구조' 카테고리의 다른 글
Picking을 위한 Screen 공간 -> 뷰 공간으로 역변환 (0) | 2022.10.17 |
---|---|
포워드 렌더링(Forward Rendering) vs 디퍼드 렌더링(Deferred Rendering) (0) | 2022.10.11 |
상수 버퍼, 구조화 버퍼, D3D11_BUFFER_DESC (0) | 2022.09.27 |
3D OBB 충돌 코드 및 설명 (0) | 2022.09.22 |
그림자 매핑(Shadow Mapping) (0) | 2022.09.17 |