์๋ ์ ์กธํ ํ๊ธฐ์ ์ ๊ฐ์ธ์ ์ผ๋ก ๋ง๋ค์๋๊ฑด๋ฐ ๊ฒฐ๊ตญ ์ด๊ฒ๋ ๊ทธ๋ํฝ ๋ทฐ์ด ์ ๋๋ก ๋ฐ์ ๋ชป๋ง๋ค์ด์ ์ข ์์ฌ์์..
๋ ๋๋ง ๋ฐฑ์๋๋ D3D11๋ก ํ๊ณ , ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, CPU/GPU ํ๋กํ์ผ๋ฌ, Optick ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํตํฉ, ์ผ๋งค Render Graph, ImGUI ๊ธฐ๋ฐ UI, Component Registry, ๋ก๊ฑฐ, ์ด๋ฒคํธ ์์คํ , ๋ฆฌ์์ค ๋งค๋์ ๋ฐ ์บ์, ๋ํผ๋ ๋ผ์ดํ , Box ๊ทธ๋ฆฌ๊ณ Gaussian ๋ธ๋ฌ, Bloom ํจ๊ณผ, SSAO, PBR, IBL, Compute Shader ์ฌ์ฉํ Eye Adaption(์์์/๋ช ์์, Sceen ํ๊ท Luminance ๊ตฌํด์ ํ๋ ๋ฐฉ์์ผ๋ก), ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ ๋ผ์ดํธ ์ ๋จ์(Lux, Lumen, Candela, Nit, ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋จ์๋น ์ํธ ๋ณํ๋ฑ), ํค ๋งคํ, World Serialize/Deserialize, ๋ฉํฐ ์ค๋ ๋๋ ๋ ๋๋ง
์ด๋ฒ ํ๋ก์ ํธ(rust+vulkan)๋ ๋ ํ๋ด์, ๋ ๋๋ง ์๊ณ ๋ฆฌ์ฆ ์ ๋๋ก ๊ฒ์ฆํ๊ณ ํด์ ๋ ์ ๋๋ก ์ ๋ง๋ค์ด๋ณด๊ณ ์ถ๋ค์.. Skeletal Animation๋ ๊ตฌํํด๋ณด๊ณ ์ถ๊ณ ..
๋๋ฆ ์ด์ฌํ ์ง ๋ ๋๋ฌ.. 3์ฒ์ค ๊ฐ๊น์ด ์ง๋ณธ๊ฑด ์ฒ์์ด์์ด์
์์ ์ ํ๊ฐค์ ์ฌ๋ฆฐ๊ฑฐ์๋์๋
ํ๊ฐค์ ์ฌ๋ ธ๋? ์ด๊ฑด ์์ฌ๋ ธ๋๋ฐ
ํ๊ฐค์๋๊ณ ๋ค๋ฅธ๊ฐค์ด์๋?? ์ํผ ์ ์์ง ์งค๋ดฃ์
์ ๊ฑฐ ํ์ฐฝํ ๋ ์์นด๋ผ์ด๋ธ์ ์ฌ๋ฆฐ์ ์ ์์
๊ฐ๋ฐ๊ด๋ จ ๊ฐค์ด์๋๊ฑฐ๊ฐ์๋ฐ ๊นํ๊ฐค์ด์๋
๊ฐค์ ์ฌ๋ฆฐ์ ์์๊ฑธ? ๋ ๋๋ง ๊ฐค์ ์ฌ๋ฆฐ๊ฑด ์ด๊ฑฐ๋ ๋ค๋ฅธ GL๋ก ๊ตฌํํ ์กธํ
๋ ์ค์ผ ์ํจ??????????
์ด๊ฑฐ์ ๋ฐ๋ง ํ ์ ์์์ผ๋ฉด ์ข๊ฒ ๋ค
๊ทผ๋ฐ ๋๋ ์ ๊ฑฐํ ๋๋ณด๋ค ์ง๊ธ ์ค๋ ฅ ์์ฒด๋ ๋ง์ด ์๋์ด์ ์ด๋ฒ์ ๋นก๊ณตํ ๋ ค๊ตฌ
์ง์งํ๊ฒ ๋ํ 4๋ ๋ค๋๋ฉด์ ๊ทธ๋ํฝ์ค๋ง ํ๊ฑฐ์? ๋๋ ๊ทผ 2๋ ๊ฐ์ ๊ทธ๋ํฝ์ค๋ง ํ๊ธด ํ๋๋ฐ ๋๋ฌด ๋์ฌ์ธ๊ฑฐ๊ฐ์
๋๋ ๊ณ ๋ฑํ๊ต๋ ๊ฒ์ ๋ง๋๋๊ณณ ๋์ค๊ธฐ๋ ํ๊ณ .. ์ ์ด์ ๋ํ ์จ ์ด์ ๊ฐ ๊ทธ๋ํฝ์ค ๋ฐฐ์ฐ๊ณ ์ถ์ด์ ์์ด์ ์ด์ข๊ฒ 1ํ๋ ๋๋ถํฐ ํ๋ถ ์ฐ๊ตฌ์๋ ํด๋ณด๊ณ ํด์ ๋ฐฐ์ธ์์๋๊ฒ ๋ง๊ณ , ๊ต์๋, ๊ทธ๋ฆฌ๊ณ ์์ฌํ์๋ ํ, ๋ฐ์ฌ๊ณผ์ ํ์๋ ์กฐ๊ต๋์ด ๊ฐ์ฌํ๊ฒ๋ ์ธ๋ถ ๋ถ์ผ๋ ๋ฌ๋ผ๋ ๋ฉ๋ฏธํ ์ด๋ ํ์์๋ ๋ง์ด ๋์์ฃผ์ ์. ์ด๊ฒ์ ๊ฒ ๋ง์ด ์ฑ์ฅํ ๊ฒ ๊ฐ์ .
๋ถ๋ฝ๋ค ์ฉ
์ค๊ฐ์ 1๋ ํดํํ๊ธฐ๋ํ๊ณ . ๋ฌผ๋ก ์์ง ์ฐ๊ตฌ์ ๋ถ๋ค์ด๋ ํ์ ์ ๋ถ๋ค์ ๋นํด์ ๋ถ์กฑํ๊ณ ๊ฒฌ์์ด ์ข๊ธดํ๋ฐ. ๋ ์ด์ฌํ ํด์ผ์ง ์ถ๋ค. ๋ํ ๋ค๋๋ฉด์ ์์ฌ์ ๋๊ฒ PBRT๋ผ๋ ์ฑ ์์ ํ ์ดํด ๋ชปํ๊ฑฐ๋ผ์, ์ง๊ธ์ Advanced Global Illumination ์ด๋ผ๋ ์ฑ ์ฝ์ผ๋ฉด์, rust๋ vulkan ์ผ๋ก ๋ ๋๋ฌ ๋ง๋ค๋ ค๊ณ , rust๋ ๊ณต๋ถํ๊ณ ์๋ค
๋ดค์์๋ ์๊ฒ ์ง๋ง ๊ตฌ๊ธ์์ filament ๋ผ๋ ๋ ๋๋ฌ ํ๋ก์ ํธ ์๊ฑฐ๋ ? ๊ทธ๊ฑฐ ๋ฌธ์๊ฐ ์ง์ง ์จ์ ๋ณด์์ด๋๊น ํน์๋ ๊ด์ฌ ์์ผ๋ฉด ์ฝ์ด๋ด๋ฐ
ใ ใ ใ ใ ๋กํ ๋๋ ์ด์ฌํ ํด์ผ๊ฒ ๋ค
https://google.github.io/filament/Filament.html
์ฐ๊ตฌ์์๋ชฐ๋ผ๋ ํ์ ์๋ค์ด๋์ ๋น๋น๊ฑฐ๊ฐ์๋ฐ ใ ใ
๋๊น ์ด์๋ค
์ด๊ฑฐ ์๋ํฐ ๋ง๋๋๊ฒ ์์ง ๋ง๋๋๊ฒ๋ณด๋ค ๋นก์ ์๋ฏ ใ ใ ใ
imgui ๋๋ถ์ ๋ณ๋ก ๋นก์ธ์ง ์์์ดใ ใ
๊ณ ์
๊ฒ์ ๊ฐค๋ก
๊ณ ๋ฏผํ์๋๋ฐ ์ญ์ ๊ทธ์ชฝ์ ์ฌ๋ ธ์ด์ผ ํ๋?
๋ค๋ ์ถฉ๋ค ์๊ฐ๋ฆฌ ์น๋ซ๊ฒ ๋ ธ
๋๋ ๋ฌ์คํธ์ถฉ์ด ๋๊ฒ ๋ค!
์ธ๊ฐค ์์ 0.000001%
๋ ์ค์ผ ๋ฉ์์ด์ - dc App
์ด์ผ ๊ณ ์ํ๋ค...
์์ด์ opengl๋ ๋์ ํฌ๋ก์ค ํ๋ซํผ ์ง์ํด์ฃผ๊ณ ! ๋งํ๋๋ก ์ค์ผ๋ ํค ์ ๋๋ฉ์ด์ ๋ ํด๋ณด์!
๋์ค์ Vulkan, Direct3D 12๋ก ์ ๋นํ ๊ด์ฐฎ์ HAL ๋ง๋ค์ด ๋๋ ค๊ณ .. ์ง๊ธ์ ๋ฌ์คํธ๊ฐ ์๋นํ ๋ง์ ๋ค์ด์ ์ด์ชฝ์ผ๋ก ๊ณต๋ถํ๊ณ ์์ ํ ๋ฏ
์๋๋ฉด ์ง๊ธ vulkan+rust๋ก ๋ง๋ค์ด๋๊ณ ๋์ค์ ๊ทธ์์ HAL ์์์ ๋ค๋ 12๋ ๋ฃ๋์์ผ๋ก ํ ๋ฏ
์ด๋ฐ๊ฑฐ ๊ณต๋ถํ ๋ผ๋ฉด ๋ญ๋ถํฐ ์์ ํด์ผ๋ผ?? ๋ ์ปด๊ณต์ธ๋ฐ๋ ๊ฐ์ด ์์กํ๋ค ใ ใ ใ
C++์ ์ปดํจํฐ ๊ทธ๋ํฝ์ค, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ํฝ์ค API, ๊ดํ ์ง์ ์กฐ๊ธ
๊ตฌ๊ธ์ LearnOpenGL ๊ฒ์ ํด๋ด! ๋ด ๊ฐค๋ก๊ทธ ๋ค์ด๊ฐ์ ์ด ๊ธ ์ญ ๋ด๋ ค๋ณด๋ฉด ์ ๋ฆฌํด๋ ๊ธ๋ ์์ด!
์ง์ง ์ด๋ฐ ์งค ๋ณผ ๋ ๋ง๋ค ์ฒ์๊ณ๋ ๋ค๋ฅด๋ค๋ ๊ฑธ ๋๋๋ค
์์ง ์ฒ์๊ณ๋ ์๋์ผ.. ๊ทธ๋ฅ ํํ ๋ฆฌ์ผ๋ค ๊ตฌํํ๊ณ ๊ทธ๋ฐ๊ฒ ๋ชจ์ฌ์ ๋ง๋ค์ด์ง๊ฑฐ์ง ๋ญ..
๋ณด๋ฉด์ ์ฐ๋ ์ ์์ด.
์์นด๋ผ์ด๋ธ ์์ ๋๊ธ ๋ ์ฌ๋ผ์ค๋์ง ํ์ธํ๊ณ ์์๋๋ ์ฌ๊ธฐ์์ ์ฌ๋ฆฌ์๊ณ ์์๋ด ๋๋ ํผ์์ ๋งจ๋ ์ ํด๋ฉํ๋ ์์ผ๋ก ํ๊ณ ์๋๋ ์ด๋ฐ๊ธ ๋ณด๋ฉด ํ์ด๋๋ค ์ด๋ค๊ฐค์ด๋ ๋ง์ด ์ฌ๋ ค์ฃผ๋ผ
๋ ๋๋ง ๊ฐค์ ์์ผ๋ก ๋ง์ด ์ฌ๋ฆฌ์ง ์ถ์ด์ ๊ณต๋ถํ ๋ด์ฉ๋ค ์ ๋ฆฌ๊ฐ๋ฅํ๋ฉด ๋ฐ๋ก ๋ธ๋ก๊ทธ์๋ ์ฌ๋ฆด๊ฒ ๊ฐ๊ตฌ.. ๋ง ๋ ผ๋ฌธ ์ ๋ฆฌํ๊ฑฐ๋ ๊ทธ๋ฐ๊ฒ๋ค..
๋ธ๋ก๊ทธ ์ ์ํ๋ฉด ์์นด์ด๋ธ ์ชฝ์๋ ๊ธ ์จ์ ์๋ ค ์ฃผ์ค์ ์๋์?
๋๋ ์ง๊ธ ์ด๋ฌ๊ณ ์๋๋ฐ ํ์ฒ๋ฆฌ๊ฐ ๋๋ฌด ๋ง์์ ํ๋ ์์ด ๊ฐ๋ฐ์ด๋๋์ค์ compute shader๋ก ํ์ฒ๋ฆฌ ์ฎ๊ธฐ๋ฉด ์ฑ๋ฅ์ฐจ์ด ์์? ์์ง ์ปดํจํธ๋ ์์จ๋ด์ ๋ชฐ๊ฒ ์ - dc App
ํฝ์ ์์ด๋๋ก ํ์ฒ๋ฆฌํ๋๊ฒ๋ณด๋ค์ผ ๋ณ๋ ฌ ์ฐ์ฐ์ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ณ์ฐ ์์ด๋๊ฐ ํจ์ฌ ๋น ๋ฅด์ง ์์๊น??? ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๋๋ฆฌ๋์ง๋ ์ ํํ๊ฒ ๋ชจ๋ฅด๊ฒ ๋ค
์ผ๋จ fragment(pixel) shader๋ก post-process ํ๊ธฐ ์ํด์๋, Graphics Pipeline์ ์ค์ ํด์ค์ผํ๊ณ , ๋ ๋ฒํ ์ค๊ฐ 4๊ฐ๋ฐ์ ๋์ง ์๊ฒ ์ง๋ง ํ๋ฉด์ ์ฑ์์ค Screen Quad์ ๋ฒํ ์ค๋ฒํผ๋ฅผ GPU์ ์ ๋ก๋ ํด์ค์ผํ๊ณ , ๋ ๋ด๋ถ์์ Input Assembler, Rasterization, Fragment Interpolation, Scissor test ๋ฑ๊ณผ ๊ฐ์ fixed pipeline stage๋ค๋ ์ฒ๋ฆฌ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ compute shader ๊ฐ ์ฑ๋ฅ์ ์ผ๋ก ์ด๋์ ๋ณผ ์ ์์ง
๋ค๋ง Compute shader๋ฅผ ์ฌ์ฉํด์ ํ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒฝ์ฐ, ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด๋ป๊ฒ ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๋ ฌํ ํ๊ณ , shared memory๋ฅผ ์ด๋ป๊ฒ ์ ๋ฐฐ๋ถํ๊ณ ํ์ฉํ๋๊ฐ๊ฐ ์ค์ํด์ง๋๊ฑฐ์ง
๋๋ ์์ง Compute Shader๋ CUDA ์ชฝ์ ์กฐ์๊ฐ ์๊ฐ๋๋๊ฒ ์ด์ ๋ ๋ฐ์ ์์ง์์๋ฐ, ๋ญ API ์ธก๋ฉด์์๋ ๋๋ผ์ด๋ฒ ์ธก๋ฉด์์ ๋ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง ๊น์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค
์กฐ์๊ฐ ๊น์ง์์์
๋ต๋ณ ใฑใ ใฑใ ํน์ ํ๋๋ง ๋ ๋ฌผ์ด๋ด๋ ๋ ๊น? deferred device context ์ฌ์ฉํ๊ณ ์์ผ๋ฉด ์ข ๋ฌผ์ด๋ณด๊ณ ์ถ์๊ฒ ์๋๋ฐ - dc App
๋ด!
๊ฐ๋ฅํ๋ฉด ๋ ๋๋ง๊ฐค์ ์ ์ด์ฃผ๋ฉด
๋ด - dc App
๋๋ฌด์ด๊ณ ์๋ผ ์ธ ๋๊ธ์ด์๋ค์..
์น๊ณ ์;;
๋ฌ์คํธ๋ ํต์ฌ๊ฐ๋ฐ์ปค๋ฎค๋ํฐ๊ฐ ๋๋ฌด ์น์ ๋น PC์ถฉ ์ง๋จ์ด๋ผ์ ์ ๋๋ฏธ๊ฐ ๋จ์ด์ง๋๋ผ. ์ ์ฐ์ฉ์ด๊ฐ ์ ์น์ ์ผ๋ก ์ฌ๋ฐ๋ฅด์ง ์์ผ๋ ๋จ์ด๋ฅผ ๋ค ๊ฐ์์๋๋ค๋ถํฐ ๊ฐ๋ฐ๋ฐฉํฅ๋ ์ง ใ ๋๋ก ํฅ๋ฏธ์๋๊ฒ๋ง ์งํํ๊ณ
๊ทธ๋๋ ๋ฐฐ์๋ณผ ๊ฐ์น๋ ์๋ ๊ฒ ๊ฐ๋๋ผ ์ด์ ์ฑ ํ๋ฒ ์ญ ์ํํด๋ดค๋๋ฐ ์์ ๊ถ ๊ฐ๋ , ๋์ฌ ๊ท์น, trait ๋ ๋ง์๋ฌ
ํ๋กํ์ผ๋ฌ๋ ์ด๋ป๊ฒ ๋ง๋์ จ๋์? ํน์ ์ฐธ๊ณ ํ์ ์์ค๊ฐ ์์๊น์?
CPU ํ๋กํ์ผ๋ง์ optick์ด๋ผ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์์ด์, ๊ทผ๋ฐ optick์ด D3D11 GPU ํ๋กํ์ผ๋ง์ ์ง์ํ์ง ์์์ ๋ณ๋๋ก GPU ํ๋กํ์ผ๋ฌ๋ง ๋ง๋ค์์ด์. GPU ํ๋กํ์ผ๋ง์ ์ํ D3D11 ๋ฌธ์ ๋นผ๊ณ ๋ ๋ฐ๋ก ์ฐธ๊ณ ํ ์์ค๋ ์์ด์.
https://docs.microsoft.com/en-us/windows/win32/api/d3d11/nn-d3d11-id3d11query
Query ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํด์ ๊ฐ ํจ์ค์์ GPU ์ฟผ๋ฆฌ๋ฅผ begin-end ํ์ด๋ฅผ ๋ง์ถฐ์ ์๊ฐ ์ธก์ ์ ํ๊ฒ ํ์ด์. ๊ฐ ๋ฐ์ดํฐ๋ค์ end๊ฐ ํธ์ถ๋๋ฉด ๋ณ๋๋ก ์ค์ ๋ ์ฃผ๊ธฐ๊ฐ ์ง๋ ํ์ ์ํ๋ก ์ถ๊ฐ๋๋๋ก ํ์๊ตฌ์. (๊ทธ๋ฆฌ๊ณ ์ด๋๊น์ง ์์ธ ์ํ์ ๊ฐ์์, ํ๊ท , ์ต์ , ์ต๋ ๊ฐ์ ๋ฐ๋ก ์ ์ฅํ๋๋ก ํ์์ด์)
๊ทธ๋ ค์ง ์ ์ ์์ ์ผ๊ฐํ์, ๋๋ก์ฐ์ฝ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ํํ context ์์ draw๊ฐ ๋ถ๋ฌ์ง๋ฉด ์๋์ผ๋ก GPU ํ๋กํ์ผ๋ฌ์ Draw call ๋์ ๋ฉ์๋๊ฐ ๋ถ๋ฌ์ง๋๋ก ๋ง๋ค์๊ตฌ์, ๋ฌผ๋ก ์์ง์ด ๋ฉํฐ-์ค๋ ๋๋ ๋ ๋๋ง์ ์ง์ํ๊ณ ์์ง ๋์์ธ ์์ฒด๊ฐ OS์์ ์ฌ์ฉ๊ฐ๋ฅํ ๋ ผ๋ฆฌ ์ค๋ ๋ ๋งํผ๋ง์ ์ค๋ ๋๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์, atomic์ด๋ mutex๋ฅผ ์ฌ์ฉํ๋ ๋์ ์, ์ค๋ ๋ ๊ฐฏ์๋งํผ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ๋ฐฐ์ด๋ก ์ ๊ทผํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ถ๋ฆฌ์์ผ์ race condition์ ๋ฐฉ์ง ํ๋๋ก ํ์ด์
ํฉ์ฐ์ ๋ชจ๋ ์ค๋ ๋ ์ฐ์ฐ์ด ๋๋ํ, ๋ฉ์ธ ์ค๋ ๋์ ํฉ์ฐ ๊ณผ์ ์์ ์ด๋ฃจ์ด์ง๋๋ก ํ์๊ตฌ์
์น์ ํ ์ค๋ช ๊ฐ์ฌํฉ๋๋ค ํ์ ์ ์๋ ์ ๋ณด๋ค ํจ์ฌ ์์์ด ๊น์ผ์๋ค์ ๋ง์ด ๋ฐฐ์ฐ๊ณ ์ ์ ์ฐจ๋ฆฌ๊ณ ๊ฐ๋๋ค ใ ใ ์ข์ ๊ธ ๋ง์ด ์ฌ๋ ค์ฃผ์ธ์!
๊ฐ์ฌํฉ๋๋ค. ์ ๋ ๋ ์ ์งํด์ ๋ง์ํด์ฃผ์ ๋ฐ๋ก ์ข์ ๊ธ๋ค ์จ์ ์ฌ๋ ค๋ณผ ์ ์๋๋ก ํ๊ฒ ์ต๋๋คใ ใ ! - dc App
์ด๊ฑฐ ์์ ์ ๋์จ์์ ๋ณธ์ ์๋๋ฐ