*์ธํ๋ฐ <๊ฒ์ ์์ง์ ์งํฑํ๋ ๊ฒ์์ํ, ์ด๋์ฐ ๊ต์๋> ๊ฐ์๋ฅผ ๋ฃ๊ณ ๊ณต๋ถํ ๊ธ์ ๋๋ค.
1. ๊น์ด ๋ฒํผ(Depth Buffer)
๊น์ด ๋ฒํผ(Depth Buffer)๋ ์นด๋ฉ๋ผ๋ก๋ถํฐ ์ผ๋ง๋ ๊น์ ๊ณณ์ ์๋์ง๋ ํ์ ํ ์ ์๋ ๋ฐ์ดํฐ๋ผ๊ณ ํ ์ ์์ต๋๋ค. 3์ฐจ์ ๊ณต๊ฐ์์ ๋ค์์ ๋ฌผ์ฒด๋ค์ ๊ทธ๋ฆด ๋, ๊ทธ๋ฆฌ๋ ์์๋ฅผ ๊ณ ๋ คํ์ง ์์ผ๋ฉด ์ด๋ค ๋ฌผ์ฒด๊ฐ ์์ ์๊ณ ๋ค์ ์๋์ง ๊ตฌ๋ถํ ์๊ฐ ์์ต๋๋ค. ์์ ์์ด์ผ ํ ๋ฌผ์ฒด(1)๊ฐ ๋จผ์ ๊ทธ๋ ค์ง๊ณ , ๋ค์ ์์ด์ผ ํ ๋ฌผ์ฒด(2)๊ฐ ๋์ค์ ๊ทธ๋ ค์ง๋ฉด, ์ฌ์ค์ ์ฐ๋ฆฌ ๋์ผ๋ก ๋ดค์ ๋๋ (1) ๋ฌผ์ฒด๊ฐ (2) ๋ค์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ด์ฃ .
์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ ๊ฐ ๋ฌผ์ฒด๋ง๋ค ์นด๋ฉ๋ผ๋ก๋ถํฐ ์ผ๋งํผ ๋ค์ ์๋์ง์ ๋ํ ๊ธฐ์ค์น๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฌํ ๊ธฐ์ค์น๋ฅผ ์ ํ๊ธฐ ์ํด ๊น์ด ๋ฒํผ๋ผ๋ ๊ฒ์ ๋์ ํ์ผ๋ฉฐ, ์ด ๊น์ด ๋ฒํผ ๊ฐ์ ๋ฐ๋ผ ๋ค์ ์๋ ๋ฌผ์ฒด๊ฐ ์์ ์๋ ๋ฌผ์ฒด๋ฅผ ๋ฎ์ด ์ฐ์ง ์๊ฒ ํฝ์ ๋ณ๋ก ๊ณ์ฐํด ์ ์ฉํจ์ผ๋ก์จ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊น์ด ๋ฒํผ๋ฅผ ๊ตฌํํ ์ ์๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก Z-Buffer ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค. ์ด ๊ธ์์๋ ๊น์ด ๋ฒํผ ๊ตฌํ ๋ด์ฉ์ ๋ํด์ ๋ค๋ฃจ์ง ์๊ณ , ๊น์ด ๋ฒํผ ๊ฐ์ ์ด๋ป๊ฒ ๊ณ์ฐํ๋ ์ง์ ๋ํด์๋ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1) ์ ๋์ฒด(Frustum)
์นด๋ฉ๋ผ์ ํ๊ฐ(Field of View)์ด ์ง์ ๋๋ฉด, ์นด๋ฉ๋ผ์์ ํ๊ฐ์ผ๋ก ๋ฌดํ๋๋ก ํผ์ณ์ง ๊ฒ๋๋ค. ์ฌ์ ๊ณต๊ฐ(Projective Space)์์๋ \(z\) ๊ฐ์ด \(x, \ y\) ๊ฐ์ ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์, \(z\) ๊ฐ์ด ์ปค์ง์ ๋ฐ๋ผ \(x, \ y\) ๊ฐ๋ ๋์ด๋๊ธฐ ๋๋ฌธ์ด์ฃ .
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ๋ฌดํ๋์ ์์ญ์์ ๊น์ด ๊ฐ์ ์ฐ์ถํ๊ธฐ ๋ณด๋ค๋, NDC ์ขํ๊ณ์ฒ๋ผ ์ผ์ ํ ๋ฒ์๋ฅผ ๋๋ ๊ฒ๋๋ค. ๋ฌดํ๋๋ก ํผ์ณ์ง ์ฌ์ ๊ณต๊ฐ์์ ์์์ ๊ณผ ๋ ์ ์ ์ฃผ๊ณ , ์ด ์์ญ๋ง ๋ฑ ์๋ผ์ ์ด ๊ณต๊ฐ์ ์ํ ๋ด์ฉ๋ค๋ง ๊ทธ๋ฆฌ๋ ๊ฒ๋๋ค. ์ด๋ ๊ฒ ์์์ ๊ณผ ๋ ์ ์ ์๋ฅด๊ฒ ๋๋ฉด ํผ๋ผ๋ฏธ๋ ๊ผญ๋๊ธฐ ๋ถ๋ถ์ ๊ฐ๋ก๋ก ์๋ฅธ ๋ฏํ ๋ํ์ด ๋์ค๊ฒ ๋๋๋ฐ, ์ด๋ฅผ ์ ๋์ฒด(Frustum)๋ผ๊ณ ๋ถ๋ฅด์ฃ .
์ด ์ ๋์ฒด์ ์์์ ์ ๊ทผ ํ๋ฉด(Near Plane), ๋ ์ ์ ์ ํ๋ฉด(Far Plane) ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ทผ ํ๋ฉด์ ๊น์ด ๊ฐ์ -1, ์ ํ๋ฉด์ ๊น์ด ๊ฐ์ 1์ ์ฃผ๊ธฐ์, ์ด ์ ๋์ฒด ๋ด์ ์ํ ๋ฌผ์ฒด๋ค์ ๊น์ด ๊ฐ์ \(-1 \sim \ 1\) ์ ๋ฒ์๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ์ ๋์ฒด์ ๊ทผ ํ๋ฉด๊ณผ ์ ํ๋ฉด ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก NDC ์ขํ๊ณ๋ฅผ ํ์ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ชจ์์ด ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ณดํต ๊น์ด ๊ฐ์ ๊ณ์ฐํ ๋, ์ด๋ฏธ์ง๋ก ๋ํ๋ด๋ ํํ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฏธ์ง๋ผ๋ ๊ฒ์ ๊ฒฐ๊ตญ์๋ ์์ ์ ๋ณด๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์์์ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ด๋์ค(-) ๊ฐ์ด๋ผ๋ ๊ฒ ์กด์ฌํ์ง ์์ต๋๋ค. ์ด๋ฏธ์ง์์ 0์ ์ฃผ๋ก ๊ฒ์์, 1์ ํฐ์์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ์ ์์ ๋น๋กฏํ์ฌ, DirectX๋ 0 ~ 1๊น์ง์ ์์ ํํ์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด, ๊ทผ ํ๋ฉด ๊ฐ์ -1์ด ์๋ 0๋ถํฐ ์์ํฉ๋๋ค.
2) ๊ณต๊ฐ์ ์ขํ๊ณ
์ค๋ฅธ์ ์ขํ๊ณ๋ฅผ ์ฌ์ฉํ๋ ๋ทฐ ๊ณต๊ฐ์ ๊ฒฝ์ฐ, ์นด๋ฉ๋ผ ์์ ์๋ ๋ฌผ์ฒด๋ค์ \(z\) ์ถ ๊ฐ์ ํญ์ ๋ง์ด๋์ค(-) ๊ฐ์ด๋ฉฐ, ์นด๋ฉ๋ผ๋ก๋ถํฐ ๋ฉ์ด์ง์๋ก \(z\) ์ถ ๊ฐ์ด ์์์ง๋๋ค. ํ์ง๋ง, ์์์ ๊ตฌ์ฑํ 3์ฐจ์ NDC ๊ณต๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ฌผ์ฒด๊ฐ ์นด๋ฉ๋ผ๋ณด๋ค ์์ ์์ ๋ ์์์ \(z\) ๊ฐ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
์ด ์ด์ผ๊ธฐ๋ NDC ๊ณต๊ฐ์์๋ ์ผ์ ์ขํ๊ณ๋ฅผ ์ฌ์ฉํ๋ค๋ ์๋ฏธ๋ก ๋ฐ์๋ค์ผ ์ ์์ต๋๋ค.
์ด ๋๊น์ง ์ฌ์ฉํ๋ ๊ณต๊ฐ์ ๋ํ ์ขํ๊ณ ๋ณต์ต ์๊ฐ
- ๋ก์ปฌ ๊ณต๊ฐ(Local Space) : ๋ชจ๋ธ๋ง ํ๋ก๊ทธ๋จ์ ๋ฐ๋ผ ์ด๊ธฐ ์ค์ ์ด ๋๊ณ , FBX๋ก ๋ณํ๋์ด ๊ฒ์ ์์ง์ ๋ค์ด์ค๋ฉด ๊ฒ์ ์์ง์ด ์ง์ ํ ์ขํ๊ณ๋ก ๋ณ๊ฒฝ๋๋ค.
- ์๋ ๊ณต๊ฐ(World Space) : ๊ฒ์ ์์ง์ด ์ง์ ํ ์ขํ๊ณ ์ฌ์ฉ
- ๋ทฐ ๊ณต๊ฐ(View Space) : ๋๋ถ๋ถ์ ๊ฒ์ ์์ง๋ค์ ์ค๋ฅธ์ ์ขํ๊ณ๋ฅผ ์ฌ์ฉ
- ํด๋ฆฝ ๊ณต๊ฐ(Clip Space) : ์ผ์ ์ขํ๊ณ ์ฌ์ฉ
๐๐ป ์๊ทผ ํฌ์ ํ๋ ฌ์ ์ค๊ณํ ๋ \(z\) ๊ฐ์๋ค๊ฐ -1์ ๊ณฑํ๊ธฐ ๋๋ฌธ - NDC ๊ณต๊ฐ(Normalized Device Coordinate Space) : ์ผ์ ์ขํ๊ณ ์ฌ์ฉ
2. ์ต์ข ์๊ทผ ํฌ์ ํ๋ ฌ
๊ธฐ์กด์ ์ฌ์ฉํ๋ ํ๋ ฌ์ \(4 \times 4\) ํฌ๊ธฐ๋ฅผ ๋ง์ถฐ์ฃผ๊ธฐ ์ํด, ์ฌ์ฉํ์ง ์๋ ํ ํ(row)์ ์ฌ์ฉํ์ฌ ์๊ทผ ํฌ์ ํ๋ ฌ์ ๊ตฌ์ฑํ์์ต๋๋ค.
$$ P=\left[\begin{matrix}\frac{d}{a}&0&0&0\\0&d&0&0\\0&0&-1&0\\0&0&0&1\\\end{matrix}\right] $$
์ด์ ๊น์ด ๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํด, \(z\) ์ถ ํ์ ํด๋นํ๋ 3๋ฒ์งธ ํ์๋ค๊ฐ ๋ฏธ์ง์(\(i, \ j, \ k, \ l\))๋ฅผ ๋ฃ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
$$ P\cdot\ v_{view}=\left[\begin{matrix}\frac{d}{a}&0&0&0\\0&d&0&0\\i&j&k&l\\0&0&-1&0\\\end{matrix}\right]\left[\begin{matrix}v_x\\v_y\\v_z\\1\\\end{matrix}\right]=\left[\begin{matrix}\frac{d}{a}\cdot v_x\\d\cdot v_y\\?\\-v_z\\\end{matrix}\right] $$
๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๊ฐ ๊ณ์ฐํ๋ ๊ฒ์ ๊น์ด ๊ฐ์ด์ฃ . ๊น์ด ๊ฐ์ \(z\) ์ถ์ ํด๋นํ๋ฉฐ, ์ด๋ \(x, \ y\) ์ถ์ ์ง๊ตํ๊ธฐ ๋๋ฌธ์ \(x, \ y\) ๊ฐ๋ค์ ๊น์ด ๊ฐ์ ์ ํ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๋ฐ๋ผ์, \(x, \ y\) ๊ฐ๋ค์ 0์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ฃ .
$$ P\cdot\ v_{view}=\left[\begin{matrix}\frac{d}{a}&0&0&0\\0&d&0&0\\0&0&k&l\\0&0&-1&0\\\end{matrix}\right]\left[\begin{matrix}v_x\\v_y\\v_z\\1\\\end{matrix}\right]=\left[\begin{matrix}\frac{d}{a}\cdot v_x\\d\cdot v_y\\?\\-v_z\\\end{matrix}\right] $$
์ด์ \(k, \ l\) ๊ฐ์ ๊ตฌํด์ผ ํ๋๋ฐ, ์ด๊ฒ์ ๊ทผ ํ๋ฉด๊ณผ ์ ํ๋ฉด์ ํน์ง์ ์ฌ์ฉํ์ฌ ๊ตฌํ ์ ์์ต๋๋ค. \(k, \ l\) ์ ๊ตฌํ ์ ์๊ฒ, ๊ทผ ํ๋ฉด๊ณผ ์ ํ๋ฉด์์ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ป์ด์ฃผ๋ ๊ฒ์ด์ฃ .
๊ทผ ํ๋ฉด๊ณผ ์ ํ๋ฉด์ ๊ฐ๋ค์ ์ฌ์ฉ์๊ฐ ์ง์ ํด์ฃผ๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์์๋ผ๊ณ ๋ณผ ์ ์๊ณ , ๊ทผ ํ๋ฉด์ ๋ํ ๊ฐ์ \(n\), ์ ํ๋ฉด์ ๋ํ ๊ฐ์ \(f\) ๋ก ์คฌ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํํํ ์ ์์ต๋๋ค.
NDC ์ขํ๊ณ์์๋ \(-1 \sim 1\) ์ ๋ฒ์๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์, \( (0, \ 0, \ -n) \rightarrow (0, \ 0, \ -1) \) ์ด ๋๊ณ , \( (0, \ 0, \ -f) \rightarrow (0, \ 0, \ 1) \) ์ด ๋ฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด, \(k, \ l\) ์ ๊ตฌํด๋ด ์๋ค.
$$ P=\left[\begin{matrix}\frac{d}{a}&0&0&0\\0&d&0&0\\0&0&k&l\\0&0&-1&0\\\end{matrix}\right]\left[\begin{matrix}0\\0\\-n\\1\\\end{matrix}\right]=\left[\begin{matrix}0\\0\\?\\n\\\end{matrix}\right] $$
$$ P=\left[\begin{matrix}\frac{d}{a}&0&0&0\\0&d&0&0\\0&0&k&l\\0&0&-1&0\\\end{matrix}\right]\left[\begin{matrix}0\\0\\-f\\1\\\end{matrix}\right]=\left[\begin{matrix}0\\0\\?\\f\\\end{matrix}\right] $$
์ ํ๋ ฌ์ ๊ณฑํด์ ธ์ ๋์จ ๊ฒฐ๊ณผ์ ๋ค ๋ฒ์งธ ์์๋ ํ๋ ฌ ๊ณฑ์ ํตํด ์ป์ ๊ฒฐ๊ณผ์ด๋, ๊ฐ๊ฐ \(n, \ f\) ์ธ ๊ฒ์ ํ์คํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, \( ? \) ํ์๋ ๋ถ๋ถ์ ๊ตฌํด์ผ ํ๋๋ฐ, ์ฌ๊ธฐ์ ์๊ฐํด ๋ณผ ๊ฒ์ ์ ํ๋ ฌ์ ๊ณฑํด์ ๋์จ ๊ฒฐ๊ณผ๋ ํด๋ฆฝ ๊ณต๊ฐ์ ์ขํ๋ผ๋ ๊ฒ๋๋ค.
์์์ ์ป์๋ ๊ทผ ํ๋ฉด๊ณผ ์ ํ๋ฉด์ ์ํ ๋ฐ์ดํฐ์ NDC ๊ณต๊ฐ \(z\) ์ขํ๋ ๊ฐ๊ฐ \(-1, \ 1\) ์ด์์ต๋๋ค.
ํด๋ฆฝ ๊ณต๊ฐ์์ NDC ๊ณต๊ฐ์ผ๋ก ๋ณํํ ๋, ๋ง์ง๋ง ์ฐจ์์ ๊ฐ์ผ๋ก ๋๋ ์ฃผ์๋ ๊ฑธ ๊ธฐ์ตํ์๋์?
๊ทผ ํ๋ฉด์์๋ ๋ง์ง๋ง ์ฐจ์์ ๊ฐ์ธ \(n\) ์ผ๋ก ๋๋์์ ๋, \(z = -1\) ์ด ๋์ด์ผ ํ๋, ์ธ ๋ฒ์งธ ์์ \(? = -n\) ์ด ๋์ด์ผ ํฉ๋๋ค.
์ ํ๋ฉด์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ง์ง๋ง ์ฐจ์์ ๊ฐ์ธ \(f\) ๋ก ๋๋์์ ๋, \(z = 1\) ์ด ๋์ด์ผ ํ๋, ์ธ ๋ฒ์งธ ์์ \( ? = f\) ๊ฐ ๋์ด์ผ ํ์ฃ .
์ด์ ๋ฐ๋ผ, ๊ทผ ํ๋ฉด๊ณผ ์ ํ๋ฉด์ ๊ฐ๊ฐ ํด๋ฆฝ ์ขํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$ (0, \ 0, -n, \ n) $$
$$ (0, \ 0, \ f, \ f) $$
์ด์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๊ทผ ํฌ์ ํ๋ ฌ์ ๊ตฌ์ฑํ๋ ๋ ๊ฐ์ ๋ฏธ์ง์ \(k, \ l\)์ ๊ตฌํ ์ ์๋ ์์ ๋ง๋ค ์ ์๊ฒ ๋ฉ๋๋ค.
$$ P=\left[\begin{matrix}\frac{d}{a}&0&0&0\\0&d&0&0\\0&0&k&l\\0&0&-1&0\\\end{matrix}\right]\left[\begin{matrix}0\\0\\-n\\1\\\end{matrix}\right]=\left[\begin{matrix}0\\0\\-n\\n\\\end{matrix}\right] $$
$$ P=\left[\begin{matrix}\frac{d}{a}&0&0&0\\0&d&0&0\\0&0&k&l\\0&0&-1&0\\\end{matrix}\right]\left[\begin{matrix}0\\0\\-f\\1\\\end{matrix}\right]=\left[\begin{matrix}0\\0\\f\\f\\\end{matrix}\right] $$
์ด๋ก๋ถํฐ ๋ค์๊ณผ ๊ฐ์ ์ฐ๋ฆฝ ๋ฐฉ์ ์์ ๊ตฌํ ์ ์์ต๋๋ค.
$$ \begin{cases} -kn + l = -n \\ -kf + l = f \end{cases} $$
๊ฐ๊ฐ์ ํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด \(k, \ l\) ๊ฐ์ ๊ณ์ฐํ ์ ์์ต๋๋ค.
$$ k=\frac{-(n+f)}{(-n+f)}=\frac{n+f}{n-f} $$
$$ l=\frac{2nf}{(n-f)} $$
์ด๋ฅผ ํ๋ ฌ์ ์ ์ฉํ๋ฉด, ์ด์ ๊น์ด ๊ฐ์ด ์ ์ฉ๋ ๋ค์๊ณผ ๊ฐ์ ์๊ทผ ํฌ์ ํ๋ ฌ์ ์ป์ ์ ์์ต๋๋ค.
$$ P=\left[\begin{matrix}\frac{d}{a}&0&0&0\\0&d&0&0\\0&0&\frac{n+f}{n-f}&\frac{2nf}{n-f}\\0&0&-1&0\\\end{matrix}\right] $$
'๐ฎGame Development > Game Mathemathics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ฒ์ ์ํ] #20 | ์๊ทผ ํฌ์(Perspective Projection) (2) | 2023.12.06 |
---|---|
[๊ฒ์ ์ํ] #19 | ๋ฒกํฐ์ ์ธ์ (Cross Product) (2) | 2023.12.05 |
[๊ฒ์ ์ํ] #18 | ์ค์ผ๋ฌ ๊ฐ(Euler angle) (2) | 2023.12.04 |
[๊ฒ์ ์ํ] # 17 | 3์ฐจ์ ๊ณต๊ฐ (4) | 2023.11.30 |
[๊ฒ์ ์ํ] #16 | ๋ทฐ ๊ณต๊ฐ(View Space) (2) | 2023.11.29 |