WebGL ์ค์๊ฐ ๊ทธ๋ฆผ์ ๋ ๋๋ง์ ํต์ฌ ๊ฐ๋ ๊ณผ ๊ณ ๊ธ ๊ธฐ๋ฒ์ ๋ฐฐ์๋ณด์ธ์. ์ด ๊ฐ์ด๋๋ ์๋์ฐ ๋งคํ, PCF, CSM ๋ฐ ์ผ๋ฐ์ ์ธ ์ํฐํฉํธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค.
WebGL ์๋์ฐ ๋งคํ: ์ค์๊ฐ ๋ ๋๋ง์ ์ํ ์ข ํฉ ๊ฐ์ด๋
3D ์ปดํจํฐ ๊ทธ๋ํฝ์ค ์ธ๊ณ์์ ๊ทธ๋ฆผ์๋งํผ ํ์ค๊ฐ๊ณผ ๋ชฐ์ ๊ฐ์ ํฌ๊ฒ ๊ธฐ์ฌํ๋ ์์๋ ๊ฑฐ์ ์์ต๋๋ค. ๊ทธ๋ฆผ์๋ ๊ฐ์ฒด ๊ฐ์ ๊ณต๊ฐ์ ๊ด๊ณ, ๊ด์์ ์์น, ์ฌ์ ์ ๋ฐ์ ์ธ ๊ธฐํํ์ ๊ตฌ์กฐ์ ๋ํ ์ค์ํ ์๊ฐ์ ๋จ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฆผ์๊ฐ ์๋ค๋ฉด 3D ์ธ๊ณ๋ ํ๋ฉด์ ์ด๊ณ , ๋จ์ ๋๊ณ , ์ธ์์ ์ผ๋ก ๋๊ปด์ง ์ ์์ต๋๋ค. WebGL๋ก ๊ตฌ๋๋๋ ์น ๊ธฐ๋ฐ 3D ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ณ ํ์ง์ ์ค์๊ฐ ๊ทธ๋ฆผ์๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์ ๋ฌธ๊ฐ ์์ค์ ๊ฒฝํ์ ๋ณด์ฌ์ฃผ๋ ํน์ง์ ๋๋ค. ์ด ๊ฐ์ด๋๋ ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๊ฐ์ฅ ๊ทผ๋ณธ์ ์ด๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ธฐ๋ฒ์ธ ์๋์ฐ ๋งคํ์ ๋ํด ์ฌ์ธต์ ์ผ๋ก ๋ค๋ฃน๋๋ค.
์๋ จ๋ ๊ทธ๋ํฝ์ค ํ๋ก๊ทธ๋๋จธ์ด๋ 3์ฐจ์์ ์ธ๊ณ๋ก ๋ง ์ ๋ฌธํ ์น ๊ฐ๋ฐ์์ด๋ , ์ด ๊ธ์ ์ฌ๋ฌ๋ถ์ด WebGL ํ๋ก์ ํธ์์ ์ค์๊ฐ ๊ทธ๋ฆผ์๋ฅผ ์ดํดํ๊ณ , ๊ตฌํํ๋ฉฐ, ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ํ์ํ ์ง์์ ์ ๊ณตํ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ํต์ฌ ์ด๋ก ๋ถํฐ ์ค์ ๊ตฌํ ์ธ๋ถ ์ฌํญ๊น์ง ์ฌ์ ์ ๋ ๋๋ฉฐ, ์ผ๋ฐ์ ์ธ ํจ์ ๊ณผ ์ต์ ๊ทธ๋ํฝ์ค ์์ง์์ ์ฌ์ฉ๋๋ ๊ณ ๊ธ ๊ธฐ๋ฒ๋ค์ ํ๊ตฌํ ๊ฒ์ ๋๋ค.
1์ฅ: ์๋์ฐ ๋งคํ์ ๊ธฐ๋ณธ ์๋ฆฌ
ํต์ฌ์ ์ผ๋ก, ์๋์ฐ ๋งคํ์ "์ด ์ง์ ์ด ๊ด์์์ ๋ณด์ด๋์?"๋ผ๋ ๊ฐ๋จํ ์ง๋ฌธ์ ํตํด ์ฌ์ ํ ์ง์ ์ด ๊ทธ๋ฆผ์ ์์ ์๋์ง ํ๋จํ๋ ์๋ฆฌํ๊ณ ์ฐ์ํ ๊ธฐ๋ฒ์ ๋๋ค. ๋ง์ฝ ๋๋ต์ด '์๋์ค'๋ผ๋ฉด, ๋ฌด์ธ๊ฐ๊ฐ ๋น์ ๋ง๊ณ ์๋ค๋ ๋ป์ด๋ฉฐ, ๊ทธ ์ง์ ์ ๊ทธ๋ฆผ์ ์์ ์์ด์ผ ํฉ๋๋ค. ์ด ์ง๋ฌธ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๋ตํ๊ธฐ ์ํด, ์ฐ๋ฆฌ๋ 2-ํจ์ค ๋ ๋๋ง ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
์๋์ฐ ๋งคํ์ด๋ ๋ฌด์์ธ๊ฐ? ํต์ฌ ๊ฐ๋
์ ์ฒด ๊ธฐ๋ฒ์ ์ฌ์ ๋ ๋ฒ, ๊ฐ๊ฐ ๋ค๋ฅธ ์์ ์์ ๋ ๋๋งํ๋ ๊ฒ์ ์ค์ฌ์ผ๋ก ์งํ๋ฉ๋๋ค:
- 1๋จ๊ณ: ๋์ค ํจ์ค (๊ด์์ ์์ ). ๋จผ์ , ๊ด์์ ์ ํํ ์์น์ ๋ฐฉํฅ์์ ์ ์ฒด ์ฌ์ ๋ ๋๋งํฉ๋๋ค. ํ์ง๋ง ์ด ํจ์ค์์๋ ์์์ด๋ ํ ์ค์ฒ๋ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ํ์ํ ์ ์ผํ ์ ๋ณด๋ ๊น์ด(depth)์ ๋๋ค. ๋ ๋๋ง๋ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํด ๊ด์์ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ์ด ๊น์ด ๊ฐ๋ค์ ์งํฉ์ ์๋์ฐ ๋งต ๋๋ ๋์ค ๋งต์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ํน๋ณํ ํ ์ค์ฒ์ ์ ์ฅ๋ฉ๋๋ค. ์ด ๋งต์ ๊ฐ ํฝ์ ์ ํน์ ๋ฐฉํฅ์์ ๊ด์์ ์์ ์ผ๋ก ๋ดค์ ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ฒด๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ ๋๋ค.
- 2๋จ๊ณ: ์ฌ ํจ์ค (์นด๋ฉ๋ผ์ ์์ ). ๋ค์์ผ๋ก, ์ฃผ ์นด๋ฉ๋ผ์ ์์ ์์ ํ์์ฒ๋ผ ์ฌ์ ๋ ๋๋งํฉ๋๋ค. ํ์ง๋ง ๊ทธ๋ ค์ง๋ ๋ชจ๋ ๋จ์ผ ํฝ์ ์ ๋ํด ์ถ๊ฐ์ ์ธ ๊ณ์ฐ์ ์ํํฉ๋๋ค. ํด๋น ํฝ์ ์ 3D ๊ณต๊ฐ์ ์์น๋ฅผ ๊ฒฐ์ ํ ๋ค์, "์ด ์ง์ ์ ๊ด์์ผ๋ก๋ถํฐ ์ผ๋ง๋ ๋จ์ด์ ธ ์๋๊ฐ?"๋ฅผ ๋ฌป์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ๊ฑฐ๋ฆฌ๋ฅผ ์ฐ๋ฆฌ ์๋์ฐ ๋งต(1๋จ๊ณ์์ ์์ฑ)์ ํด๋น ์์น์ ์ ์ฅ๋ ๊ฐ๊ณผ ๋น๊ตํฉ๋๋ค.
๋ ผ๋ฆฌ๋ ๊ฐ๋จํฉ๋๋ค:
- ํฝ์ ์ ํ์ฌ ๊ด์์ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ๊ฐ ์๋์ฐ ๋งต์ ์ ์ฅ๋ ๊ฑฐ๋ฆฌ๋ณด๋ค ๋ ํฌ๋ค๋ฉด, ๊ทธ๊ฒ์ ๊ฐ์ ์์ ์์ ๊ด์์ ๋ ๊ฐ๊น์ด ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ํ์ฌ ํฝ์ ์ ๊ทธ๋ฆผ์ ์์ ์์ต๋๋ค.
- ํฝ์ ์ ๊ฑฐ๋ฆฌ๊ฐ ์๋์ฐ ๋งต์ ๊ฑฐ๋ฆฌ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค๋ฉด, ๊ทธ๊ฒ์ ์๋ฌด๊ฒ๋ ๊ฐ๋ก๋ง๊ณ ์์ง ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ํฝ์ ์ ์์ ํ ๋น์ ๋ฐ์ต๋๋ค.
์ฌ ์ค์ ํ๊ธฐ
WebGL์์ ์๋์ฐ ๋งคํ์ ๊ตฌํํ๋ ค๋ฉด ๋ช ๊ฐ์ง ํต์ฌ ๊ตฌ์ฑ ์์๊ฐ ํ์ํฉ๋๋ค:
- ๊ด์: ์ง์ฌ๊ด(ํ์๊ณผ ๊ฐ์), ์ ๊ด์(์ ๊ตฌ์ ๊ฐ์), ๋๋ ์คํฌํธ๋ผ์ดํธ๊ฐ ๋ ์ ์์ต๋๋ค. ๊ด์์ ์ข ๋ฅ์ ๋ฐ๋ผ ๋์ค ํจ์ค ๋์ ์ฌ์ฉ๋๋ ํฌ์ ํ๋ ฌ์ ์ข ๋ฅ๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค.
- ํ๋ ์๋ฒํผ ๊ฐ์ฒด(FBO): WebGL์ ๋ณดํต ํ๋ฉด์ ๊ธฐ๋ณธ ํ๋ ์๋ฒํผ์ ๋ ๋๋งํฉ๋๋ค. ์ฐ๋ฆฌ์ ์๋์ฐ ๋งต์ ๋ง๋ค๊ธฐ ์ํด์๋ ํ๋ฉด ๋ฐ์ ๋ ๋ ํ๊ฒ์ด ํ์ํฉ๋๋ค. FBO๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ฉด ๋์ ํ ์ค์ฒ์ ๋ ๋๋งํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ์ FBO๋ ๋์ค ํ ์ค์ฒ ์ฒจ๋ถ ํ์ผ๋ก ๊ตฌ์ฑ๋ ๊ฒ์ ๋๋ค.
- ๋ ์ธํธ์ ์ ฐ์ด๋: ๋์ค ํจ์ค๋ฅผ ์ํ ์ ฐ์ด๋ ํ๋ก๊ทธ๋จ(๋งค์ฐ ๊ฐ๋จํจ)๊ณผ ์ต์ข ์ฌ ํจ์ค๋ฅผ ์ํ ์ ฐ์ด๋ ํ๋ก๊ทธ๋จ(๊ทธ๋ฆผ์ ๊ณ์ฐ ๋ก์ง์ ํฌํจ)์ด ํ์ํฉ๋๋ค.
- ํ๋ ฌ: ์นด๋ฉ๋ผ๋ฅผ ์ํ ํ์ค ๋ชจ๋ธ, ๋ทฐ, ํฌ์ ํ๋ ฌ์ด ํ์ํฉ๋๋ค. ๊ฒฐ์ ์ ์ผ๋ก, ๊ด์์ ์ํ ๋ทฐ ๋ฐ ํฌ์ ํ๋ ฌ๋ ํ์ํ๋ฉฐ, ์ข ์ข ๋จ์ผ "๋ผ์ดํธ ๊ณต๊ฐ ํ๋ ฌ"๋ก ๊ฒฐํฉ๋ฉ๋๋ค.
2์ฅ: 2-ํจ์ค ๋ ๋๋ง ํ์ดํ๋ผ์ธ ์์ธ
๋ ๋ ๋๋ง ํจ์ค๋ฅผ ํ๋ ฌ๊ณผ ์ ฐ์ด๋์ ์ญํ ์ ์ด์ ์ ๋ง์ถฐ ๋จ๊ณ๋ณ๋ก ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค.
1๋จ๊ณ: ๋์ค ํจ์ค (๊ด์์ ์์ )
์ด ํจ์ค์ ๋ชฉํ๋ ๋์ค ํ ์ค์ฒ๋ฅผ ์ฑ์ฐ๋ ๊ฒ์ ๋๋ค. ์๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- FBO ๋ฐ์ธ๋ฉ: ๊ทธ๋ฆฌ๊ธฐ ์ ์ WebGL์๊ฒ ์บ๋ฒ์ค ๋์ ์ฌ์ฉ์ ์ง์ FBO์ ๋ ๋๋งํ๋๋ก ์ง์ํฉ๋๋ค.
- ๋ทฐํฌํธ ์ค์ : ๋ทฐํฌํธ ํฌ๊ธฐ๋ฅผ ์๋์ฐ ๋งต ํ ์ค์ฒ์ ํฌ๊ธฐ(์: 1024x1024 ํฝ์ )์ ์ผ์น์ํต๋๋ค.
- ๋์ค ๋ฒํผ ์ด๊ธฐํ: ๋ ๋๋ง ์ ์ FBO์ ๋์ค ๋ฒํผ๊ฐ ์ด๊ธฐํ๋์๋์ง ํ์ธํฉ๋๋ค.
- ๊ด์ ํ๋ ฌ ์์ฑ:
- ๊ด์ ๋ทฐ ํ๋ ฌ: ์ด ํ๋ ฌ์ ์๋๋ฅผ ๊ด์์ ์์ ์ผ๋ก ๋ณํํฉ๋๋ค. ์ง์ฌ๊ด์ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก `lookAt` ํจ์๋ก ์์ฑ๋๋ฉฐ, "๋"์ ๊ด์์ ์์น์ด๊ณ "ํ๊ฒ"์ ๊ด์์ด ๊ฐ๋ฆฌํค๋ ๋ฐฉํฅ์ ๋๋ค.
- ๊ด์ ํฌ์ ํ๋ ฌ: ํํ ๊ด์ ์ ๊ฐ์ง ์ง์ฌ๊ด์ ๊ฒฝ์ฐ ์ง๊ต ํฌ์์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ ๊ด์์ด๋ ์คํฌํธ๋ผ์ดํธ์ ๊ฒฝ์ฐ ์๊ทผ ํฌ์์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํ๋ ฌ์ ๊ทธ๋ฆผ์๋ฅผ ๋๋ฆฌ์ธ ๊ณต๊ฐ์ ๋ณผ๋ฅจ(์์ ๋๋ ํ๋ฌ์คํ )์ ์ ์ํฉ๋๋ค.
- ๋์ค ์ ฐ์ด๋ ํ๋ก๊ทธ๋จ ์ฌ์ฉ: ์ด๊ฒ์ ์ต์ํ์ ์ ฐ์ด๋์ ๋๋ค. ๋ฒํ ์ค ์ ฐ์ด๋์ ์ ์ผํ ์๋ฌด๋ ๋ฒํ ์ค ์์น์ ๊ด์์ ๋ทฐ ๋ฐ ํฌ์ ํ๋ ฌ์ ๊ณฑํ๋ ๊ฒ์ ๋๋ค. ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋๋ ํจ์ฌ ๋ ๊ฐ๋จํฉ๋๋ค: ํ๋๊ทธ๋จผํธ์ ๊น์ด ๊ฐ(z-์ขํ)์ ๋์ค ํ ์ค์ฒ์ ์ฐ๊ธฐ๋ง ํฉ๋๋ค. ์ต์ WebGL์์๋ FBO๊ฐ ๋์ค ๋ฒํผ๋ฅผ ์๋์ผ๋ก ์บก์ฒํ๋๋ก ๊ตฌ์ฑํ ์ ์์ผ๋ฏ๋ก ์ฌ์ฉ์ ์ง์ ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋๊ฐ ํ์ ์๋ ๊ฒฝ์ฐ๋ ๋ง์ต๋๋ค.
- ์ฌ ๋ ๋๋ง: ์ฌ์ ๋ชจ๋ ๊ทธ๋ฆผ์๋ฅผ ๋๋ฆฌ์ฐ๋ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆฝ๋๋ค. ์ด์ FBO์๋ ์์ฑ๋ ์๋์ฐ ๋งต์ด ํฌํจ๋ฉ๋๋ค.
2๋จ๊ณ: ์ฌ ํจ์ค (์นด๋ฉ๋ผ์ ์์ )
์ด์ ๋ฐฉ๊ธ ๋ง๋ ์๋์ฐ ๋งต์ ์ฌ์ฉํ์ฌ ๊ทธ๋ฆผ์๋ฅผ ๊ฒฐ์ ํ๊ณ ์ต์ข ์ด๋ฏธ์ง๋ฅผ ๋ ๋๋งํฉ๋๋ค.
- FBO ์ธ๋ฐ์ธ๋ฉ: ๊ธฐ๋ณธ ์บ๋ฒ์ค ํ๋ ์๋ฒํผ๋ก ๋ ๋๋งํ๋๋ก ๋ค์ ์ ํํฉ๋๋ค.
- ๋ทฐํฌํธ ์ค์ : ๋ทฐํฌํธ๋ฅผ ๋ค์ ์บ๋ฒ์ค ํฌ๊ธฐ๋ก ์ค์ ํฉ๋๋ค.
- ํ๋ฉด ์ด๊ธฐํ: ์บ๋ฒ์ค์ ์์ ๋ฐ ๋์ค ๋ฒํผ๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
- ์ฌ ์
ฐ์ด๋ ํ๋ก๊ทธ๋จ ์ฌ์ฉ: ๋ง๋ฒ์ด ์ผ์ด๋๋ ๊ณณ์
๋๋ค. ์ด ์
ฐ์ด๋๋ ๋ ๋ณต์กํฉ๋๋ค.
- ๋ฒํ ์ค ์ ฐ์ด๋: ์ด ์ ฐ์ด๋๋ ๋ ๊ฐ์ง ์์ ์ ์ํํด์ผ ํฉ๋๋ค. ์ฒซ์งธ, ํ์์ฒ๋ผ ์นด๋ฉ๋ผ์ ๋ชจ๋ธ, ๋ทฐ, ํฌ์ ํ๋ ฌ์ ์ฌ์ฉํ์ฌ ์ต์ข ๋ฒํ ์ค ์์น๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๋์งธ, 1๋จ๊ณ์ ๋ผ์ดํธ ๊ณต๊ฐ ํ๋ ฌ์ ์ฌ์ฉํ์ฌ ๊ด์์ ์์ ์์ ๋ฒํ ์ค์ ์์น๋ฅผ ๋ํ ๊ณ์ฐํด์ผ ํฉ๋๋ค. ์ด ๋ ๋ฒ์งธ ์ขํ๋ varying์ผ๋ก ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋์ ์ ๋ฌ๋ฉ๋๋ค.
- ํ๋๊ทธ๋จผํธ ์
ฐ์ด๋: ์ด๊ฒ์ด ๊ทธ๋ฆผ์ ๋ก์ง์ ํต์ฌ์
๋๋ค. ๊ฐ ํ๋๊ทธ๋จผํธ์ ๋ํด:
- ๋ฒํ ์ค ์ ฐ์ด๋๋ก๋ถํฐ ๋ณด๊ฐ๋ ๋ผ์ดํธ ๊ณต๊ฐ์ ์์น๋ฅผ ๋ฐ์ต๋๋ค.
- ์ด ์ขํ์ ๋ํด ์๊ทผ ๋๋๊ธฐ(x, y, z๋ฅผ w๋ก ๋๋)๋ฅผ ์ํํฉ๋๋ค. ์ด๊ฒ์ ์ขํ๋ฅผ -1์์ 1 ๋ฒ์์ ์ ๊ทํ๋ ์ฅ์น ์ขํ(NDC)๋ก ๋ณํํฉ๋๋ค.
- NDC๋ฅผ ํ ์ค์ฒ ์ขํ(0์์ 1 ๋ฒ์)๋ก ๋ณํํ์ฌ ์๋์ฐ ๋งต์ ์ํ๋งํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๊ฒ์ ๊ฐ๋จํ ์ค์ผ์ผ ๋ฐ ๋ฐ์ด์ด์ค ์ฐ์ฐ์ ๋๋ค: `texCoord = ndc * 0.5 + 0.5;`.
- ์ด ํ ์ค์ฒ ์ขํ๋ฅผ ์ฌ์ฉํ์ฌ 1๋จ๊ณ์์ ์์ฑ๋ ์๋์ฐ ๋งต ํ ์ค์ฒ๋ฅผ ์ํ๋งํฉ๋๋ค. ์ด๊ฒ์ `depthFromShadowMap`์ ์ ๊ณตํฉ๋๋ค.
- ๊ด์์ ์์ ์์ ๋ณธ ํ๋๊ทธ๋จผํธ์ ํ์ฌ ๊น์ด๋ ๋ณํ๋ ๋ผ์ดํธ ๊ณต๊ฐ ์ขํ์ z-๊ตฌ์ฑ ์์์ ๋๋ค. ์ด๊ฒ์ `currentDepth`๋ผ๊ณ ๋ถ๋ฆ ์๋ค.
- ๊น์ด ๋น๊ต: `currentDepth > depthFromShadowMap`์ด๋ฉด ํ๋๊ทธ๋จผํธ๋ ๊ทธ๋ฆผ์ ์์ ์์ต๋๋ค. "์๋์ฐ ์ ํฌ๋(shadow acne)"๋ผ๋ ์ํฐํฉํธ๋ฅผ ํผํ๊ธฐ ์ํด ์ด ๊ฒ์ฌ์ ์์ ๋ฐ์ด์ด์ค(bias)๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ด์ ๋ํด์๋ ๋ค์์ ๋ ผ์ํ๊ฒ ์ต๋๋ค.
- ๋น๊ต๋ฅผ ๋ฐํ์ผ๋ก ๊ทธ๋ฆผ์ ๊ณ์(์: ๋น์ ๋ฐ์ผ๋ฉด 1.0, ๊ทธ๋ฆผ์ ์ง๋ฉด 0.3)๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- ์ด ๊ทธ๋ฆผ์ ๊ณ์๋ฅผ ์ต์ข ์์ ๊ณ์ฐ์ ์ ์ฉํฉ๋๋ค(์: ์ฐ๋น์ธํธ ๋ฐ ๋ํจ์ฆ ์กฐ๋ช ๊ตฌ์ฑ ์์์ ๊ทธ๋ฆผ์ ๊ณ์๋ฅผ ๊ณฑํจ).
- ์ฌ ๋ ๋๋ง: ์ฌ์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆฝ๋๋ค.
3์ฅ: ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ๊ณผ ํด๊ฒฐ์ฑ
๊ธฐ๋ณธ์ ์ธ ์๋์ฐ ๋งคํ์ ๊ตฌํํ๋ฉด ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์๊ฐ์ ์ํฐํฉํธ๊ฐ ๊ธ๋ฐฉ ๋๋ฌ๋ฉ๋๋ค. ์ด๋ฅผ ์ดํดํ๊ณ ์์ ํ๋ ๊ฒ์ ๊ณ ํ์ง ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์๋์ฐ ์ ํฌ๋ (์๊ธฐ ๊ทธ๋ฆผ์ ์ํฐํฉํธ)
๋ฌธ์ ์ : ์์ ํ ๋น์ ๋ฐ์์ผ ํ ํ๋ฉด์ ์ด์ํ๊ณ ์๋ชป๋ ์ด๋์ด ์ ์ด๋ ๋ชจ์๋ (Moirรฉ) ํ์๊ณผ ์ ์ฌํ ํจํด์ด ๋ณด์ผ ์ ์์ต๋๋ค. ์ด๋ฅผ "์๋์ฐ ์ ํฌ๋"๋ผ๊ณ ํฉ๋๋ค. ์ด๋ ์๋์ฐ ๋งต์ ์ ์ฅ๋ ๊น์ด ๊ฐ๊ณผ ์ฌ ํจ์ค ์ค์ ๊ณ์ฐ๋ ๊น์ด ๊ฐ์ด ๋์ผํ ํ๋ฉด์ ๋ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค. ๋ถ๋ ์์์ ๋ถ์ ํ์ฑ๊ณผ ์๋์ฐ ๋งต์ ์ ํ๋ ํด์๋๋ก ์ธํด, ์์ ์ค์ฐจ๋ก ์ธํด ํ๋๊ทธ๋จผํธ๊ฐ ์๊ธฐ ์์ ๋ณด๋ค ๋ค์ ์๋ค๊ณ ์๋ชป ํ๋จํ์ฌ ์๊ธฐ ๊ทธ๋ฆผ์๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
ํด๊ฒฐ์ฑ : ๋์ค ๋ฐ์ด์ด์ค(Depth Bias). ๊ฐ์ฅ ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ ๋น๊ต ์ ์ `currentDepth`์ ์์ ๋ฐ์ด์ด์ค๋ฅผ ๋์ ํ๋ ๊ฒ์ ๋๋ค. ํ๋๊ทธ๋จผํธ๊ฐ ์ค์ ๋ณด๋ค ๊ด์์ ์ฝ๊ฐ ๋ ๊ฐ๊น๊ฒ ๋ณด์ด๊ฒ ํจ์ผ๋ก์จ, ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์์ ์ ๊ทธ๋ฆผ์ ๋ฐ์ผ๋ก "๋ฐ์ด๋ ๋๋ค".
float shadow = currentDepth > depthFromShadowMap + bias ? 0.3 : 1.0;
์ฌ๋ฐ๋ฅธ ๋ฐ์ด์ด์ค ๊ฐ์ ์ฐพ๋ ๊ฒ์ ์ฌ์ธํ ๊ท ํ ์ก๊ธฐ์ ๋๋ค. ๋๋ฌด ์์ผ๋ฉด ์ ํฌ๋๊ฐ ๋จ๊ณ , ๋๋ฌด ํฌ๋ฉด ๋ค์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํผํฐ ํจ๋ (Peter Panning)
๋ฌธ์ ์ : ํ๋์ ๋ ์ ์๊ณ ๊ทธ๋ฆผ์๋ฅผ ์์ด๋ฒ๋ฆฐ ์บ๋ฆญํฐ์ ์ด๋ฆ์ ๋ด ์ด ์ํฐํฉํธ๋ ๊ฐ์ฒด์ ๊ทธ ๊ทธ๋ฆผ์ ์ฌ์ด์ ๋ณด์ด๋ ๊ฐ๊ฒฉ์ผ๋ก ๋ํ๋ฉ๋๋ค. ์ด๊ฒ์ ๊ฐ์ฒด๊ฐ ๋ ์๊ฑฐ๋ ์์ด์ผ ํ ํ๋ฉด์์ ๋ถ๋ฆฌ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํฉ๋๋ค. ์ด๋ ๋๋ฌด ํฐ ๋์ค ๋ฐ์ด์ด์ค๋ฅผ ์ฌ์ฉํ ์ง์ ์ ์ธ ๊ฒฐ๊ณผ์ ๋๋ค.
ํด๊ฒฐ์ฑ : ๊ธฐ์ธ๊ธฐ-์ค์ผ์ผ ๋์ค ๋ฐ์ด์ด์ค(Slope-Scale Depth Bias). ์์ ๋ฐ์ด์ด์ค๋ณด๋ค ๋ ๊ฒฌ๊ณ ํ ํด๊ฒฐ์ฑ ์ ๋ฐ์ด์ด์ค๋ฅผ ๊ด์์ ๋ํ ํ๋ฉด์ ๊ฐํ๋ฅธ ์ ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ฒ ํ๋ ๊ฒ์ ๋๋ค. ๋ ๊ฐํ๋ฅธ ํด๋ฆฌ๊ณค์ ์ ํฌ๋์ ๋ ์ทจ์ฝํ๋ฉฐ ๋ ํฐ ๋ฐ์ด์ด์ค๊ฐ ํ์ํฉ๋๋ค. ๋ ํํํ ํด๋ฆฌ๊ณค์ ๋ ์์ ๋ฐ์ด์ด์ค๊ฐ ํ์ํฉ๋๋ค. WebGL์ ํฌํจํ ๋๋ถ๋ถ์ ๊ทธ๋ํฝ์ค API๋ ๋์ค ํจ์ค ์ค์ ์ด๋ฐ ์ข ๋ฅ์ ๋ฐ์ด์ด์ค๋ฅผ ์๋์ผ๋ก ์ ์ฉํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋์์ ์๋์ผ๋ก ๋ฐ์ด์ด์ค๋ฅผ ์ ์ฉํ๋ ๊ฒ๋ณด๋ค ์ ํธ๋ฉ๋๋ค.
ํผ์คํํฐ๋ธ ์จ๋ฆฌ์ด์ฑ (๊ณ๋จ ํ์)
๋ฌธ์ ์ : ๊ทธ๋ฆผ์์ ๊ฐ์ฅ์๋ฆฌ๊ฐ ๊น๋๊ธฐ ๊ฐ๊ณ , ๋ค์ญ๋ ์ญํ๋ฉฐ, ํฝ์ ํ๋์ด ๋ณด์ ๋๋ค. ์ด๊ฒ์ ์จ๋ฆฌ์ด์ฑ์ ํ ํํ์ ๋๋ค. ์๋์ฐ ๋งต์ ํด์๋๊ฐ ์ ํํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค. ์๋์ฐ ๋งต์ ๋จ์ผ ํฝ์ (๋๋ ํ ์ )์ด ์ต์ข ์ฌ์ ํ๋ฉด์์ ๋์ ์์ญ์ ๋ฎ์ ์ ์์ผ๋ฉฐ, ํนํ ์นด๋ฉ๋ผ์ ๊ฐ๊น๊ฑฐ๋ ๋น์ค๋ฌํ ๊ฐ๋์์ ๋ณธ ํ๋ฉด์ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ์ด๋ฌํ ํด์๋์ ๋ถ์ผ์น๊ฐ ํน์ง์ ์ธ ๊น๋๊ธฐ ๋ชจ์์ ์ ๋ฐํฉ๋๋ค.
ํด๊ฒฐ์ฑ : ์๋์ฐ ๋งต ํด์๋๋ฅผ ๋์ด๋ ๊ฒ(์: 1024x1024์์ 4096x4096์ผ๋ก)์ด ๋์์ด ๋ ์ ์์ง๋ง, ์๋นํ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฑ๋ฅ ๋น์ฉ์ด ๋ฐ๋ฅด๋ฉฐ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ฅผ ์์ ํ ํด๊ฒฐํ์ง๋ ๋ชปํฉ๋๋ค. ์ง์ ํ ํด๊ฒฐ์ฑ ์ ๋ ๊ณ ๊ธ ๊ธฐ๋ฒ์ ์์ต๋๋ค.
4์ฅ: ๊ณ ๊ธ ์๋์ฐ ๋งคํ ๊ธฐ๋ฒ
๊ธฐ๋ณธ์ ์ธ ์๋์ฐ ๋งคํ์ ๊ธฐ์ด๋ฅผ ์ ๊ณตํ์ง๋ง, ์ ๋ฌธ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ์จ๋ฆฌ์ด์ฑ๊ณผ ๊ฐ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ ์ ๊ตํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
ํผ์ผํฐ์ง-ํด๋ก์ ํํฐ๋ง (PCF)
PCF๋ ๊ทธ๋ฆผ์ ๊ฐ์ฅ์๋ฆฌ๋ฅผ ๋ถ๋๋ฝ๊ฒ ํ๊ณ ์จ๋ฆฌ์ด์ฑ์ ์ค์ด๋ ๋ฐ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ๋ฒ์ ๋๋ค. ์๋์ฐ ๋งต์์ ๋จ์ผ ์ํ์ ๊ฐ์ ธ์ ์ด์ง(๊ทธ๋ฆผ์ ์ ๋๋ ๋ฐ) ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋์ , PCF๋ ๋์ ์ขํ ์ฃผ๋ณ ์์ญ์์ ์ฌ๋ฌ ์ํ์ ๊ฐ์ ธ์ต๋๋ค.
๊ฐ๋ : ๊ฐ ํ๋๊ทธ๋จผํธ์ ๋ํด, ์ฐ๋ฆฌ๋ ์๋์ฐ ๋งต์ ํ ๋ฒ๋ง ์ํ๋งํ๋ ๊ฒ์ด ์๋๋ผ, ํ๋๊ทธ๋จผํธ์ ํฌ์๋ ํ ์ค์ฒ ์ขํ ์ฃผ์์ ๊ฒฉ์ ํจํด(์: 3x3 ๋๋ 5x5)์ผ๋ก ์ฌ๋ฌ ๋ฒ ์ํ๋งํฉ๋๋ค. ์ด๋ค ๊ฐ ์ํ์ ๋ํด ๊น์ด ๋น๊ต๋ฅผ ์ํํฉ๋๋ค. ์ต์ข ๊ทธ๋ฆผ์ ๊ฐ์ ์ด ๋ชจ๋ ๋น๊ต์ ํ๊ท ์ ๋๋ค. ์๋ฅผ ๋ค์ด, 9๊ฐ ์ํ ์ค 4๊ฐ๊ฐ ๊ทธ๋ฆผ์ ์์ ์๋ค๋ฉด, ํ๋๊ทธ๋จผํธ๋ 4/9๋งํผ ๊ทธ๋ฆผ์๊ฐ ์ ธ์ ๋ถ๋๋ฌ์ด ๋ฐ๊ทธ๋ฆผ์(๊ทธ๋ฆผ์์ ๋ถ๋๋ฌ์ด ๊ฐ์ฅ์๋ฆฌ)๋ฅผ ๋ง๋ญ๋๋ค.
๊ตฌํ: ์ด๊ฒ์ ์ ์ ์ผ๋ก ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋ ๋ด์์ ์ํ๋ฉ๋๋ค. ์์ ์ปค๋์ ๋ฐ๋ณตํ๋ฉด์ ๊ฐ ์คํ์ ์์ ์๋์ฐ ๋งต์ ์ํ๋งํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋์ ํ๋ ๋ฃจํ๋ฅผ ํฌํจํฉ๋๋ค. WebGL 2๋ ๋น๊ต์ ํํฐ๋ง์ ๋ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋ ํ๋์จ์ด ์ง์(`texture`์ `sampler2DShadow` ์ฌ์ฉ)์ ์ ๊ณตํฉ๋๋ค.
์ฅ์ : ๋ฑ๋ฑํ๊ณ ์จ๋ฆฌ์ด์ฑ๋ ๊ฐ์ฅ์๋ฆฌ๋ฅผ ๋ถ๋๋ฝ๊ณ ๋งค๋๋ฌ์ด ๊ฐ์ฅ์๋ฆฌ๋ก ๋์ฒดํ์ฌ ๊ทธ๋ฆผ์ ํ์ง์ ๊ทน์ ์ผ๋ก ํฅ์์ํต๋๋ค.
๋น์ฉ: ํ๋๊ทธ๋จผํธ๋น ์ทจํ๋ ์ํ ์์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ์ ํ๋ฉ๋๋ค.
๊ณ๋จ์ ์๋์ฐ ๋งต (CSM)
CSM์ ๋งค์ฐ ํฐ ์ฌ์์ ๋จ์ผ ์ง์ฌ๊ด(ํ์๊ณผ ๊ฐ์)์ ๊ทธ๋ฆผ์๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํ ์ ๊ณ ํ์ค ์๋ฃจ์ ์ ๋๋ค. ์ด๊ฒ์ ํผ์คํํฐ๋ธ ์จ๋ฆฌ์ด์ฑ ๋ฌธ์ ๋ฅผ ์ง์ ์ ์ผ๋ก ํด๊ฒฐํฉ๋๋ค.
๊ฐ๋ : ํต์ฌ ์์ด๋์ด๋ ์นด๋ฉ๋ผ์ ๊ฐ๊น์ด ๊ฐ์ฒด๊ฐ ๋ฉ๋ฆฌ ์๋ ๊ฐ์ฒด๋ณด๋ค ํจ์ฌ ๋์ ๊ทธ๋ฆผ์ ํด์๋๋ฅผ ํ์๋ก ํ๋ค๋ ๊ฒ์ ๋๋ค. CSM์ ์นด๋ฉ๋ผ์ ๋ทฐ ํ๋ฌ์คํ (view frustum)์ ๊น์ด์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ตฌ์ญ, ์ฆ "์บ์ค์ผ์ด๋(cascade)"๋ก ๋๋๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ ์บ์ค์ผ์ด๋์ ๋ํด ๋ณ๋์ ๊ณ ํ์ง ์๋์ฐ ๋งต์ด ๋ ๋๋ง๋ฉ๋๋ค. ์นด๋ฉ๋ผ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์บ์ค์ผ์ด๋๋ ์์ ์๋ ๊ณต๊ฐ ์์ญ์ ์ปค๋ฒํ๋ฏ๋ก ๋งค์ฐ ํจ๊ณผ์ ์ธ ๊ณ ํด์๋๋ฅผ ๊ฐ์ง๋๋ค. ๋ ๋ฉ๋ฆฌ ์๋ ์บ์ค์ผ์ด๋๋ ๋์ผํ ํ ์ค์ฒ ํฌ๊ธฐ๋ก ์ ์ฐจ ๋ ๋์ ์์ญ์ ์ปค๋ฒํ๋ฉฐ, ์ด๋ ํ๋ ์ด์ด์๊ฒ ๋ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์์ฉ ๊ฐ๋ฅํฉ๋๋ค.
๊ตฌํ: ์ด๊ฒ์ ์๋นํ ๋ ๋ณต์กํฉ๋๋ค.
- CPU์์ ์นด๋ฉ๋ผ ํ๋ฌ์คํ ์ 2-4๊ฐ์ ์บ์ค์ผ์ด๋๋ก ๋๋๋๋ค.
- ๊ฐ ์บ์ค์ผ์ด๋์ ๋ํด, ํด๋น ํ๋ฌ์คํ ์น์ ์ ์๋ฒฝํ๊ฒ ๊ฐ์ธ๋ ๊ด์์ ์ํ ๋ฑ ๋ง๋ ์ง๊ต ํฌ์ ํ๋ ฌ์ ๊ณ์ฐํฉ๋๋ค.
- ๋ ๋๋ง ๋ฃจํ์์, ๊ฐ ์บ์ค์ผ์ด๋๋ง๋ค ํ ๋ฒ์ฉ ๋์ค ํจ์ค๋ฅผ ์ฌ๋ฌ ๋ฒ ์ํํ์ฌ ๋ค๋ฅธ ์๋์ฐ ๋งต(๋๋ ํ ์ค์ฒ ์ํ๋ผ์ค์ ํ ์์ญ)์ ๋ ๋๋งํฉ๋๋ค.
- ์ต์ข ์ฌ ํจ์ค ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋์์, ์นด๋ฉ๋ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ํ๋๊ทธ๋จผํธ๊ฐ ์ํ ์บ์ค์ผ์ด๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- ์ ์ ํ ์บ์ค์ผ์ด๋์ ์๋์ฐ ๋งต์ ์ํ๋งํ์ฌ ๊ทธ๋ฆผ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์ฅ์ : ๊ด๋ํ ๊ฑฐ๋ฆฌ์ ๊ฑธ์ณ ์ผ๊ด๋๊ฒ ๊ณ ํด์๋ ๊ทธ๋ฆผ์๋ฅผ ์ ๊ณตํ์ฌ ์ผ์ธ ํ๊ฒฝ์ ์๋ฒฝํฉ๋๋ค.
๋ถ์ฐ ์๋์ฐ ๋งต (VSM)
VSM์ ๋ถ๋๋ฌ์ด ๊ทธ๋ฆผ์๋ฅผ ๋ง๋๋ ๋ ๋ค๋ฅธ ๊ธฐ๋ฒ์ด์ง๋ง, PCF์๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค.
๊ฐ๋ : ์๋์ฐ ๋งต์ ๊น์ด๋ง ์ ์ฅํ๋ ๋์ , VSM์ ๋ ๊ฐ์ง ๊ฐ, ์ฆ ๊น์ด(1์ฐจ ๋ชจ๋ฉํธ)์ ๊น์ด์ ์ ๊ณฑ(2์ฐจ ๋ชจ๋ฉํธ)์ ์ ์ฅํฉ๋๋ค. ์ด ๋ ๊ฐ์ ํตํด ๊น์ด ๋ถํฌ์ ๋ถ์ฐ์ ๊ณ์ฐํ ์ ์์ต๋๋ค. ์ฒด๋น์ผํ ๋ถ๋ฑ์์ด๋ผ๋ ์ํ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋๊ทธ๋จผํธ๊ฐ ๊ทธ๋ฆผ์ ์์ ์์ ํ๋ฅ ์ ์ถ์ ํ ์ ์์ต๋๋ค. ํต์ฌ ์ฅ์ ์ VSM ํ ์ค์ฒ๊ฐ ํ์ค ๋์ค ๋งต์์๋ ์ํ์ ์ผ๋ก ์ ํจํ์ง ์์ ํ์ค ํ๋์จ์ด ๊ฐ์ ์ ํ ํํฐ๋ง ๋ฐ ๋ฐ๋งคํ์ ์ฌ์ฉํ์ฌ ๋ธ๋ฌ ์ฒ๋ฆฌ๋ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ณ ์ ๋ ์ฑ๋ฅ ๋น์ฉ์ผ๋ก ๋งค์ฐ ํฌ๊ณ ๋ถ๋๋ฌ์ฐ๋ฉฐ ๋งค๋๋ฌ์ด ๊ทธ๋ฆผ์ ๋ฐ๊ทธ๋ฆผ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๋จ์ : VSM์ ์ฃผ์ ์ฝ์ ์ ํต๊ณ์ ๊ทผ์ฌ๊ฐ ๋ฌด๋์ง ์ ์๋ ๊ฒน์น๋ ์คํด๋ฃจ๋๊ฐ ์๋ ์ํฉ์์ ๋น์ด ๊ฐ์ฒด๋ฅผ ๋ซ๊ณ ๋์ค๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ "๋น์(light bleeding) ํ์"์ ๋๋ค.
5์ฅ: ์ค์ฉ์ ์ธ ๊ตฌํ ํ ๋ฐ ์ฑ๋ฅ
์๋์ฐ ๋งต ํด์๋ ์ ํ
์๋์ฐ ๋งต์ ํด์๋๋ ํ์ง๊ณผ ์ฑ๋ฅ ๊ฐ์ ์ง์ ์ ์ธ ํธ๋ ์ด๋์คํ์ ๋๋ค. ๋ ํฐ ํ ์ค์ฒ๋ ๋ ์ ๋ช ํ ๊ทธ๋ฆผ์๋ฅผ ์ ๊ณตํ์ง๋ง ๋ ๋ง์ ๋น๋์ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ๊ณ ๋ ๋๋ง ๋ฐ ์ํ๋งํ๋ ๋ฐ ๋ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค. ์ผ๋ฐ์ ์ธ ํฌ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- 1024x1024: ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข์ ๊ธฐ์ค์ ์ ๋๋ค.
- 2048x2048: ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋์ ๋๋ ํ์ง ํฅ์์ ์ ๊ณตํฉ๋๋ค.
- 4096x4096: ๊ณ ํ์ง์ด๋ฉฐ, ์ข ์ข ์ฃผ์ ์์ ์ด๋ ๊ฐ๋ ฅํ ์ปฌ๋ง ๊ธฐ๋ฅ์ด ์๋ ์์ง์์ ์ฌ์ฉ๋ฉ๋๋ค.
๊ด์์ ํ๋ฌ์คํ ์ต์ ํ
์๋์ฐ ๋งต์ ๋ชจ๋ ํฝ์ ์ ์ต๋ํ ํ์ฉํ๋ ค๋ฉด, ๊ด์์ ํฌ์ ๋ณผ๋ฅจ(์ง๊ต ์์ ๋๋ ์๊ทผ ํ๋ฌ์คํ )์ด ๊ทธ๋ฆผ์๊ฐ ํ์ํ ์ฌ ์์์ ๊ฐ๋ฅํ ํ ๋ฑ ๋ง๊ฒ ์ค์ ๋๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ง์ฌ๊ด์ ๊ฒฝ์ฐ, ์ด๋ ์นด๋ฉ๋ผ ํ๋ฌ์คํ ์ ๋ณด์ด๋ ๋ถ๋ถ๋ง ๊ฐ์ธ๋๋ก ์ง๊ต ํฌ์์ ๋ง์ถ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์๋์ฐ ๋งต์์ ๋ญ๋น๋๋ ๊ณต๊ฐ์ ๋ญ๋น๋๋ ํด์๋์ ๋๋ค.
WebGL ํ์ฅ ํ๋ก๊ทธ๋จ ๋ฐ ๋ฒ์
WebGL 1 vs. WebGL 2: WebGL 1์์๋ ์๋์ฐ ๋งคํ์ด ๊ฐ๋ฅํ์ง๋ง, WebGL 2์์ ํจ์ฌ ์ฝ๊ณ ํจ์จ์ ์ ๋๋ค. WebGL 1์ ๋์ค ํ ์ค์ฒ๋ฅผ ๋ง๋ค๊ธฐ ์ํด `WEBGL_depth_texture` ํ์ฅ ํ๋ก๊ทธ๋จ์ด ํ์ํฉ๋๋ค. WebGL 2์๋ ์ด ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์์ต๋๋ค. ๋ํ WebGL 2๋ ์ ฐ์ด๋์์ ์๋ PCF ๋ฃจํ๋ณด๋ค ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ ๊ณตํ๋ ํ๋์จ์ด ๊ฐ์ PCF๋ฅผ ์ํํ ์ ์๋ ์๋์ฐ ์ํ๋ฌ(`sampler2DShadow`)์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ทธ๋ฆผ์ ๋๋ฒ๊น
๊ทธ๋ฆผ์๋ ๋๋ฒ๊น ํ๊ธฐ๊ฐ ์ ๋ช ๋๊ฒ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ ์ฉํ ๋จ์ผ ๊ธฐ๋ฒ์ ์๋์ฐ ๋งต์ ์๊ฐํํ๋ ๊ฒ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ์์ ์ผ๋ก ์์ ํ์ฌ ํน์ ๊ด์์ ๋์ค ํ ์ค์ฒ๋ฅผ ํ๋ฉด์ ์ฌ๊ฐํ์ ์ง์ ๋ ๋๋งํ์ญ์์ค. ์ด๋ฅผ ํตํด ๊ด์์ด "๋ณด๋" ๊ฒ์ ์ ํํ ๋ณผ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๊ด์์ ํ๋ ฌ, ํ๋ฌ์คํ ์ปฌ๋ง ๋๋ ๋์ค ํจ์ค ์ค ๊ฐ์ฒด ๋ ๋๋ง์ ๋ฌธ์ ๋ฅผ ์ฆ์ ๋๋ฌ๋ผ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์ค์๊ฐ ์๋์ฐ ๋งคํ์ ํ๋ 3D ๊ทธ๋ํฝ์ค์ ์ด์์ผ๋ก, ํํํ๊ณ ์๋ช ์๋ ์ฌ์ ๋ฏฟ์ ์ ์๊ณ ์ญ๋์ ์ธ ์ธ๊ณ๋ก ๋ณํ์ํต๋๋ค. ๊ด์์ ์์ ์์ ๋ ๋๋งํ๋ค๋ ๊ฐ๋ ์ ๊ฐ๋จํ์ง๋ง, ๊ณ ํ์ง์ ์ํฐํฉํธ ์๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด 2-ํจ์ค ํ์ดํ๋ผ์ธ๋ถํฐ ๋์ค ๋ฐ์ด์ด์ค์ ์จ๋ฆฌ์ด์ฑ์ ๋ฏธ๋ฌํ ์ฐจ์ด๊น์ง ๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ์ ๋ํ ๊น์ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ธ ๊ตฌํ์์ ์์ํ์ฌ ์๋์ฐ ์ ํฌ๋ ๋ฐ ๊ณ๋จ ํ์๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์ํฐํฉํธ๋ฅผ ์ ์ง์ ์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค. ๊ฑฐ๊ธฐ์๋ถํฐ ๋ถ๋๋ฌ์ด ๊ทธ๋ฆผ์๋ฅผ ์ํ PCF๋ ๋๊ท๋ชจ ํ๊ฒฝ์ ์ํ ๊ณ๋จ์ ์๋์ฐ ๋งต๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฒ์ผ๋ก ์๊ฐ์ ํจ๊ณผ๋ฅผ ํ ๋จ๊ณ ๋์ด์ฌ๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋ฆผ์ ๋ ๋๋ง์ผ๋ก์ ์ฌ์ ์ ์ปดํจํฐ ๊ทธ๋ํฝ์ค๋ฅผ ๋งค์ฐ ๋งค๋ ฅ์ ์ผ๋ก ๋ง๋๋ ์์ ๊ณผ ๊ณผํ์ ์กฐํ๋ฅผ ์๋ฒฝํ๊ฒ ๋ณด์ฌ์ฃผ๋ ์์ ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฒ๋ค์ ์คํํ๊ณ , ๊ทธ ํ๊ณ๋ฅผ ๋ฐ์ด๋์ด, ์ฌ๋ฌ๋ถ์ WebGL ํ๋ก์ ํธ์ ์๋ก์ด ์ฐจ์์ ํ์ค๊ฐ์ ๋ถ์ด๋ฃ๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค.