오늘은 지난 글에 이어, 컴퓨트 쉐이더를 한번 다뤄보겠음


컴퓨트 쉐이더는 쉐이더 코드를 통해 GPU에서 그래픽 관련 기능 말고도 다양한 계산 작업을 수행할 수 있도록 하는 기능임ㅇㅇ


지난 글에서 여러가지 버퍼들을 다루었었는데, 그중 스토리지 버퍼가 쉐이더에서 "쓰기"도 가능하다고 했었음


이를 이용해, 컴퓨트 쉐이더에서 계산한 결과를 내보낼 수 있게됨


또, 단순히 내보내는데서 그치는게 아니라 이를 정점 쉐이더에서 가져다가 그리는데 쓸 수도 있음ㅇㅇ


지난 글에서 사용한 아래 수식 계산 작업을 컴퓨트 쉐이더에 넘겨서 해보겠음


https://gist.github.com/erenengine/386ff40b411010a119ad2c43d6ceab9f


update_uniform_buffer

update_uniform_buffer. GitHub Gist: share code, notes, and snippets.

gist.github.com



아래 영상처럼 사각형이 빙글빙글 돌아가는데 쓰이는 코드임



아래와 같이 똑같은 계산식을 수행하는 컴퓨트 쉐이더 코드를 작성하고,


https://github.com/erenengine/eren/blob/main/eren_vulkan_render_shared/examples/test_compute_shader/shaders/shader.comp


eren/eren_vulkan_render_shared/examples/test_compute_shader/shaders/shader.comp at main · erenengine/eren

다음 버전의 에렌엔진을 작업하는 소스코드 저장소입니다. Contribute to erenengine/eren development by creating an account on GitHub.

github.com


기타 코드들도 이것저것 만진 뒤 실행해보면, 잘 된다.



ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea3fd29c9a114c2d1971e9e843a0c1571427396ab2d6f5c8c19a126e301317ee1aa40e9430fb5a1356c50




근데 사실 이런 용도로 컴퓨트 쉐이더를 쓰는건 그리 적절하지 못한데,


GPU는 특성상 병렬 처리에 특화되어있기 때문임




지금은 그냥 한번 맛보기 용도로 프로세스를 1개만 돌려서 해본거라, 큰 이점이 없음


수많은 캐릭터가 나오는 거라던지, 파티클 생성 등에서 써먹으면 아주 유용함ㅇㅇ




그나저나 WebGPU에서는 read_write storage buffer를 버텍스 셰이더에서 사용할 수 없고,


WebGL에서는 storage buffer를 사용할 수 없어서,


웹에서는 컴퓨트 쉐이더를 드로잉하는데 쓰기는 좀 어려울듯 ㅇㅇ (계산용으로만 쓸 수 있을듯...)




아무튼 오늘도 여기까지... 다들 즐개발 하셈ㅋㅋ


만-하