๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ Development Study/๐Ÿ–ผ GameProgramming 2D

๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ DirectX11

by eazuooz 2022. 11. 29.

 ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ

๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ(Rendering Pipeline) ๋˜๋Š” ๊ทธ๋ž˜ํ”ฝ์Šค ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ(Graphics rendering pipeline)์ด๋ผ ๋ถ€๋ฅด๋Š” ๊ณผ์ •์€ 3์ฐจ์›์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋ธ์„ 2์ฐจ์›์— ํˆฌ์˜ํ•˜๋Š” ๋ Œ๋”๋ง ๊ณผ์ •์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž์„ธํ•˜๊ฒŒ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ์ปดํ“จํ„ฐ์— ๋ฐ์ดํ„ฐ๋กœ ์กด์žฌํ•˜๋Š” 3D ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ชจ๋‹ˆํ„ฐ์— ์ถœ๋ ฅ๋˜๋Š” ๊ณผ์ •์ด ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์„ ๋”ฐ๋ฅด๊ฒŒ ๋œ๋‹ค.

 

  • ์ •์ ์ฒ˜๋ฆฌ
  • ๋ž˜์Šคํ„ฐํ™”
  • ํ”„๋ž˜๊ทธ๋จผํŠธ ์ฒ˜๋ฆฌ
  • ์ถœ๋ ฅ ๋ณ‘ํ•ฉ

ํฌ๊ฒŒ 4 ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ ์ง€๋Š”๋ฐ, DirectX11์—์„œ๋Š” ์ด์™€ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ์ข€ ๋” ์„ธ๋ถ€์ ์œผ๋กœ
Input Assembly -> Vertex Shader -> Hull Shader -> Tessellation -> Domain Shader -> Geometry Shader -> Rasterizer -> Pixel Shader -> Output Merger ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ •์ ์ฒ˜๋ฆฌ : Vertex Shader -> Hull Shader -> Tessellation -> Domain Shader -> Geometry Shader
  • ๋ž˜์Šคํ„ฐํ™” : Rasterizer
  • ํ”„๋ ˆ๊ทธ๋จผํŠธ ์ฒ˜๋ฆฌ : Pixel Shader
  • ์ถœ๋ ฅ ๋ณ‘ํ•ฉ : Output Merger

์œผ๋กœ ๊ตฌ๋ณ„ ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ๊ฐ์˜ ๋‹จ๊ณ„๊ฐ€ ํ•˜๋Š” ์ผ์— ๋Œ€ํ•ด์„œ ๋ชจ๋ธ ํ•˜๋‚˜๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ณผ์ •์„ ์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

· Input Assembler

3์ฐจ์› ๋ชจ๋ธ ํ•˜๋‚˜๋ฅผ 3์ฐจ์› ์„ธ์ƒ์— ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์žฅ ๋จผ์ € ๋ฌด์—‡์„ ํ•ด์•ผ ํ• ๊นŒ์š”?
์šฐ์„  ๋ชจ๋ธ์˜ ์ •๋ณด๋ฅผ GPU๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ ๋ชจ๋ธ์€ ์‚ผ๊ฐํ˜•(ํด๋ฆฌ๊ณค)์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•˜๊ณ , ์‚ผ๊ฐํ˜•์€ ์ •์ (Vertex) 3๊ฐœ์˜ ์ง‘ํ•ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ dx์™€ ๊ฐ™์€ ๋ Œ๋”๋ง ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ๋ชจ๋ธ์˜ ์ตœ์†Œ๋‹จ์œ„์ธ ์ •์ ๋“ค์˜ ์ง‘ํ•ฉ์„ GPU๋กœ ์ „๋‹ฌํ•˜๊ฒŒ ๋˜๋Š”๋ฐ์š”, ์ด ๋•Œ ์ด ์ •์ ๋“ค์„ ์šด๋ฐ˜ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ •์  ๋ฒ„ํผ ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ž ๊น

์ •์  ๋ฒ„ํผ์™€ ๊ฐ™์ด ๋“ฑ์žฅํ•˜๋Š” ์šฉ์–ด๋กœ ์ธ๋ฑ์Šค ๋ฒ„ํผ(Index Buffer)๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค. ์ด ์ธ๋ฑ์Šค ๋ฒ„ํผ๋Š” ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ์ •์ ๋“ค์˜ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ฒ„ํผ๋ผ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์‚ฌ๊ฐํ˜•์„ ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒ๊ฐ ํ•ด๋ณด์ž. ์‚ฌ๊ฐํ˜• ํ•˜๋‚˜๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ์ด๊ฒƒ์„ ์ตœ์†Œ ๋‹จ์œ„์˜ ๋„ํ˜•(์‚ผ๊ฐํ˜•)์œผ๋กœ ์ชผ๊ฐœ๋ฉด ์‚ผ๊ฐํ˜• ๋‘ ๊ฐœ๊ฐ€ ์ƒ๊ธด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ์‚ผ๊ฐํ˜• ๋‘ ๊ฐœ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹น์—ฐํžˆ 2*3 =6 ๊ฐœ์˜ ์ •์ ์ด ํ•„์š” ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ๋กœ ์‚ฌ๊ฐํ˜•์€ ๋ช‡ ๊ฐœ์˜ ์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๊ฐ€?

4๊ฐœ์˜ ์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
6๊ฐœ์˜ ์ •์ ์œผ๋กœ ์‚ฌ๊ฐํ˜•์„ ํ‘œํ˜„ํ•œ๋‹ค๋ฉด 2๊ฐœ์˜ ์ ์ด ์ค‘๋ณต๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.๋งŒ์•ฝ ์‚ฌ๊ฐํ˜• ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ฌ๊ฐํ˜• 10,000๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ ๋ชจ๋ธ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด 20000๊ฐœ์˜ ์ •์ ์ด ๋‚ญ๋น„๋˜๋Š” ๊ฒƒ์ด๊ณ  ์ด๊ฒƒ์€ ์—„์ฒญ๋‚ญ ์†ํ•ด์ด๋‹ค! ๋˜ํ•œ ๋‹จ์ˆœํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ญ๋น„์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ™์€ ์ •์ ์— ๋Œ€ํ•œ ์ž‘์—…์„ GPU์—์„œ ์—ฌ๋Ÿฌ๋ฒˆ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ๋Ÿ‰๊นŒ์ง€ ๋Š˜์–ด๋‚œ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ค‘๋ณต๋˜๋Š” ์ •์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ Index Buffer์ด๋‹ค. ์œ„์˜ ์‚ฌ๊ฐํ˜•์˜ ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ •์  ๋ฒ„ํผ๋Š” Vertex Bufer[] = { P0,P1,P2,P3} ์ด๋ ‡๊ฒŒ 4๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ–๊ณ , ์ธ๋ฑ์Šค ๋ฒ„ํผ๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•˜์—ฌ Index Buffer[] = {0,1,2,1,3,2,} ์š”๋Ÿฐ์‹์œผ๋กœ ์ •์ ์„ ์–ด๋–ค ์ˆœ์„œ๋กœ ๊ทธ๋ ค์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋ชฉ๋ก์„ ์ œ๊ณตํ•˜๋ฉด ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ๋ฑ์Šค ๋ฒ„ํผ๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ์—๋„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋“œ๋Š”๋ฐ ์ด๊ฒƒ์€ ๋‚ญ๋น„๊ฐ€ ์•„๋‹ˆ๋ƒ๊ณ  ์ƒ๊ฐ ํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ

  1. ์ธ๋ฑ์Šค๋ฒ„ํผ๋Š” ๊ทธ๋ƒฅ ์ •์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ„์น˜,์ƒ‰๊น”,๋ฒ•์„ ,UV๋“ฑ๋“ฑ์˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๋Š” ์ •์  ๊ตฌ์กฐ์ฒด๋ณด๋‹ค ํ›จ์”ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒŒ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋ฐ๋‹ค๊ฐ€
  2. ์ค‘๋ณต๋˜๋Š” ์ •์ ์— ๋Œ€ํ•ด์„œ ์ค‘๋ณต๋œ GPU ๊ณ„์‚ฐ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฉ”๋ฆฌํŠธ๊ฐ€ ๊ต‰์žฅํžˆ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค ๋ฒ„ํผ์— ์†Œ์š”๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

[์ •์  ๋ฒ„ํผ]

์ž ๋‹ค์‹œ ์ด์ œ ์ •์ ๋ฒ„ํผ๋กœ ๋Œ์•„์™€์„œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์ •์  ๋ฒ„ํผ๋Š” ๊ทธ๋ƒฅ ์ •์ ๋“ค์„ ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์— ๋ถˆ๊ณผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ GPU์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ •์ ๋“ค์„ ์ด์šฉํ•˜์—ฌ ์–ด๋–ค ๋„ํ˜•์„ ๋งŒ๋“ค์–ด์•ผ ํ•  ์ง€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ด ์ •์ ์„ ๋‘ ๊ฐœ์”ฉ ์—ฎ์–ด์„œ ์„ ๋ถ„์„ ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์„ธ ๊ฐœ์”ฉ ์—ฎ์–ด์„œ ์‚ผ๊ฐํ˜•์„ ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ์ฃ . ์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ๋„ํ˜•์„ ํ˜•์„ฑํ•˜๋Š” ๋ฐฉ์‹์„ ์•Œ๋ ค์ฃผ๋Š”๋ฐ ์“ฐ์ด๋Š” ์ˆ˜๋‹จ์œผ๋กœ Direct3D์—์„œ๋Š” Primitive Topology๋ผ๋Š” ํ˜•ํƒœ๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ ํ† ํด๋กœ์ง€๋Š” ํ•ด์„ํ•˜์ž๋ฉด “์œ„์ƒ ๊ตฌ์กฐ”๋ผ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ DX11 ์—์„œ๋Š” point list, line list, triangle strip, triangle list ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Triangle list๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ธฐ๋ณธ๋„ํ˜•์„ ์‚ผ๊ฐํ˜•์œผ๋กœ ์„ ํƒํ–ˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ด…์‹œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ๋ชจ๋ธ ํ•˜๋‚˜๋ฅผ ํ˜•์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” GPU์—์„œ ์ˆ˜๋งŽ์€ ์‚ผ๊ฐํ˜•๋“ค์„ ์ด์–ด ๋ถ™์ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๊ฑฐ์ฃ .
์ž…๋ ฅ ์กฐ๋ฆฝ๊ธฐ ๋‹จ๊ณ„(Input Assemble) ์—์„œ๋Š” ์ด๋Ÿฐ ์ •์ ๋“ค์„ ์ฝ์–ด์„œ ์‚ผ๊ฐํ˜•๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๋„ํ˜•์œผ๋กœ ์กฐ๋ฆฝํ•˜๋Š” ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ž…๋ ฅ ์กฐ๋ฆฝ ๋‹จ๊ณ„์ฃ .

· Vertex Shader

Input Assembler ๋‹จ๊ณ„์—์„œ ๋ฐ›์€ ์ •์ ๋“ค์˜ ์ •๋ณด๋กœ ๋„ํ˜•์€ ์ƒ์„ฑ๋˜์—ˆ์ง€๋งŒ ๊ณต๊ฐ„ ์ขŒํ‘œ๊ณ„๋ฅผ ๋ณ€ํ™˜ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋„ํ˜•๋“ค์€ ์ž์‹ ๋งŒ์˜ ์ขŒํ‘œ๊ณ„์ธ Local Space์˜ ์ขŒํ‘œ๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ๋ชจ๋“  ๋ฌผ์ฒด๋“ค์ด ํ•˜๋‚˜์˜ ์›”๋“œ์— ์œ„์น˜ํ•˜๋„๋ก Local Space์—์„œ World Space๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์‹ค์ œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ์นด๋ฉ”๋ผ๊ฐ€ ์ค‘์‹ฌ์ด ๋˜๋Š” ๊ณต๊ฐ„์ธ View Space๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ Projection ๋ณ€ํ™˜์„ ๊ฑฐ์ณ์„œ ์ตœ์ข…์ ์œผ๋กœ ํˆฌ์˜๊นŒ์ง€ ์ •์˜๋œ ํˆฌ์˜๊ณต๊ฐ„ Clip Space๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

 

