WebXR ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ์ง๋ฅผ ์ฌ์ธต์ ์ผ๋ก ํ๊ตฌํ๊ณ , ํ๋ฉด ์ฃ์ง ์ธ์ ๊ธฐ์ , ์ฌ์ฉ ์ฌ๋ก, ์น์์ ๋งค๋ ฅ์ ์ธ ์ฆ๊ฐ ํ์ค ๊ฒฝํ์ ๋ง๋ค๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํด๋ด ๋๋ค.
WebXR ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ์ง: ๋ชฐ์ ํ ๊ฒฝํ์ ์ํ ํ๋ฉด ์ฃ์ง ์ธ์
WebXR์ ์ฐ๋ฆฌ๊ฐ ์น๊ณผ ์ํธ์์ฉํ๋ ๋ฐฉ์์ ํ์ ํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ๋ชฐ์ ํ ์ฆ๊ฐ ํ์ค(AR) ๋ฐ ๊ฐ์ ํ์ค(VR) ๊ฒฝํ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๋ง์ AR ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ตฌ์ฑ ์์๋ ๋ฌผ๋ฆฌ์ ํ๊ฒฝ, ํนํ ํ๋ฉด์ ์๋ณํ๊ณ ๋งคํํ๋ ๋ฅ๋ ฅ์ ๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ์ง์ ํ๋ฉด ์ฃ์ง ์ธ์์ด ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ์ด๋ฌํ ๊ฐ๋ , ์ ์ฉ ์ฌ๋ก, ๊ทธ๋ฆฌ๊ณ WebXR ํ๋ก์ ํธ์์ ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ด ๋๋ค.
WebXR ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ์ง๋ ๋ฌด์์ธ๊ฐ?
WebXR์์์ ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ์ง๋ ๊ธฐ๊ธฐ์ ์ผ์(์นด๋ฉ๋ผ, ๋ชจ์ ์ผ์ ๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ํ๊ฒฝ์ ํํํ ํ๋ฉด์ ์๋ณํ๊ณ ์ ์ํ๋ ๊ณผ์ ์ ๋งํฉ๋๋ค. WebXR Device API๋ ์ด ์ ๋ณด์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ ์ฝํ ์ธ ๋ฅผ ํ์ค ์ธ๊ณ์ ๋งค๋๋ฝ๊ฒ ํผํฉํ๋ AR ๊ฒฝํ์ ๋ง๋ค ์ ์๋๋ก ํฉ๋๋ค.
ํต์ฌ์ ์ผ๋ก ํ๋ฉด ๊ฐ์ง๋ ๋ค์ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค:
- ์ผ์ ์ ๋ ฅ: ๊ธฐ๊ธฐ๋ ์ฃผ๋ณ ํ๊ฒฝ์ ๋ํ ์๊ฐ ๋ฐ ๊ด์ฑ ๋ฐ์ดํฐ๋ฅผ ์บก์ฒํฉ๋๋ค.
- ํน์ง ์ถ์ถ: ์๊ณ ๋ฆฌ์ฆ์ ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ๋ชจ์๋ฆฌ, ์ฃ์ง, ํ ์ค์ฒ์ ๊ฐ์ ์ฃผ์ ํน์ง์ ์๋ณํฉ๋๋ค.
- ํ๋ฉด ๋ง์ถค: ์ถ์ถ๋ ํน์ง์ ๋ฐ๋ฅ, ๋ฒฝ, ํ ์ด๋ธ๊ณผ ๊ฐ์ ํํํ ํ๋ฉด์ ๋ํ๋ด๋ ํ๋ฉด์ ๋ง์ถ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ฒฝ๊ณ ์ ์: ์์คํ ์ ์ด๋ฌํ ํ๋ฉด์ ๊ฒฝ๊ณ๋ฅผ ์ ์ํ์ฌ ๊ทธ ๋ฒ์์ ๋ชจ์์ ์ค๊ณฝ์ผ๋ก ๋ํ๋ ๋๋ค.
๊ฒฝ๊ณ๋ ์ผ๋ฐ์ ์ผ๋ก ํด๋ฆฌ๊ณค์ผ๋ก ํํ๋์ด ๊ฐ์ง๋ ํ๋ฉด์ ์ ํํ ์ค๊ณฝ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ฒฝ๊ณ ์ ๋ณด๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ํ๋ฉด์ ์ ํํ๊ฒ ๋ฐฐ์นํ๊ณ ์ฌ์ค์ ์ธ ์ํธ์์ฉ์ ๋ง๋๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
ํ๋ฉด ์ฃ์ง ์ธ์: ํ๋ฉด์ ๋์ด์
ํ๋ฉด ๊ฐ์ง๊ฐ ๊ธฐ๋ณธ์ด์ง๋ง, ํ๋ฉด ์ฃ์ง ์ธ์์ ํ๊ฒฝ ์ดํด๋ฅผ ํ ๋จ๊ณ ๋ ๋ฐ์ ์ํต๋๋ค. ์ด๋ ๋จ์ํ ํํํ ํ๋ฉด๋ฟ๋ง ์๋๋ผ ๋ค์ํ ๊ฐ์ฒด์ ํ๋ฉด์ ์ฃ์ง๋ฅผ ์๋ณํ๊ณ ๋ฌ์ฌํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ์ฌ๊ธฐ์๋ ๊ณก๋ฉด, ๋ถ๊ท์นํ ๋ชจ์, ๋ณต์กํ ๊ธฐํํ์ด ํฌํจ๋ฉ๋๋ค. ํ๋ฉด ์ฃ์ง ์ธ์์ ๋ณด๋ค ์ ํํ๊ณ ์์ฐ์ค๋ฌ์ด ์ํธ์์ฉ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ AR ๊ฒฝํ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
ํ๋ฉด ์ฃ์ง ์ธ์์ด ํ๋ฉด ๊ฐ์ง๋ฅผ ๋ณด์ํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํฅ์๋ ๊ฐ์ฒด ๋ฐฐ์น: ๊ฐ๊ตฌ ๋๋ ์์ ์ํ๊ณผ ๊ฐ์ ๋นํ๋ฉด ํ๋ฉด์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฒ ๋ฐฐ์นํฉ๋๋ค.
- ์ฌ์ค์ ์ธ ๊ฐ๋ฆผ(Occlusion): ๊ฐ์ ๊ฐ์ฒด๊ฐ ์๋ฒฝํ๊ฒ ํํํ์ง ์๋๋ผ๋ ์ค์ ๊ฐ์ฒด์ ์ํด ์ฌ๋ฐ๋ฅด๊ฒ ๊ฐ๋ ค์ง๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ๊ฐ์ ๋ ์ํธ์์ฉ: ์ฌ์ฉ์๊ฐ ๋ง์ง๊ณ ์๋ ์ค์ ๊ฐ์ฒด์ ๊ฒฝ๊ณ๋ฅผ ์ธ์ํ์ฌ ๊ฐ์ ๊ฐ์ฒด์ ๋ ์ง๊ด์ ์ผ๋ก ์ํธ์์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
ํ๋ฉด ์ฃ์ง ์ธ์ ๊ธฐ์ ์ ์ข ์ข ๋ค์๊ณผ ๊ฐ์ ์ปดํจํฐ ๋น์ ์๊ณ ๋ฆฌ์ฆ์ ์กฐํฉ์ ํฌํจํฉ๋๋ค:
- ์ฃ์ง ๊ฐ์ง ํํฐ: Canny ๋๋ Sobel๊ณผ ๊ฐ์ ํํฐ๋ฅผ ์ ์ฉํ์ฌ ์นด๋ฉ๋ผ ์ด๋ฏธ์ง์์ ์ฃ์ง๋ฅผ ์๋ณํฉ๋๋ค.
- ํน์ง ๋งค์นญ: ์๋ก ๋ค๋ฅธ ํ๋ ์ ๊ฐ์ ํน์ง์ ๋งค์นญํ์ฌ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ์ฃ์ง์ ์์ง์๊ณผ ๋ชจ์์ ์ถ์ ํฉ๋๋ค.
- ์์ง์์ผ๋ก๋ถํฐ ๊ตฌ์กฐ ์์ฑ(SfM): ์ฌ๋ฌ ์ด๋ฏธ์ง๋ก๋ถํฐ ํ๊ฒฝ์ 3D ๋ชจ๋ธ์ ์ฌ๊ตฌ์ฑํ์ฌ ๋ณต์กํ ํ๋ฉด์์ ์ ํํ ์ฃ์ง ๊ฐ์ง๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๋จธ์ ๋ฌ๋: ํ๋ จ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ธํ๊ณผ ๋ฌธ๋งฅ์ ๋ฐ๋ผ ์ฃ์ง๋ฅผ ์๋ณํ๊ณ ๋ถ๋ฅํฉ๋๋ค.
WebXR์์ ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ์ง ๋ฐ ํ๋ฉด ์ฃ์ง ์ธ์์ ์ฌ์ฉ ์ฌ๋ก
ํ๋ฉด์ ๊ฐ์งํ๊ณ ํ๋ฉด ์ฃ์ง๋ฅผ ์ธ์ํ๋ ๋ฅ๋ ฅ์ ๋ค์ํ ์ฐ์ ๋ถ์ผ์์ WebXR ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฒ์ํ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค.
1. ์ ์์๊ฑฐ๋ ๋ฐ ์๋งค
AR ์ผํ ๊ฒฝํ์ ์ ์ ๋ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์ผ๋ฉฐ, ๊ณ ๊ฐ์ด ๊ตฌ๋งคํ๊ธฐ ์ ์ ์์ ์ ์ง์์ ์ ํ์ ์๊ฐํํ ์ ์๊ฒ ํด์ค๋๋ค. ํ๋ฉด ๊ฐ์ง๋ฅผ ํตํด ์ฌ์ฉ์๋ ๊ฐ์ง๋ ํ๋ฉด์ ๊ฐ์ ๊ฐ๊ตฌ, ๊ฐ์ ์ ํ ๋๋ ์ฅ์ํ์ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ํ๋ฉด ์ฃ์ง ์ธ์์ ๊ธฐ์กด ๊ฐ๊ตฌ์ ๋ ์ ๋ฐํ๊ฒ ๋ฐฐ์นํ๊ณ ๊ฐ์ ์ ํ์ ๊ฐ๋ฆผ ํจ๊ณผ๋ฅผ ๋ ์ ๊ตฌํํ ์ ์๊ฒ ํด์ค๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ฐ๊ตฌ ๋ฐฐ์น: ์ฌ์ฉ์๋ ๊ฑฐ์ค์ ๊ฐ์ ์ํ๋ฅผ ๋ฐฐ์นํ์ฌ ๊ธฐ์กด ์ฅ์๊ณผ ์ด๋ป๊ฒ ์ด์ธ๋ฆฌ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- ๊ฐ์ ์ฐฉ์ฉ: ๊ณ ๊ฐ์ ๊ธฐ๊ธฐ ์นด๋ฉ๋ผ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฅ, ์ก์ธ์๋ฆฌ, ํ์ฅํ์ ๊ฐ์์ผ๋ก ์ฐฉ์ฉํด ๋ณผ ์ ์์ต๋๋ค.
- ์ ํ ์๊ฐํ: ์ฌ์ฉ์ ํ๊ฒฝ์ ์ ํ์ 3D ๋ชจ๋ธ์ ํ์ํ์ฌ ์ธ๋ถ ์ฌํญ์ ๊ฒ์ฌํ๊ณ ํฌ๊ธฐ๋ฅผ ํ๊ฐํ ์ ์์ต๋๋ค.
๋ ์ผ ๋ฒ ๋ฅผ๋ฆฐ์ ์ผํ๊ฐ์ด ์จ๋ผ์ธ์ผ๋ก ๊ตฌ๋งคํ๊ธฐ ์ ์ ์ ๋จํ๊ฐ ์ฑ ์ ์์์ ์ด๋ป๊ฒ ๋ณด์ผ์ง ํด๋ํฐ์ผ๋ก ํ์ธํ๋ ๋ชจ์ต์ ์์ํด ๋ณด์ธ์. ๋๋ ์ผ๋ณธ ๋์ฟ์ ๊ณ ๊ฐ์ด AR ์ฑ์ ์ฌ์ฉํ์ฌ ๋ค์ํ ์์์ ๋ฆฝ์คํฑ์ ์ํํด ๋ณด๋ ๋ชจ์ต์ ์์ํด ๋ณด์ธ์.
2. ๊ฒ์ ๋ฐ ์ํฐํ ์ธ๋จผํธ
AR ๊ฒ์์ ๊ฐ์ ์ธ๊ณ์ ์๋ช ์ ๋ถ์ด๋ฃ์ด ์ผ์ ํ๊ฒฝ์ ์ํธ์์ฉ์ ์ธ ๋์ดํฐ๋ก ๋ณํ์ํฌ ์ ์์ต๋๋ค. ํ๋ฉด ๊ฐ์ง์ ํ๋ฉด ์ฃ์ง ์ธ์์ ๋งค๋ ฅ์ ์ด๊ณ ๋ชฐ์ ๊ฐ ์๋ ๊ฒ์ ํ๋ ์ด ๊ฒฝํ์ ๋ง๋๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- AR ๋ณด๋ ๊ฒ์: ๊ฐ์ง๋ ํ ์ด๋ธ ์์ ๊ฐ์ ๋ณด๋ ๊ฒ์์ ๋ฐฐ์นํ์ฌ ํ๋ ์ด์ด๊ฐ ํ์ค ์ธ๊ณ์์ ๊ฐ์ ์กฐ๊ฐ๊ณผ ์ํธ์์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- ์์น ๊ธฐ๋ฐ ๊ฒ์: ํ์ค ์ธ๊ณ์ ์ฅ์์ ๊ฐ์ ์์๋ฅผ ๊ฒน์ณ์ ํํ๊ณผ ๋ฐ๊ฒฌ์ ์ฅ๋ คํ๋ ๊ฒ์์ ๋ง๋ญ๋๋ค.
- ์ธํฐ๋ํฐ๋ธ ์คํ ๋ฆฌํ ๋ง: ์ฌ์ฉ์์ ์ฃผ๋ณ ํ๊ฒฝ์ ๊ฐ์ ์บ๋ฆญํฐ์ ํ๊ฒฝ์ ๋ฐฐ์นํ์ฌ ์ด์ผ๊ธฐ์ ์๋ช ์ ๋ถ์ด๋ฃ์ต๋๋ค.
์๋ฅดํจํฐ๋ ๋ถ์๋ ธ์ค์์ด๋ ์ค์์ ์น๊ตฌ๋ค์ด ์ปคํผ ํ ์ด๋ธ ์์์ AR ๋ณด๋ ๊ฒ์์ ํ๊ฑฐ๋, ์ดํ๋ฆฌ์ ๋ก๋ง์ ๊ด๊ด๊ฐ์ด AR ์ฑ์ ์ฌ์ฉํ์ฌ ๊ณ ๋ ์ ์ ์์ ์ญ์ฌ์ ์ ๋ณด๋ฅผ ๊ฒน์ณ๋ณด๋ ๊ฒ์ ์๊ฐํด ๋ณด์ธ์.
3. ๊ต์ก ๋ฐ ํ๋ จ
WebXR์ ์ธํฐ๋ํฐ๋ธ ํ์ต ๋ฐ ํ๋ จ์ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ ๊ณตํ์ฌ ํ์๊ณผ ์ ๋ฌธ๊ฐ๊ฐ ๋ณต์กํ ๊ฐ๋ ์ ์ง์ ์ฐธ์ฌํ ์ ์๋๋ก ํฉ๋๋ค. ํ๋ฉด ๊ฐ์ง ๋ฐ ํ๋ฉด ์ฃ์ง ์ธ์์ ํ์ค์ ์ด๊ณ ๋ชฐ์ ๊ฐ ์๋ ํ์ต ํ๊ฒฝ์ ์ ๊ณตํ์ฌ ์ด๋ฌํ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- 3D ๋ชจ๋ธ ์๊ฐํ: ํด๋ถํ์ ๊ตฌ์กฐ, ๊ณตํ ์ค๊ณ ๋๋ ๊ณผํ์ ๊ฐ๋ ์ ์ธํฐ๋ํฐ๋ธ 3D ๋ชจ๋ธ์ ํ์ํฉ๋๋ค.
- ๊ฐ์ ์คํ์ค: ํ์๋ค์ด ์คํ์ ์ํํ๊ณ ๊ณผํ ์๋ฆฌ๋ฅผ ํ๊ตฌํ ์ ์๋ ์๋ฎฌ๋ ์ด์ ๋ ์คํ์ค ํ๊ฒฝ์ ๋ง๋ญ๋๋ค.
- ์๊ฒฉ ํ๋ จ: ์ฅ๋น ์ ์ง๋ณด์ ๋๋ ์์ ์ ์ฐจ์ ๊ฐ์ ๊ธฐ์ ์ ๊ธฐ์ ์ ๋ํ ์๊ฒฉ ํ๋ จ์ ์ ๊ณตํฉ๋๋ค.
์ธ๋ ๋ญ๋ฐ์ด์ ์๋์์ด AR ์ฑ์ ์ฌ์ฉํ์ฌ ์ธ๊ฐ ์ฌ์ฅ์ 3D ๋ชจ๋ธ์ ๊ณต๋ถํ๊ฑฐ๋, ์บ๋๋ค ํ ๋ก ํ ์ ๊ณต๋์์ด ๊ฐ์ ํ๋ จ ํ๊ฒฝ์์ ์ฅ๋น ์ ์ง๋ณด์๋ฅผ ์ฐ์ตํ๋ ๋ชจ์ต์ ์์ํด ๋ณด์ธ์.
4. ์ฐ์ ๋์์ธ ๋ฐ ๊ฑด์ถ
WebXR์ ๊ฑด์ถ๊ฐ์ ๋์์ด๋๊ฐ ํ๋ก์ ํธ๋ฅผ ์๊ฐํํ๊ณ ๋ฐํํ๋ ๋ฐฉ์์ ํ์ ํ ์ ์์ต๋๋ค. ํ๋ฉด ๊ฐ์ง ๋ฐ ํ๋ฉด ์ฃ์ง ์ธ์์ ๊ฑด๋ฌผ๊ณผ ๊ณต๊ฐ์ ํ์ค์ ์ด๊ณ ์ธํฐ๋ํฐ๋ธํ ์๊ฐํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๊ฑด์ถ ์๊ฐํ: ๊ฑด๋ฌผ 3D ๋ชจ๋ธ์ ์ค์ ์์น์ ๊ฒน์ณ์ ๊ณ ๊ฐ์ด ์๋๋ ๋งฅ๋ฝ์์ ์์ฑ๋ ํ๋ก์ ํธ๋ฅผ ์๊ฐํํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ธํ ๋ฆฌ์ด ๋์์ธ ๊ณํ: ๊ฐ์ ๊ณต๊ฐ์์ ๋ค์ํ ๋ ์ด์์, ๊ฐ๊ตฌ ๋ฐฐ์น ๋ฐ ์์ ๊ตฌ์ฑํ๋ฅผ ์คํํฉ๋๋ค.
- ๊ฑด์ค ํ์ฅ ๋ชจ๋ํฐ๋ง: ๊ฑด์ค ํ์ฅ์ ๋์งํธ ๋ชจ๋ธ์ ๊ฒน์ณ ์งํ ์ํฉ์ ์ถ์ ํ๊ณ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํฉ๋๋ค.
์๋์๋ฏธ๋ฆฌํธ ๋๋ฐ์ด์ ๊ฑด์ถ๊ฐ๊ฐ ์ ์๋ ๊ฑด์ค ํ์ฅ์ 3D ๋ชจ๋ธ์ ๊ฒน์ณ ๋ณด์ฌ์ฃผ๋ AR ์ฑ์ ์ฌ์ฉํ์ฌ ๊ณ ๊ฐ์๊ฒ ์๋ก์ด ๊ฑด๋ฌผ ๋์์ธ์ ์ ๋ณด์ด๊ฑฐ๋, ๋ธ๋ผ์ง ์ํ์ธ๋ฃจ์ ์ธํ ๋ฆฌ์ด ๋์์ด๋๊ฐ WebXR์ ์ฌ์ฉํ์ฌ ๊ณ ๊ฐ์ด ์ํํธ์์ ๋ค์ํ ๊ฐ๊ตฌ ๋ฐฐ์น๋ฅผ ์๊ฐํํ๋๋ก ๋๋ ๊ฒ์ ์๊ฐํด ๋ณด์ธ์.
5. ์ ๊ทผ์ฑ
WebXR์ ํ๋ฉด ๋ฐ ์ฃ์ง ๊ฐ์ง์ ๊ฒฐํฉํ์ฌ ์ฅ์ ๋ฅผ ๊ฐ์ง ์ฌ๋๋ค์ ์ ๊ทผ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ํ๊ฒฝ์ ์ดํดํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํฉ์ ๋ง๋ ์ ๋ณด์ ๋ณด์กฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ์๊ฐ ์ฅ์ ์ธ์ ์ํ ๋ด๋น๊ฒ์ด์ ์ง์: ์ฑ์ ์ฃ์ง ๋ฐ ํ๋ฉด ๊ฐ์ง๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ฒฝ์ ์ค๋ช ํ๊ณ , ์ฅ์ ๋ฌผ์ ์๋ณํ๋ฉฐ, ๋ด๋น๊ฒ์ด์ ์ ์ํ ์์ฑ ์๋ด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ์๊ตญ ๋ฐ๋์ ๋ฒํํ ๊ฑฐ๋ฆฌ์์ ์๊ฐ ์ฅ์ ์ธ์ด ๊ธธ์ ์ฐพ๋ ๋ฐ ๋์์ด ๋๋ ์ฑ์ ์์ํด ๋ณด์ธ์.
- ์ฒญ๊ฐ ์ฅ์ ์ธ์ ์ํ ํฅ์๋ ์ปค๋ฎค๋์ผ์ด์ : AR ์ค๋ฒ๋ ์ด๋ ๋ํ ์ค์ ์ค์๊ฐ ์๋ง๊ณผ ์ํ ๋ฒ์ญ์ ์ ๊ณตํ์ฌ ์ปค๋ฎค๋์ผ์ด์ ์ ๊ทผ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ํธ์ฃผ ์๋๋์ ์ฒญ๊ฐ ์ฅ์ ์ธ์ด AR ๋ฒ์ญ ์ฑ์ ๋์์ผ๋ก ํ์์ ์ฐธ์ฌํ๋ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด ๋ณผ ์ ์์ต๋๋ค.
- ์ธ์ง ์ง์: AR ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ์ง ์ฅ์ ๊ฐ ์๋ ๊ฐ์ธ์ด ์ผ์ ๊ณผ์ ๋ฅผ ์๋ฃํ๋ ๋ฐ ๋์์ด ๋๋๋ก ์๊ฐ์ ์ ํธ์ ์๋ฆผ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ํ๋ฏผ๊ตญ ์์ธ์ ์ฌ๋ ์ฌ๋์๊ฒ AR ์ฑ์ด ์กฐ๋ฆฌ๋ ์์ ๋จ๊ณ๋ณ ์ง์นจ์ ํฌ์ฌํ์ฌ ์๋ฆฌ ๊ณผ์ ์ ์๋ดํ ์ ์์ต๋๋ค.
WebXR์์ ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ์ง ๋ฐ ํ๋ฉด ์ฃ์ง ์ธ์ ๊ตฌํํ๊ธฐ
์ฌ๋ฌ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ฐ๋ฐ์๊ฐ WebXR ํ๋ก์ ํธ์์ ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ์ง ๋ฐ ํ๋ฉด ์ฃ์ง ์ธ์์ ๊ตฌํํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.
1. WebXR Device API
ํต์ฌ WebXR Device API๋ ๋ธ๋ผ์ฐ์ ์์ AR ๊ธฐ๋ฅ์ ์ ๊ทผํ๊ธฐ ์ํ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด ํฌํจ๋ฉ๋๋ค:
- ์ธ์ ๊ด๋ฆฌ: WebXR ์ธ์ ์ ์์ํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
- ํ๋ ์ ์ถ์ : ์นด๋ฉ๋ผ ์ด๋ฏธ์ง ๋ฐ ๊ธฐ๊ธฐ ์์ธ ์ ๋ณด์ ์ ๊ทผํฉ๋๋ค.
- ํน์ง ์ถ์ : ๊ฐ์ง๋ ํ๋ฉด ๋ฐ ๊ธฐํ ํน์ง์ ๋ํ ์ ๋ณด์ ์ ๊ทผํฉ๋๋ค.
API๋ ํ๊ฒฝ์์ ๊ฐ์ง๋ ํ๋ฉด์ ๋ํ๋ด๋ `XRPlane` ๊ฐ์ฒด๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ฐ `XRPlane` ๊ฐ์ฒด์๋ ๋ค์๊ณผ ๊ฐ์ ์์ฑ์ด ํฌํจ๋ฉ๋๋ค:
- `polygon`: ํ๋ฉด์ ๊ฒฝ๊ณ๋ฅผ ๋ํ๋ด๋ 3D ์ ๋ค์ ๋ฐฐ์ด์ ๋๋ค.
- `pose`: ์๋ ๊ณต๊ฐ์์ ํ๋ฉด์ ์์ธ(์์น ๋ฐ ๋ฐฉํฅ)์ ๋๋ค.
- `lastChangedTime`: ํ๋ฉด์ ์์ฑ์ด ๋ง์ง๋ง์ผ๋ก ์ ๋ฐ์ดํธ๋ ํ์์คํฌํ์ ๋๋ค.
2. ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ฌ๋ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ WebXR ๊ฐ๋ฐ์ ๋จ์ํํ๊ณ ํ๋ฉด ๊ฐ์ง ๋ฐ ํ๋ฉด ์ฃ์ง ์ธ์์ ์ํ ๊ณ ์์ค ์ถ์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Three.js: WebXR ๋ ๋๋ฌ์ 3D ์ฅ๋ฉด ์์ ์ ์ํ ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํ๋ ์ธ๊ธฐ ์๋ 3D ๊ทธ๋ํฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Babylon.js: ๊ฐ๋ ฅํ WebXR ์ง์๊ณผ ๋ฌผ๋ฆฌ ๋ฐ ์ ๋๋ฉ์ด์ ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋ ๋ค๋ฅธ ๊ฐ๋ ฅํ 3D ์์ง์ ๋๋ค.
- AR.js: ์น์์ AR ๊ฒฝํ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฒฝ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ง์ปค ๊ธฐ๋ฐ ๋ฐ ๋ง์ปค๋ฆฌ์ค ์ถ์ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.
- Model-Viewer: AR์์ 3D ๋ชจ๋ธ์ ํ์ํ๊ธฐ ์ํ ์น ๊ตฌ์ฑ ์์๋ก, AR์ ์น ํ์ด์ง์ ํตํฉํ๋ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
3. ARCore ๋ฐ ARKit ์ถ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
WebXR์ ํ๋ซํผ์ ๊ตฌ์ ๋ฐ์ง ์๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ง๋ง, Google์ ARCore(Android) ๋ฐ Apple์ ARKit(iOS)์ ๊ฐ์ ๊ธฐ๋ณธ AR ํ๋ซํผ์ ๊ฐ๋ ฅํ ํ๋ฉด ๊ฐ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋ค์ดํฐ๋ธ ํ๋ซํผ์ ์ถ์ํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ๊ณผ ์ฑ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์์:
- 8th Wall: ์ฆ๊ฐ์ ์ธ ์ถ์ , ์ด๋ฏธ์ง ์ธ์ ๋ฐ ํ๋ฉด ์ถ์ ์ ํฌํจํ ๊ณ ๊ธ AR ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์์ฉ ํ๋ซํผ์ผ๋ก, ๋ค์ํ ๊ธฐ๊ธฐ์์ ์๋ํฉ๋๋ค.
- MindAR: ์ด๋ฏธ์ง ์ถ์ , ์ผ๊ตด ์ถ์ ๋ฐ ์๋ ์ถ์ ์ ์ง์ํ๋ ์คํ ์์ค WebAR ์์ง์ ๋๋ค.
์ฝ๋ ์์ : Three.js๋ก ํ๋ฉด ๊ฐ์ง ๋ฐ ์๊ฐํํ๊ธฐ
์ด ์์ ๋ WebXR Device API๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ๊ฐ์งํ๊ณ Three.js๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
// Initialize Three.js scene
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Enable WebXR
renderer.xr.enabled = true;
let xrSession;
async function startXR() {
try {
xrSession = await navigator.xr.requestSession('immersive-ar', {
requiredFeatures: ['plane-detection']
});
xrSession.updateRenderState({
baseLayer: new XRWebGLLayer(xrSession, renderer.getContext())
});
renderer.xr.setSession(xrSession);
xrSession.addEventListener('end', () => {
renderer.xr.setSession(null);
});
const referenceSpace = await xrSession.requestReferenceSpace('local');
xrSession.requestAnimationFrame(render);
} catch (e) {
console.error(e);
}
}
// Plane Mesh Cache
const planeMeshes = new Map();
function render(time, frame) {
if (frame) {
const session = frame.session;
const viewerPose = frame.getViewerPose(referenceSpace);
if (viewerPose) {
const planes = session.getWorldInformation().detectedPlanes;
planes.forEach(plane => {
if (!planeMeshes.has(plane.id)) {
// Create a mesh for the plane
const geometry = new THREE.BufferGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00, wireframe: true });
const mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
planeMeshes.set(plane.id, mesh);
}
const mesh = planeMeshes.get(plane.id);
const polygon = plane.polygon;
// Update the mesh geometry with the plane's polygon
const vertices = [];
for (const point of polygon) {
vertices.push(point.x, point.y, point.z);
}
mesh.geometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));
mesh.geometry.computeVertexNormals();
mesh.geometry.computeBoundingSphere();
mesh.geometry.attributes.position.needsUpdate = true;
const planePose = frame.getPose(plane.planeSpace, referenceSpace);
mesh.position.copy(planePose.transform.position);
mesh.quaternion.copy(planePose.transform.orientation);
});
}
}
renderer.render(scene, camera);
renderer.xr.getSession()?.requestAnimationFrame(render);
}
// Start the XR session when a button is clicked
const startButton = document.createElement('button');
startButton.textContent = 'Start WebXR';
startButton.addEventListener('click', startXR);
document.body.appendChild(startButton);
์ด ์ฝ๋ ์ค๋ํซ์ ๊ธฐ๋ณธ์ ์ธ ์์ ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํน์ ํ๋ก์ ํธ ๋ฐ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์์ ํด์ผ ํฉ๋๋ค. ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ๋ ๊ฐ๋ ฅํ ํ๋ฉด ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
WebXR ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ์ง๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
ํจ๊ณผ์ ์ด๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ AR ๊ฒฝํ์ ๋ง๋ค๊ธฐ ์ํด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ธ์:
- ์ฑ๋ฅ ์ฐ์ ์: ํ๋ฉด ๊ฐ์ง๋ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค. ์ฝ๋์ ์์ฐ์ ์ต์ ํํ์ฌ ํนํ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ์ํํ ์ฑ๋ฅ์ ๋ณด์ฅํ์ธ์.
- ์ค๋ฅ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ: ํน์ ํ๊ฒฝ์์๋ ํ๋ฉด ๊ฐ์ง๊ฐ ์คํจํ ์ ์์ต๋๋ค. ์ฌ์ฉ์์๊ฒ ์ ์ตํ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ๊ณ ๋์ฒด ์๋ฃจ์ ์ ์ ๊ณตํ๊ธฐ ์ํด ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ์ธ์.
- ์ฌ์ฉ์ ํผ๋๋ฐฑ ์ ๊ณต: ์๊ฐ์ ์ ํธ๋ ์ฌ์ฉ์๊ฐ ์์คํ ์ด ํ๋ฉด์ ์ด๋ป๊ฒ ๊ฐ์งํ๋์ง ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ํ๋ฉด์ด ๊ฐ์ง๋ ๋ ์๊ฐ์ ํ์๊ธฐ๋ฅผ ํ์ํ๊ณ ๊ฐ์ง๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ์ ๊ณตํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
- ๋ค์ํ ๊ธฐ๊ธฐ์ ์ต์ ํ: ARCore์ ARKit์ ์๋ก ๋ค๋ฅธ ๊ธฐ๋ฅ๊ณผ ์ฑ๋ฅ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ผ๊ด๋ ๊ฒฝํ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ค์ํ ๊ธฐ๊ธฐ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ์ธ์.
- ์ฌ์ฉ์ ๊ฐ์ธ์ ๋ณด ์กด์ค: ๊ธฐ๊ธฐ์ ์นด๋ฉ๋ผ ๋ฐ ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํด ํฌ๋ช ํ๊ฒ ๊ณต๊ฐํ์ธ์. ๊ฐ์ธ ์ ๋ณด๋ฅผ ์์งํ๊ฑฐ๋ ๊ณต์ ํ๊ธฐ ์ ์ ์ฌ์ฉ์ ๋์๋ฅผ ์ป์ผ์ธ์.
- ์ ๊ทผ์ฑ ๊ณ ๋ ค: ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋๋ก AR ๊ฒฝํ์ ์ค๊ณํ์ธ์. ๋์ฒด ์ ๋ ฅ ๋ฐฉ๋ฒ, ์กฐ์ ๊ฐ๋ฅํ ๊ธ๊ผด ํฌ๊ธฐ ๋ฐ ์ค๋์ค ์ค๋ช ์ ์ ๊ณตํ์ธ์.
WebXR์์ ํ๋ฉด ์ดํด์ ๋ฏธ๋
WebXR์ ํ๋ฉด ์ดํด ๋ถ์ผ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ํฅํ ๋ฐ์ ์๋ ๋ค์์ด ํฌํจ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค:
- ํฅ์๋ ์ ํ๋ ๋ฐ ๊ฒฌ๊ณ ์ฑ: ๊น๋ค๋ก์ด ํ๊ฒฝ์์๋ ๋ ์ ํํ๊ณ ์ ๋ขฐํ ์ ์๋ ํ๋ฉด ๊ฐ์ง ๋ฐ ํ๋ฉด ์ฃ์ง ์ธ์.
- ์๋ฏธ๋ก ์ ์ดํด: ํ๋ฉด์ ๊ฐ์งํ ๋ฟ๋ง ์๋๋ผ ๊ทธ ์๋ฏธ๋ฅผ ์ดํดํ๋ ๋ฅ๋ ฅ(์: ํ ์ด๋ธ, ์์ ๋๋ ๋ฒฝ ์๋ณ).
- ์ค์๊ฐ 3D ์ฌ๊ตฌ์ฑ: ํ๊ฒฝ์ ์ค์๊ฐ 3D ๋ชจ๋ธ์ ์์ฑํ์ฌ ๋ ๋ฐ์ ๋ AR ์ํธ์์ฉ์ ๊ฐ๋ฅํ๊ฒ ํจ.
- ํ์ ๋ฐ ๋ค์ค ์ฌ์ฉ์ AR: ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์ผํ AR ํ๊ฒฝ์ ๊ณต์ ํ๊ณ ์ํธ์์ฉํ ์ ์๋๋ก ํ๋ฉฐ, ํ๋ฉด ์ดํด์ ์ ํํ ๋๊ธฐํ๋ฅผ ์ง์ํจ.
WebXR ๊ธฐ์ ์ด ์ฑ์ํด์ง์ ๋ฐ๋ผ ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ์ง ๋ฐ ํ๋ฉด ์ฃ์ง ์ธ์์ ๋งค๋ ฅ์ ์ด๊ณ ๋ชฐ์ ๊ฐ ์๋ AR ๊ฒฝํ์ ๋ง๋๋ ๋ฐ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ ๋๋ค. ์ด ๊ฐ์ด๋์ ์ค๋ช ๋ ์์น๊ณผ ๊ธฐ์ ์ ์ดํดํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ฐ๋ฆฌ๊ฐ ์น๊ณผ ์ํธ์์ฉํ๋ ๋ฐฉ์์ ๋ณํ์ํค๋ ํ์ ์ ์ด๊ณ ๋งค๋ ฅ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
WebXR ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ์ง ๋ฐ ํ๋ฉด ์ฃ์ง ์ธ์์ ๋ชฐ์ ๊ฐ ์๊ณ ์ธํฐ๋ํฐ๋ธํ ์ฆ๊ฐ ํ์ค ๊ฒฝํ์ ๋ง๋ค๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ๊ณ , ์ฌ์ฉ ๊ฐ๋ฅํ API ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ๋ฉฐ, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฆ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๊ฐ์ ์ธ๊ณ์ ํ์ค ์ธ๊ณ๋ฅผ ๋งค๋๋ฝ๊ฒ ํผํฉํ๋ ํ์ ์ ์ธ AR ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๊ธฐ์ ์ด ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ WebXR์ ๊ฐ๋ฅ์ฑ์ ์ง์ ์ผ๋ก ๋ฌดํํ๋ฉฐ, ํ๊ตญ ๋ฐฉ์ฝ์ ๋ฒํํ ๊ฑฐ๋ฆฌ, ์์ด์ฌ๋๋ ๋ ์ด์บฌ๋นํฌ์ ์กฐ์ฉํ ์นดํ, ๋๋ ์๋ฐ์ค ์ฐ๋งฅ์ ์ธ๋ด ๋ง์ ๋ฑ ์์น์ ๊ด๊ณ์์ด ๋์งํธ ์ฝํ ์ธ ๊ฐ ์ฐ๋ฆฌ ์ผ์ ์ํ์ ์๋ฒฝํ๊ฒ ํตํฉ๋๋ ๋ฏธ๋๋ฅผ ์ฝ์ํฉ๋๋ค.
์ด ๊ธฐ์ ์ ์ฐ์ ์ ์ฌํธํ๊ณ , ์ ๊ทผ์ฑ์ ํฅ์์ํค๋ฉฐ, ์ฐ๋ฆฌ๊ฐ ์ ๋ณด์ ์๋ก ์ํธ์์ฉํ๋ ๋ฐฉ์์ ์ฌ์ ์ํ ์ ์ฌ๋ ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. WebXR์ ํ์ ๋ฐ์๋ค์ฌ ์น์ด ์ง์ ์ผ๋ก ์ฆ๊ฐ๋๋ ๋ฏธ๋๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ๊ธฐ์ฌํ์ญ์์ค.