GPU๋Š” โ€œ๊ฐ™์€ ๊ณ„์‚ฐโ€์€ ์ข‹์•„ํ•˜์ง€๋งŒ, โ€œ๊ฐ™์€ ํ”ฝ์…€์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ทธ๋ฆฌ๋Š” ๊ฒƒโ€์€ ์‹ซ์–ดํ•œ๋‹ค

GPU๋Š” ๋ณ‘๋ ฌ ์—ฐ์‚ฐ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ๋‹ค. ๋™์ผํ•œ ์…ฐ์ด๋” ์—ฐ์‚ฐ์„ ์ˆ˜์ฒœ ๊ฐœ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋™์ผํ•œ ํ”ฝ์…€ ์œ„์น˜์—์„œ Pixel Shader๊ฐ€ ๋ฐ˜๋ณต ์‹คํ–‰๋˜๋Š” ์ƒํ™ฉ์€ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ๋ฐœ์ƒ์‹œํ‚ค๋ฉฐ ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ GPU ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ฐœ์ƒํ•˜๋Š”ย  Pixel Shadering ๋น„ํšจ์œจ์„ฑ ๋ฌธ์ œ๋ฅผ Quad Overdraw๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


Quad Overdraw (Over Shading)

Quad Overdraw๋Š” ํ™”๋ฉด์— ์ตœ์ข…์ ์œผ๋กœ ๋ณด์ด์ง€ ์•Š๋Š”(๊ฐ€๋ ค์ง„) Pixel์ด ์—ฌ์ „ํžˆ Shader ์—ฐ์‚ฐ์— ํฌํ•จ๋˜์–ด ๊ณ„์‚ฐ๋˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค.

์ด ํ˜„์ƒ์€ ํŠนํžˆย ํ™”๋ฉด ์ƒ์—์„œ ์•„์ฃผ ์ž‘๊ฒŒ ๋ Œ๋”๋ง๋˜๋Š” ์‚ผ๊ฐํ˜•๋“ค๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

  • Fog Card 3์žฅ์ด ์„œ๋กœ ๊ฒน์ณ ์žˆ์Œ
  • ๋™์ผ ํ”ฝ์…€์—์„œ ํ”ฝ์…€ ์…ฐ์ด๋”๊ฐ€ 3๋ฒˆ ์‹คํ–‰
Layer ร— Pixel = 3

์ฆ‰, ๊ฐ™์€ ์œ„์น˜๋ฅผ 3๋ฒˆ ๊ทธ๋ฆผ.


GPU์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

GPU๋Š” 2x2 ํ”ฝ์…€ ๋‹จ์œ„(Quad)๋กœ ์‚ผ๊ฐํ˜•์„ ์…ฐ์ด๋”ฉํ•œ๋‹ค. ์–ด๋–ค ํด๋ฆฌ๊ณค์ด ๋ž˜์Šคํ„ฐ๋ผ์ด์ง•์„ ๊ฑฐ์ณ ํ™”๋ฉด์˜ ํ”ฝ์…€๋กœ ์…ฐ์ด๋”ฉ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•  ๋•Œ, 1ํ”ฝ์…€์ด ์•„๋‹Œ 2x2 ํ”ฝ์…€ ๊ทธ๋ฃน ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๋ง์ž…๋‹ˆ๋‹ค๋‹ค.

๋ฌธ์ œ ์ƒํ™ฉ ์˜ˆ์‹œ

์‚ผ๊ฐํ˜• ํฌ๊ธฐ: 0.5ํ”ฝ์…€ (ํ™”๋ฉด์— ๊ฑฐ์˜ ์•ˆ ๋ณด์ž„)
โ†“
GPU๋Š” 2ร—2 = 4ํ”ฝ์…€ ์ฟผ๋“œ ์ „์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ
โ†“
์‹ค์ œ ๊ธฐ์—ฌ๋„: 0.5ํ”ฝ์…€
์‹ค์ œ ์ฒ˜๋ฆฌ๋Ÿ‰: 4ํ”ฝ์…€
โ†’ 8๋ฐฐ ๋น„ํšจ์œจ!

Quad Qverdraw์˜ ๋ฌธ์ œ์ 

Quad Overdraw๋Š” Pixel Shader ๋‹จ๊ณ„์˜ ๋น„์šฉ ์ฆ๊ฐ€์ด์ฃ .

ํŠนํžˆ ๋‹ค์Œ ์กฐ๊ฑด์—์„œ ์‹ฌ๊ฐํ•ด์ง‘๋‹ˆ๋‹ค.

Translucent ๋จธํ…Œ๋ฆฌ์–ผ ํ™”๋ฉด์„ ๋„“๊ฒŒ ๋ฎ๋Š” ์นด๋“œํ˜• ๋ฉ”์‹œ - ex) Fog Card ๋””ํ…Œ์ผํ•œ ํ•˜์ดํด๋ฆฌ๊ณค ๋ฉ”์‹œ

