GPU 주도 렌더링
나나이트를 이해하기 위한 스터디에서 발표한 저의 두 번째 주제는 GPU 주도 렌더링입니다.
나나이트는 오브젝트 수에 따라 발생하던 병목현상을 화면의 픽셀 수로 옮겨갈 수 있도록 했습니다. 덕분에 작업자는 폴리곤의 수에 대한 제약 없이 고퀄리티의 메시를 다수 사용할 수 있게 되었습니다. 여기에 사용된 중요한 기법 중 하나가 GPU 주도 렌더링이어 학습을 진행하게 되었습니다.
발표자료
GPU 주도 렌더링을 충분히 이해하려면 다뤄야 하는 내용이 상당히 많습니다. 그래서 이번 학습 및 발표에서는 개요정도만 다룰 수 있었습니다. 충분히 이해했다고 보기는 어렵지만, 큰 방향정도는 파악할 수 있었던 시간이었습니다.
그리고 GPU 주도 렌더링과 관련된 기법은 상당히 많지만, 여기서는 GPU Scene과 Mesh Shader 정도 가볍게만 다뤘습니다. 대신 관련 내용들에 대한 참고 자료링크를 모두 기재해 두었으니 깊이 있는 학습을 원하시면 해당 내용을 참고 부탁드립니다.
발표 자료를 깔끔하게 만들지 못한 거 같아 요약된 설명을 아래에 덧붙입니다.
GPU 주도 렌더링이란?
- 기존에 CPU가 드로우 콜을 생성하던 방식을 벗어나, GPU가 필요한 데이터를 직접 처리하고 드로우를 수행하는 렌더링 기법
기존 CPU 주도 렌더링과 GPU주도 렌더링의 차이.
- CPU 주도 렌더링: CPU가 씬의 정보를 처리한 후, 각 오브젝트별로 Draw Call을 호출.
- GPU 주도 렌더링: CPU는 간접 Draw(Indirect Draw)만 호출하고, GPU가 씬 정보를 바탕으로 오브젝트를 직접 그리는 방식.
GPU 주도 렌더링을 사용하게 되면 오브젝트 수에서 발생하던 병목현상이 GPU에서 처리하는 폴리곤 수로 옮겨가게 됩니다.
나나이트에서 GPU 주도 렌더링
나나이트에서는 GPU 주도 렌더링과 함께 클러스터도 사용합니다. 클러스터는 하나의 오브젝트에서도 삼각형을 클러스터화 후 컬링합니다. 이렇게 나나이트에서는 GPU 주도 렌더링과 클러스터를 함께 사용하여 무제한에 가까운 오브젝트와 폴리곤을 사용할 수 있게 되었습니다.
이외 자세한 내용은 발표자료를 참고해 주세요.