์ „์— srp batcher์จ๋„ ๋“œ๋กœ์šฐ์ฝœ์ด๋‚˜ ๋ฒ„ํ…์Šค๊ฐ์†Œ์— ๋ณ„ ๋“์„ ๋ชป๋ดค์Œ

๊ทธ๋ž˜์„œ ๊ฑ ๊บผ๋ฒ„๋ฆฌ๊ณ  gpu ์ธ์Šคํ„ด์‹ฑ์œผ๋กœ ์ž‘์—…์ค‘์ด์—ˆ๊ณ ,

์˜ค๋Š˜ MPB๋กœ ์ฝ”๋“œ ์‹น ๋‹ค ๋ฐ”๊พธ๊ธฐ์ „์— ๋งˆ์ง€๋ง‰์œผ๋กœ ๋” ์ฐพ์•„๋ดค์›€

์ฐพ์•„๋ณธ๊ฑฐ ๊ธฐ์–ตํ• ๊ฒธ ๊ธ€๋กœ ์ ์–ด์„œ ๋‚จ๊ฒจ๋‘๋ ค๊ณ  ํ•จ




7a99817eb6806e8323edf0e64e9c7065dac6dadcc457d96defd5d11a9c24c9c8f8fc20fdff21a553f0789cdac527ecf1a3d3cd

srp batcher์„ค์ • ์œ„์— ์œ ๋‹ˆํ‹ฐ6๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ์˜ต์…˜์ด ํ•˜๋‚˜ ๋ณด์ž„

GPU Resident Drawerย 

mesh๋‚˜ material๋“ฑ์˜ ๋ Œ๋”๋ง ๋ฐ์ดํ„ฐ๋ฅผ gpu์— ์บ์‹ฑํ•ด๋‘๊ณ  ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ ๋ณธ๋ž˜ cpu๊ฐˆ๊ตฌ๋˜ ๊ฒƒ๋“ค์„ ์‹น๋‹ค gpu๊ฐ€ ์ผํ•˜๊ฒŒ ํ•˜๋Š”๊ฑฐ์ž„

srp batcher์™€ ๊ฐ™์ด ๋‚ด๋ถ€์ ์œผ๋กœ ๋ Œ๋”api์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜ต์…˜์ด๋ผ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋”ฐ๋กœ ์„ค์ •ํ•  ๊ฑด ์—†์Œ

2

๋ฌด๋ ค gpu culling๊นŒ์ง€ ์ง€์›ํ•˜๋Š”๋ฐ, ๊ณผ๊ฑฐ static๋ฐฐ์นญํ•˜๊ณ  ์˜คํด๋ฃจ์ „ ์ปฌ๋ง bakeํ•˜๋Š” ๋˜ฅ๊ผฌ์‡ผ ์—†์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์•Œ์•„์„œ ์ปฌ๋ง์‹œํ‚จ๋‹ค!



Resident Drawer์˜ ๊ธฐ๋ณธ๊ฐ’์€ Disable์ธ๋ฐ ์•„๋งˆ ์ €์‚ฌ์–‘ ๊ธฐ๊ธฐ ํ˜ธํ™˜์„ฑ์ด๋‚˜ ๋นŒ๋“œ์‹œ๊ฐ„ ๋“ฑ ํ”„๋กœ์ ํŠธ ์„ฑ๊ฒฉ์—๋”ฐ๋ผ์„œ ๋ฌด์กฐ๊ฑด ์ผ ๋‹ค๊ณ  ์ข‹์€ ์˜ต์…˜์€ ์•„๋‹ˆ๋ผ ๊ทธ๋Ÿฐ๊ฐ€๋ด„

srp batcher๋ž‘ ๋”ธ๋ ค์˜ค๋Š” ์˜ต์…˜์ด๋ผ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ผœ๋ ค๋ฉด srp batcher๊ฐ€ ์ผœ์ ธ์žˆ์–ด์•ผํ•จ






44

๊ทธ๋ ‡๋‹ค๋ฉด ๋‚ด๊ฐ€ ๊ธฐ์กด์— srp batcher๋งŒ ์ผฐ์„๋•Œ๋ž‘ ์˜๋ฏธ์žˆ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ?




๊ฐ™์€ ์”ฌ ๊ฐ™์€ ์žฅ์†Œ์—์„œ ์˜ต์…˜๋งŒ ๋‹ค๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธ ํ•ด๋ด„

์ฐธ๊ณ ๋กœ 60ํ”„๋ ˆ์ž„ ๋ฐฉ์–ด ์•ˆ๋˜๋Š”๊ฑด ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์ปดํ“จํ„ฐ๊ฐ€ ๊ฐœ์ข†๊ตฌ๋ ค์„œ ๊ทธ๋Ÿฐ๊ฑฐ๋‹ˆ ์ดํ•ด๋ฐ”๋žŒ






- GPU ์ธ์Šคํ„ด์‹ฑ

0c998000b7f76cf4239a8594379c7064765d5634617392ca7d23dd6d17ead5cb5537cba6c5c9e3d90bd6694f2899bb33f952e9

Saved by batching์œผ๋กœ ๋“œ๋กœ์šฐ์ฝœ์€ ์ƒ๋‹นํžˆ ์ค„์—ˆ์ง€๋งŒ ๋ฒ„ํ…์Šค ์ˆซ์ž๋Š” ์ค„์ง€ ์•Š์Œ






- SRP Batcher

0eeb8800b58b6df323e7f4e2439c701b514f030f39e12ff3f4dc920f1728e38c16bc958b66a0ed1bd981b20533ebffe7879fe1

๋”ฑ ๋‚ด๊ฐ€ ์•Œ๋˜ 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

