· 엔진 개발일지 #8 - 디바이스(GPU) 다루기
· 엔진 개발일지 #9 - 스왑체인, 렌더패스, 파이프라인, 쉐이더, 버퍼들
· 엔진 개발일지 #10 - 쉐이더와 데이터 주고받기
오늘은 지난 글에 이어, 컴퓨트 쉐이더를 한번 다뤄보겠음
컴퓨트 쉐이더는 쉐이더 코드를 통해 GPU에서 그래픽 관련 기능 말고도 다양한 계산 작업을 수행할 수 있도록 하는 기능임ㅇㅇ
지난 글에서 여러가지 버퍼들을 다루었었는데, 그중 스토리지 버퍼가 쉐이더에서 "쓰기"도 가능하다고 했었음
이를 이용해, 컴퓨트 쉐이더에서 계산한 결과를 내보낼 수 있게됨
또, 단순히 내보내는데서 그치는게 아니라 이를 정점 쉐이더에서 가져다가 그리는데 쓸 수도 있음ㅇㅇ
지난 글에서 사용한 아래 수식 계산 작업을 컴퓨트 쉐이더에 넘겨서 해보겠음
https://gist.github.com/erenengine/386ff40b411010a119ad2c43d6ceab9f

update_uniform_buffer. GitHub Gist: share code, notes, and snippets.
gist.github.com
아래 영상처럼 사각형이 빙글빙글 돌아가는데 쓰이는 코드임
아래와 같이 똑같은 계산식을 수행하는 컴퓨트 쉐이더 코드를 작성하고,
다음 버전의 에렌엔진을 작업하는 소스코드 저장소입니다. Contribute to erenengine/eren development by creating an account on GitHub.
github.com
기타 코드들도 이것저것 만진 뒤 실행해보면, 잘 된다.
근데 사실 이런 용도로 컴퓨트 쉐이더를 쓰는건 그리 적절하지 못한데,
GPU는 특성상 병렬 처리에 특화되어있기 때문임
지금은 그냥 한번 맛보기 용도로 프로세스를 1개만 돌려서 해본거라, 큰 이점이 없음
수많은 캐릭터가 나오는 거라던지, 파티클 생성 등에서 써먹으면 아주 유용함ㅇㅇ
그나저나 WebGPU에서는 read_write storage buffer를 버텍스 셰이더에서 사용할 수 없고,
WebGL에서는 storage buffer를 사용할 수 없어서,
웹에서는 컴퓨트 쉐이더를 드로잉하는데 쓰기는 좀 어려울듯 ㅇㅇ (계산용으로만 쓸 수 있을듯...)
아무튼 오늘도 여기까지... 다들 즐개발 하셈ㅋㅋ
RWStructuredBuffer 가 스토리지 버퍼구만 자세한건 모르고 사용하고 있었네 - dc App