vulkan

Vulkan tutorial #6 Vertex Buffers

comwitch 2023. 6. 13. 23:36

지난번 튜토리얼에서는 vertex shader에다가 vertex 데이터를 직접 넣어서 사용했다.

 

이제는 vertex buffer를 만들어서 불러오는 방식을 사용해볼까 한다.

 

 

 

vertex buffer는 다양한 방식으로 저장되는데, 예를 들어서 버퍼 하나에 여러 attribute들이 있으면 다음과 같이 처음 두원소를 묶어서 position 그 다음 3개를 묶어서 color라고 한다. 그 둘이 합쳐서 vertex 0을 의미한다.

 

반대로 각 버퍼마다 하나의 바인딩을 묶어줄 수 도 있다. 그림과 같이 position만 가지고 있는 buffer 그리고 color normal만 가지고 있는 buffer들 세개가 바인딩 하는방식으로 존재할 수 있다.

vertex를 buffer를 저장할때 몇번째 바인딩인지 그리고 stride 값 (한 vertex가 차지하고 있는 바이트의 수) 마지막으로 input rate를 알려 주어야한다.

 

vertex attribute descriptions는 다음 4개의 정보를 알려주어야한다.

- binding

- location

- offset

- format

영상에서 설명하는 파트로 예시를 들자면

 

바로 위의 그림에서 우리는 color attribute에 관한 설명을 적어야한다면, color attribute는 바인딩 index가 0인 vertex buffer에 있으므로 binding = 0가 되고, position정보가 나온 뒤 color 정보가 나와서 location = 1이 된다, 또한 position은 x data와 y data 각각 4바이트씩 차지하므로 8바이트 이후로 color 정보가 나오므로 offset = 8byte이고, 마지막으로 vector 3 데이터를 가지고 있기 때문에 format = VK_Format_R32G32B32_SFLOAT의 형태를 가지게 된다.

 

 

이제 여기서 자주 쓰이는 데이터 타입들을 설명한다. R G B A 값은 색깔처럼 보이지만, 단순 vec의 format을 설명하므로 크게 연연하지 않아도 된다.

 

그러면 우리는 vertex buffer를 interleaved가 좋은가 separate binding이 좋은가 하지만, 상황에 따라 다르다고 한다...

일단 두가지 방법이 있다고 생각하면 될듯

 

코드 작성 파트를 진행하다보면 Vulkan Memory ALlocator에 대한 설명이 나오는데 이부분에 대해서는 추후 공부가 필요

 

코드를 치면서 VkMapMemory가 있는데 다음과 같은 형태로 vertex buffer memory가 묶여있다.(조금 더 이해 필요)