๊ฐ์ํ ๊ตฌ์กฐ๊ฐ WebGL์์ ๋ ์ดํธ๋ ์ด์ฑ์ ์ต์ ํํ์ฌ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ณต์กํ 3D ์ฅ๋ฉด์ ํจ์จ์ ์ธ ๋ ๋๋ง์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ด ๋๋ค.
WebGL ๋ ์ดํธ๋ ์ด์ฑ ๊ฐ์ํ ๊ตฌ์กฐ: ๊ธ๋ก๋ฒ 3D ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ณต๊ฐ ๋ฐ์ดํฐ ๊ตฌ์ฑ
๋ ์ดํธ๋ ์ด์ฑ์ ๋น์ด ์ค์ ์ธ๊ณ์์ ํ๋ํ๋ ๋ฐฉ์์ ์๋ฎฌ๋ ์ด์ ํ๋ ๊ฐ๋ ฅํ ๋ ๋๋ง ๊ธฐ์ ์ ๋๋ค. ์ฅ๋ฉด์ ํต๊ณผํ๋ ๊ด์ ์ ๊ฒฝ๋ก๋ฅผ ์ถ์ ํ์ฌ ์ฌ์ค์ ์ธ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค. ๋ ์ดํธ๋ ์ด์ฑ์ ๋ฐ์ด๋ ์๊ฐ์ ํ์ง์ ์ ๊ณตํ์ง๋ง ๊ณ์ฐ ์ง์ฝ์ ์ ๋๋ค. ํนํ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ WebGL ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์๊ฐ ๋๋ ๋ํํ ํ๋ ์ ์๋๋ฅผ ๋ฌ์ฑํ๋ ค๋ฉด ๊ฐ์ํ ๊ตฌ์กฐ๊ฐ ํ์์ ์ ๋๋ค. ์ด ๊ธฐ์ฌ์์๋ WebGL ๋ ์ดํธ๋ ์ด์ฑ์ ์ฌ์ฉ๋๋ ๊ฐ์ํ ๊ตฌ์กฐ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํด๋ณด๊ณ ๊ณต๊ฐ ๋ฐ์ดํฐ ๊ตฌ์ฑ๊ณผ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ค์ ์ ๋ก๋๋ค.
๊ฐ์ํ ๊ตฌ์กฐ์ ํ์์ฑ
๊ฐ์ํ ๊ตฌ์กฐ๊ฐ ์์ผ๋ฉด ๋ ์ดํธ๋ ์ด์ฑ์ ๊ฐ ๊ด์ ์ ์ฅ๋ฉด์ ๋ชจ๋ ๊ฐ์ฒด์ ๊ต์ฐจ์์ผ์ผ ํฉ๋๋ค. ์ด ๋ฌด์ฐจ๋ณ ๋์ ๋ฐฉ์์ ๊ฐ ๊ด์ ์ ๋ํด O(n) ๋ณต์ก๋๋ฅผ ์ด๋ํฉ๋๋ค. ์ฌ๊ธฐ์ 'n'์ ์ฅ๋ฉด์ ๊ธฐ๋ณธ ์์(์ผ๊ฐํ, ๊ตฌ ๋ฑ)์ ์์ ๋๋ค. ์๋ฐฑ๋ง ๊ฐ์ ๊ธฐ๋ณธ ์์๊ฐ ์๋ ๋ณต์กํ ์ฅ๋ฉด์ ๊ฒฝ์ฐ ์ด๋ ์์ฒญ๋๊ฒ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค.
๊ฐ์ํ ๊ตฌ์กฐ๋ ์ฃผ์ด์ง ๊ด์ ๊ณผ ๊ต์ฐจํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฅ๋ฉด์ ํฐ ๋ถ๋ถ์ ์ ์ํ๊ฒ ์ญ์ ํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ฅ๋ฉด์ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ์ํํฉ๋๋ค. ๊ด์ -๊ธฐ๋ณธ ์์ ๊ต์ฐจ ํ ์คํธ ์๋ฅผ ์ค์ฌ ๋ ๋๋ง ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค. ๋์๊ด์์ ํน์ ์ฑ ์ ์ฐพ๋๋ค๊ณ ์์ํด ๋ณด์ธ์. ์์ธ(๊ฐ์ํ ๊ตฌ์กฐ)์ด ์์ผ๋ฉด ๋ชจ๋ ์ ๋ฐ์ ๋ชจ๋ ์ฑ ์ ํ์ธํด์ผ ํฉ๋๋ค. ์์ธ์ ์ฌ์ฉํ๋ฉด ๊ด๋ จ ์น์ ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ฑ ์ ํจ์จ์ ์ผ๋ก ์ฐพ์ ์ ์์ต๋๋ค. ๊ฐ์ํ ๊ตฌ์กฐ๋ ๋ ์ดํธ๋ ์ด์ฑ์์ ์ ์ฌํ ๋ชฉ์ ์ ์ํํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๊ฐ์ํ ๊ตฌ์กฐ
๋ ์ดํธ๋ ์ด์ฑ์๋ ์ฌ๋ฌ ์ ํ์ ๊ฐ์ํ ๊ตฌ์กฐ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ฒ์ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ ๊ณ์ธต(BVH)์ด์ง๋ง k-d ํธ๋ฆฌ ๋ฐ ๊ท ์ผ ๊ทธ๋ฆฌ๋์ ๊ฐ์ ๋ค๋ฅธ ํธ๋ฆฌ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ๋ค์ํ ์ฅ๋ฉด์ ์ฒ๋ฆฌํ๋ ๋ฐ ์์ด ์ ์ฐ์ฑ๊ณผ ํจ์จ์ฑ์ผ๋ก ์ธํด BVH์ ์ค์ ์ ๋ก๋๋ค.
๋ฐ์ด๋ฉ ๋ณผ๋ฅจ ๊ณ์ธต(BVH)
BVH๋ ๊ฐ ๋ ธ๋๊ฐ ์ผ๋ จ์ ๊ธฐ๋ณธ ์์๋ฅผ ๋๋ฌ์ธ๋ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ์ ๋ํ๋ด๋ ํธ๋ฆฌ์ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ๋ฃจํธ ๋ ธ๋๋ ์ ์ฒด ์ฅ๋ฉด์ ๋๋ฌ์ธ๊ณ ๊ฐ ๋ด๋ถ ๋ ธ๋๋ ์ฅ๋ฉด ์ง์ค๋ฉํธ๋ฆฌ์ ํ์ ์งํฉ์ ๋๋ฌ์๋๋ค. ๋ฆฌํ ๋ ธ๋์๋ ์ค์ ๊ธฐ๋ณธ ์์(์: ์ผ๊ฐํ)์ ๋ํ ์ฐธ์กฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
BVH์ ๊ธฐ๋ณธ ์๋ฆฌ๋ ๋ ธ๋์ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ์ ๋ํด ๊ด์ ์ ํ ์คํธํ๋ ๊ฒ์ ๋๋ค. ๊ด์ ์ด ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ๊ณผ ๊ต์ฐจํ์ง ์์ผ๋ฉด ํด๋น ๋ ธ๋ ๋ด์ ํฌํจ๋ ๊ธฐ๋ณธ ์์์ ๊ต์ฐจํ ์ ์์ผ๋ฏ๋ก ํ์ ํธ๋ฆฌ์ ์ํ๋ฅผ ๊ฑด๋๋ธ ์ ์์ต๋๋ค. ๊ด์ ์ด ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ๊ณผ ๊ต์ฐจํ๋ฉด ๋ฆฌํ ๋ ธ๋์ ๋๋ฌํ ๋๊น์ง ํ์ ๋ ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ํํฉ๋๋ค. ์ฌ๊ธฐ์ ๊ด์ -๊ธฐ๋ณธ ์์ ๊ต์ฐจ ํ ์คํธ๋ฅผ ์ํํฉ๋๋ค.
BVH ๊ตฌ์ฑ:
BVH ๊ตฌ์ฑ์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ ์ค์ํ ๋จ๊ณ์ ๋๋ค. ์ ๊ตฌ์ฑ๋ BVH๋ ๊ด์ -๋ฐ์ด๋ฉ ๋ณผ๋ฅจ ๊ต์ฐจ ํ ์คํธ ์๋ฅผ ์ต์ํํฉ๋๋ค. BVH ๊ตฌ์ฑ์๋ ํํฅ์๊ณผ ์ํฅ์์ด๋ผ๋ ๋ ๊ฐ์ง ์ฃผ์ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค.
- ํํฅ์ ๊ตฌ์ฑ: ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ฃจํธ ๋ ธ๋์์ ์์ํ์ฌ ํน์ ์ข ๋ฃ ๊ธฐ์ค์ด ์ถฉ์กฑ๋ ๋๊น์ง ์ฌ๊ท์ ์ผ๋ก ์ธ๋ถํํฉ๋๋ค. ์ธ๋ถํ ํ๋ก์ธ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ณธ ์์๋ฅผ ๋ ๊ทธ๋ฃน์ผ๋ก ๋๋๋ ๋ถํ ํ๋ฉด์ ์ ํํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ๋ถํ ํ๋ฉด์ ์ ํ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ ๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ณต๊ฐ ์ค์๊ฐ ๋ถํ : ์ถ(์: X, Y ๋๋ Z)์ ๋ฐ๋ผ ๊ณต๊ฐ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ธฐ๋ณธ ์์๋ฅผ ๋๋๋๋ค. ์ด๊ฒ์ ๊ฐ๋จํ๊ณ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ด์ง๋ง ํญ์ ๊ท ํ ์กํ ํธ๋ฆฌ๋ฅผ ์์ฑํ์ง๋ ์์ ์ ์์ต๋๋ค.
- ๊ฐ์ฒด ์ค์๊ฐ ๋ถํ : ์ค์ฌ์ ์ ์ค์๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ธฐ๋ณธ ์์๋ฅผ ๋๋๋๋ค. ์ด๋ ๊ณต๊ฐ ์ค์๊ฐ ๋ถํ ๋ณด๋ค ๋ ๊ท ํ ์กํ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ํ๋ฉด์ ํด๋ฆฌ์คํฑ(SAH): ์ด๋ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ์ ํ๋ฉด์ ์ ๊ธฐ์ค์ผ๋ก ํธ๋ฆฌ๋ฅผ ์ํํ๋ ๋ฐ ๋๋ ๋น์ฉ์ ์ถ์ ํ๋ ๋ณด๋ค ์ ๊ตํ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. SAH๋ ๊ฐ์ฅ ๋ฎ์ ์ ์ฒด ๋น์ฉ์ ์ด๋ํ๋ ๋ถํ ํ๋ฉด์ ์ ํํ์ฌ ์์๋๋ ์ํ ๋น์ฉ์ ์ต์ํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. SAH๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ํจ์จ์ ์ธ BVH๋ฅผ ์์ฑํ์ง๋ง ๊ตฌ์ถํ๋ ๋ฐ ๊ฐ์ฅ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค.
- ์ํฅ์ ๊ตฌ์ฑ: ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋ณ ๊ธฐ๋ณธ ์์๋ฅผ ๋ฆฌํ ๋ ธ๋๋ก ์์ํ์ฌ ๋จ์ผ ๋ฃจํธ ๋ ธ๋๊ฐ ํ์ฑ๋ ๋๊น์ง ๋ฐ๋ณต์ ์ผ๋ก ๋ ํฐ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ์ผ๋ก ๋ณํฉํฉ๋๋ค. ์ด๋ ๋ ์ดํธ๋ ์ด์ฑ BVH์๋ ๋ ์ผ๋ฐ์ ์ด์ง๋ง ์ง์ค๋ฉํธ๋ฆฌ๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ ๋์ ์ฅ๋ฉด์์ ์ ์ฉํ ์ ์์ต๋๋ค.
์ข ๋ฃ ๊ธฐ์ค:
์ธ๋ถํ ํ๋ก์ธ์ค๋ ์ข ๋ฃ ๊ธฐ์ค์ด ์ถฉ์กฑ๋ ๋๊น์ง ๊ณ์๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ข ๋ฃ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ต๋ ํธ๋ฆฌ ๊น์ด: ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋๋ ์ํ ์ค๋ฒํค๋๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํธ๋ฆฌ์ ๊น์ด๋ฅผ ์ ํํฉ๋๋ค.
- ๋ ธ๋๋น ์ต์ ๊ธฐ๋ณธ ์์ ์: ๋ ธ๋์ ์ ์ ์์ ๊ธฐ๋ณธ ์์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ์ธ๋ถํ๋ฅผ ์ค์งํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฐ์ 1-4๊ฐ์ ๊ธฐ๋ณธ ์์์ ๋๋ค.
- ๋น์ฉ ์๊ณ๊ฐ: ์ถ๊ฐ ์ธ๋ถํ์ ์์ ๋น์ฉ์ด ํน์ ์๊ณ๊ฐ์ ์ด๊ณผํ๋ฉด ๋ ธ๋ ์ธ๋ถํ๋ฅผ ์ค์งํฉ๋๋ค.
BVH ์ํ:
BVH ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฅ๋ฉด์์ ์ฃผ์ด์ง ๊ด์ ๊ณผ ๊ต์ฐจํ๋ ๊ธฐ๋ณธ ์์๋ฅผ ํจ์จ์ ์ผ๋ก ๊ฒฐ์ ํ๋ ์ฌ๊ท์ ํ๋ก์ธ์ค์ ๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ ๋ฃจํธ ๋ ธ๋์์ ์์ํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ์งํ๋ฉ๋๋ค.
- ํ์ฌ ๋ ธ๋์ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ์ ๋ํด ๊ด์ ์ ํ ์คํธํฉ๋๋ค.
- ๊ด์ ์ด ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ๊ณผ ๊ต์ฐจํ์ง ์์ผ๋ฉด ํด๋น ๋ ธ๋์ ํด๋น ํ์ ํธ๋ฆฌ์ ๋ํ ์ํ๊ฐ ์ค์ง๋ฉ๋๋ค.
- ๊ด์ ์ด ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ๊ณผ ๊ต์ฐจํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ํ์ ๋ ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ํํฉ๋๋ค.
- ๋ฆฌํ ๋ ธ๋์ ๋๋ฌํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ๋ฆฌํ ๋ ธ๋์ ํฌํจ๋ ๊ฐ ๊ธฐ๋ณธ ์์์ ๋ํด ๊ด์ -๊ธฐ๋ณธ ์์ ๊ต์ฐจ ํ ์คํธ๋ฅผ ์ํํฉ๋๋ค.
๊ณต๊ฐ ๋ฐ์ดํฐ ๊ตฌ์ฑ ๊ธฐ์
๋ฐ์ดํฐ๊ฐ ๊ฐ์ํ ๊ตฌ์กฐ ๋ด์์ ๊ตฌ์ฑ๋๋ ๋ฐฉ์์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๊ณต๊ฐ ๋ฐ์ดํฐ ๊ตฌ์ฑ์ ์ต์ ํํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ธฐ์ ์ด ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐ์ด๋ฉ ๋ณผ๋ฅจ ๋ฐ๋
๋ ์กฐ๋ฐํ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ์ ๊ด์ -๋ฐ์ด๋ฉ ๋ณผ๋ฅจ ๊ต์ฐจ ํ ์คํธ ์ค ๊ฐ์์ฑ ํ๋ฅ ์ ์ค์ ๋๋ค. ์กฐ๋ฐํ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ์ ๋๋ฌ์ธ์ธ ์ง์ค๋ฉํธ๋ฆฌ์ ๋ฐ์ ํ๊ฒ ๋ง๊ณ ์ฃผ๋ณ์ ๋น ๊ณต๊ฐ์ ์ต์ํํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ ์ ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ถ ์ ๋ ฌ ๋ฐ์ด๋ฉ ์์(AABB): AABB๋ ๋จ์์ฑ๊ณผ ํจ์จ์ฑ์ผ๋ก ์ธํด ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ํ์ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ์ ๋๋ค. ๊ฐ ์ถ์ ๋ฐ๋ผ ์ต์ ๋ฐ ์ต๋ ์ขํ๋ก ์ ์๋ฉ๋๋ค. AABB๋ ๊ตฌ์ฑ ๋ฐ ๊ด์ ๊ณผ์ ๊ต์ฐจ๊ฐ ์ฝ์ต๋๋ค.
- ๋ฐฉํฅ ๋ฐ์ด๋ฉ ์์(OBB): OBB๋ ํนํ ์ขํ์ถ๊ณผ ์ ๋ ฌ๋์ง ์์ ๊ฐ์ฒด์ ๊ฒฝ์ฐ AABB๋ณด๋ค ๋ ์กฐ๋ฐํ๊ฒ ๋ง์ต๋๋ค. ๊ทธ๋ฌ๋ OBB๋ ๊ตฌ์ฑ ๋ฐ ๊ด์ ๊ณผ์ ๊ต์ฐจ์ ๋ ๋ง์ ๋น์ฉ์ด ๋ญ๋๋ค.
- ๊ตฌ: ๊ตฌ๋ ๊ตฌ์ฑ ๋ฐ ๊ด์ ๊ณผ์ ๊ต์ฐจ๊ฐ ๊ฐ๋จํ์ง๋ง ๋ชจ๋ ์ ํ์ ์ง์ค๋ฉํธ๋ฆฌ์ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
์ ์ ํ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ ์ ํ์ ์ ํํ๋ ๊ฒ์ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ๋์ ์ฑ๋ฅ ๊ฐ์ ์ ์ถฉ์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๋ ธ๋ ์์ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์
๋ ธ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ์์๋ ์บ์ ์ผ๊ด์ฑ ๋ฐ ์ํ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ํจ๊ป ์ก์ธ์คํ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ ธ๋๋ฅผ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ ์ฅํ๋ฉด ์บ์ ํ์ฉ๋ฅ ์ ๋์ด๊ณ ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค ๋๊ธฐ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ๋ ธ๋ ์์ ์ง์ ๊ธฐ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊น์ด ์ฐ์ ์์ ์ง์ : ๋ ธ๋๋ ํธ๋ฆฌ์ ๊น์ด ์ฐ์ ์ํ ์ค์ ๋ฐฉ๋ฌธํ๋ ์์๋๋ก ์ ์ฅ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํธ๋ฆฌ๋ฅผ ํตํด ๊ธด ๊ฒฝ๋ก๋ฅผ ์ํํ๋ ๊ด์ ์ ๋ํ ์บ์ ์ผ๊ด์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ๋๋น ์ฐ์ ์์ ์ง์ : ๋ ธ๋๋ ํธ๋ฆฌ์ ๋๋น ์ฐ์ ์ํ ์ค์ ๋ฐฉ๋ฌธํ๋ ์์๋๋ก ์ ์ฅ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํธ๋ฆฌ์ ๋์ผํ ์์ค์์ ๋ง์ ์์ ๋ ธ๋์ ๊ต์ฐจํ๋ ๊ด์ ์ ๋ํ ์บ์ ์ผ๊ด์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ ํํ: BVH๋ ์ข ์ข Morton ์ฝ๋ ๋๋ ์ ์ฌํ ๊ณต๊ฐ ์ฑ์ฐ๊ธฐ ๊ณก์ ์ ์ฌ์ฉํ์ฌ ํ๋ฉด ๋ฐฐ์ด๋ก ์ ํํ๋ฉ๋๋ค. ์ด๋ ์บ์ ์ผ๊ด์ฑ์ ํฅ์์ํค๊ณ GPU์์ ํจ์จ์ ์ธ ์ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ ์ ์์ต๋๋ค.
์ต์ ์ ๋ ธ๋ ์์ ์ง์ ๊ธฐ์ ์ ํน์ ํ๋์จ์ด ์ํคํ ์ฒ์ ์ฅ๋ฉด์ ํน์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๊ธฐ๋ณธ ์์ ์์ ์ง์
๊ธฐ๋ณธ ์์๊ฐ ๋ฆฌํ ๋ ธ๋ ๋ด์ ์ ์ฅ๋๋ ์์๋ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๊ณต๊ฐ์ ์ผ๋ก ์ผ๊ด๋ ๊ธฐ๋ณธ ์์๋ฅผ ๊ทธ๋ฃนํํ๋ฉด ์บ์ ์ผ๊ด์ฑ์ ํฅ์์ํค๊ณ ๊ด์ -๊ธฐ๋ณธ ์์ ๊ต์ฐจ ํ ์คํธ ์ค ์บ์ ๋ฏธ์ค ์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ๊ณต๊ฐ ์ฑ์ฐ๊ธฐ ๊ณก์ (์: Morton ์์)๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ณต๊ฐ์ ์์น์ ๋ฐ๋ผ ๊ธฐ๋ณธ ์์์ ์์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
WebGL ๊ณ ๋ ค ์ฌํญ
WebGL์์ ๋ ์ดํธ๋ ์ด์ฑ ๋ฐ ๊ฐ์ํ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๊ณ ์ ํ ๊ณผ์ ์ ๊ณ ๋ ค ์ฌํญ์ ์ ์ํฉ๋๋ค.
๋ฐ์ดํฐ ์ ์ก ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
JavaScript์์ GPU๋ก ๋ง์ ์์ ๋ฐ์ดํฐ(์: ์ ์ ๋ฐ์ดํฐ, BVH ๋ ธ๋)๋ฅผ ์ ์กํ๋ ๊ฒ์ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค. ์ข์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ค๋ฉด ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ ์ก ๊ธฐ์ ์ด ์ค์ํฉ๋๋ค. ํ์ํ๋ ๋ฐฐ์ด(์: Float32Array, Uint32Array)์ ์ฌ์ฉํ๊ณ ๋ฐ์ดํฐ ์ ์ก ํ์๋ฅผ ์ต์ํํ๋ฉด ์ค๋ฒํค๋๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ํนํ ๋๊ท๋ชจ ์ฅ๋ฉด์ ๊ฒฝ์ฐ ์ค์ํฉ๋๋ค. WebGL์ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๊ฐ ์ ํ๋์ด ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ ๋นํ๊ณ ํด์ ํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
์ ฐ์ด๋ ์ฑ๋ฅ
๋ ์ดํธ๋ ์ด์ฑ ๋ฐ BVH ์ํ ๋ ผ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ฐ์ด๋(์: GLSL)๋ก ๊ตฌํ๋ฉ๋๋ค. ์ข์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ค๋ฉด ์ ฐ์ด๋ ์ฝ๋๋ฅผ ์ต์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ช ๋ น์ด ์๋ฅผ ์ต์ํํ๊ณ , ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ ํ์ ์ฌ์ฉํ๊ณ , ๋ถ๊ธฐ๋ฅผ ํผํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
์: ๊ด์ -AABB ๊ต์ฐจ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ธ `if` ๋ฌธ์ ์ฌ์ฉํ๋ ๋์ ๋ ๋์ ์ฑ๋ฅ์ ์ํด ์ต์ ํ๋ ์ฌ๋๋ธ ๊ต์ฐจ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ญ์์ค. ์ฌ๋๋ธ ๊ต์ฐจ ์๊ณ ๋ฆฌ์ฆ์ AABB์ฉ์ผ๋ก ํน๋ณํ ์ค๊ณ๋์์ผ๋ฉฐ ๋ ์ ์ ๋ช ๋ น์ด๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
๋น๋๊ธฐ ์์
๊ฐ์ํ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ํนํ ๋๊ท๋ชจ ์ฅ๋ฉด์ ๊ฒฝ์ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ํ๋ก์ธ์ค์ผ ์ ์์ต๋๋ค. ์ด ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ํํ๋ฉด(์: Web Workers ์ฌ์ฉ) ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ตํ์ง ์๊ฒ ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์ฃผ ์ค๋ ๋๋ ๊ฐ์ํ ๊ตฌ์กฐ๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ตฌ์ถ๋๋ ๋์ ์ฅ๋ฉด์ ๊ณ์ ๋ ๋๋งํ ์ ์์ต๋๋ค.
WebGPU
WebGPU์ ์ถํ์ GPU์ ๋ํ ๋ณด๋ค ์ง์ ์ ์ธ ์ ์ด๋ฅผ ์ ๊ณตํ์ฌ ๋ณด๋ค ์ ๊ตํ ๋ ์ดํธ๋ ์ด์ฑ ๊ตฌํ์ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค. ์ปดํจํธ ์ ฐ์ด๋์ ๊ฐ์ ๊ธฐ๋ฅ์ ํตํด ๊ฐ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ฌ์ฉ์ ์ ์ ๊ฐ์ํ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ธฐ์กด WebGL์ ๋นํด ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์์
ํจ์จ์ ์ธ ๊ณต๊ฐ ๋ฐ์ดํฐ ๊ตฌ์ฑ์ผ๋ก ๊ฐ์ํ๋ WebGL์ ๋ ์ดํธ๋ ์ด์ฑ์ ๋ค์ํ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค.
- ๋ํํ ์ ํ ๊ตฌ์ฑ ๋๊ตฌ: ์ ์ธ๊ณ ๊ณ ๊ฐ์ด ์ฌ์ค์ ์ธ ๋ ๋๋ง์ผ๋ก ์ ํ(์: ๊ฐ๊ตฌ, ์๋์ฐจ)์ ์ค์๊ฐ์ผ๋ก ์ฌ์ฉ์ ์ ์ํ ์ ์๋๋ก ํฉ๋๋ค. ์ ๋ฝ ๊ฐ๊ตฌ ํ์ฌ๊ฐ ์์์ ์ฌ์ฉ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ด์์ ๋ค์ํ ์ง๋ฌผ๊ณผ ์กฐ๋ช ์กฐ๊ฑด์ผ๋ก ์ํ๊ฐ ๊ฑฐ์ค์์ ์ด๋ป๊ฒ ๋ณด์ผ์ง ์๊ฐํํ ์ ์๋ค๊ณ ์์ํด ๋ณด์ญ์์ค.
- ๊ฑด์ถ ์๊ฐํ: ์ ์ธ๊ณ ๊ฑด์ถ๊ฐ์ ๋์์ด๋๊ฐ ๋ธ๋ผ์ฐ์ ์์ ๊ฑด๋ฌผ๊ณผ ์ธํ ๋ฆฌ์ด์ ์ฌ์ค์ ์ธ ๋ ๋๋ง์ ๋ง๋ค๊ณ ํ์ํ ์ ์๋๋ก ํฉ๋๋ค. ํธ์ฃผ์ ์๋ ๋์์ธ ํ์ฌ๋ WebGL ๋ ์ดํธ๋ ์ด์ฑ์ ์ฌ์ฉํ์ฌ ์ค๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ์ค์๊ฐ์ผ๋ก ์๊ฐํํ์ฌ ๋ถ๋ฏธ ๊ณ ๊ฐ๊ณผ ๊ฑด๋ฌผ ํ๋ก์ ํธ์ ๋ํด ํ๋ ฅํ ์ ์์ต๋๋ค.
- ๊ณผํ ์๊ฐํ: ๋ณต์กํ ๊ณผํ ๋ฐ์ดํฐ ์ธํธ(์: ์๋ฃ ์ค์บ, ๊ธฐํ ๋ชจ๋ธ)๋ฅผ ๋์ ์๊ฐ์ ์ถฉ์ค๋๋ก 3D๋ก ์๊ฐํํฉ๋๋ค. ์ ์ธ๊ณ ์ฐ๊ตฌ์์ ์์ธํ ๋ ์ดํธ๋ ์ด์ฑ ์๊ฐํ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ณต๋์ผ๋ก ๋ถ์ํ ์ ์์ต๋๋ค.
- ๊ฒ์ ๋ฐ ์ํฐํ ์ธ๋จผํธ: ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ ์ธ๊ณ ํ๋ ์ด์ด๊ฐ ์ก์ธ์คํ ์ ์๋ ์ฌ์ค์ ์ธ ์กฐ๋ช ๊ณผ ๊ทธ๋ฆผ์๊ฐ ์๋ ๋ชฐ์ ํ ๊ฒ์ ๊ฒฝํ์ ๋ง๋ญ๋๋ค.
- ์ ์ ์๊ฑฐ๋: ์ฌ์ค์ ์ธ ์ ํ ์๊ฐํ๋ฅผ ์ ๊ณตํ์ฌ ์จ๋ผ์ธ ์ผํ ๊ฒฝํ์ ํฅ์์ํต๋๋ค. ์๋ฅผ ๋ค์ด ํ์ฝฉ์ ๋ณด์ ์๋งค์ ์ฒด๋ ๋ ์ดํธ๋ ์ด์ฑ ๋ ๋๋ง์ผ๋ก ๋ค์ด์๋ชฌ๋์ ๊ด์ฑ์ ๋ฐ์ฌ๋ฅผ ๋ณด์ฌ์ฃผ์ด ์ ์ฌ์ ๊ตฌ๋งค์๊ฐ ์ ์ธ๊ณ์์ ๋ณด์์ ํ์ง์ ๊ฐ์ํ ์ ์๋๋ก ํฉ๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
- ์ ์ ํ ๊ฐ์ํ ๊ตฌ์กฐ ์ ํ: ๊ฐ์ํ ๊ตฌ์กฐ๋ฅผ ์ ํํ ๋ ์ฅ๋ฉด์ ํน์ฑ(์: ์ ์ ๋ ๋์ , ๊ธฐ๋ณธ ์์ ์)์ ๊ณ ๋ คํ์ญ์์ค. BVH๋ ์ผ๋ฐ์ ์ผ๋ก ๋๋ถ๋ถ์ ์ฅ๋ฉด์ ์ ํฉํ์ง๋ง k-d ํธ๋ฆฌ ๋๋ ๊ท ์ผ ๊ทธ๋ฆฌ๋์ ๊ฐ์ ๋ค๋ฅธ ๊ตฌ์กฐ๊ฐ ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ ์ ํฉํ ์ ์์ต๋๋ค.
- BVH ๊ตฌ์ฑ ์ต์ ํ: ๊ณ ํ์ง BVH์๋ SAH๋ฅผ ์ฌ์ฉํ๋ ํนํ ๋์ ์ฅ๋ฉด์์๋ ๋ ๋น ๋ฅธ ๋น๋ ์๊ฐ์ ์ํด ๊ณต๊ฐ ์ค์๊ฐ ๋๋ ๊ฐ์ฒด ์ค์๊ฐ๊ณผ ๊ฐ์ ๋ ๊ฐ๋จํ ๋ถํ ์ ๋ต์ ๊ณ ๋ คํ์ญ์์ค.
- ์กฐ๋ฐํ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ ์ฌ์ฉ: ์ง์ค๋ฉํธ๋ฆฌ์ ๋ฐ์ ํ๊ฒ ๋ง๋ ๋ฐ์ด๋ฉ ๋ณผ๋ฅจ ์ ํ์ ์ ํํ์ฌ ๊ด์ -๋ฐ์ด๋ฉ ๋ณผ๋ฅจ ๊ต์ฐจ ํ ์คํธ ์ค ๊ฐ์์ฑ ์๋ฅผ ์ค์ ๋๋ค.
- ๋ ธ๋ ์์ ์ต์ ํ: ๋ค์ํ ๋ ธ๋ ์์ ์ง์ ๊ธฐ์ (์: ๊น์ด ์ฐ์ , ๋๋น ์ฐ์ , ์ ํํ)์ ์คํํ์ฌ ์บ์ ์ผ๊ด์ฑ ๋ฐ ์ํ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ๋ฐ์ดํฐ ์ ์ก ์ต์ํ: ํ์ํ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ณ JavaScript์ GPU ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก ํ์๋ฅผ ์ต์ํํฉ๋๋ค.
- ์ ฐ์ด๋ ์ฝ๋ ์ต์ ํ: ๋ช ๋ น์ด ์๋ฅผ ์ต์ํํ๊ณ , ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ ํ์ ์ฌ์ฉํ๊ณ , ์ ฐ์ด๋์์ ๋ถ๊ธฐ๋ฅผ ํผํ์ญ์์ค.
- ๋น๋๊ธฐ ์์ ์ฌ์ฉ: BVH ๊ตฌ์ฑ ๋ฐ ๊ธฐํ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ํํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ตํ์ง ์๊ฒ ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- WebGPU ํ์ฉ: ๋ณด๋ค ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ์ฌ์ฉ์ ์ ์ ๊ฐ์ํ ๊ตฌ์กฐ ๊ตฌํ์ ์ํด WebGPU์ ๊ธฐ๋ฅ์ ์ดํด๋ณด์ญ์์ค.
- ํ๋กํ์ผ๋ง ๋ฐ ๋ฒค์น๋งํน: ์ฝ๋์์ ์ ๊ธฐ์ ์ผ๋ก ํ๋กํ์ผ๋งํ๊ณ ๋ฒค์น๋งํนํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ต์ ํํ์ญ์์ค. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ ์๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ ์ ฐ์ด๋ ์ฑ๋ฅ์ ๋ถ์ํ์ญ์์ค.
๊ฒฐ๋ก
๊ฐ์ํ ๊ตฌ์กฐ๋ WebGL์์ ์ค์๊ฐ ๋ ์ดํธ๋ ์ด์ฑ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ๊ณต๊ฐ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตฌ์ฑํจ์ผ๋ก์จ ์ด๋ฌํ ๊ตฌ์กฐ๋ ๊ด์ -๊ธฐ๋ณธ ์์ ๊ต์ฐจ ํ ์คํธ ์๋ฅผ ์ค์ด๊ณ ๋ณต์กํ 3D ์ฅ๋ฉด์ ๋ ๋๋ง์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๋ค์ํ ์ ํ์ ๊ฐ์ํ ๊ตฌ์กฐ, ๊ณต๊ฐ ๋ฐ์ดํฐ ๊ตฌ์ฑ ๊ธฐ์ ๋ฐ WebGL ๊ด๋ จ ๊ณ ๋ ค ์ฌํญ์ ์ดํดํ๋ ๊ฒ์ ๊ณ ์ฑ๋ฅ์ ์ ์ธ๊ณ์ ์ผ๋ก ์ก์ธ์ค ๊ฐ๋ฅํ ๋ ์ดํธ๋ ์ด์ฑ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๋ฐ ์ค์ํฉ๋๋ค. WebGPU๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ๋ธ๋ผ์ฐ์ ์์ ๋ ์ดํธ๋ ์ด์ฑ์ ๊ฐ๋ฅ์ฑ์ ๋์ฑ ํ์ฅ๋์ด ๋ค์ํ ์ฐ์ ๋ถ์ผ์์ ์๋กญ๊ณ ํฅ๋ฏธ๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ์ ๋๋ค.