렌더를 할 때,
CPU가 처리할 기하 정보와
GPU가 처리할 버퍼 정보는 서로 다르다.
정점의 정보와 정점과의 연결관계, 그리고 컬러의 값은 기하 정보이며,
그 정보 값을 토대로 처리할 버퍼를 따로 변수로 둬야한다.
이후 버퍼와 값을 한 함수에 묶어줘서 컴퓨터에게 넘겨주면
컴퓨터가 이를 처리하는 것으로 알고 있었는데,
홍랩에서는 버퍼로 현재 값을 복사하고 있었다.
실제로 DX를 사용하면
cpu에 있는 것을 gpu에 복사하고,
다시 그 값이 변경되고
그 다음에 렌더링이 생기는 과정을 거치는 것을
해당 수업을 통해서 알았다.
오늘날의 GPU CPU 값 전달 방식은,
GPU가 데이터를 VRAM에 저장한 상태에서
CPU에서 그렇게하는 신호가 오면
VRAM에서 데이터를 가져와 연산하는 방식이다.
이는 그래픽 카드에서 주로 사용되며
그만큼 전송할 데이터양이 많아서 그렇다고한다.
++
CPU에서 GPU 복사 : 느리다. 때문에 한 번 넣어두고 반복 사용 추천.
GPU에서 CPU는 더 느리다.
(GPU->모니터는 빠르다.)
++
값 넣어주는 일은 CPU
양이 많고 렌더 일은 GPU
업데이트하고 렌더하는 일은 GPU가 한다.
지금은 작은 예제를 CPU에서 구현하기에 유연한 것 처럼 보이지만,
그래픽스에서 사용되는 수학은 결국은 아주 단순한 형태로 정리가 된다.
매우 단순한 행렬 연산으로 정리가 되기 때문에
단순작업을 멀티스레딩(동일 작업을 여러개)하기 때문에 훨씬 빠르다.
예제 짜보다가 버퍼 잘못 건들인 경우
정상 작동 예제
깊이버퍼
깊이 버퍼를 사용하지 않으면 렌더 순서에 따라 그려진다.
하지만 깊이(뎁스) 버퍼를 이용하면 렌더 순서에 상관 없이
우리가 구하고자하는 깊이에 따라 렌더된다.
(나중에 렌더러 구현하면서 직접 구현 + 더 공부하기)
'그래픽스 > DX11' 카테고리의 다른 글
DX11 - 원근 투영(Perspective Projection) (0) | 2024.10.23 |
---|---|
DX11 - 쉐이더 개념 + 뒷면 제거 (0) | 2024.10.21 |
DX11 - 2차원 변환(VertexShader작업) (1) | 2024.10.03 |
DX11 - 원 그리기 (0) | 2024.10.02 |
퐁라이팅 (0) | 2024.09.30 |