์ตœ์ข…์ ์œผ๋กœ ๋ณ€ํ™˜๊ณผ์ •์„ ๋‚˜์—ดํ•˜๋ฉด [์˜ค๋ธŒ์ ํŠธ ๊ณต๊ฐ„] * ์›”๋“œ ๋ณ€ํ™˜ -> [์›”๋“œ ๊ณต๊ฐ„] * ๋ทฐ ๋ณ€ํ™˜ -> [์นด๋ฉ”๋ผ ๊ณต๊ฐ„] * ํˆฌ์˜ ๋ณ€ํ™˜ -> [ํด๋ฆฝ ๊ณต๊ฐ„] ์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋Š”๋ฐ ๊ฐ๊ฐ์˜ ๊ณผ์ •์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

 

์›”๋“œ ๋ณ€ํ™˜

์šฐ์„  ์ง€์—ญ๊ณต๊ฐ„(local space)๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ์˜ค๋ธŒ์ ํŠธ ๊ณต๊ฐ„์€ 3์ฐจ์› ์„ธ์ƒ์—์„œ ํ‘œํ˜„๋  ๊ฐ๊ฐ์˜ ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ์ •์˜๋œ ๊ณต๊ฐ„์ธ๋ฐ์š”, ํ•˜๋‚˜์˜ ๋ฌผ์ฒด๊ฐ€ ์ž์‹ ๋งŒ์˜ ๊ณต๊ฐ„์—์„œ ๊ณ ์ • ๋ถˆ๋ณ€์˜ ์ขŒํ‘œ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฌํ•œ ์˜ค๋ธŒ์ ํŠธ ๊ณต๊ฐ„์˜ ๋ฌผ์ฒด๋Š” ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ์˜ ๊ณต๊ฐ„๊ณผ๋Š” ์ „ํ˜€ ๊ด€๊ณ„๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— 3์ฐจ์› ์„ธ์ƒ์— ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋“ค์€ ํ•˜๋‚˜์˜ ๋‹จ์ผ ๊ณต๊ฐ„์œผ๋กœ ๋ชจ์•„์งˆ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ๋ชจ๋“  ๋ฌผ์ฒด์™€ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ™์€ ์„ธ์ƒ์— ์กด์žฌํ•˜๋“ฏ์ด 3์ฐจ์› ์„ธ์ƒ์„ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•˜๋ ค๋ฉด ๋‹น์—ฐํžˆ ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ํ•˜๋‚˜์˜ ๋‹จ์ผ ๊ณต๊ฐ„์— ์žˆ์–ด์•ผ ํ•˜๋Š”๊ฑฐ์ฃ . ์ด ๋•Œ ๋ชจ๋“  ๋Œ€์ƒ๋“ค์ด ๋ชจ์•„์งˆ ๊ณต๊ฐ„์„ ์›”๋“œ ๊ณต๊ฐ„์ด๋ผ ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ๋Œ€์ƒ์„ ์›”๋“œ ๊ณต๊ฐ„์— ๋ชจ์œผ๋Š” ๊ณผ์ •์„ ์›”๋“œ ๋ณ€ํ™˜์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.

์นด๋ฉ”๋ผ ๋ณ€ํ™˜

์›”๋“œ ๋ณ€ํ™˜์ด ์™„๋ฃŒ๋˜์–ด ๋ชจ๋“  ๋ฌผ์ฒด๊ฐ€ ์›”๋“œ ๊ณต๊ฐ„์— ๋ชจ์•„์ง€๋ฉด ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์‹œ์ ์—์„œ ๋ฌผ์ฒด๋“ค์„ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ๊ด€์ฐฐ์ž๋กœ์จ ๊ฐ€์ƒ์˜ ์นด๋ฉ”๋ผ๊ฐ€ ํ•„์š”ํ•˜๊ณ , ์ด ์นด๋ฉ”๋ผ(๊ด€์ฐฐ์ž)๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์˜ ๊ณต๊ฐ„์„ ์นด๋ฉ”๋ผ ๊ณต๊ฐ„ ํ˜น์€ ๋ทฐ ๊ณต๊ฐ„์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์›”๋“œ ๊ณต๊ฐ„์˜ ๋ชจ๋“  ๋ฌผ์ฒด๋ฅผ ์นด๋ฉ”๋ผ ๊ณต๊ฐ„์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฒŒ๋˜๋ฉด ๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋žœ๋”๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›”๋“œ ๊ณต๊ฐ„์˜ ๋ชจ๋“  ๋ฌผ์ฒด๋Š” ์นด๋ฉ”๋ผ ๊ณต๊ฐ„์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š”๋ฐ ์ด๋ฅผ ์นด๋ฉ”๋ผ ๋ณ€ํ™˜์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ์ž ๊น ์นด๋ฉ”๋ผ๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ์„ธ์ƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. ๊ฐ€์ƒ์˜ ์นด๋ฉ”๋ผ๋Š” ์ปดํ“จํ„ฐ์˜ ์„ฑ๋Šฅ์˜ ํ•œ๊ณ„ ๋•Œ๋ฌธ์— ์‹ค์ œ ์„ธ์ƒ์˜ ์นด๋ฉ”๋ผ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์‹œ์•ผ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ์„ ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋–„ ์ด ์‹œ์•ผ๋Š” fovy(์‹œ์•ผ๊ฐ), aspect(์ข…ํšก๋น„)์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ์‹œ์•ผ์˜ ๊ฐ€์‹œ ์˜์—ญ์„ ๋ทฐ ๋ณผ๋ฅจ(view volume)๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋ทฐ ๋ณผ๋ฅจ์€ n(๊ทผํ‰๋ฉด), f(์›ํ‰๋ฉด)์— ์˜ํ•ด ์ ˆ๋‹จ๋˜์–ด View Frustum(์ ˆ๋‘์ฒด)์˜ ์˜์—ญ์œผ๋กœ ๋‹ค์‹œ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

[view volume]

[view frustum]

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

ํˆฌ์˜ ๋ณ€ํ™˜

