๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐ŸŒฅํ˜ธ์•„์ž„์˜ GamLog

[UNITY] ์•Œ์“ธ์œ ์žก : ์‰์ด๋” ๊ธฐ์ดˆ ๋ณธ๋ฌธ

Unity/Shader

[UNITY] ์•Œ์“ธ์œ ์žก : ์‰์ด๋” ๊ธฐ์ดˆ

์˜ฅ์ฒœ์ง€ํ–ฅ์‚ฌ 2023. 8. 29. 15:54
728x90

 
 
์œ ๋‹ˆํ‹ฐ ๊ณต์‹ ์œ ํŠœ๋ธŒ์˜ ์‰์ด๋” ๊ธฐ์ดˆ ๋‚ด์šฉ์„ ๋ณด๋ฉฐ ๊ณต๋ถ€๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.
ํ•ด๋‹น ๊ธ€์€ 0:00 ~ 36:00 (RenderingLoop) ๊นŒ์ง€์˜ ๋‚ด์šฉ์„ ๋‹ด๊ณ ์žˆ๋‹ค.
 

 


 
๐Ÿช ๋ชฉ์ฐจ

  • ์‰์ด๋”์˜ ์ •์˜
  • Graphics Api๋ž€?
  • Buffer
  • Rendering Loop

 
 
 

์‰์ด๋”์˜ ์ •์˜


: ๋จผ์ € ์ฃผ์ œ์–ด์ธ ์‰์ด๋”์˜ ์ •์˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. ์ด ๋ถ€๋ถ„์€ chat GPT๋ฅผ ํ†ตํ•ด ๊ตฌํ•œ ์ •์˜๋‹ค.

Shader(์…ฐ์ด๋”)๋Š” ์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ, ๋ฌผ์ฒด์˜ ํ‘œ๋ฉด์„ ๊ทธ๋ฆด ๋•Œ ์ƒ‰์ƒ, ๋น›, ๊ทธ๋ฆผ์ž, ๋ฐ˜์‚ฌ ๋“ฑ ๋‹ค์–‘ํ•œ ์‹œ๊ฐ์  ํšจ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ œ์–ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์‰์ด๋”๋Š” ์ฃผ๋กœ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ(GPU)์—์„œ ์‹คํ–‰๋˜๋ฉฐ, 3D ๋ชจ๋ธ์˜ ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋ฌผ์ฒด๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆด ๋•Œ, ๊ฐ ํ”ฝ์…€์— ์–ด๋–ค ์ƒ‰์ƒ์„ ์ ์šฉํ• ์ง€, ์–ด๋–ป๊ฒŒ ์กฐ๋ช… ํšจ๊ณผ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ• ์ง€, ๊ทธ๋ฆผ์ž์™€ ๋ฐ˜์‚ฌ ํšจ๊ณผ๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ• ์ง€ ๋“ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‰์ด๋”๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. ์‰์ด๋”๋Š” ํฌ๊ฒŒ ๋‚˜๋ˆ ๋ณด์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

Vertex Shader (๋ฒ„ํ…์Šค ์‰์ด๋”):
์ด ์‰์ด๋”๋Š” 3D ๋ชจ๋ธ์˜ ๋ฒ„ํ…์Šค(๊ผญ์ง“์ )๋ฅผ ๋ณ€ํ˜•ํ•˜๊ณ , ๋ณ€ํ™˜ํ•˜์—ฌ ํ™”๋ฉด์— ๋ฐฐ์น˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋ชจ๋ธ์˜ ํฌ๊ธฐ, ํšŒ์ „, ์ด๋™ ๋“ฑ์„ ์กฐ์ •ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
Fragment Shader (ํ”„๋ž˜๊ทธ๋จผํŠธ ์‰์ด๋”):
์ด ์‰์ด๋”๋Š” ๋ฒ„ํ…์Šค ์‰์ด๋”๋กœ๋ถ€ํ„ฐ ์–ป์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”ฝ์…€์˜ ์ƒ‰์ƒ์„ ๊ฒฐ์ •ํ•œ๋‹ค. ์กฐ๋ช…, ๊ทธ๋ฆผ์ž, ๋ฐ˜์‚ฌ ๋“ฑ์˜ ์‹œ๊ฐ์  ํšจ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ํ”ฝ์…€์˜ ์ตœ์ข… ์ƒ‰์ƒ์„ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
Geometry Shader (์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ์‰์ด๋”):
์ด ์‰์ด๋”๋Š” ๋ฒ„ํ…์Šค์™€ ํ”„๋ž˜๊ทธ๋จผํŠธ ์‚ฌ์ด์˜ ๊ธฐํ•˜ํ•™์  ๋ณ€ํ™˜์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ธฐํ•˜ํ•™์  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ์‚ญ์ œ, ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋ณต์žกํ•œ ํ˜•ํƒœ์˜ ๋ฌผ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
Compute Shader (์ปดํ“จํŠธ ์‰์ด๋”):
์ด ์‰์ด๋”๋Š” ๋ณ‘๋ ฌ ๊ณ„์‚ฐ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ์ผ๋ฐ˜์ ์ธ ๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ์ด์™ธ์—๋„ ๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ์ž‘์—…์— ํ™œ์šฉ๋œ๋‹ค.