09eaf177c4f41bf323eaf4e0479c701ce75ae42258c331bd1dee1d84c8a0ef9e89c1809b272383f84ec46e8a195d82cd48ac2d

์ด๋ฒˆ์— ์ƒˆ๋กœ ์ฐพ์€ ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ

Batches ๊นŒ์ง€ ํŒŒ๊ฒฉ์ ์œผ๋กœ ์ค„์–ด๋“ฆ ย 

SetPassCall๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Draw๋ช…๋ น๊นŒ์ง€ ์ค„์—ˆ์Œ = ์ข…ํ•ฉ์ ์ธ ๋“œ๋กœ์šฐ์ฝœ์ด ์ค„์—ˆ๋‹ค๊ณ  ํ•ด์„๋จ






- SRP Batcher
- GPU Resident Drawer
- GPU Culling

0f998976bdf76e8523e78791309c706dcbfe09265774b02cfd82eae53cfc283ef53b1a021554d44c6674217b1e845c4c23b7df

์ปฌ๋ง๊นŒ์ง€ ์ˆ˜ํ–‰ํ•˜๋‹ˆ ๋ฒ„ํ…์Šค๊ฐ€ ๋ง๋„์•ˆ๋˜๊ฒŒ ๋š ๋–จ์–ด์ง. ๋‹จ์ˆœ ์ˆ˜์น˜์ ์œผ๋กœ ๋ดค์„๋• ์ด๋ณด๋‹ค ์˜๋ฏธ์žˆ๋Š” ๊ฒฐ๊ณผ๋Š” ์—†์„ ๋“ฏ ์‹ถ๋‹ค










ํ .......

๊ทผ๋ฐ ์Šค์ƒท์„ ๋ณธ ๋˜‘๋˜‘ํ•œ ์ธ๋ถ•์ด๋“ค์€ ํ•œ ๊ฐ€์ง€ ์˜๋ฌธ์ด ์ƒ๊ธธ๊ฑฐ์ž„

39

โ€œ๋ญ”๊ฐ€ ํ”„๋ ˆ์ž„์ด ์ ์  ๋–จ์–ด์ง€๋Š” ๊ฑฐ ๊ฐ™์€๋ฐ์š”...?โ€











์•—๋ฟ”์‹ธ!!!









์—ญ์‹œ ์„ธ์ƒ์— ๋‚ ๋จน์€ ์—†๋‚˜๋ณด๋‹ค

๊ฒŒ์ž„์„ ์žฌ์‹คํ–‰ํ• ๋•Œ ์‚ฌ์†Œํ•œ ์ˆ˜์น˜๋ณ€๊ฒฝ์€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ

์œ„ ์Šค์ƒท์€ ํ•˜๋‚˜์˜ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ• ๋•Œ๋งˆ๋‹ค ํ‰๊ท ์ ์ธ cpu ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค€๋‹ค



์‚ฌ์‹ค SRP Batcher <-> GPU ์ธ์Šคํ„ด์‹ฑ ์‚ฌ์ด์—์„œ ์„ ํƒํ•˜๋Š” ๊ฑด ํ”„๋กœ์ ํŠธ ์„ฑ๊ฒฉ๊ณผ ๊ฐœ๋ฐœ์ž ์ทจํ–ฅ์˜ ์ฐจ์ด ์ •๋„๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค



ํ•˜์ง€๋งŒ Resident Drawer์˜ ๊ฒฝ์šฐ ์†Œํญ์˜ CPU ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ œ๋ฌผ๋กœ GPU ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋Œ€ํญ ๊ฐ์†Œ์‹œ์ผœ์ฃผ๋Š” ์˜ต์…˜์ž„

GPU Culling๋„ ๊ฐ€์‹œ์„ฑ ๋ฒ„ํผ๋ฅผ ์ถ”๊ฐ€๋กœ ์š”๊ตฌํ•˜๋Š” ๋Œ€์‹  ๊ณ ์‚ฌ์–‘ ๋””๋ฐ”์ด์Šค์—์„œ ์ตœ๊ณ ์˜ ํšจ์œจ์„ ๋ฝ‘์•„๋‚ด์ง€

๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐํ•˜๋ฉด ์ €์‚ฌ์–‘ ๋””๋ฐ”์ด์Šค๋Š” ๊ฟˆ๋„๊พธ์ง€ ๋ง๋ž€ ๋ง์ž„

๋‚ด ํ™˜๊ฒฝ์ฒ˜๋Ÿผ ์˜คํžˆ๋ ค ์—ญํšจ๊ณผ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์œผ๋‹ˆ

ย 




64

โ€œ๊ทธ๋Ÿผ์‹œ๋ฐœ ๋ญ˜ ์จ์•ผํ•˜๋‚˜์—ฌ?? ๊ทธ๊ฒŒ ๊ทธ๊ฑฐ๊ฐ™์€๋ฐ ์ž˜ ๋ชจ๋ฃจ๊ฒ ์–ด์š”โ€







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๋Š” ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ๋‚˜ ์„ค์ • ์—†์ด๋„ ์—”์ง„์ด ์•Œ์•„์„œ ์ตœ์„ ์˜ ์ตœ์ ํ™”๋ฅผ ํ•ด์ค€๋‹ค๋Š”๊ฒŒ ์ปค๋‹ค๋ž€ ๋งค๋ฆฌํŠธ๊ฐ™๋‹ค




๋‚˜๋„ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ œ๋Œ€๋กœ ์•Œ๊ณ ์‹ถ์–ด์„œ ์ด๋ฆฌ์ €๋ฆฌ ์ฐพ์•„๋ณธ๊ฑด๋ฐ ํ˜น์‹œ ํ‹€๋ฆฐ๊ฑฐ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์…ˆ ใ„ฑใ……ใ„ฑใ