์ž ์นด๋ฉ”๋ผ ๋ณ€ํ™˜์—์„œ ์›”๋“œ์˜ ๋ชจ๋“  ๋ฌผ์ฒด๋ฅผ ์นด๋ฉ”๋ผ ๊ณต๊ฐ„์œผ๋กœ ์ด๋™์‹œ์ผฐ๊ณ , ์ด์ œ ์นด๋ฉ”๋ผ ์‹œ์ ์—์„œ ์„ธ์ƒ์„ ๋ฐ”๋ผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”. ๊ทธ๋Ÿฐ๋ฐ ์šฐ๋ฆฌ๊ฐ€ ์นด๋ฉ”๋ผ๋ฅผ ํ†ตํ•ด ๋ฐ”๋ผ๋ณด๋Š” ๊ฐ€์ƒ์˜ ์„ธ์ƒ์€ ํ˜„์‹ค ์„ธ๊ณ„์ฒ˜๋Ÿผ 3์ฐจ์› ์„ธ์ƒ์ด์ง€๋งŒ ์‹ค์ œ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ”๋ผ๋ณผ ๋ชจ๋‹ˆํ„ฐ๋Š” 2์ฐจ์›์˜ ํ‰๋ฉด์ž…๋‹ˆ๋‹ค. 3์ฐจ์› ๊ณต๊ฐ„์„ ์–ด๋–ป๊ฒŒ 2์ฐจ์› ๊ณต๊ฐ„์— ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”???

์‚ฌ๋žŒ์ด ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ๋•Œ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”. ์–ด๋–ป๊ฒŒ ๊ทธ๋ฆฌ์ฃ ? ์›๊ทผ๋ฒ•์— ๋”ฐ๋ผ์„œ.

“๋ฉ€๋ฆฌ ์žˆ๋Š” ๋ฌผ์ฒด์ผ์ˆ˜๋ก ์ž‘๊ฒŒ”, “๋ฉ€๋ฆฌ์žˆ๋Š” ๋ฌผ์ฒด์ผ์ˆ˜๋ก ์†Œ์‹ค์ ์— ๊ฐ€๊น๊ฒŒ”

3์ฐจ์› ์„ธ์ƒ์„ 2์ฐจ์› ํ‰๋ฉด์— ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹คํ–‰ํžˆ ์ด๋ฏธ ํ™”๊ฐ€๋“ค์— ์˜ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋„ ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ๋”ฐ๋ฅด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํˆฌ์˜ ๋ณ€ํ™˜์€ ์ด๋Ÿฌํ•œ ์›๊ทผ๋ฒ•์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์นด๋ฉ”๋ผ ๊ณต๊ฐ„์—์„œ ์ •์˜๋œ ์ ˆ๋‘์ฒด๋ฅผ ์ถ•์— ๋‚˜๋ž€ํ•œ ์ง์œก๋ฉด์ฒด ๋ณผ๋ฅจ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์นด๋ฉ”๋ผ ๊ณต๊ฐ„์˜ ๋ชจ๋“  ๋ฌผ์ฒด๋ฅผ 3์ฐจ์› ํด๋ฆฝ ๊ณต๊ฐ„์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํˆฌ์˜ ๋ณ€ํ™˜์ด๋ผ๋Š” ์ด๋ฆ„๊ณผ๋Š” ๋‹ฌ๋ฆฌ 3์ฐจ์› ์นด๋ฉ”๋ผ ๊ณต๊ฐ„์˜ ๋ฌผ์ฒด๋ฅผ 2์ฐจ์› ํ‰๋ฉด์œผ๋กœ ํˆฌ์˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋˜ ๋‹ค๋ฅธ 3์ฐจ์› ๋ฌผ์ฒด๋กœ ‘๋ณ€ํ˜•’ํ•จ์„ ์ฃผ๋ชฉํ•ฉ์‹œ๋‹ค. ์ด๋Ÿฌํ•œ ํˆฌ์˜ ๋ณ€ํ™˜์„ ๊ฑฐ์นœ ๋ฌผ์ฒด๋“ค์„ ๊ด€์ฐฐํ•ด๋ณด๋ฉด ์ ˆ๋‘์ฒด ๋’ค์ชฝ์— ์žˆ๋˜ ์˜์—ญ์˜ ํด๋ฆฌ๊ณค์€ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์•„์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์šฐ๋ฆฌ๊ฐ€ ์›ํ–ˆ๋˜ ์›๊ทผ๋ฒ•์ด ์ ์šฉ๋œ ๊ฒƒ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ณ ์š”. ๋‹ค์‹œ ์ •๋ฆฌํ•˜์ž๋ฉด ํˆฌ์˜๋ณ€ํ™˜์€ 3์ฐจ์› ๊ณต๊ฐ„ ๋‚ด์—์„œ ์›๊ทผ๋ฒ•์„ ์‹คํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜ ๋” ์ƒ๊ฐํ•ด์•ผ ํ•  ๊ฒƒ์ด ์›๊ทผ๋ฒ•์„ 3์ฐจ์› ๊ณต๊ฐ„์—์„œ ์‹คํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ง์œก๋ฉด์ฒด ๋ณผ๋ฅจ์œผ๋กœ ๋ฌผ์ฒด๋“ค์„ ๋ณ€ํ™˜์‹œ์ผฐ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ๋ถ€๊ฐ€์ ์œผ๋กœ ์–ป๊ฒŒ๋˜๋Š” ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๋‚˜์ค‘์— ์„ค๋ช…ํ•  ํด๋ฆฌํ•‘(clipping)์— ๊ด€ํ•œ ๊ฑด๋ฐ์š”. ์•„๊นŒ ํด๋ฆฌํ•‘์€ ๋ทฐ ํ”„๋Ÿฌ์ŠคํŠธ๋Ÿผ ๋ฐ”๊นฅ์ชฝ์˜ ํด๋ฆฌ๊ณค๋“ค์„ ์ž˜๋ผ ๋‚ด๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์„ค๋ช…ํ•˜์˜€๋Š”๋ฐ ํ˜„์žฌ ํˆฌ์˜ ๋ณ€ํ™˜์„ ๊ฑฐ์น˜๋ฉด์„œ ์ ˆ๋‘์ฒด ๊ณต๊ฐ„์ด ์ง์œก๋ฉด์ฒด์˜ ํด๋ฆฝํ•‘ ๊ณต๊ฐ„์œผ๋กœ ๋ณ€ํ˜•๋˜์—ˆ์ฃ ? ์ ˆ๋‘์ฒด ๋„ํ˜•๊ณผ ์ง์œก๋ฉด์ฒด ๋„ํ˜• ์ค‘์— ํด๋ฆฌํ•‘์„ ํ•˜๊ธฐ์— ๋” ์‰ฌ์šด ๋„ํ˜•์ด ๋ญ์ธ์ง€๋Š” ์•ˆ๋ด๋„ ๋น„๋””์˜ค์ฃ ? ํˆฌ์˜ ๋ณ€ํ™˜์„ ํ†ตํ•ด ๋ชจ๋“  ๋ฌผ์ฒด๊ฐ€ ํด๋ฆฝ ๊ณต๊ฐ„์œผ๋กœ ๋ณ€ํ™˜๋˜๋ฉด์„œ ํด๋ฆฌํ•‘ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค!!