Unity์™€ ๊ฐ™์€ ๊ฒŒ์ž„ ์—”์ง„์—์„œ๋Š” ์‰์ด๋”๋ฅผ ์‹œ๊ฐ์  ํšจ๊ณผ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์ปจํŠธ๋กคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ShaderLab ๋“ฑ์˜ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‰์ด๋”๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ๋ฌผ์ฒด์˜ ์žฌ์งˆ(Material)์— ์—ฐ๊ฒฐํ•˜์—ฌ ์›ํ•˜๋Š” ์‹œ๊ฐ์  ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 
 


 
 


๊ทธ๋Ÿผ ์šฐ๋ฆฌ๋Š” ๋Œ€์ฒด ์–ด๋–ป๊ฒŒ shader๋ฅผ ๊ฐ–๊ณ  ๊ฐ ํ”Œ๋žซํผ์—์„œ์˜ ์‹œ๊ฐ์  ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑธ๊นŒ?
์šฐ๋ฆฌ๊ฐ€ ์‰์ด๋” ์ฝ”๋“œ ๋˜๋Š” ์ธ์ŠคํŽ™ํ„ฐ๋ฅผ ํ†ตํ•ด ์œ ๋‹ˆํ‹ฐ์† ๊ทธ๋ž˜ํ”ฝ์„ ๋ณ€ํ˜•์‹œํ‚จ๋‹ค. -> ์œ ๋‹ˆํ‹ฐ๋Š” ํ•ด๋‹น ํ”Œ๋žซํผ์˜ ๊ทธ๋ž˜ํ”ฝ์Šค Api์—์„œ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ํ˜•์‹์œผ๋กœ ์ปดํŒŒ์ผ ํ•œ๋‹ค. -> ์ด๋ ‡๊ฒŒ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋Š” ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์—์„œ ์‹คํ–‰๋˜๊ณ  ์‹œ๊ฐ์  ํšจ๊ณผ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

Graphics Api๋ž€?

 
 

[์ถœ์ฒ˜] ์œ ๋‹ˆํ‹ฐ ๊ณต์‹๋ฌธ์„œ

: ์œ ๋‹ˆํ‹ฐ์—์„œ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ, ๋งฅ, ios, PC ๋“ฑโ€ฆ ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.
https://docs.unity3d.com/kr/2021.3/Manual/GraphicsAPIs.html [ ์œ ๋‹ˆํ‹ฐ ๊ณต์‹๋ฌธ์„œ ์ฐธ๊ณ  ]
๊ฐ์ž๋Š” ๋‹ค์–‘ํ•œ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๋ฅผ์‚ฌ์–‘ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๊ฐœ๋ฐœ์ž๋Š” ์ด ์—ฌ๋Ÿฌ ๊ทธ๋ž˜ํ”ฝ ์นฉ์…‹์— ๋Œ€์‘ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์–ด๋ ค์šด ์ผ์ด๋‹ค.
์œ ๋‹ˆํ‹ฐ๋Š” ์ด๋ฅผ ์œ„ํ•ด OpenGL, ๋‹ค์ด๋ ‰ํŠธX ๋“ฑ Graphics Api๋ฅผ ์ง€์›ํ•˜์—ฌ ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” Graphics Api์˜ ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์— ๋งŽ์ด ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

*๋ณดํ†ต์€ Auto Graphics Api๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ด ์ฒดํฌ๋ฐ•์Šค๋ฅผ ํ•ด์ œํ•˜๋ฉด ์›ํ•˜๋Š” Graphics Api๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

[์ถœ์ฒ˜] ์œ ๋‹ˆํ‹ฐ ๊ณต์‹ ๋ฌธ์„œ

 
 


 
 

Data to Mesh
: Gpu๋Š” ์–ด๋–ป๊ฒŒ?



์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‰์ด๋”๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ ๊ทธ๋ž˜ํ”ฝ์„ ๊ฐ ์ปดํ“จํ„ฐ์—์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค.
 

์ตœ๊ทผ 3D ์ž‘์—…๋ฌผ ์ค‘ ์‹ ์ „ ์™€์ด์–ดํ”„๋ ˆ์ž„