Translucent๋Š” Early-Z (Depth Pass)๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์— ๊ฐ€๋ ค์งˆ ํ”ฝ์…€๋„ ๋ชจ๋‘ ๊ณ„์‚ฐ๋˜์ฃ . ๊ทธ ๊ฒฐ๊ณผ ๋ณด์ด์ง€ ์•Š๋Š” ํ”ฝ์…€๊นŒ์ง€ ์…ฐ์ด๋”๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค๋‹ค.

Quad Overdraw ํ•ด๊ฒฐ ์ „๋žต

๋ฐฉ๋ฒ•ํšจ๊ณผ
Level Of Detail๋ฅผ ํ™œ์šฉํ•œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ์ตœ์ ํ™”๊ฑฐ๋ฆฌ๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ํด๋ฆฌ๊ณค ๋ฐ€๋„ ๊ฐ์†Œ
(๊ฐ€์žฅ ์ง์ ‘์ ์ธ ํ•ด๊ฒฐ์ฑ…๐Ÿ”ฅ)
Translucent โ†’ MaskedEarly-Z ํ™œ์šฉ ๊ฐ€๋Šฅ
Depth ์ •๋ ฌ ๊ฐœ์„ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๊ฐ์†Œ
Volume ๊ธฐ๋ฐ˜ Fog์นด๋“œ ๋Œ€์ฒด

Early-Z ๊ฐ€ ์ตœ์ ํ™”์— ๋ผ์น˜๋Š” ์˜ํ–ฅ

Masked๋กœ ์„ค์ •ํ•˜๋ฉด, Opacity Mask๊ฐ’์— ๋”ฐ๋ผ ํ”ฝ์…€์ด โ€˜100% ๋ถˆํˆฌ๋ช…โ€™ ํ˜น์€ โ€˜์™„์ „ ํˆฌ๋ช…(์ œ๊ฑฐ)โ€™ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ถˆํˆฌ๋ช… ๊ฐ์ฒด์ฒ˜๋Ÿผ ์‹ค์ œ ๋ณต์žกํ•œ ํ”ฝ์…€ ์‰์ด๋”(์ƒ‰์ƒ, ์กฐ๋ช… ๊ณ„์‚ฐ)๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „, ๊นŠ์ด(Depth)๋งŒ ๋จผ์ € ๊ณ„์‚ฐํ•˜๋Š”ย Depth Passย ๋‹จ๊ณ„์—์„œ ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ์ด๋ฏธ ๋‹ค๋ฅธ ๋ถˆํˆฌ๋ช… ๊ฐ์ฒด์— ์˜ํ•ด ๊ฐ€๋ ค์ง„ ํ”ฝ์…€์€ ์กฐ๋ช… ๊ณ„์‚ฐ์„ ํ•˜์ง€ ์•Š๊ณ  ์Šคํ‚ต(Early Z-culling)ํ•  ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ˆ๋‹ค.


Foliage ์ตœ์ ํ™” ์‚ฌ๋ก€

โŒ ๋น„ํšจ์œจ์ ์ธ Translucent ๊ธฐ๋ฐ˜ Foliage

๋ฌธ์ œ์ :
- ํˆฌ๋ช… ์˜์—ญ ์ „์ฒด๊ฐ€ Translucent ์ฒ˜๋ฆฌ
- ๋นˆ ๊ณต๊ฐ„๊นŒ์ง€ Pixel Shader ์‹คํ–‰
- Quad Overdraw ์‹ฌํ™”

โœ… Binary Mask ์‚ฌ์šฉ์œผ๋กœ ์ตœ์ ํ™”

๊ฐœ์„  ๋ฐฉ๋ฒ•:
- Masked ๋จธํ‹ฐ๋ฆฌ์–ผ ์‚ฌ์šฉ
- Alpha Test ๊ธฐ๋ฐ˜ ์ปท์•„์›ƒ
- ๋ถˆํ•„์š”ํ•œ ํˆฌ๋ช… ์˜์—ญ ์ œ๊ฑฐ

Masked์˜ ์žฅ์ 

Early-Z ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜์—ฌ Translucent ๋Œ€๋น„ Overdraw ๋Œ€ํญ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ์ฐจ์ด

Translucent Plane 100๊ฐœ: 15ms
Masked Geometry 100๊ฐœ: 8ms
โ†’ ์•ฝ 2๋ฐฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ

ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ

View Mode โ†’ Shader Complexity // Pixel Shader ๋น„์šฉ ์‹œ๊ฐํ™”
View Mode โ†’ Quad Overdraw     // Overdraw ์‹œ๊ฐํ™” (๋นจ๊ฐ• = ์‹ฌ๊ฐ)
// ์–ธ๋ฆฌ์–ผ ์—”์ง„ ์ฝ˜์†” ๋ช…๋ น์–ด
Stat GPU                      // GPU ํ”„๋กœํŒŒ์ผ๋ง

์ฐธ๊ณ  ์ž๋ฃŒ