๋‹ค์‹œ Vertex Shader๋กœ…

์ง€๊ธˆ๊นŒ์ง€ ์„ค๋ช…ํ•œ ์›”๋“œ ๋ณ€ํ™˜, ์นด๋ฉ”๋ผ ๋ณ€ํ™˜, ํˆฌ์˜ ๋ณ€ํ™˜์ด ์ •์  ์ฒ˜๋ฆฌ ๊ณผ์ • ์ค‘์—์„œ๋„ ๋ณ€ํ™˜ ๊ณผ์ •์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณ€ํ™˜ ๊ณผ์ •์€ ์ฃผ๋กœ ์ •์  ์…ฐ์ด๋”์—์„œ ์ˆ˜ํ–‰๋˜๋Š”๋ฐ ๋งŒ์•ฝ ํ…Œ์…€๋ ˆ์ด์…˜์ด๋‚˜ ๊ธฐํ•˜ ์…ฐ์ด๋” ๋‹จ๊ณ„๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์ •์  ์…ฐ์ด๋”์—์„œ์˜ ๋ณ€ํ™˜ ๊ณผ์ •์€ ์ƒ๋žต๋˜๊ณ  ํ…Œ์…€๋ ˆ์ด์…˜์ด๋‚˜ ๊ธฐํ•˜ ์…ฐ์ด๋”์—์„œ ๋Œ€์‹  ์ˆ˜ํ–‰ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐํ•˜์…ฐ์ด๋”์™€ ํ…Œ์…€๋ ˆ์ด์…˜์€ ๊ฐ๊ฐ shader4.0, shader5.0 ์ด์ƒ๋ถ€ํ„ฐ ์ง€์›ํ•˜๋Š” ์ •์  ๋ณ€ํ™˜ ๋‹จ๊ณ„์˜ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ์จ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ๊ธฐํ•˜ ์…ฐ์ด๋”๋Š” ์ •์  ์…ฐ์ด๋”๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ์ •์  ํ•˜๋‚˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ์™€ ๊ธฐํ•˜ ๋„ํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํŒŒ์ดํ”„๋ผ์ธ์ด๊ณ , ํ…Œ์…€๋ ˆ์ด์…˜ ๋‹จ๊ณ„๋Š” ์ž…๋ ฅ์กฐ๋ฆฝ๊ธฐ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ํŒจ์น˜(patch)์˜ ์ œ์–ด์ (control point)์œผ๋กœ๋ถ€ํ„ฐ ๋” ๋งŽ์€ ๊ธฐํ•˜๊ตฌ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์ •์  ์…ฐ์ด๋”์™€ ๋”๋ถˆ์–ด ์ด ๋‘ ๋‹จ๊ณ„์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ณผ์ •์ด ์ •์  ์ฒ˜๋ฆฌ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ํŒŒ์ดํ”„๋ผ์ธ์— ๊ฐ๊ฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๊ธฐ์—” ์ด ํฌ์ŠคํŒ…์˜ ์ˆ˜์ค€์„ ๋ฒ—์–ด๋‚˜๋Š” ๋‚ด์šฉ์ด๋ฏ€๋กœ ๋‚˜์ค‘์— ๋”ฐ๋กœ ํฌ์ŠคํŒ…ํ•˜๋„๋ก ํ•˜๊ณ  ์ด์ œ ๋ ˆ์Šคํ„ฐํ™” ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.



· Tesselation(์ƒ๋žต ๊ฐ€๋Šฅ)

Tesselation ๋‹จ๊ณ„๋Š” ์ฃผ์–ด์ง„ ๋ชจ๋ธ์˜ ์ •์ ์„ ๋” ์ž˜๊ฒŒ ์ชผ๊ฐœ์–ด ๋””ํ…Œ์ผํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

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

์ด๋Š” LOD(Level of Detail)์„ ์ ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ•ด์ƒ๋„๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ์„ ๋งˆ๋ จํ–ˆ๋Š”๋ฐ, ๊ทธ ๋ชจ๋ธ๋“ค๋ผ๋ฆฌ์˜ ๋ณ€ํ™˜์ด ๋ถ€์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฒฝ์šฐ๋ฅผ Tesselation์œผ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

· Geometry Shader(์ƒ๋žต ๊ฐ€๋Šฅ)

๊ธฐ๋ณธ ๋„ํ˜•์—์„œ ์ •์ ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜์—ฌ ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์…ฐ์ด๋”์ด๋‹ค. Geometry Shader๋กœ ์ •์  ์ •๋ณด๋ฅผ ์กฐ๊ธˆ ์ถ”๊ฐ€ํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ธ์ด๋ผ๋ฉด ๊ทธ๋งŒํผ์˜ ์ •์  ์ •๋ณด๋ฅผ ๋นผ๊ณ  ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋””์Šคํฌ ์šฉ๋Ÿ‰๊ณผ ๊ทธ๋ž˜ํ”ฝ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ์— ๋„์›€์ด ๋  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ํ…Œ์…€๋ ˆ์ด์…˜ ๋“ฑ์œผ๋กœ ์ถ”๊ฐ€๋œ ์ •์ ๋“ค์„ ํ‘œํ˜„ํ•  ๋•Œ๋„ ์‚ฌ์šฉ๋œ๋‹ค.

· Rasterization

