์ ์ srp batcher์จ๋ ๋๋ก์ฐ์ฝ์ด๋ ๋ฒํ
์ค๊ฐ์์ ๋ณ ๋์ ๋ชป๋ดค์
๊ทธ๋์ ๊ฑ ๊บผ๋ฒ๋ฆฌ๊ณ gpu ์ธ์คํด์ฑ์ผ๋ก ์์
์ค์ด์๊ณ ,
์ค๋ MPB๋ก ์ฝ๋ ์น ๋ค ๋ฐ๊พธ๊ธฐ์ ์ ๋ง์ง๋ง์ผ๋ก ๋ ์ฐพ์๋ดค์
์ฐพ์๋ณธ๊ฑฐ ๊ธฐ์ตํ ๊ฒธ ๊ธ๋ก ์ ์ด์ ๋จ๊ฒจ๋๋ ค๊ณ ํจ
srp batcher์ค์ ์์ ์ ๋ํฐ6๋ถํฐ ์ถ๊ฐ๋ ์ต์
์ด ํ๋ ๋ณด์
GPU Resident Drawerย
mesh๋ material๋ฑ์ ๋ ๋๋ง ๋ฐ์ดํฐ๋ฅผ gpu์ ์บ์ฑํด๋๊ณ ์ง์ ์ ๊ทผํ์ฌ ๋ณธ๋ cpu๊ฐ๊ตฌ๋ ๊ฒ๋ค์ ์น๋ค gpu๊ฐ ์ผํ๊ฒ ํ๋๊ฑฐ์
srp batcher์ ๊ฐ์ด ๋ด๋ถ์ ์ผ๋ก ๋ ๋api์ต์ ํ๋ฅผ ์ํํ๋ ์ต์
์ด๋ผ ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ก ์ค์ ํ ๊ฑด ์์
๋ฌด๋ ค gpu culling๊น์ง ์ง์ํ๋๋ฐ, ๊ณผ๊ฑฐ static๋ฐฐ์นญํ๊ณ ์คํด๋ฃจ์ ์ปฌ๋ง bakeํ๋ ๋ฅ๊ผฌ์ผ ์์ด ์ค์๊ฐ์ผ๋ก ์์์ ์ปฌ๋ง์ํจ๋ค!
Resident Drawer์ ๊ธฐ๋ณธ๊ฐ์ Disable์ธ๋ฐ ์๋ง ์ ์ฌ์ ๊ธฐ๊ธฐ ํธํ์ฑ์ด๋ ๋น๋์๊ฐ ๋ฑ ํ๋ก์ ํธ ์ฑ๊ฒฉ์๋ฐ๋ผ์ ๋ฌด์กฐ๊ฑด ์ผ ๋ค๊ณ ์ข์ ์ต์
์ ์๋๋ผ ๊ทธ๋ฐ๊ฐ๋ด
srp batcher๋ ๋ธ๋ ค์ค๋ ์ต์
์ด๋ผ ํด๋น ๊ธฐ๋ฅ์ ์ผ๋ ค๋ฉด srp batcher๊ฐ ์ผ์ ธ์์ด์ผํจ
๊ทธ๋ ๋ค๋ฉด ๋ด๊ฐ ๊ธฐ์กด์ srp batcher๋ง ์ผฐ์๋๋ ์๋ฏธ์๋ ์ฐจ์ด๊ฐ ์์๊น?
๊ฐ์ ์ฌ ๊ฐ์ ์ฅ์์์ ์ต์
๋ง ๋ค๋ฅด๊ฒ ํ
์คํธ ํด๋ด
์ฐธ๊ณ ๋ก 60ํ๋ ์ ๋ฐฉ์ด ์๋๋๊ฑด ์์ํ๊ฒ ์ปดํจํฐ๊ฐ ๊ฐ์ข๊ตฌ๋ ค์ ๊ทธ๋ฐ๊ฑฐ๋ ์ดํด๋ฐ๋
- GPU ์ธ์คํด์ฑ
Saved by batching์ผ๋ก ๋๋ก์ฐ์ฝ์ ์๋นํ ์ค์์ง๋ง ๋ฒํ
์ค ์ซ์๋ ์ค์ง ์์
- SRP Batcher
๋ฑ ๋ด๊ฐ ์๋ srp batcher.. ๋๋ก์ฐ์ฝ๊ณผ ๋ฒํ
์ค๊ฐ ํ๋๋ ์ค์ง์์
์ฌ๋๋ค์ ๋ณดํต ์ต์ ํ๋ฅผ ํ ๋ ์ด ๋๋ก์ฐ์ฝ์ ์ค์ด๊ณ ์ ํ๋๋ฐ, srp batcher๋ ์ ์ด์ ๋ ๋๋ง ์ํฌํ๋ก๊ฐ ๋ค๋ฆ
๋ด๊ฐ ๋๋ก์ฐ์ฝ์ด๋ผ๊ณ ๋ญ๊ฐ๋งํ Batches ์ซ์๋ SetPassCall + Draw๋ช
๋ น์ ๊ฐ์ํฉ์
Draw๋ ๋ง ๊ทธ๋๊ณ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๋ช
๋ น์ธ๋ฐ,
SetPassCall์ ๋ญ๊น?
CPU์ GPU๋ ์ฒ๋ฆฌ์๋ ์์ฒด๊ฐ ๋์ฌ๋ก ๋ฌ๋ผ์ ํจ๊ป ์์
ํ๊ธฐ ์ํด์ ์ค๊ณ๊ฐ ํ์ํจ. ๋ฐ๋ก CommandBuffer๋ผ๋ ๊ณณ์ด์ง
ํนํ๋ ๋ฌด๊ฑฐ์ด ๋ช
๋ น๋ค์ ๋ฒํผ์ ๋ด์๋๋ค๊ฐ ์ผ๊ด์ ์ผ๋ก ์ฒ๋ฆฌํ๋๊ฑฐ์ผ
์ฌ๊ธฐ์ ๋ฌด๊ฑฐ์ด ๋ช
๋ น๋ค์ ์งํฉ์ Set Pass Call์ด๋ผ๊ณ ํจ
์ฌ์ค์ Set Pass Call์ด ๋ถํ์ ์ฃผ๋ฒ์ด๋ค
GPU ์ธ์คํด์ฑ์ ์ผ์๋ Material๊ฐ์์ ๋น๋กํ๊ฒ SetPassCall์ด ์๊ธฐ์ง๋ง
SRP Batcher๋ฅผ ์ฐ๋ฉด Shader๊ฐ์์ ๋น๋กํ๊ฒ SetPassCall์ด ์๊น
Shader Variant๋ฑ ์ฌ๋ฌ๊ฐ์ง ์ด์ ๋ก ๋ฐฐ์น๊ฐ ๊นจ์ง๋ฉด SetPassCall์ด ํ๋์ฉ ์ฆ๊ฐํ๋๊ฑฐ์ง
์ฆ ๋ฑ ๋ณด๊ธฐ์ Batches๋ 1000๊น์ง ์ฆ๊ฐํด์ ์ต์ ํ์ ์คํจํ ๊ฑฐ ๊ฐ์ง๋ง, SetPassCall์ ์คํ๋ ค ์ค์ด๋ค์๊ธฐ ๋๋ฌธ์ GPU ์ธ์คํด์ฑ๊ณผ ๋น์ทํ ํจ๊ณผ๋ฅผ ์ป๊ณ ์์์
๊ทธ๋ฆฌ๊ณ SRP Batcher์์ SetPassCall์ด ์๋ ๋๋ก์ฐ์ฝ์ ๊ธฐ์กด ๋ ๋๋ง ๋ฃจํ์ ๋ฌ๋ฆฌ ๋งค์ฐ ๊ฐ๋ณ๋ค๊ณ ํจ
๋ฌด์กฐ๊ฑด ๋๋ก์ฐ์ฝ ์์น์ ๊ณ ์ ์ฐจ๋ก ๋น๊ต๊ฐ ๋ถ๊ฐํ๋จ ๋ป
- SRP Batcher
- GPU Resident Drawer
์ด๋ฒ์ ์๋ก ์ฐพ์ ์ต์
์ ํ์ฑํํ ์ํ
Batches ๊น์ง ํ๊ฒฉ์ ์ผ๋ก ์ค์ด๋ฆ ย
SetPassCall๋ฟ๋ง ์๋๋ผ Draw๋ช
๋ น๊น์ง ์ค์์ = ์ข
ํฉ์ ์ธ ๋๋ก์ฐ์ฝ์ด ์ค์๋ค๊ณ ํด์๋จ
- SRP Batcher
- GPU Resident Drawer
- GPU Culling
์ปฌ๋ง๊น์ง ์ํํ๋ ๋ฒํ
์ค๊ฐ ๋ง๋์๋๊ฒ ๋ ๋จ์ด์ง. ๋จ์ ์์น์ ์ผ๋ก ๋ดค์๋ ์ด๋ณด๋ค ์๋ฏธ์๋ ๊ฒฐ๊ณผ๋ ์์ ๋ฏ ์ถ๋ค
ํ .......
๊ทผ๋ฐ ์ค์ท์ ๋ณธ ๋๋ํ ์ธ๋ถ์ด๋ค์ ํ ๊ฐ์ง ์๋ฌธ์ด ์๊ธธ๊ฑฐ์
โ๋ญ๊ฐ ํ๋ ์์ด ์ ์ ๋จ์ด์ง๋ ๊ฑฐ ๊ฐ์๋ฐ์...?โ
์๋ฟ์ธ!!!
์ญ์ ์ธ์์ ๋ ๋จน์ ์๋๋ณด๋ค
๊ฒ์์ ์ฌ์คํํ ๋ ์ฌ์ํ ์์น๋ณ๊ฒฝ์ ์์ ์ ์์ง๋ง
์ ์ค์ท์ ํ๋์ ์ต์
์ ์ถ๊ฐํ ๋๋ง๋ค ํ๊ท ์ ์ธ cpu ์ค๋ฒํค๋๊ฐ ๋์ด๋๊ณ ์์์ ๋ณด์ฌ์ค๋ค
์ฌ์ค SRP Batcher <-> GPU ์ธ์คํด์ฑ ์ฌ์ด์์ ์ ํํ๋ ๊ฑด ํ๋ก์ ํธ ์ฑ๊ฒฉ๊ณผ ๊ฐ๋ฐ์ ์ทจํฅ์ ์ฐจ์ด ์ ๋๋ก ์๊ฐํ ์ ์๋ค
ํ์ง๋ง Resident Drawer์ ๊ฒฝ์ฐ ์ํญ์ CPU ์ค๋ฒํค๋๋ฅผ ์ ๋ฌผ๋ก GPU ์ค๋ฒํค๋๋ฅผ ๋ํญ ๊ฐ์์์ผ์ฃผ๋ ์ต์
์
GPU Culling๋ ๊ฐ์์ฑ ๋ฒํผ๋ฅผ ์ถ๊ฐ๋ก ์๊ตฌํ๋ ๋์ ๊ณ ์ฌ์ ๋๋ฐ์ด์ค์์ ์ต๊ณ ์ ํจ์จ์ ๋ฝ์๋ด์ง
๋ฐ๋๋ก ์๊ฐํ๋ฉด ์ ์ฌ์ ๋๋ฐ์ด์ค๋ ๊ฟ๋๊พธ์ง ๋ง๋ ๋ง์
๋ด ํ๊ฒฝ์ฒ๋ผ ์คํ๋ ค ์ญํจ๊ณผ๊ฐ ๋ ์ ์์ผ๋
ย
โ๊ทธ๋ผ์๋ฐ ๋ญ ์จ์ผํ๋์ฌ?? ๊ทธ๊ฒ ๊ทธ๊ฑฐ๊ฐ์๋ฐ ์ ๋ชจ๋ฃจ๊ฒ ์ด์โ
1. ๋ง์ฝ ์ ํ๋ก์ ํธ๋ฉด SRP Batcher์จ๋ด๋ผ
์ ๋ํฐ6๋ฉด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ผ์ ธ์์ผ๋ ๋ฐ๋ก ์ค์ ํ ๊ฒ ์์
๋ฉํ
๋ฆฌ์ผ ํ๋กํผํฐ ๋ธ๋ก์ด๋ gpu ์ธ์คํด์ฑ์ด๋ ์ ํ ์ ๊ฒฝ์ฐ์ง ๋ง๊ณ ๊ฐ๋ฐํ๋ฉด ๋จ. ์คํ๋ ค mpb๋ฅผ ์ฐ๋ฉด srp ๋ฐฐ์นญ์ด ๊นจ์ง๋๊น ์ฐ์ง ๋ง์
2. ๊ธฐ์กด์ gpu ์ธ์คํด์ฑ ๋ฒ ์ด์ค๋ก ์์
ํ๋ ์ฌ๋์ ๊ทธ๋ฅ srp batcher ์ฐ์ง๋ง์
srp batcher์ด๋ค๊ณ ์ ์๋ฏธํ๊ฒ ์ข์์ง๋ ๊ฒ๋ ์๋๊ณ , ๋๊ฐ ์ด๋ฏธ mpb์จ์ ์ต์ ํ ์์
ํด๋จ์ผ๋ฉด ์คํ๋ ค ๊ทธ๊ฒ ๋ ํผํฌ๋จผ์ค๊ฐ ์ข์ ์ ์์
3. GPU Resident Drawer๋ ๋ถ๋ช
๊ฐ๋ ฅํ ๊ธฐ๋ฅ์
๋ค๋ง ๋ฌด์ง์ฑ์ผ๋ก ์ผ์ง๋ง๊ณ ๋ฐ๋ชจ์์ค์ ๋ฝ์ ๋ค์์ ๋น๋ํด์ ํ
์คํธํด๋ณด๊ณ ์จ
๊ฒฝ์ฐ๋ง ๋ง์ผ๋ฉด ๊ฐ์ฉ๋ ์ต์ ํ๋ฅผ ๊ฒฝํํ ์ ์์ผ๋๊น
๋ญ ๊ฐ๋ฅ ํ๋ค๋ฉด ์ธ๊ฒ์ ์ต์
์ ๋ฃ๋๊ฐ ๊ฐ๋ฅํ์ง๋ ๋ชฐ๋ฃจ?
์ฌ๋ด์ผ๋ก DrawI nstancedMesh๋ฅผ ํธ์ถํ๊ฑฐ๋ MPB๋ฅผ ํตํด ๋ช
์์ ์ผ๋ก gpu ์ธ์คํด์ฑ์ ์ฌ์ฉํ๋ฉด srp batcher์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค๊ณ ํจ
ํ์ด๋ ๋ฐ์๊ฐ์ ์
์ ์์ด ๋ฐ๋ณต๋ฐฐ์น๋ ๋์ผ๋ฉ์๋ gpu ์ธ์คํด์ฑ์ด ์ค๋ฒํค๋ ๊ฐ์์ ๋์๋ ๋ฏ
์ ์ด์ ๊ตฌ์กฐ์ ์ผ๋ก gpu ์ธ์คํด์ฑ์ด ์ด์ธ๋ฆฌ๋ ์ํฉ์ srp batcher๊ฐ ์ํญ ๋นํจ์จ์ ์
ํ๋ srp batcher๋ ์ถ๊ฐ์ ์ธ ์ฝ๋๋ ์ค์ ์์ด๋ ์์ง์ด ์์์ ์ต์ ์ ์ต์ ํ๋ฅผ ํด์ค๋ค๋๊ฒ ์ปค๋ค๋ ๋งค๋ฆฌํธ๊ฐ๋ค
๋๋ ์ด๋ฒ ๊ธฐํ์ ์ ๋๋ก ์๊ณ ์ถ์ด์ ์ด๋ฆฌ์ ๋ฆฌ ์ฐพ์๋ณธ๊ฑด๋ฐ ํน์ ํ๋ฆฐ๊ฑฐ์์ผ๋ฉด ์๋ ค์ฃผ์
ใฑใ
ใฑใ
SRP Batcher๋ Material, Texture ์ต์ ํํ๋ ค๊ณ ์ฐ๋๊ฑฐ๋ผ ๋ฒํ ์ค๋ก ์ฑ๋ฅ ๋น๊ต ํ๋๊ฒ ๋ง๋๊ฑด๊ฐ.. ํ๋์ ๋ฉ์ฌ๊ฐ ๋์ ๋์์ ์ฐ์ง ๋ชป ํ ๋ฟ์ด์ง ์ญํ ์ด ๋ฌ๋ผ์ ๋ ๋ค ์ฐ๋๊ฒ ์ข์ํ ๋ฐ . ์ฌ๊ธฐ์ ์ ์ฒด์ ์ผ๋ก LOD๋ฅผ ์ถ๊ฐ ํด์ฃผ๋๊ฒ ์ข์ง ์์์ง
๋ฒํ ์ค๋ SRP Batcher๋ ์๊ด์๊ณ Resident Drawer๋ gpu culling๊ณผ ๊ด๊ณ์๋๊ฑธ๋ก ์๊ณ ์์
๊ทธ๋์ ๋ช ์์ ์ผ๋ก ์ธ์ฌ๋์ ์ฐ๋๊ฒ ๋ง๋๋ฏ? ์ ์ด์ ๊ทน๋จ์ ์ผ๋ก ์ต์ ํ ํ ์ ์๋ ์ฌ๋์ ์ด๋ฏธ ์๊ณ ์๋ ๋ด์ฉ์ผ๊ฑฐ ๊ฐ๊ณ ๋๊ฐ์ ์์ง์๋ชป์ ๋ฐฉํฅ ํ๊ฐ๋ง ์ ํด์ ํ๋๊ฒ ์ฌ์ฐ๋๊น
๊ธ ในใ ์ ์ตํ๊ฒ ์ ์ผ๋ค