Link

ํ”„๋กœ์ ํŠธ ๋ ˆ์ด์•„์›ƒ

Vulkan ์—”์ง„์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํด๋” ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • /assets์—๋Š” ์ด ๊ฐ€์ด๋“œ์—์„œ ์‚ฌ์šฉํ•  ํ…์Šค์ณ์™€ 3D ๋ชจ๋ธ์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.
  • /bin์€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์ด ๋นŒ๋“œ๋  ๊ณณ์ž…๋‹ˆ๋‹ค. ์—์…‹๊ณผ ์…ฐ์ด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜์ ์ธ CMake ๋นŒ๋“œ ํด๋”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • /shaders๋Š” ์…ฐ์ด๋”์™€ ์ปดํŒŒ์ผ๋œ ์…ฐ์ด๋”๊ฐ€ ์ถœ๋ ฅ๋  ๊ณณ์ž…๋‹ˆ๋‹ค.
  • /chapter-N์—๋Š” ์ด ๊ฐ€์ด๋“œ์˜ ๊ฐ ์ฑ•ํ„ฐ์˜ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.
  • /third_party์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋“ค์–ด์žˆ์œผ๋ฉฐ, ์†Œ์Šค์ฝ”๋“œ์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์—”์ง„์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” /third_part์— ๋“ค์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•˜๊ฒŒ ๋‚ด์žฅ๋˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ๋Š” SDL์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์จ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ, CMake๊ฐ€ ์ž๋™์œผ๋กœ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. SDL์€ ํ”„๋กœ์ ํŠธ์™€ ๋ณ„๋„๋กœ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋ฉฐ, CMake์—๊ฒŒ ๊ทธ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • GLM (openGL Mathematics) Header only ์ˆ˜ํ•™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. GLM์„ ์‚ฌ์šฉํ•ด ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ GLSL ํƒ€์ž…๊ณผ ์ง์ ‘์ ์œผ๋กœ ํ˜ธํ™˜๋˜๋Š” ํƒ€์ž…๋“ค์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, glm::mat4๋Š” ์…ฐ์ด๋”์—์„œ์˜ mat4์™€ ์ง์ ‘์ ์œผ๋กœ ํ˜ธํ™˜๋˜๋ฉฐ ์œ ์‚ฌํ•œ ์—ฐ์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์— OpenGL์ด ๋“ค์–ด๊ฐ€ ์žˆ์ง€๋งŒ Vulkan์—์„œ๋„ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

  • SDL ์ฐฝ(window)์™€ ์ž…๋ ฅ์„ ๋ฐ›๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ณ„์ ์œผ๋กœ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. SDL์€ ์ฐฝ์„ ๋งŒ๋“ค์–ด ์ž…๋ ฅ ์žฅ์น˜์— ์ ‘๊ทผํ•˜๋Š” ๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. SDL์€ ๋Œ€๋ถ€๋ถ„์˜ ํ”Œ๋žซํผ์„ ์ง€์›ํ•˜๋ฉฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์–ธ๋ฆฌ์–ผ ์—”์ง„, ์œ ๋‹ˆํ‹ฐ, ์†Œ์Šค, ๊ทธ ์ด์™ธ์˜ ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ฐฝ์„ ๋งŒ๋“ค๊ณ  ํ‚ค๋ณด๋“œ ์ž…๋ ฅ๊ณผ ๊ฐ™์€ ์„ธ๋ถ€์‚ฌํ•ญ์„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ SDL์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • dear IMGUI ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์Šฌ๋ผ์ด๋”์™€ ์ฐฝ๊ณผ ๊ฐ™์€ ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์œ„์ ฏ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์‚ฐ์—…์—์„œ ๋””๋ฒ„๊ทธ ํˆด๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ Œ๋”๋ง์— ์ƒํ˜ธ์ž‘์šฉํ•  ์˜ต์…˜๋“ค์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • STB Image ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋”ฉํ•˜๋Š” header only ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋กœ๋”ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ž‘๊ณ  ๋น ๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. BMP, JPEG, ๊ทธ๋ฆฌ๊ณ  ๊ธฐํƒ€ ๋‹ค๋ฅธ ํ”ํ•œ ์ด๋ฏธ์ง€ ํฌ๋งท๋“ค์„ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ๋‹จ์ผ ํŒŒ์ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง‘ํ•ฉ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

  • Tiny Obj Loader .Obj ๋ชจ๋ธ์„ ๋กœ๋”ฉํ•˜๋Š” header only ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. 3D ๋ชจ๋ธ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ž‘๊ณ  ๋น ๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

  • Vk Bootstrap Vulkan์„ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ํ•„์š”ํ•œ ๋งŽ์€ ์–‘์˜ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ(boilerplate)๋ฅผ ์ถ”์ƒํ™”ํ•ด์ค๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋Š” ํ•œ๋ฒˆ๋งŒ ์ž‘์„ฑ๋˜๊ณ  ์ดํ›„ ์ˆ˜์ •ํ•  ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋Œ€๋ถ€๋ถ„์˜ ๊ณผ์ •์„ ์ƒ๋žตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ, ์Šค์™‘์ฒด์ธ ์ƒ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ํ™•์žฅ ๋กœ๋”ฉ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ์ดํ›„ Vulkan์„ ์ˆ˜๋™์ ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ๋ถ€๋ก์—์„œ๋Š” ์ œ๊ฑฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • VMA (vulkan memory allocator) Vulkan์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž๊ฐ€ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” header only ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. Vulkan์—์„œ๋Š” ๋ฒ„ํผ, ์ด๋ฏธ์ง€, ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์ž์›๋“ค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋‹ค๋ค„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์„ ๋™์‹œ์— ๊ณ ๋ คํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋งค์šฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Vulkan Memory Allocator๋Š” ์ด๋ฅผ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•˜์—ฌ ์ด๋ฏธ์ง€๋‚˜ ๋‹ค๋ฅธ ์ž์›์˜ ์ƒ์„ฑ์„ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ Vulkan ์—”์ง„์ด๋‚˜ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ๊ฐ™์€ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์–ธ๋ฆฌ์–ผ ์—”์ง„์ด๋‚˜ ๊ธฐํƒ€ AAA ์—”์ง„๊ณผ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฐ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž๊ฐ€ ๊ตฌํ˜„๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

Next: Building Project