์ •์  ์ฒ˜๋ฆฌ ๋‹จ๊ณ„๋ฅผ ์ง€๋‚œ ์ •์ ์€ ์ด์ œ ๋žœ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹ค์Œ ๋‹จ๊ณ„์ธ ๋ ˆ์Šคํ„ฐํ™” ๋‹จ๊ณ„๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ์šฐ์„  ์ •์ ๋“ค์€ ์‚ผ๊ฐํ˜• ๋“ฑ๊ณผ ๊ฐ™์€ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ(primitive)๋กœ ๋ฌถ์—ฌ์ง€๋Š”๋ฐ, ์ด ์‹œ์  ์ดํ›„ ๋ถ€ํ„ฐ๋Š” ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๊ฐ€ ๋…์ž์ ์ธ ๊ฐœ์ฒด๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์‚ผ๊ฐํ˜•์„ ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ํ™”๋ฉด์— ๊ทธ๋ ค์งˆ 2์ฐจ์› ์‚ผ๊ฐํ˜•์˜ ์„ธ ์ •์  ์ขŒํ‘œ๊ฐ€ ๊ฒฐ์ •๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

  1. ์ด ์‚ผ๊ฐํ˜•์ด ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ํ”ฝ์…€๋งˆ๋‹ค ํ”ฝ์…€์…ฐ์ด๋”๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  2. ์‚ผ๊ฐํ˜•์˜ ์„ธ ์ •์ ์— ํ• ๋‹น๋˜์—ˆ๋˜ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ(position, color, uv …)๋“ฑ์€ ๋ณด๊ฐ„(Interpolation)๋˜์–ด ์‚ผ๊ฐํ˜• ๋‚ด๋ถ€์˜ ๊ฐ๊ฐ์˜ ํ”ฝ์…€์…ฐ์ด๋”์— ํ• ๋‹น๋œ๋‹ค.

Direct3D์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ†ตํ‹€์–ด์„œ ๋ ˆ์Šคํ„ฐ๋ผ์ด์ €(resterizer)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ด ๋ ˆ์Šคํ„ฐ๋ผ์ด์ €๋Š” ๊ณ ์ • ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ํ•˜๋“œ์›จ์–ด ์ž์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋™์ž‘ํ•˜๋ฉฐ,

  • ํด๋ฆฌํ•‘(Clipping)
  • ์›๊ทผ ๋‚˜๋ˆ—์…ˆ(perspective division)
  • ๋’ท๋ฉด ์ œ๊ฑฐ(back-face culling)
  • ๋ทฐํฌํŠธ ๋ณ€ํ™˜(view-port transform)
  • ์Šค์บ” ๋ณ€ํ™˜(sacn transform)

๋“ฑ์˜ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ๊ฐ๊ฐ์˜ ์š”์†Œ๋“ค์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํด๋ฆฌํ•‘(clipping)

ํด๋ฆฌํ•‘์€ ํˆฌ์˜๋ณ€ํ™˜ ์ดํ›„์˜ ํด๋ฆฝ๊ณต๊ฐ„๋ณผ๋ฅจ ๋ฐ”๊นฅ์— ๋†“์ธ ํด๋ฆฌ๊ณค์„ ์ž˜๋ผ ๋‚ด๋Š” ์ž‘์—…์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด์ „๋ถ€ํ„ฐ ๋ช‡ ๋ฒˆ ์–ธ๊ธ‰๋˜์—ˆ๋˜ ์ด ์ž‘์—…์€ ๋ฐ”๋กœ ์ด ๋ ˆ์Šคํ„ฐํ™” ๋‹จ๊ณ„์—์„œ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

์›๊ทผ ๋‚˜๋ˆ—์…ˆ(perspective division)

ํ˜„์žฌ ๋‹จ๊ณ„์—์„œ ํˆฌ์˜๋ณ€ํ™˜์„ ํ†ตํ•ด ์›๊ทผ๋ฒ•์ด ์ ์šฉ๋œ 3์ฐจ์› ๋ฌผ์ฒด๋“ค์€ ์ง์œก๋ฉด์ฒด ๋ณผ๋ฅจ์˜ 3์ฐจ์› ํด๋ฆฌํ•‘ ๊ณต๊ฐ„(Clip Space)์—์„œ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒƒ์€ ๋ชจ๋‹ˆํ„ฐ ํ™”๋ฉด์— ์ถœ๋ ฅ๋  2์ฐจ์› ์‚ฌ๊ฐ ์˜์—ญ์ด์ฃ . ๊ทธ๋ ‡๋‹ค๋ฉด 3์ฐจ์› ๊ณต๊ฐ„์„ ์–ด๋–ป๊ฒŒ 2์ฐจ์› ๊ณต๊ฐ„์œผ๋กœ ๋ณ€ํ™˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ์š”?

๋‹จ์ˆœํžˆ ์ƒ๊ฐํ•˜๋ฉด ๊ทธ๋ƒฅ ์ฐจ์›์„ ์ค„์ด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ z์ขŒํ‘œ๋กœ ๋ชจ๋“  ์„ฑ๋ถ„์„ ๋‚˜๋ˆ ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด์ง€์š”. ์‹ค์ œ z๊ฐ’์€ ํˆฌ์˜๋ณ€ํ™˜ํ–‰๋ ฌ์„ ๊ณฑํ•œ ํ›„ ๋™์ฐจ์ขŒํ‘œ๊ณ„์˜ (x,y,z,w)์—์„œ w์„ฑ๋ถ„์— ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํˆฌ์˜๋ณ€ํ™˜ ์ดํ›„ w์— ์ €์žฅ๋œ ๊ฐ’์œผ๋กœ ์ขŒํ‘œ๋ฅผ ๋‚˜๋ˆ„๋Š” ์—ฐ์‚ฐ์„ ๋งˆ์น˜๋ฉด ์›๊ทผ๋ฒ• ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๊ณ  ์ด๋ฅผ ์›๊ทผ ๋‚˜๋ˆ—์…ˆ์ด๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์›๊ทผ ๋‚˜๋ˆ—์…ˆ์ด ์ ์šฉ๋œ ์ดํ›„์—๋Š” (x,y,z,w)์˜ ๋™์ฐจ ์ขŒํ‘œ๊ณ„์—์„œ (x,y,z)์˜ ์นดํ…Œ์‹œ์•ˆ ์ขŒํ‘œ๊ณ„๋กœ ๋ณ€ํ™”๊ฒŒ ๋˜๋Š”๋ฐ์š” ์ด ๋•Œ ์ด๋ฅผ NDC(normalized device coordinates) ๊ณต๊ฐ„์ด๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ •๊ทœํ™”๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™๋Š” ์ดํ›„๋Š” ์ด ์ขŒํ‘œ์˜ xy๋ฒ”์œ„๊ฐ€ [-1,1]์ด๊ณ  z๋ฒ”์œ„๊ฐ€ [0,1]์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋’ท๋ฉด ์ œ๊ฑฐ(back-face culling)