์ด์ œ๋Š” ๊ทธ๋ž˜ํ”ฝ ๊ตฌํ˜„์— ์žˆ์–ด์„œ ๋” ๋””ํ…Œ์ผํ•œ ๋ถ€๋ถ„์„ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
3D ๋ชจ๋ธ๋ง์€ ๊ฒฐ๊ตญ ์  -> ์„  -> ๋ฉด ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๊ณ  ๊ฒฐ๊ตญ์€ ์ค‘์ ์—์„œ ๊ฐ ๊ฐ’๋งŒํผ ๋–จ์–ด์ ธ์žˆ๋Š” ์ •์ ๋“ค์˜ ์ง‘ํ•ฉ์ด๊ธฐ ๋•Œ๋ฌธ์—  ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ด ์šฐ๋ฆฌ์—๊ฒŒ Mesh๋กœ ๋ณด์—ฌ์ง€๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •์„ ์•Œ์•„ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

Mesh๋Š” ํ˜•ํƒœ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ธ์ง€๋˜์ง€๋งŒ ๊ฒฐ๊ตญ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š”๋ฐ,
Mesh๋ฅผ GPU๊ฐ€ ์ฝ๊ณ  ํ‘œํ˜„ํ•˜๋Š” [Buffer] ๊ณผ์ •์€ ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™๋‹ค.

ํ•ด๋‹น ๊ฐ•์˜๋ฅผ ๋ณด๋ฉฐ ์ •๋ฆฌํ•ด๋ณธ ๋‚ด์šฉ์ด๋‹ค. ์ดํ•ดํ•œ๋Œ€๋กœ ์ •๋ฆฌํ•œ ๊ฒƒ์ด๋ผ ์šฉ์–ด์‚ฌ์šฉ์ด ์ ์ ˆํ•œ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ
๊ฐ ๊ณผ์ •๊ณผ ์˜์˜๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ๋‚˜๋งˆ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.



 
 




Rendering Loop

 
 

1๏ธโƒฃUpdate

๊ฐ€์žฅ ์ขŒ์ธก ์ƒ๋‹จ์˜ ์„ธ๋ชจ๊ฐ€ ์นด๋ฉ”๋ผ

: ์ฝ˜ํ…์ธ  ๊ตฌํ˜„์„ ์œ„ํ•œ ๋ชจ๋“  ๋กœ์ง์„ ์—…๋ฐ์ดํŠธ
ex) ๋กœ์ง, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ,, ๋ชจ๋“  ์ž…๋ ฅ๊ฐ’
 

2๏ธโƒฃCull

์ƒ‰์น ๋œ ๋ถ€๋ถ„์ด ์ œ๊ฑฐ๋˜๋Š” ๋ถ€๋ถ„( = ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„)

: ๋ฌผ์ฒด๋ฅผ ๋ Œ๋”๋ง ํ•˜๋Š”๋ฐ ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜๊ณ  View Frustum์ด๋ผ๋Š” ๊ฐ€์ƒ์˜ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•ด ํ™”๋ฉด์— ๋ณด์ด๋Š” ์˜์—ญ์„ ์ •์˜ํ•œ ๋’ค ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์„ฑ๋Šฅ์„ ๊ฐœ์„ ์‹œํ‚ต๋‹ˆ๋‹ค.
- Frustum Culling
- Occulusion Culling
 

3๏ธโƒฃScene Render

: ์˜ค๋ธŒ์ ํŠธ๋“ค์„ Vertext Shader -> Fragment Shader ๊ณผ์ •์„ ๊ฑฐ์ณ ๋ Œ๋”๋ง ํ•œ๋‹ค.
์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋ฉด Draw Call์„ ํ†ตํ•ด ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ๊ฐ Draw Call์€ GPU์—์„œ ์ฒ˜๋ฆฌ๋  ๋•Œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ด ์„ฑ๋Šฅ์ €ํ•˜๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋“ค์„ ๊ฐ€๋Šฅํ•œ ๋ชจ์•„์„œ ํ•˜๋‚˜์˜ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ๊ทธ๋ฆฌ๋„๋ก ํ•˜๋Š” ๋“ฑ ์ตœ์†Œํ•œ์˜ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•ด์•ผํ•œ๋‹ค.
 

4๏ธโƒฃ Post Processing

5๏ธโƒฃ Double ( or Triple ) Buffer

 

: ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๊ทธ๋ฆด ๋•Œ๋งˆ๋‹ค ํ™”๋ฉด์— ๋ฐ”๋กœ ์ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, Back Buffer์—์„œ ์˜ค๋ธŒ์ ํŠธ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋จผ์ € ๊ทธ๋ฆฐ ๋’ค ํ•œ ํ”„๋ ˆ์ž„์ด ๋๋‚˜๋ฉด Front Buffer๋กœ ์˜ฌ๋ ค์ค€๋‹ค.

728x90