๋ ๋๋ง ํ์ดํ๋ผ์ธ
๋ ๋๋ง ํ์ดํ๋ผ์ธ(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,} ์๋ฐ์์ผ๋ก ์ ์ ์ ์ด๋ค ์์๋ก ๊ทธ๋ ค์ผ ํ๋์ง ์๋ ค์ฃผ๋ ๋ชฉ๋ก์ ์ ๊ณตํ๋ฉด ์์์ ์ค๋ช ํ ๋ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์ธ๋ฑ์ค ๋ฒํผ๋ฅผ ์์ฑํ๋๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋๋ฐ ์ด๊ฒ์ ๋ญ๋น๊ฐ ์๋๋๊ณ ์๊ฐ ํ ์๋ ์๊ฒ ์ง๋ง
- ์ธ๋ฑ์ค๋ฒํผ๋ ๊ทธ๋ฅ ์ ์์ด๊ธฐ ๋๋ฌธ์ ์์น,์๊น,๋ฒ์ ,UV๋ฑ๋ฑ์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ ์ ์ ๊ตฌ์กฐ์ฒด๋ณด๋ค ํจ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ ๋ณ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ฐ๋ค๊ฐ
- ์ค๋ณต๋๋ ์ ์ ์ ๋ํด์ ์ค๋ณต๋ 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์ฐจ์ ์ผ๊ฐํ์ ์ธ ์ ์ ์ขํ๊ฐ ๊ฒฐ์ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ์ผ์ด๋ฉ๋๋ค.
- ์ด ์ผ๊ฐํ์ด ํฌํจํ๋ ๋ชจ๋ ํฝ์ ๋ง๋ค ํฝ์ ์ ฐ์ด๋๊ฐ ์์ฑ๋๋ค.
- ์ผ๊ฐํ์ ์ธ ์ ์ ์ ํ ๋น๋์๋ ์ฌ๋ฌ ๋ฐ์ดํฐ(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 ๋จ๊ณ์์ ์ด๋ฌํ ์ผ๋ค์ ์ํํฉ๋๋ค.
ํ๋๊ทธ๋จผํธ ์ฒ๋ฆฌ ๋จ๊ณ์์ ํ๋ฉด์ ๊ทธ๋ ค์ง ๋ชจ๋ ํ๋ ๊ทธ๋จผํธ์ ์์์ ๊ฒฐ์ ํ ๋ค์๋ ์ถ๋ ฅ ๋ณํฉ ๋จ๊ณ๋ก ๋์ด๊ฐ๋๋ค. ์ถ๋ ฅ ๋ณํฉ ๋จ๊ณ์์๋ ๊น์ด-์คํ ์ค ํ ์คํธ์ ๋ธ๋๋ฉ(์ถ๊ฐ์ ์ผ๋ก ์ํ ๋ธ๋ ๋ฉ๋ ๊ฐ๋ฅ)์ด ์ผ์ด๋ฉ๋๋ค.
'๐ Development Study > ๐ผ GameProgramming 2D' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Mesh, MeshRenderer (0) | 2022.12.21 |
---|---|
Constant Buffer(์์ ๋ฒํผ), Index Buffer(์ธ๋ฑ์ค ๋ฒํผ) (1) | 2022.12.08 |
Drawing a Triangle (0) | 2022.12.06 |
DirectX11 Initilize (0) | 2022.11.29 |
YamYamEngine ์ด๊ธฐํ ๊ทธ๋ฆฌ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2022.11.21 |
๋๊ธ