๋‹ค์Œ์œผ๋กœ ๋ ˆ์Šคํ„ฐ๋ผ์ด์ €์—์„œ ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ๋’ท๋ฉด ์ œ๊ฑฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋’ท๋ฉด ์ œ๊ฑฐ๋Š” ์นด๋ฉ”๋ผ์— ๋“ฑ์„ ๋Œ๋ฆฌ๊ณ  ์žˆ์–ด ๋ณด์ด์ง€ ์•Š๋Š” ํด๋ฆฌ๊ณค์„ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ณด์ด์ง€ ์•Š๋Š” ํด๋ฆฌ๊ณค์„ ์ฃผ๋กœ ๋’ท๋ฉด(back-face), ๋ณด์ด๋Š” ๋ฉด์„ ์•ž๋ฉด(front-face)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•œ๋ฐ ์นด๋ฉ”๋ผ์˜ ์‹œ์„ ๋ฒกํ„ฐ V0๊ฐ€ ์žˆ๊ณ , ํด๋ฆฌ๊ณค์˜ ๋ฒ•์„ ๋ฒกํ„ฐ V1์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ด ๋‘˜์ด ์ด๋ฃจ๋Š” ๊ฐ๋„๊ฐ€ ์˜ˆ๊ฐ์ธ์ง€ ๋‘”๊ฐ์ธ์ง€์— ๋”ฐ๋ผ ๋’ท๋ฉด์„ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํด๋ฆฌ๊ณค์˜ ๋ฒ•์„ ๋ฒกํ„ฐ๋ฅผ ๊ตฌํ•  ๋•Œ๋Š” ์™ธ์ (cross product)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ•˜๋Š”๋ฐ ์ด ๋•Œ ์™ธ์ ์€ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋ฐฉํ–ฅ์ด ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์ž–์•„์š”? Direct3D์—์„œ ๋“ฑ์žฅํ•˜๋Š” ์™€์ธ๋”ฉ ์˜ค๋”(์‹œ๊ณ„๋ฐฉํ–ฅ ํ˜น์€ ๋ฐ˜์‹œ๊ณ„)๋Š” ์ด๊ฒƒ์„ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ๋ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ๊ธด ์‚ผ๊ฐํ˜•์„ ์•ž๋ฉด์œผ๋กœ, ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ๊ธด ์‚ผ๊ฐํ˜•์„ ๋’ท๋ฉด์œผ๋กœ ๊ฐ„์ฃผํ•˜์ง€๋งŒ ์ด๋Š” ๋žœ๋” ์ƒํƒœ ์„ค์ •์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ทฐํฌํŠธ ๋ณ€ํ™˜(view-port transform)

์ปดํ“จํ„ฐ ํ™”๋ฉด ์ƒ์˜ ์œˆ๋„์šฐ๋Š” ์Šคํฌ๋ฆฐ ๊ณต๊ฐ„(screen-space)์„ ๊ฐ–๋Š”๋ฐ์š”. ์ด ์Šคํฌ๋ฆฐ ๊ณต๊ฐ„ ๋‚ด์— 2์ฐจ์› ์ด๋ฏธ์ง€๊ฐ€ ๊ทธ๋ ค์งˆ ๋ทฐํฌํŠธ(view-port)๊ฐ€ ์ •์˜๋˜๋Š”๋ฐ NDC ๊ณต๊ฐ„์˜ ๋ฌผ์ฒด๋“ค์„ ์Šคํฌ๋ฆฐ ๊ณต๊ฐ„์œผ๋กœ ์ด์ „์‹œํ‚ค๋Š” ๋ณ€ํ™˜์„ ๋ทฐํฌํŠธ ๋ณ€ํ™˜์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.

์Šค์บ” ๋ณ€ํ™˜(scan transform)

์ด์ œ ๋ ˆ์Šคํ„ฐ๋ผ์ด์ €์˜ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์ธ ์Šค์บ”๋ณ€ํ™˜๋งŒ์ด ๋‚จ์•˜์Šต๋‹ˆ๋‹ค. ์ด์ „์˜ ๋ณ€ํ™˜๋“ค์€ ์ž์„ธํ•œ ์‚ฌํ•ญ์„ ๋ชฐ๋ผ๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š”๋ฐ ์žˆ์–ด ๋ณ„๋‹ค๋ฅธ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์ง€๋งŒ ์ด ์Šค์บ”๋ณ€ํ™˜์€ ๋žœ๋”๋ง ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฝค ์ค‘์š”ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์šฐ์„  ์Šค์บ”๋ณ€ํ™˜์ด๋ž€ ์‚ผ๊ฐํ˜• ํ•˜๋‚˜๊ฐ€ ๋‚ด๋ถ€์— ์ฐจ์ง€ํ•˜๋Š” ํ”„๋ ˆ๊ทธ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ๊ฐœ๋ณ„ ์‚ผ๊ฐํ˜•์ด ์ฐจ์ง€ํ•˜๋Š” ์Šคํฌ๋ฆฐ ๊ณต๊ฐ„์˜ ํ”ฝ์…€ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , ์‚ผ๊ฐํ˜•์˜ ์ •์ ๋ณ„ ์†์„ฑ์„ ๋ณด๊ฐ„(interpolation)ํ•˜์—ฌ ์ด๋ฅผ ๊ฐ ํ”ฝ์…€ ์œ„์น˜์— ํ• ๋‹นํ•˜๋Š” ์ผ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ •์ ๋ณ„ ์†์„ฑ์ด๋ž€ ํ”„๋กœ๊ทธ๋žจ๋งˆ๋‹ค ๋‹ค๋ฅด์ง€๋ฉด ๋Œ€์ฒด๋กœ position, uv, normal๊ณผ ๊ฐ™์€ ๊ฐ’์„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋ณด๊ฐ„ ๊ณผ์ •์€ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋–„๋ฌธ์— ๊ทธ์— ๊น”๋ฆฐ ์ˆ˜ํ•™์  ๋‚ด์šฉ์„ ๋ชฐ๋ผ๋„ ์ง€์žฅ์€ ์—†์ง€๋งŒ ๋Œ€์ถฉ ์„ค๋ช…ํ•˜์ž๋ฉด ์‚ผ๊ฐํ˜•์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ๋ณ€๋งˆ๋‹ค ๊ธฐ์šธ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ชจ์„œ๋ฆฌ๋ฅผ ๋”ฐ๋ผ ์„ ํ˜•๋ณด๊ฐ„(Linear Interpolation)ํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

