WebXR ํ๋ฉด ๋ถ๋ฅ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์์๋ณด์ธ์. ๊ฐ๋ฐ์๋ฅผ ์ํ ์ด ์ข ํฉ ๊ฐ์ด๋๋ ๋ฐ๋ฅ, ๋ฒฝ, ํ ์ด๋ธ์ ์ธ์ํ์ฌ ์น์์ ์ง์ ์ผ๋ก ๋ชฐ์ ๊ฐ ์๊ณ ์ํฉ ์ธ์์ ์ธ AR ๊ฒฝํ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค.
๋ ์ค๋งํธํ AR์ ์คํ: WebXR ํ๋ฉด ๋ถ๋ฅ ์ฌ์ธต ๋ถ์
์ฆ๊ฐํ์ค(AR)์ ๋จ์ํ ์ ๊ธฐํจ์ ๋์ด ๋์งํธ ์ธ๊ณ์ ๋ฌผ๋ฆฌ์ ์ธ๊ณ๋ฅผ ์๋ฒฝํ๊ฒ ๊ฒฐํฉํ๋ ์ ๊ตํ ๋๊ตฌ๋ก ๋น ๋ฅด๊ฒ ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ์ด๊ธฐ AR ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฑฐ์ค์ ๊ณต๋ฃก 3D ๋ชจ๋ธ์ ๋ฐฐ์นํ ์ ์๊ฒ ํด์ฃผ์์ง๋ง, ์ข ์ข ๊ณต์ค์ ์ด์ํ๊ฒ ๋ ์๊ฑฐ๋ ๊ฐ๊ตฌ์ ๋ถ์์ฐ์ค๋ฝ๊ฒ ๊ต์ฐจํ๊ณค ํ์ต๋๋ค. ๊ทธ ๊ฒฝํ์ ๋ง๋ฒ ๊ฐ์์ง๋ง, ๊นจ์ง๊ธฐ ์ฌ์ ์ต๋๋ค. ๋น ์ง ์กฐ๊ฐ์ ๋ฐ๋ก ์ปจํ ์คํธ์์ต๋๋ค. AR์ด ์ง์ ์ผ๋ก ๋ชฐ์ ๊ฐ์ ์ฃผ๋ ค๋ฉด ์ฆ๊ฐํ๊ณ ์๋ ์ธ๊ณ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ WebXR Device API, ํนํ ํ๋ฉด ๊ฐ์ง(Plane Detection)๊ฐ ๋ฑ์ฅํฉ๋๋ค. ํ์ง๋ง ๊ทธ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ํ๋ฉด์ด ์๋ค๋ ๊ฒ์ ์๋ ๊ฒ๊ณผ ๊ทธ๊ฒ์ด ์ด๋ค ์ข ๋ฅ์ ํ๋ฉด์ธ์ง ์๋ ๊ฒ์ ์ ํ ๋ค๋ฅธ ์ฐจ์์ ์ด์ผ๊ธฐ์ ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ์๋งจํฑ ํ๋ฉด ์ธ์(semantic surface recognition)์ด๋ผ๊ณ ๋ ์๋ ค์ง WebXR ํ๋ฉด ๋ถ๋ฅ(WebXR Plane Classification)๊ฐ ์ ๊ณตํ๋ ๋์ฝ์ ๋๋ค. ์ด ๊ธฐ์ ์ ์น ๊ธฐ๋ฐ AR ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ๋ฅ, ๋ฒฝ, ํ ์ด๋ธ, ์ฒ์ฅ์ ๊ตฌ๋ณํ ์ ์๋๋ก ํ์ ์ค์ด์ค๋๋ค. ์ด ๊ฐ๋จํด ๋ณด์ด๋ ๊ตฌ๋ณ์ ํจ๋ฌ๋ค์์ ์ ํ์ด๋ฉฐ, ๊ฐ๋ฐ์๋ค์ด ๋ค์ดํฐ๋ธ ์ฑ ๋ค์ด๋ก๋ ์์ด๋ ์ ์ธ๊ณ ์์ญ์ต ๊ฐ์ ๊ธฐ๊ธฐ์์ ์ ๊ทผํ ์ ์๋ ์น ๋ธ๋ผ์ฐ์ ์์ ์ง์ ๋ ํ์ค์ ์ด๊ณ ์ง๋ฅ์ ์ด๋ฉฐ ์ ์ฉํ ๊ฒฝํ์ ๋ง๋ค ์ ์๊ฒ ํด์ค๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ํ๋ฉด ๊ฐ์ง์ ๊ธฐ๋ณธ ์ฌํญ์ ์ดํด๋ณด๊ณ , ๋ถ๋ฅ์ ํ์ ๊น์ด ํ๊ณ ๋ค๋ฉฐ, ์ค์ ๊ตฌํ ๊ณผ์ ์ ์๋ดํ๊ณ , ์ด๊ฒ์ด ๋ชฐ์ ํ ์น์ ์ํด ์ด์ด์ค ํฅ๋ฏธ๋ก์ด ๋ฏธ๋๋ฅผ ์กฐ๋งํ ๊ฒ์ ๋๋ค.
๋จผ์ , ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ: WebXR์ ํ๋ฉด ๊ฐ์ง๋ ๋ฌด์์ธ๊ฐ?
ํ๋ฉด์ ๋ถ๋ฅํ๊ธฐ ์ ์ ๋จผ์ ํ๋ฉด์ ์ฐพ์์ผ ํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ํ๋ AR ์์คํ ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ธ ํ๋ฉด ๊ฐ์ง์ ์ญํ ์ ๋๋ค. ํต์ฌ์ ์ผ๋ก ํ๋ฉด ๊ฐ์ง๋ ๊ธฐ๊ธฐ๊ฐ ์นด๋ฉ๋ผ์ ๋ชจ์ ์ผ์(์ข ์ข SLAM - ๋์์ ์์น ์ถ์ ๋ฐ ์ง๋ ์์ฑ - ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ธฐ์ )๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌผ๋ฆฌ์ ํ๊ฒฝ์ ์ค์บํ์ฌ ํํํ ํ๋ฉด์ ์๋ณํ๋ ํ๋ก์ธ์ค์ ๋๋ค.
WebXR ์ธ์ ์์ 'plane-detection' ๊ธฐ๋ฅ์ ํ์ฑํํ๋ฉด, ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ AR ํ๋ซํผ(์๋๋ก์ด๋์ Google ARCore๋ iOS์ Apple ARKit ๋ฑ)์ด ์ง์์ ์ผ๋ก ์ธ๊ณ๋ฅผ ๋ถ์ํฉ๋๋ค. ๋์ผ ํ๋ฉด์์ ์๋ ํน์ง์ ๋ค์ ๊ตฐ์ง์ ์ฐพ์ต๋๋ค. ํ๋๋ฅผ ์ฐพ์ผ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ XRPlane ๊ฐ์ฒด๋ก ๋ ธ์ถํฉ๋๋ค. ๊ฐ XRPlane์ ๋ค์๊ณผ ๊ฐ์ ์ค์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์์น ๋ฐ ๋ฐฉํฅ: 3D ๊ณต๊ฐ์์ ํ๋ฉด์ด ์ด๋์ ์์นํ๊ณ ์ด๋ป๊ฒ ํฅํ๊ณ ์๋์ง(์: ์ํ ๋๋ ์์ง)๋ฅผ ์๋ ค์ฃผ๋ ํ๋ ฌ์ ๋๋ค.
- ํด๋ฆฌ๊ณค: ๊ฐ์ง๋ ํ๋ฉด์ 2D ๊ฒฝ๊ณ๋ฅผ ์ ์ํ๋ ์ ์ ๋ค์ ์งํฉ์ ๋๋ค. ์ด๊ฒ์ ๋ณดํต ์๋ฒฝํ ์ง์ฌ๊ฐํ์ด ์๋๋ฉฐ, ๊ธฐ๊ธฐ๊ฐ ํ์คํ๊ฒ ์๋ณํ ํ๋ฉด์ ๋ถ๋ถ์ ๋ํ๋ด๋ ๋ถ๊ท์นํ ๋ค๊ฐํ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๋ง์ง๋ง ์ ๋ฐ์ดํธ ์๊ฐ: ํ๋ฉด ์ ๋ณด๊ฐ ๋ง์ง๋ง์ผ๋ก ์ ๋ฐ์ดํธ๋ ์์ ์ ๋ํ๋ด๋ ํ์์คํฌํ๋ก, ์์คํ ์ด ํ๊ฒฝ์ ๋ํด ๋ ๋ง์ด ํ์ตํจ์ ๋ฐ๋ผ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
์ด ๊ธฐ๋ณธ ์ ๋ณด๋ ๋งค์ฐ ๊ฐ๋ ฅํฉ๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ด๋ฅผ ํตํด ๊ณต์ค์ ๋ ์๋ ๊ฐ์ฒด์์ ๋ฒ์ด๋ ๊ฐ์ ์ฝํ ์ธ ๋ฅผ ์ค์ ์ธ๊ณ์ ํ๋ฉด์ ํ์ค์ ์ผ๋ก ๊ณ ์ ์ํค๋ ๊ฒฝํ์ ๋ง๋ค ์ ์์์ต๋๋ค. ์ค์ ํ ์ด๋ธ ์์ ๊ฐ์ ๊ฝ๋ณ์ ๋์ ์ ์์๊ณ , ์ฃผ๋ณ์ ๊ฑธ์ด ๋ค๋ ๋ ๊ทธ ์๋ฆฌ์ ๋จธ๋ฌผ๋ ์ต๋๋ค. ํ์ง๋ง ์ค๋ํ ํ๊ณ๋ ์ฌ์ ํ ๋จ์์์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ๊ฒ์ด ํ ์ด๋ธ์ด๋ผ๋ ์ฌ์ค์ ์ ํ ๋ชฐ๋์ต๋๋ค. ๊ทธ์ '์ํ๋ฉด'์ผ ๋ฟ์ด์์ต๋๋ค. ์ฌ์ฉ์๊ฐ '๋ฒฝ ํ๋ฉด'์ด๋ '๋ฐ๋ฅ ํ๋ฉด'์ ๊ฝ๋ณ์ ๋๋ ๊ฒ์ ๋ง์ ์ ์์๊ณ , ์ด๋ ํ์ค์ ํ์์ ๊นจ๋จ๋ฆฌ๋ ๋น์์์ ์ธ ์๋๋ฆฌ์ค๋ก ์ด์ด์ก์ต๋๋ค.
ํ๋ฉด ๋ถ๋ฅ์ ๋ฑ์ฅ: ํ๋ฉด์ ์๋ฏธ ๋ถ์ฌํ๊ธฐ
ํ๋ฉด ๋ถ๋ฅ๋ ๊ทธ ๋ค์์ ๋ ผ๋ฆฌ์ ์ธ ์งํ์ ๋๋ค. ์ด๋ ๋ฐ๊ฒฌ๋ ๊ฐ ํ๋ฉด์ ์๋งจํฑ ๋ ์ด๋ธ์ ์ถ๊ฐํ๋ ํ๋ฉด ๊ฐ์ง ๊ธฐ๋ฅ์ ํ์ฅ์ ๋๋ค. ๋จ์ํ "์ฌ๊ธฐ ์ํ๋ฉด์ด ์์ต๋๋ค"๋ผ๊ณ ๋งํ๋ ๋์ , "์ฌ๊ธฐ ์ํ๋ฉด์ด ์์ผ๋ฉฐ, ์ ๋ ์ด๊ฒ์ด ๋ฐ๋ฅ์ด๋ผ๊ณ ๋งค์ฐ ํ์ ํฉ๋๋ค."๋ผ๊ณ ๋งํด์ค๋๋ค.
์ด๋ ๊ธฐ๊ธฐ์์ ์คํ๋๋, ์ข ์ข ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ํด ๊ตฌ๋๋๋ ์ ๊ตํ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๋ฌ์ฑ๋ฉ๋๋ค. ์ด ๋ชจ๋ธ๋ค์ ์ค๋ด ํ๊ฒฝ์ ๋ฐฉ๋ํ ๋ฐ์ดํฐ์ ์ผ๋ก ํ๋ จ๋์ด ์ผ๋ฐ์ ์ธ ํ๋ฉด์ ํน์ง์ ์ธ ํผ์ฒ, ์์น, ๋ฐฉํฅ์ ์ธ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํฌ๊ณ ๋ฎ์ ์ํ๋ฉด์ ๋ฐ๋ฅ์ผ ๊ฐ๋ฅ์ฑ์ด ๋๊ณ , ํฐ ์์ง๋ฉด์ ๋ฒฝ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๋ ์๊ณ ๋์ ์ํ๋ฉด์ ์๋ง๋ ํ ์ด๋ธ์ด๋ ์ฑ ์์ผ ๊ฒ์ ๋๋ค.
ํ๋ฉด ๊ฐ์ง๋ก WebXR ์ธ์ ์ ์์ฒญํ๋ฉด, ์์คํ ์ ๊ฐ XRPlane์ ๋ํด semanticLabel ์์ฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ณต์ ์ฌ์์ ์ค๋ด ํ๊ฒฝ์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ๋ฉด์ ๋ค๋ฃจ๋ ํ์คํ๋ ๋ ์ด๋ธ ์งํฉ์ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํฉ๋๋ค.
floor: ๋ฐฉ์ ์ฃผ๋ ์ง๋ฉด.wall: ๊ณต๊ฐ์ ๋๋ฌ์ธ๋ ์์ง๋ฉด.ceiling: ๋ฐฉ์ ๋จธ๋ฆฌ ์ ํ๋ฉด.table: ์ผ๋ฐ์ ์ผ๋ก ๋ฌผ๊ฑด์ ๋๋ ๋ฐ ์ฌ์ฉ๋๋ ํํํ๊ณ ๋์ ํ๋ฉด.desk: ํ ์ด๋ธ๊ณผ ์ ์ฌํ๋ฉฐ, ์ข ์ข ์์ ์ด๋ ๊ณต๋ถ์ ์ฌ์ฉ๋จ.couch: ๋ถ๋๋ฌ์ด ์ฒ์ผ๋ก ๋ฎ์ธ ์ข์ ํ๋ฉด. ๊ฐ์ง๋ ํ๋ฉด์ ์ข์ ์์ญ์ ๋ํ๋ผ ์ ์์.door: ๋ฒฝ์ ๊ฐ๊ตฌ๋ถ๋ฅผ ๋ซ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ง์ผ ์ ์๋ ์ฅ๋ฒฝ.window: ๋ฒฝ์ ๊ฐ๊ตฌ๋ถ๋ก, ์ผ๋ฐ์ ์ผ๋ก ์ ๋ฆฌ๋ก ๋ฎ์ฌ ์์.other: ๋ค๋ฅธ ๋ฒ์ฃผ์ ์ํ์ง ์๋ ๊ฐ์ง๋ ํ๋ฉด์ ์ํ ํฌ๊ด์ ์ธ ๋ ์ด๋ธ.
์ด ๊ฐ๋จํ ๋ฌธ์์ด ๋ ์ด๋ธ์ ๊ธฐํํ์ ๋ฐ์ดํฐ๋ฅผ ์ํฉ์ ์ดํด์ ์กฐ๊ฐ์ผ๋ก ๋ณํํ์ฌ, ๋ ๋๋ํ๊ณ ๋ฏฟ์ ์ ์๋ AR ์ํธ์์ฉ์ ๋ง๋๋ ๊ฐ๋ฅ์ฑ์ ์ธ๊ณ๋ฅผ ์ด์ด์ค๋๋ค.
ํ๋ฉด ๋ถ๋ฅ๊ฐ ๋ชฐ์ ํ ๊ฒฝํ์ ํ๋๋ฅผ ๋ฐ๊พธ๋ ์ด์
ํ๋ฉด ์ ํ์ ๊ตฌ๋ณํ๋ ๋ฅ๋ ฅ์ ์ฌ์ํ ๊ฐ์ ์ด ์๋๋๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ AR ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ๊ณ ๊ตฌ์ถํ๋ ๋ฐฉ์์ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฐ๊ฟ๋๋ค. ๋จ์ํ ๋ทฐ์ด์์ ์ฌ์ฉ์์ ์ค์ ํ๊ฒฝ์ ๋ฐ์ํ๋ ์ง๋ฅ์ ์ด๊ณ ์ํธ์์ฉ์ ์ธ ์์คํ ์ผ๋ก ๊ฒฉ์์ํต๋๋ค.
ํฅ์๋ ํ์ค๊ฐ ๋ฐ ๋ชฐ์ ๊ฐ
๊ฐ์ฅ ์ฆ๊ฐ์ ์ธ ์ด์ ์ ํ์ค๊ฐ์ ๊ทน์ ์ธ ์ฆ๊ฐ์
๋๋ค. ์ด์ ๊ฐ์ ๊ฐ์ฒด๋ ํ์ค ์ธ๊ณ์ ๋
ผ๋ฆฌ์ ๋ฐ๋ผ ํ๋ํ ์ ์์ต๋๋ค. ๊ฐ์ ๋๊ตฌ๊ณต์ wall์ด ์๋ floor๋ก ํ์๋ ํ๋ฉด์์ ํ๊ฒจ์ผ ํฉ๋๋ค. ๋์งํธ ์ฌ์ง ์ก์๋ wall์๋ง ๋ฐฐ์นํ ์ ์์ด์ผ ํฉ๋๋ค. ๊ฐ์ ์ปคํผ์์ ceiling์ด ์๋ table์ ์์ฐ์ค๋ฝ๊ฒ ๋์ฌ์ผ ํฉ๋๋ค. ์๋งจํฑ ๋ ์ด๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฌํ ๊ฐ๋จํ ๊ท์น์ ์ ์ฉํจ์ผ๋ก์จ, ์ฌ์ฉ์์๊ฒ ์๋ฎฌ๋ ์ด์
์์ ์๋ค๋ ๊ฒ์ ์๊ธฐ์ํค๋ ๋ชฐ์
์ ๊นจ๋ ์๊ฐ๋ค์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๋ ์ค๋งํธํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)
์ ํต์ ์ธ AR์์ UI ์์๋ ์ข
์ข
์นด๋ฉ๋ผ ์์ ๋ ๋ค๋๊ฑฐ๋('ํค๋์
๋์คํ๋ ์ด' ๋๋ HUD) ์ธ์์ ์ด์ํ๊ฒ ๋ฐฐ์น๋์์ต๋๋ค. ํ๋ฉด ๋ถ๋ฅ๋ฅผ ์ฌ์ฉํ๋ฉด UI๊ฐ ํ๊ฒฝ์ ์ผ๋ถ๊ฐ ๋ ์ ์์ต๋๋ค. ์ธก์ ๋๊ตฌ๊ฐ ์๋์ผ๋ก ๋ฒฝ์ ๋ง์ถฐ์ง๋ ๊ฑด์ถ ์๊ฐํ ์ฑ์ด๋, desk ๋๋ table๋ก ์๋ณ๋ ๊ฐ์ฒด ํ๋ฉด์ ์ง์ ์ํธ์์ฉํ ์ง์นจ์ ํ์ํ๋ ์ ํ ์ค๋ช
์๋ฅผ ์์ํด ๋ณด์ธ์. ๋ฉ๋ด์ ์ ์ดํ์ ๊ทผ์ฒ์ ๋น wall์ ํฌ์ฌํ์ฌ ์ฌ์ฉ์์ ์ค์ฌ ์์ผ๋ฅผ ํ๋ณดํ ์ ์์ต๋๋ค.
๊ณ ๊ธ ๋ฌผ๋ฆฌ ๋ฐ ์คํด๋ฃจ์
ํ๊ฒฝ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ฉด ๋ ๋ณต์กํ๊ณ ํ์ค์ ์ธ ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ด์
์ด ๊ฐ๋ฅํด์ง๋๋ค. ๊ฒ์ ์ ๊ฐ์ ์บ๋ฆญํฐ๋ floor๋ฅผ ๊ฑท๊ณ , couch ์๋ก ์ ํํ๊ณ , walls๋ฅผ ํผํ๋ฉด์ ๋ฐฉ์ ์ง๋ฅ์ ์ผ๋ก ํ์ํ ์ ์์ต๋๋ค. ๋ํ, ์ด ์ ๋ณด๋ ์คํด๋ฃจ์ (occlusion)์ ๋์์ด ๋ฉ๋๋ค. ์คํด๋ฃจ์ ์ ์ผ๋ฐ์ ์ผ๋ก ๊น์ด ๊ฐ์ง๋ฅผ ํตํด ์ฒ๋ฆฌ๋์ง๋ง, table์ด floor ์์ ์๋ค๋ ๊ฒ์ ์๋ฉด ์์คํ
์ด ๋ฐ๋ฅ์ ์ ์๋ ๊ฐ์ ๊ฐ์ฒด์ ์ด๋ค ๋ถ๋ถ์ ์์ผ์์ ๊ฐ๋ ค์ผ ํ๋์ง์ ๋ํด ๋ ๋์ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ํฉ ์ธ์ ์ ํ๋ฆฌ์ผ์ด์
์ง์ ํ ํ์ ์ฌ๊ธฐ์ ์์ต๋๋ค. ์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์ ํ๊ฒฝ์ ๋ฐ๋ผ ๊ธฐ๋ฅ์ ์กฐ์ ํ ์ ์์ต๋๋ค.
- ์ธํ
๋ฆฌ์ด ๋์์ธ ์ฑ์ ๋ฐฉ์ ์ค์บํ๊ณ
floor์walls๋ฅผ ์๋ณํ ํ ์๋์ผ๋ก ๋ฉด์ ์ ๊ณ์ฐํ๊ณ ์ ์ ํ ๊ฐ๊ตฌ ๋ฐฐ์น๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. - ํผํธ๋์ค ์ฑ์ ์ฌ์ฉ์์๊ฒ
floor์์ ํธ์์ ์ ํ๊ฑฐ๋ ๊ทผ์ฒtable์ ๋ฌผ๋ณ์ ๋์ผ๋ผ๊ณ ์ง์ํ ์ ์์ต๋๋ค. - AR ๊ฒ์์ ์ฌ์ฉ์์ ๋ฐฉ ๊ตฌ์กฐ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๋ ๋ฒจ์ ์์ฑํ ์ ์์ต๋๋ค. ์ ๋ค์ด ๊ฐ์ง๋
couch์๋์์ ๊ธฐ์ด ๋์ค๊ฑฐ๋wall์ ๋ซ๊ณ ๋ํ๋ ์ ์์ต๋๋ค.
์ ๊ทผ์ฑ ๋ฐ ๋ด๋น๊ฒ์ด์
๋ ๋์๊ฐ, ์๋งจํฑ ํ๋ฉด ์ธ์์ ๋ณด์กฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ๊ธฐ์ด ๊ธฐ์ ์
๋๋ค. WebXR ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ฐ ์ฅ์ ์ธ์ด ์๋ก์ด ๊ณต๊ฐ์ ํ์ํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค. "floor์ ๋ช
ํํ ๊ฒฝ๋ก๊ฐ ์์ ์๊ณ , ์ค๋ฅธ์ชฝ์๋ table์ด ์์ผ๋ฉฐ, ์ ๋ฉด wall์๋ door๊ฐ ์์ต๋๋ค."์ ๊ฐ์ด ๊ตฌ๋๋ก ๊ตฌ์กฐ๋ฅผ ์ ๋ฌํจ์ผ๋ก์จ ๋ง์
๋๋ค. ์ด๋ AR์ ์ํฐํ
์ธ๋จผํธ ๋งค์ฒด์์ ์ถ์ ํฅ์์ํค๋ ์ ํธ๋ฆฌํฐ๋ก ๋ณํ์ํต๋๋ค.
์ค์ฉ ๊ฐ์ด๋: WebXR ํ๋ฉด ๋ถ๋ฅ ๊ตฌํํ๊ธฐ
์ด๋ก ์์ ์ค์ฒ์ผ๋ก ๋์ด๊ฐ ๋ณด๊ฒ ์ต๋๋ค. ์ฝ๋์์ ์ด ๊ธฐ๋ฅ์ ์ค์ ๋ก ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น์? ์ฌ์ฉํ๋ 3D ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Three.js, Babylon.js, A-Frame ๋ฑ)์ ๋ฐ๋ผ ์ธ๋ถ ์ฌํญ์ด ์ฝ๊ฐ ๋ค๋ฅผ ์ ์์ง๋ง, ํต์ฌ WebXR API ํธ์ถ์ ๋ณดํธ์ ์ ๋๋ค. WebXR ๊ฐ๋ฐ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ Three.js๋ฅผ ์์ ๋ก ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
์ ์ ์กฐ๊ฑด ๋ฐ ๋ธ๋ผ์ฐ์ ์ง์
๋จผ์ , WebXR, ํนํ ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ค์ ์ต์ฒจ๋จ ๊ธฐ์ ์ด๋ผ๋ ์ ์ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ง์์ด ์์ง ๋ณดํธ์ ์ด์ง๋ ์์ต๋๋ค.
- ๊ธฐ๊ธฐ: AR์ ์ง์ํ๋ ์ต์ ์ค๋งํธํฐ์ด๋ ํค๋์ ์ด ํ์ํฉ๋๋ค(์๋๋ก์ด๋๋ ARCore ํธํ, iOS๋ ARKit ํธํ).
- ๋ธ๋ผ์ฐ์ : ์ฃผ๋ก ์๋๋ก์ด๋์ฉ Chrome์์ ์ง์๋ฉ๋๋ค. ์ต์ ํธํ์ฑ ์ ๋ณด๋ ํญ์ caniuse.com๊ณผ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ํ์ธํ์ธ์.
- ๋ณด์ ์ปจํ ์คํธ: WebXR์ ๋ณด์ ์ปจํ ์คํธ(HTTPS ๋๋ localhost)๊ฐ ํ์ํฉ๋๋ค.
1๋จ๊ณ: XR ์ธ์ ์์ฒญํ๊ธฐ
ํ๋ฉด ๋ถ๋ฅ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด 'immersive-ar' ์ธ์
์ ์์ฒญํ ๋ ๋ช
์์ ์ผ๋ก ์์ฒญํด์ผ ํฉ๋๋ค. ์ด๋ requiredFeatures ๋ฐฐ์ด์ 'plane-detection'์ ์ถ๊ฐํ์ฌ ์ํ๋ฉ๋๋ค. ์๋งจํฑ ๋ ์ด๋ธ์ ์ด ๊ธฐ๋ฅ์ ์ผ๋ถ์ด์ง๋ง, ๋ณ๋์ ํ๋๊ทธ๋ ์์ต๋๋ค. ์์คํ
์ด ๋ถ๋ฅ๋ฅผ ์ง์ํ๋ค๋ฉด ํ๋ฉด ๊ฐ์ง๊ฐ ํ์ฑํ๋ ๋ ๋ ์ด๋ธ์ ์ ๊ณตํ ๊ฒ์
๋๋ค.
async function activateXR() { if (navigator.xr) { try { const session = await navigator.xr.requestSession('immersive-ar', { requiredFeatures: ['local', 'hit-test', 'plane-detection'] }); // ์ธ์ ์ค์ ์ฝ๋๋ ์ฌ๊ธฐ์... } catch (e) { console.error("AR ์ธ์ ์์ ์คํจ:", e); } } }
2๋จ๊ณ: ๋ ๋ ๋ฃจํ์์ ํ๋ฉด์ ์ ๊ทผํ๊ธฐ
์ธ์ ์ด ์คํ๋๋ฉด ๋ ๋ ๋ฃจํ(์ผ๋ฐ์ ์ผ๋ก `session.requestAnimationFrame`์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ๋ ์๋ง๋ค ์คํ๋๋ ํจ์)๊ฐ ์๊น๋๋ค. ์ด ๋ฃจํ ์์์ `XRFrame` ๊ฐ์ฒด๋ AR ์ธ๊ณ์ ํ์ฌ ์ํ์ ๋ํ ์ค๋ ์ท์ ์ ๊ณตํฉ๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ง๋ ํ๋ฉด ์งํฉ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
ํ๋ฉด์ ์๋ฐ์คํฌ๋ฆฝํธ์ `Set`๊ณผ ์ ์ฌํ ๊ฐ์ฒด์ธ `XRPlaneSet`์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. ์ด ์งํฉ์ ์ํํ์ฌ ๊ฐ ๊ฐ๋ณ `XRPlane`์ ์ป์ ์ ์์ต๋๋ค. ํต์ฌ์ ๊ฐ ํ๋ฉด์์ `semanticLabel` ์์ฑ์ ํ์ธํ๋ ๊ฒ์ ๋๋ค.
function onXRFrame(time, frame) { const pose = frame.getViewerPose(referenceSpace); if (pose) { // ... ์นด๋ฉ๋ผ ๋ฐ ๋ค๋ฅธ ๊ฐ์ฒด ์ ๋ฐ์ดํธ const planes = frame.detectedPlanes; // ์ด๊ฒ์ด XRPlaneSet์ ๋๋ค planes.forEach(plane => { // ์ด ํ๋ฉด์ ์ ์ ๋ณธ ์ ์ด ์๋์ง ํ์ธ if (!scenePlaneObjects.has(plane)) { // ์๋ก์ด ํ๋ฉด์ด ๊ฐ์ง๋จ console.log(`์๋ก์ด ํ๋ฉด ๋ฐ๊ฒฌ, ๋ ์ด๋ธ: ${plane.semanticLabel}`); createPlaneVisualization(plane); } }); } session.requestAnimationFrame(onXRFrame); }
3๋จ๊ณ: ๋ถ๋ฅ๋ ํ๋ฉด ์๊ฐํํ๊ธฐ (Three.js ์์ )
์ด์ ์ฌ๋ฏธ์๋ ๋ถ๋ถ์ ๋๋ค. ๋ถ๋ฅ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ์๊ฐํํ๋ ๋ฐฉ์์ ๋ฐ๊พธ๋ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๋๋ฒ๊น ๋ฐ ๊ฐ๋ฐ ๊ธฐ๋ฒ์ ํ๋ฉด ์ ํ์ ๋ฐ๋ผ ์์ ์ฝ๋๋ฅผ ์ง์ ํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ์์คํ ์ด ๋ฌด์์ ์๋ณํ๊ณ ์๋์ง์ ๋ํ ์ฆ๊ฐ์ ์ธ ์๊ฐ์ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
๋จผ์ , ์๋งจํฑ ๋ ์ด๋ธ์ ๋ฐ๋ผ ๋ค๋ฅธ ์์์ ์ฌ์ง์ ๋ฐํํ๋ ํฌํผ ํจ์๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
function getMaterialForLabel(label) { switch (label) { case 'floor': return new THREE.MeshBasicMaterial({ color: 0x00ff00, transparent: true, opacity: 0.5 }); // ์ด๋ก case 'wall': return new THREE.MeshBasicMaterial({ color: 0x0000ff, transparent: true, opacity: 0.5 }); // ํ๋ case 'table': case 'desk': return new THREE.MeshBasicMaterial({ color: 0xffff00, transparent: true, opacity: 0.5 }); // ๋ ธ๋ case 'ceiling': return new THREE.MeshBasicMaterial({ color: 0xff00ff, transparent: true, opacity: 0.5 }); // ์ํ default: return new THREE.MeshBasicMaterial({ color: 0x808080, transparent: true, opacity: 0.5 }); // ํ์ } }
๋ค์์ผ๋ก, ํ๋ฉด์ ์ํ 3D ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ํจ์๋ฅผ ์์ฑํ ๊ฒ์ ๋๋ค. `XRPlane` ๊ฐ์ฒด๋ ์ ์ ์งํฉ์ผ๋ก ์ ์๋ ํด๋ฆฌ๊ณค์ ์ ๊ณตํฉ๋๋ค. ์ด ์ ์ ๋ค์ ์ฌ์ฉํ์ฌ `THREE.Shape`๋ฅผ ๋ง๋ค๊ณ , ์ฝ๊ฐ ๋์ถ์์ผ ๋๊ป๋ฅผ ์ฃผ๊ณ ๋ณด์ด๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
const scenePlaneObjects = new Map(); // ํ๋ฉด์ ์ถ์ ํ๊ธฐ ์ํด function createPlaneVisualization(plane) { // ํ๋ฉด์ ํด๋ฆฌ๊ณค ์ ์ ๋ค๋ก๋ถํฐ ์ง์ค๋ฉํธ๋ฆฌ ์์ฑ const polygon = plane.polygon; const shape = new THREE.Shape(); shape.moveTo(polygon[0].x, polygon[0].z); for (let i = 1; i < polygon.length; i++) { shape.lineTo(polygon[i].x, polygon[i].z); } shape.closePath(); const geometry = new THREE.ShapeGeometry(shape); geometry.rotateX(-Math.PI / 2); // ์ํ/์์ง ๋ฐฉํฅ์ ๋ง๊ฒ ํ์ // ๋ ์ด๋ธ์ ๋ง๋ ์ฌ์ง ๊ฐ์ ธ์ค๊ธฐ const material = getMaterialForLabel(plane.semanticLabel); const mesh = new THREE.Mesh(geometry, material); // ํ๋ฉด์ ํฌ์ฆ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์ฌ์ ์์น์ ๋ฐฉํฅ ์ค์ const pose = new THREE.Matrix4(); pose.fromArray(plane.transform.matrix); mesh.matrix.copy(pose); mesh.matrixAutoUpdate = false; scene.add(mesh); scenePlaneObjects.set(plane, mesh); }
ํ๋ฉด ์งํฉ์ ๋ณ๊ฒฝ๋ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์. ์๋ก์ด ํ๋ฉด์ด ์ถ๊ฐ๋ ์ ์๊ณ , ๊ธฐ์กด ํ๋ฉด์ด ์ ๋ฐ์ดํธ๋ ์ ์์ผ๋ฉฐ(ํด๋ฆฌ๊ณค์ด ์ปค์ง ์ ์์), ์์คํ ์ด ์ดํด๋ฅผ ์์ ํ๋ฉด ์ผ๋ถ๊ฐ ์ ๊ฑฐ๋ ์๋ ์์ต๋๋ค. ๋ ๋ ๋ฃจํ๋ ์ด๋ฏธ ๋ฉ์ฌ๋ฅผ ์์ฑํ `XRPlane` ๊ฐ์ฒด๋ฅผ ์ถ์ ํ๊ณ , `detectedPlanes` ์งํฉ์์ ์ฌ๋ผ์ง ํ๋ฉด์ ๋ฉ์ฌ๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ์ด๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
์ค์ ์ฌ์ฉ ์ฌ๋ก ๋ฐ ์์ด๋์ด
๊ธฐ์ ์ ๊ธฐ๋ฐ์ด ๋ง๋ จ๋์์ผ๋, ์ด๊ฒ์ด ๋ฌด์์ ๊ฐ๋ฅํ๊ฒ ํ๋์ง ๋ค์ ๋์๋ณด๊ฒ ์ต๋๋ค. ๊ทธ ์ํฅ์ ์๋ง์ ์ฐ์ ์ ๊ฑธ์ณ ์์ต๋๋ค.
์ด์ปค๋จธ์ค ๋ฐ ๋ฆฌํ ์ผ
์ด๊ฒ์ ์์
์ ์ผ๋ก ๊ฐ์ฅ ์ค์ํ ๋ถ์ผ ์ค ํ๋์
๋๋ค. IKEA์ ๊ฐ์ ํ์ฌ๋ค์ ์ด๋ฏธ ๊ฐ์ ๊ฐ๊ตฌ ๋ฐฐ์น์ ํ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ํ๋ฉด ๋ถ๋ฅ๋ ์ด๋ฅผ ๋ค์ ๋จ๊ณ๋ก ๋์ด์ฌ๋ฆฝ๋๋ค. ์ฌ์ฉ์๊ฐ ๋ฌ๊ทธ๋ฅผ ์ ํํ๋ฉด ์ฑ์ floor๋ก ํ์๋ ํ๋ฉด์๋ง ๋์ ์ ์๋๋ก ํ์ฉํฉ๋๋ค. ์๋ก์ด ์น๋ค๋ฆฌ์๋ฅผ ์ํํด ๋ณด๋ฉด ceiling์ ๋ง์ถฐ์ง ๊ฒ์
๋๋ค. ์ด๋ ์ฌ์ฉ์ ๋ง์ฐฐ์ ์ค์ด๊ณ ๊ฐ์ ์ฒดํ ๊ฒฝํ์ ํจ์ฌ ๋ ์ง๊ด์ ์ด๊ณ ํ์ค์ ์ผ๋ก ๋ง๋ค์ด ๊ตฌ๋งค ํ์ ์ ๋์
๋๋ค.
๊ฒ์ ๋ฐ ์ํฐํ ์ธ๋จผํธ
๊ฐ์ ์ ์๋๋ฌผ์ด ๋น์ ์ ์ง์ ์ดํดํ๋ ๊ฒ์์ ์์ํด ๋ณด์ธ์. ๊ณ ์์ด๋ couch์์ ๋ฎ์ ์ ์ ์ ์๊ณ , ๊ฐ๋ floor๋ฅผ ๊ฐ๋ก์ง๋ฌ ๊ณต์ ์ซ์ ์ ์์ผ๋ฉฐ, ๊ฑฐ๋ฏธ๋ wall์ ๊ธฐ์ด ์ฌ๋ผ๊ฐ ์ ์์ต๋๋ค. ํ์ ๋ํ์ค ๊ฒ์์ ๋น์ ์ table ์์์ ํ๋ ์ดํ ์ ์์ผ๋ฉฐ, ์ ๋ค์ ๊ฐ์ฅ์๋ฆฌ๋ฅผ ์กด์คํฉ๋๋ค. ์ด ์์ค์ ํ๊ฒฝ ์ํธ์์ฉ์ ๊น์ด ๊ฐ์ธ์ ์ด๊ณ ๋์์ด ๋ค์ ํ๋ ์ดํ ์ ์๋ ๊ฒ์ ๊ฒฝํ์ ๋ง๋ญ๋๋ค.
๊ฑด์ถ, ์์ง๋์ด๋ง ๋ฐ ๊ฑด์ค(AEC)
์ ๋ฌธ๊ฐ๋ค์ WebXR์ ์ฌ์ฉํ์ฌ ํ์ฅ์์ ๋ ๋์ ์ ํ๋๋ก ์ค๊ณ๋ฅผ ์๊ฐํํ ์ ์์ต๋๋ค. ๊ฑด์ถ๊ฐ๋ ๊ฐ์ ๋ฒฝ ํ์ฅ์ ํฌ์ฌํ๊ณ ๊ธฐ์กด์ ๋ฌผ๋ฆฌ์ wall๊ณผ ์ด๋ป๊ฒ ์ ํํ๊ฒ ์ ๋ ฌ๋๋์ง ๋ณผ ์ ์์ต๋๋ค. ๊ฑด์ค ๊ด๋ฆฌ์๋ ๋ํ ์ฅ๋น์ 3D ๋ชจ๋ธ์ floor์ ๋ฐฐ์นํ์ฌ ์ ํฉํ์ง ํ์ธํ๊ณ ๋ฌผ๋ฅ๋ฅผ ๊ณํํ ์ ์์ต๋๋ค. ์ด๋ ์ค๋ฅ๋ฅผ ์ค์ด๊ณ ์ดํด๊ด๊ณ์ ๊ฐ์ ์์ฌ์ํต์ ๊ฐ์ ํฉ๋๋ค.
ํ๋ จ ๋ฐ ์๋ฎฌ๋ ์ด์
์ฐ์
ํ๋ จ์ ์ํด WebXR์ ์์ ํ๊ณ ๋น์ฉ ํจ์จ์ ์ธ ์๋ฎฌ๋ ์ด์
์ ๋ง๋ค ์ ์์ต๋๋ค. ํ๋ จ์์ ์ค์ desk์ ๊ฐ์ ๋ชจ๋ธ์ ๋ฐฐ์นํ์ฌ ๋ณต์กํ ๊ธฐ๊ณ ์๋๋ฒ์ ๋ฐฐ์ธ ์ ์์ต๋๋ค. ์ง์นจ๊ณผ ๊ฒฝ๊ณ ๊ฐ ์ธ์ ํ wall ํ๋ฉด์ ๋ํ๋ ๋น์ผ ๋ฌผ๋ฆฌ์ ์๋ฎฌ๋ ์ดํฐ ์์ด๋ ํ๋ถํ๊ณ ์ํฉ ์ธ์์ ์ธ ํ์ต ํ๊ฒฝ์ ์กฐ์ฑํ ์ ์์ต๋๋ค.
๊ณผ์ ์ ์์ผ๋ก์ ์ ๋ง
๋งค์ฐ ์ ๋งํ์ง๋ง, WebXR ํ๋ฉด ๋ถ๋ฅ๋ ์์ง ์ ํฅ ๊ธฐ์ ์ด๋ฉฐ ํด๊ฒฐํด์ผ ํ ๊ณผ์ ๋ค์ด ์์ต๋๋ค.
- ์ ํ์ฑ ๋ฐ ์ ๋ขฐ์ฑ: ๋ถ๋ฅ๋ ๊ฒฐ์ ๋ก ์ ์ด ์๋๋ผ ํ๋ฅ ์ ์
๋๋ค. ๋ฎ์ ์ปคํผ ํ
์ด๋ธ์ ์ด๊ธฐ์
floor์ ์ผ๋ถ๋ก ์๋ชป ์๋ณ๋ ์ ์์ผ๋ฉฐ, ์ด์์ ํ ์ฑ ์์ ์ ํ ์ธ์๋์ง ์์ ์ ์์ต๋๋ค. ์ ํ๋๋ ๊ธฐ๊ธฐ์ ํ๋์จ์ด, ์กฐ๋ช ์กฐ๊ฑด, ํ๊ฒฝ์ ๋ณต์ก์ฑ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ๊ฐ๋ฐ์๋ค์ ๊ฐ๋ ๋ฐ์ํ๋ ์ค๋ถ๋ฅ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ ๋งํผ ๊ฒฌ๊ณ ํ ๊ฒฝํ์ ์ค๊ณํด์ผ ํฉ๋๋ค. - ์ ํ๋ ๋ ์ด๋ธ ์งํฉ: ํ์ฌ ์๋งจํฑ ๋ ์ด๋ธ ์งํฉ์ ์ ์ฉํ์ง๋ง ์์ ํ์ง๋ ์์ต๋๋ค. ๊ณ๋จ, ์กฐ๋ฆฌ๋, ์์ ๋๋ ์ฑ ์ฅ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๊ฐ์ฒด๋ฅผ ํฌํจํ์ง ์์ต๋๋ค. ๊ธฐ์ ์ด ์ฑ์ํจ์ ๋ฐ๋ผ ์ด ๋ชฉ๋ก์ด ํ์ฅ๋์ด ํจ์ฌ ๋ ์ธ๋ถํ๋ ํ๊ฒฝ ์ดํด๋ฅผ ์ ๊ณตํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ: ํ๊ฒฝ์ ์ง์์ ์ผ๋ก ์ค์บํ๊ณ , ๋ฉ์ฌ๋ฅผ ๋ง๋ค๊ณ , ๋ถ๋ฅํ๋ ๊ฒ์ ๊ณ์ฐ ์ง์ฝ์ ์ ๋๋ค. ์ด๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ์ค์ํ ์์์ธ ๋ฐฐํฐ๋ฆฌ์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ์๋ชจํฉ๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฑ๋ฅ์ ์ ์ํด์ผ ํฉ๋๋ค.
- ๊ฐ์ธ์ ๋ณด ๋ณดํธ: ๋ณธ์ง์ ์ผ๋ก ํ๊ฒฝ ๊ฐ์ง ๊ธฐ์ ์ ์ฌ์ฉ์์ ๊ฐ์ธ ๊ณต๊ฐ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์บก์ฒํฉ๋๋ค. WebXR ์ฌ์์ ๊ฐ์ธ์ ๋ณด ๋ณดํธ๋ฅผ ํต์ฌ์ผ๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ชจ๋ ์ฒ๋ฆฌ๋ ๊ธฐ๊ธฐ ๋ด์์ ์ด๋ฃจ์ด์ง๋ฉฐ ์นด๋ฉ๋ผ ๋ฐ์ดํฐ๋ ์น ํ์ด์ง๋ก ์ ์ก๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๊ณ๊ฐ ํฌ๋ช ์ฑ๊ณผ ๋ช ํํ ๋์ ๋ชจ๋ธ์ ํตํด ์ฌ์ฉ์ ์ ๋ขฐ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ฏธ๋ ๋ฐฉํฅ์ฑ
ํ๋ฉด ์ธ์์ ๋ฏธ๋๋ ๋ฐ์ต๋๋ค. ๋ช ๊ฐ์ง ํต์ฌ ๋ถ์ผ์์ ๋ฐ์ ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค. ๊ฐ์ง ๊ฐ๋ฅํ ์๋งจํฑ ๋ ์ด๋ธ ์งํฉ์ ์์ฌํ ์ฌ์ง ์์ด ๋์ด๋ ๊ฒ์ ๋๋ค. ๋ํ ๊ฐ๋ฐ์๊ฐ TensorFlow.js์ ๊ฐ์ ์น ๊ธฐ๋ฐ ๋จธ์ ๋ฌ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ด๋ จ๋ ํน์ ๊ฐ์ฒด๋ ํ๋ฉด์ ์ธ์ํ๋๋ก ๋ชจ๋ธ์ ํ๋ จ์ํฌ ์ ์๋ ๋ง์ถคํ ๋ถ๋ฅ๊ธฐ์ ๋ฑ์ฅ์ ๋ณผ ์๋ ์์ต๋๋ค. ๋ค์ํ ์ ํ์ ๋ฒฝ๋ฉด ์ฝ์ผํธ๋ฅผ ์๋ณํ๊ณ ๋ ์ด๋ธ์ ๋ถ์ผ ์ ์๋ ์ ๊ธฐ ๊ธฐ์ ์์ฉ ์ฑ์ ์์ํด ๋ณด์ธ์. ํ๋ฉด ๋ถ๋ฅ์ DOM ์ค๋ฒ๋ ์ด API์ ๊ฐ์ ๋ค๋ฅธ WebXR ๋ชจ๋์ ํตํฉ์ 2D ์น ์ฝํ ์ธ ์ 3D ์ธ๊ณ ๊ฐ์ ํจ์ฌ ๋ ๊ธด๋ฐํ ํตํฉ์ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก : ๊ณต๊ฐ ์ธ์ ์น ๊ตฌ์ถํ๊ธฐ
WebXR ํ๋ฉด ๋ถ๋ฅ๋ AR์ ๊ถ๊ทน์ ์ธ ๋ชฉํ์ธ ๋์งํธ๊ณผ ๋ฌผ๋ฆฌ์ ์ธ๊ณ์ ๋งค๋๋ฝ๊ณ ์ง๋ฅ์ ์ธ ์ตํฉ์ ํฅํ ๊ธฐ๋ ๋น์ ์ธ ๋ฐ๊ฑธ์์ ๋ํ๋ ๋๋ค. ์ด๋ ๋จ์ํ ์ฝํ ์ธ ๋ฅผ ์ธ์ ์์ ๋ฐฐ์นํ๋ ๊ฒ์์ ๋ฒ์ด๋, ์ธ์์ ์ง์ ์ผ๋ก ์ดํดํ๊ณ ์ํธ์์ฉํ ์ ์๋ ๊ฒฝํ์ ๋ง๋๋ ๊ฒ์ผ๋ก ์ฐ๋ฆฌ๋ฅผ ์ด๋์ด๊ฐ๋๋ค. ๊ฐ๋ฐ์์๊ฒ๋ ๋ ๋์ ์์ค์ ํ์ค๊ฐ, ์ ์ฉ์ฑ, ์ฐฝ์์ฑ์ ์ด์ด์ฃผ๋ ๊ฐ๋ ฅํ ์ ๋๊ตฌ์ ๋๋ค. ์ฌ์ฉ์์๊ฒ๋ AR์ด ๋จ์ํ ์ ๊ธฐํจ์ด ์๋๋ผ ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ฐ๊ณ , ์ผํ๊ณ , ๋๊ณ , ์ ๋ณด์ ์ฐ๊ฒฐ๋๋ ๋ฐฉ์์ ์ง๊ด์ ์ด๊ณ ํ์์ ์ธ ๋ถ๋ถ์ด ๋๋ ๋ฏธ๋๋ฅผ ์ฝ์ํฉ๋๋ค.
๋ชฐ์ ํ ์น์ ์์ง ์ด๊ธฐ ๋จ๊ณ์ ์์ผ๋ฉฐ, ์ฐ๋ฆฌ๋ ๊ทธ ๋ฏธ๋์ ๊ฑด์ถ๊ฐ์ ๋๋ค. ํ๋ฉด ๋ถ๋ฅ์ ๊ฐ์ ๊ธฐ์ ์ ์์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ค์ ์ค๋๋ ์ฐจ์ธ๋ ๊ณต๊ฐ ์ธ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์คํ์ ์์ํ๊ณ , ๋ฐ๋ชจ๋ฅผ ๋ง๋ค๊ณ , ๋ฐ๊ฒฌํ ๊ฒ์ ๊ณต์ ํ๋ฉฐ, ์ฐ๋ฆฌ ์ฃผ๋ณ์ ๊ณต๊ฐ์ ์ดํดํ๋ ์น์ ๋ง๋๋ ๋ฐ ๋์ฐธํด ์ฃผ์ธ์.