· Pixel Shader

Fragment Shader๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ, ๋ž˜์Šคํ„ฐํ™”๋œ ๋„ํ˜•์— ํ…์Šค์ณ ๋งคํ•‘, ๋ฒ”ํ”„ ๋งคํ•‘, ๋…ธ๋ง ๋งคํ•‘ ๋“ฑ์˜ ๊ธฐ๋ฒ•์œผ๋กœ ํ…์Šค์ณ๋ฅผ ์ž…ํ˜€ ์ƒ‰์„ ํ‘œํ˜„ํ•œ๋‹ค. ๋˜ํ•œ, ์ •์ ์˜ ๋ฒ•์„  ๋ฒกํ„ฐ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์กฐ๋ช…(Lighting) ์ฒ˜๋ฆฌ๋„ ํ•ด๋‹น ์…ฐ์ด๋”์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

 

์ง€๊ธˆ๊นŒ์ง€ ํ•œ ๋‚ด์šฉ์„ ๋‹ค์‹œ ๋ณต์Šตํ•ด๋ณด์ž๋ฉด ์‘์šฉํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ถ€ํ„ฐ ์ •์ ๋ฒ„ํผ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ž…๋ ฅ์กฐ๋ฆฝ๊ธฐ์—์„œ ์ด ์ •์ ๋“ค์„ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ ๋‹จ์œ„๋กœ ์กฐ๋ฆฝํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์ •์ ์€ ์ •์  ๋ณ€ํ™˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๋ณ€ํ™˜๋˜์–ด ๋ ˆ์Šคํ„ฐ๋ผ์ด์ €๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋ ˆ์Šคํ„ฐํ™” ๋‹จ๊ณ„์—์„œ๋Š” ํด๋ฆฌํ•‘์„ ํ†ตํ•ด ํด๋ฆฌ๊ณค์„ ์ž˜๋ผ๋‚ด๊ณ , ๋’ท๋ฉด ์ œ๊ฑฐ๋ฅผ ํ†ตํ•ด ๋ณด์ด์ง€ ์•Š์„ ๋ฉด์„ ์ œ๊ฑฐํ•˜๊ณ , ์›๊ทผ ํˆฌ์˜ ๋‚˜๋ˆ—์…ˆ์„ ํ•˜์—ฌ ์›๊ทผ๋ฒ•์„ ๊ตฌํ˜„ํ•˜๊ณ , ๋ทฐํฌํŠธ ๋ณ€ํ™˜์„ ํ†ตํ•ด NDC์ƒ์˜ ๋ฌผ์ฒด๋“ค์„ ์Šคํฌ๋ฆฐ ๊ณต๊ฐ„์œผ๋กœ ์‚ฌ์ƒํ•˜๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ ์Šค์บ”๋ณ€ํ™˜์„ ํ†ตํ•ด ์‚ผ๊ฐํ˜•์„ ๊ตฌ์„ฑํ•˜๋Š” ์ •์ ๋ณ„ ์†์„ฑ์„ ๋ณด๊ฐ„ํ•˜์—ฌ ๋‚ด๋ถ€์˜ ํ”„๋ ˆ๊ทธ๋จผํŠธ๋“ค์—๊ฒŒ ํ• ๋‹นํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด์ œ๋Š” ๊ฐ๊ฐ์˜ ํ”„๋ ˆ๊ทธ๋จผํŠธ์˜ ์ƒ‰์ƒ์„ ๊ฒฐ์ •ํ•˜๋Š” ์ผ๋งŒ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค. ์กฐ๋ช…์„ ๊ณ„์‚ฐํ•œ๋‹ค๋˜๊ฐ€, ํ…์Šค์ณ๋ฅผ ์ž…ํžŒ๋‹ค๋˜๊ฐ€ ํ•˜๋Š” ์ž‘์—…์„ ํ†ตํ•ด ํ”„๋ž˜๊ทธ๋จผํŠธ๋ฅผ ์ƒ‰์น ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋ฐ”๋กœ ํ”„๋ž˜๊ทธ๋จผํŠธ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„๋ผ ํ•ฉ๋‹ˆ๋‹ค. Direct3D์˜ ์„ธ์ด๋” ํŒŒ์ดํ”„๋ผ์ธ์—์„œ๋Š” Pixel Shader ๋‹จ๊ณ„์—์„œ ์ด๋Ÿฌํ•œ ์ผ๋“ค์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ž˜๊ทธ๋จผํŠธ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ ํ™”๋ฉด์— ๊ทธ๋ ค์งˆ ๋ชจ๋“  ํ”„๋ ˆ๊ทธ๋จผํŠธ์˜ ์ƒ‰์ƒ์„ ๊ฒฐ์ •ํ•œ ๋’ค์—๋Š” ์ถœ๋ ฅ ๋ณ‘ํ•ฉ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค. ์ถœ๋ ฅ ๋ณ‘ํ•ฉ ๋‹จ๊ณ„์—์„œ๋Š” ๊นŠ์ด-์Šคํ…์‹ค ํ…Œ์ŠคํŠธ์™€ ๋ธ”๋žœ๋”ฉ(์ถ”๊ฐ€์ ์œผ๋กœ ์•ŒํŒŒ ๋ธ”๋ Œ๋”ฉ๋„ ๊ฐ€๋Šฅ)์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

 

 

 

๋Œ“๊ธ€