์ค์ฌ์ ๊ฐ๊น์ด AR ๊ฒฝํ์ ๊ตฌํํ์ธ์. ์ด ์ข ํฉ ๊ฐ์ด๋๋ WebXR ์กฐ๋ช ์ถ์ API์ ํต์ฌ ๊ฐ๋ ๊ณผ API๋ถํฐ ์ค์ ๊ตฌํ ๋ฐ ๋ฏธ๋ ๋ํฅ๊น์ง ์ฌ์ธต์ ์ผ๋ก ํ๊ตฌํฉ๋๋ค.
WebXR ์กฐ๋ช ์ถ์ : ์ฌ์ค์ ์ธ ์ฆ๊ฐ ํ์ค ๋ ๋๋ง ์ฌ์ธต ๋ถ์
์ฆ๊ฐ ํ์ค(AR)์ ๋์งํธ ์ธ๊ณ์ ๋ฌผ๋ฆฌ์ ์ธ๊ณ๋ฅผ ๋งค๋๋ฝ๊ฒ ์ตํฉํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ํ๊ณ ์์ต๋๋ค. ๊ฐ์ ์ํ๋ฅผ ๊ฑฐ์ค์ ๋์๋ณด๋ ์ ํ ์๊ฐํ, ์ฃผ๋ฐฉ ์ํ ์๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ ์บ๋ฆญํฐ๊ฐ ๋ฑ์ฅํ๋ ๋ชฐ์ ํ ๊ฒ์, ๊ณ ๋ ์ ๋ฌผ์ ์์ํ๊ฒ ์ฌํํ๋ ๊ต์ก์ฉ ์ฑ ๋ฑ์์ ์ฐ๋ฆฌ๋ ์ด๋ฅผ ๋ชฉ๊ฒฉํด์์ต๋๋ค. ํ์ง๋ง ์ค๋๋ ฅ ์๋ AR ๊ฒฝํ๊ณผ ์ธ๊ณต์ ์ด๊ณ ์ด์ํ๊ฒ ๋๊ปด์ง๋ ๊ฒฝํ์ ๊ตฌ๋ถํ๋ ๊ฒ์ ๋ฌด์์ผ๊น์? ๊ทธ ํด๋ต์ ๋ฐ๋ก ๋น์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋์งํธ ๊ฐ์ฒด๊ฐ ์ค์ ํ๊ฒฝ์ ๋น์ ๋ฐ์ํ์ง ์์ ๋, ์ฐ๋ฆฌ์ ๋๋ ์ฆ์ ๊ทธ๊ฒ์ ๊ฐ์ง๋ก ์ธ์ํฉ๋๋ค. ํ๋ฉด์ ์ด๊ณ ์ผ๋ฐ์ ์ธ ์กฐ๋ช ์ ๋ฐ์ 3D ๋ชจ๋ธ์ ํ๋ฉด์ ๋ถ์ฌ๋์ ์คํฐ์ปค์ฒ๋ผ ๋ณด์ฌ ์กด์ฌ๊ฐ์ ์์๊ฐ์ ๊นจ๋จ๋ฆฝ๋๋ค. ์ง์ ํ ํฌํ ๋ฆฌ์ผ๋ฆฌ์ฆ์ ๋ฌ์ฑํ๋ ค๋ฉด, ๊ฐ์ ๊ฐ์ฒด๋ ์ค์ ๊ฐ์ฒด์ ๋์ผํ ๊ด์์ ์ํด ์กฐ๋ช ๋๊ณ , ๋์ผํ ๊ทธ๋ฆผ์๋ฅผ ๋๋ฆฌ์ฐ๋ฉฐ, ๋์ผํ ์ฃผ๋ณ ํ๊ฒฝ์ ๋ฐ์ฌํด์ผ ํฉ๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ WebXR ์กฐ๋ช ์ถ์ API๊ฐ ์น ๊ฐ๋ฐ์๋ค์๊ฒ ํ์ ์ ์ธ ๋๊ตฌ๊ฐ ๋ฉ๋๋ค.
์ด ์ข ํฉ ๊ฐ์ด๋์์๋ WebXR ์กฐ๋ช ์ถ์ ์ ์ธ๊ณ๋ฅผ ์ฌ์ธต์ ์ผ๋ก ํ๊ตฌํ ๊ฒ์ ๋๋ค. ์ ์กฐ๋ช ์ด AR ๋ฆฌ์ผ๋ฆฌ์ฆ์ ์ด์์ธ์ง ์์๋ณด๊ณ , API ๋ค์ ์จ๊ฒจ์ง ๊ธฐ์ ์ ๋น๋ฐ์ ํํค์น๋ฉฐ, ์ค์ ๊ตฌํ ๋จ๊ณ๋ฅผ ์๋ดํ๊ณ , ๋ชฐ์ ํ ์น ๋ ๋๋ง์ ๋ฏธ๋๋ฅผ ์ ๋งํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ธ์ ์คํ ์น์์ ์ง์ ์ฐจ์ธ๋ AR ๊ฒฝํ์ ๊ตฌ์ถํ๊ณ ์ ํ๋ ์น ๊ฐ๋ฐ์, 3D ์ํฐ์คํธ, XR ์ ํธ๊ฐ, ๊ทธ๋ฆฌ๊ณ ์ ํ ๊ด๋ฆฌ์๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
๋ณด์ด์ง ์๋ ํ: ์ ์กฐ๋ช ์ ์ฌ์ค์ ์ธ AR์ ์ด์์ธ๊ฐ
API์ ๊ธฐ์ ์ ์ธ๋ถ ์ฌํญ์ ํ๊ณ ๋ค๊ธฐ ์ ์, ์ ์กฐ๋ช ์ด ๋ฏฟ์ ์ ์๋ AR์ ๋ง๋๋ ๋ฐ ๊ทธํ ๋ก ๊ทผ๋ณธ์ ์ธ์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ชฉํ๋ ์์ "์ง๊ฐ์ ์ฌ์ค์ฃผ์(perceptual realism)"๋ฅผ ๋ฌ์ฑํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋ฐ๋์ ์๋ฐฑ๋ง ๊ฐ์ ํด๋ฆฌ๊ณค์ผ๋ก ์ด๋ฃจ์ด์ง ์ด๊ณ ํ์ง ๋ชจ๋ธ์ ๋ง๋๋ ๊ฒ์ ๋ํ ๊ฒ์ด ์๋๋๋ค. ์ธ๊ฐ์ ์๊ฐ ์์คํ ์ ์์ฌ ๋์งํธ ๊ฐ์ฒด๋ฅผ ์ฅ๋ฉด์ ์ผ๋ถ๋ก ๋ฐ์๋ค์ด๊ฒ ๋ง๋๋ ๊ฒ์ ๊ดํ ๊ฒ์ ๋๋ค. ์กฐ๋ช ์ ์ฐ๋ฆฌ ๋๊ฐ ๊ฐ์ฒด์ ๋ชจ์, ์ง๊ฐ, ๊ทธ๋ฆฌ๊ณ ํ๊ฒฝ๊ณผ์ ๊ด๊ณ๋ฅผ ์ดํดํ๋ ๋ฐ ์ฌ์ฉํ๋ ํ์์ ์ธ ์๊ฐ์ ๋จ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ํ์ค ์ธ๊ณ์์ ์ข ์ข ๋น์ฐํ๊ฒ ์ฌ๊ธฐ๋ ์ฌ์ค์ ์ธ ์กฐ๋ช ์ ํต์ฌ ์์๋ค์ ์๊ฐํด ๋ด ์๋ค:
- ์ฃผ๋ณ๊ด(Ambient Light): ์ด๊ฒ์ ๊ณต๊ฐ์ ์ฑ์ฐ๋ ๋ถ๋๋ฝ๊ณ ๋ฐฉํฅ์ฑ์ด ์๋ ๋น์ ๋๋ค. ๋ฒฝ, ์ฒ์ฅ, ๋ฐ๋ฅ์์ ๋ฐ์ฌ๋์ด ์ง์ฌ๊ด์ ์ด ๋ฟ์ง ์๋ ์์ญ์ ๋น์ถฅ๋๋ค. ์ด๊ฒ์ด ์๋ค๋ฉด ๊ทธ๋ฆผ์๋ ์์ ํ ๊ฒ์์์ด ๋์ด ๋ถ์์ฐ์ค๋ฝ๊ณ ๊ฑฐ์น ๋๋์ ์ค ๊ฒ์ ๋๋ค.
- ๋ฐฉํฅ๊ด(Directional Light): ์ด๊ฒ์ ํ์์ด๋ ๋ฐ์ ์ฒ์ฅ ์กฐ๋ช ๊ณผ ๊ฐ์ด ์ฃผ๋ก ๋ฉ๋ฆฌ ์๋ ์ฃผ ๊ด์์์ ๋์ค๋ ๋น์ ๋๋ค. ๋๋ ทํ ํ์ด๋ผ์ดํธ๋ฅผ ๋ง๋ค๊ณ ๊ฒฝ๊ณ๊ฐ ๋ช ํํ ๊ทธ๋ฆผ์๋ฅผ ๋๋ฆฌ์ ๊ฐ์ฒด์ ํํ์ ์์น๋ฅผ ๊ฐํ๊ฒ ์ธ์์์ผ ์ค๋๋ค.
- ๋ฐ์ฌ์ ์ ๋ฐ์ฌ(Reflections and Specularity): ๊ฐ์ฒด ํ๋ฉด์ด ์ฃผ๋ณ ์ธ๊ณ๋ฅผ ์ด๋ป๊ฒ ๋ฐ์ฌํ๋์ง๋ ๊ทธ ์ฌ์ง์ ํน์ฑ์ ๋ํด ์๋ ค์ค๋๋ค. ํฌ๋กฌ ๊ตฌ์ฒด๋ ๋ ์นด๋ก์ด ๊ฑฐ์ธ ๊ฐ์ ๋ฐ์ฌ๋ฅผ, ํ๋ผ์คํฑ ์ฅ๋๊ฐ์ ๋ถ๋๋ฝ๊ณ ํ๋ฆฟํ ํ์ด๋ผ์ดํธ(์ ๋ฐ์ฌ)๋ฅผ, ๋๋ฌด ๋ธ๋ก์ ๊ฑฐ์ ๋ฐ์ฌ๊ฐ ์์ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋ฐ์ฌ๋ ๋ฏฟ์ ์ ์์ผ๋ ค๋ฉด ์ค์ ์ฃผ๋ณ ํ๊ฒฝ๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค.
- ๊ทธ๋ฆผ์(Shadows): ๊ทธ๋ฆผ์๋ ๊ฐ์ฒด๋ฅผ ํ์ค์ ๊ณ ์ ์ํค๋ ๊ฐ์ฅ ์ค์ํ ๋จ์๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆผ์๋ ๊ฐ์ฒด๋ฅผ ํ๋ฉด์ ์ฐ๊ฒฐํ์ฌ ๋ฌด๊ฒ๊ฐ๊ณผ ๊ณต๊ฐ๊ฐ์ ๋ถ์ฌํฉ๋๋ค. ๊ทธ๋ฆผ์์ ๋ถ๋๋ฌ์, ๋ฐฉํฅ, ์์์ ํ๊ฒฝ์ ๊ด์์ ๋ํ ํ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฌ๋ฌด์ค์ ๊ฐ์์ ๋ฐ์ง์ด๋ ๋นจ๊ฐ ๊ตฌ์ฒด๋ฅผ ๋๋๋ค๊ณ ์์ํด ๋ณด์ธ์. ๊ธฐ๋ณธ ์ฅ๋ฉด ๊ธฐ๋ฐ ์กฐ๋ช ์ ์ฌ์ฉํ๋ฉด ์ผ๋ฐ์ ์ธ ํฐ์ ํ์ด๋ผ์ดํธ์ ๋จ์ํ๊ณ ์ด๋์ด ์ํ ๊ทธ๋ฆผ์๊ฐ ์๊ธธ ์ ์์ต๋๋ค. ๊ฐ์ง์ฒ๋ผ ๋ณด์ ๋๋ค. ์ด์ ์กฐ๋ช ์ถ์ ์ ์ฌ์ฉํ๋ฉด, ๋์ผํ ๊ตฌ์ฒด๊ฐ ๋ชจ๋ํฐ์ ํธ๋ฅธ ๋น, ์ฑ ์ ๋จํ์ ๋ฐ๋ปํ ๋ ธ๋ ๋น, ์ฌ์ง์ด ์ฐฝ๋ฌธ์ ์๊ณก๋ ๋ฐ์ฌ๊น์ง ๋ด์๋ผ ์ ์์ต๋๋ค. ๊ทธ๋ฆผ์๋ ๋ถ๋๋ฝ๊ณ ์ฃผ ๊ด์์์ ์ ํํ ๊ฐ๋๋ก ๋ฉ์ด์ง๋๋ค. ๊ฐ์๊ธฐ ์ด ๊ตฌ์ฒด๋ ๋จ์ํ ์ฑ ์ ์์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ด ์๋๋ผ, ์ฑ ์ ํ๊ฒฝ ์์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ฌ์ค์ ์ธ ์กฐ๋ช ์ ํ์ด๋ฉฐ, WebXR ์กฐ๋ช ์ถ์ API๊ฐ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ ๋๋ค.
WebXR ์กฐ๋ช ์ถ์ API ํํค์น๊ธฐ
WebXR ์กฐ๋ช ์ถ์ API๋ ๋ ๋์ WebXR Device API ์ฌ์ ๋ด์ ๋ชจ๋์ ๋๋ค. ๊ทธ ์๋ฌด๋ ๊ฐ๋จํ์ง๋ง ๊ฐ๋ ฅํฉ๋๋ค. ๋ฐ๋ก ๊ธฐ๊ธฐ ์นด๋ฉ๋ผ๋ฅผ ํตํด ์ฌ์ฉ์์ ์ค์ ํ๊ฒฝ์ ๋ถ์ํ๊ณ , ๊ฐ๋ฐ์์ 3D ๋ ๋๋ง ์์ง(Three.js๋ Babylon.js์ ๊ฐ์)์ ์คํ ๊ฐ๋ฅํ ์กฐ๋ช ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๊ฐ์ ์ฅ๋ฉด์ ์กฐ๋ช ์ด ์ค์ ๋ฌผ๋ฆฌ์ ์ฅ๋ฉด์ ์กฐ๋ช ์ ์ํด ๊ตฌ๋๋๋๋ก ํ๋ ๋ค๋ฆฌ ์ญํ ์ ํฉ๋๋ค.
์๋ ์๋ฆฌ: ๋จ์ํ๋ ๊ด์
์ด ๊ณผ์ ์ ๋ง๋ฒ์ด ์๋๋๋ค. ์ ๊ตํ ์ปดํจํฐ ๋น์ ๊ธฐ์ ์ ์์ฉ์ ๋๋ค. ์กฐ๋ช ์ถ์ ์ด ํ์ฑํ๋ WebXR ์ธ์ ์ด ํ์ฑํ๋๋ฉด, ๊ธฐ๋ณธ ํ๋ซํผ(์: ์๋๋ก์ด๋์ ๊ตฌ๊ธ ARCore)์ ์ง์์ ์ผ๋ก ์นด๋ฉ๋ผ ํผ๋๋ฅผ ๋ถ์ํฉ๋๋ค. ์ด ๋ถ์์ ์ฃผ๋ณ ์กฐ๋ช ์ ๋ช ๊ฐ์ง ์ฃผ์ ์์ฑ์ ์ถ๋ก ํฉ๋๋ค:
- ์ ๋ฐ์ ์ธ ๋ฐ๊ธฐ์ ์์: ๋ฐฉ์ด ์ฐจ๊ฐ๊ณ ํ์ ํ๊ด๋ฑ์ผ๋ก ๋ฐ๊ฒ ์กฐ๋ช ๋์ด ์๋์ง, ์๋๋ฉด ๋ฐ๋ปํ ์ฃผํฉ์ ์ผ๋ชฐ๋ก ์ด๋ก๊ฒ ์กฐ๋ช ๋์ด ์๋์ง ๋ฑ ๋น์ ์ฃผ๋ ๊ฐ๋์ ์์กฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- ๋น์ ๋ฐฉํฅ์ฑ: ๋ชจ๋ ์ ๊ตฌ๋ฅผ ์ ํํ ์ฐพ์๋ด์ง๋ ๋ชปํ์ง๋ง, ๊ฐ์ฅ ์ง๋ฐฐ์ ์ธ ๊ด์์ ์ผ๋ฐ์ ์ธ ๋ฐฉํฅ์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
- ํ๊ฒฝ ํํ: ๊ฐ์ฅ ์ค์ํ๊ฒ๋, ๋ชจ๋ ๋ฐฉํฅ์์ ์ค๋ ๋น์ ๋ํ ์ ์ฒด์ ์ธ ํํ์ ์์ฑํฉ๋๋ค.
์ด ์ ๋ณด๋ ์ค์๊ฐ 3D ๊ทธ๋ํฝ ๋ ๋๋ง์ ๋งค์ฐ ์ต์ ํ๋ ํ์์ผ๋ก ํจํค์ง๋ฉ๋๋ค. API๊ฐ ์ ๊ณตํ๋ ๋ ๊ฐ์ง ์ฃผ์ ๋ฐ์ดํฐ ํ์์ ๊ตฌ๋ฉด ์กฐํ ํจ์(Spherical Harmonics)์ ๋ฐ์ฌ ํ๋ธ๋งต(Reflection Cubemap)์ ๋๋ค.
API ๋ฐ์ดํฐ์ ๋ ๊ฐ์ง ํต์ฌ ๊ตฌ์ฑ ์์
WebXR ์ธ์ ์์ ์กฐ๋ช ์ถ์ ์ ์์ฒญํ๋ฉด `XRLightEstimate` ๊ฐ์ฒด๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์ด ๊ฐ์ฒด์๋ ๋ ๋๋ฌ๊ฐ ์ฌ์ฉํ ๋ ๊ฐ์ง ์ค์ํ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
1. ํ์ฐ ์กฐ๋ช ์ ์ํ ๊ตฌ๋ฉด ์กฐํ ํจ์(Spherical Harmonics, SH)
์ด๊ฒ์ ์๋ง๋ ๊ฐ์ฅ ๋ณต์กํ๊ฒ ๋ค๋ฆฌ์ง๋ง API์ ๊ทผ๋ณธ์ ์ผ๋ก ์ค์ํ ๋ถ๋ถ์ผ ๊ฒ์ ๋๋ค. ๊ฐ๋จํ ๋งํด, ๊ตฌ๋ฉด ์กฐํ ํจ์(Spherical Harmonics)๋ ๋ชจ๋ ๋ฐฉํฅ์์ ์ค๋ ์ ์ฃผํ(์ฆ, ๋ถ๋๋ฝ๊ณ ํ๋ฆฟํ) ์กฐ๋ช ์ ๋ณด๋ฅผ ์ํ์ ์ผ๋ก ํํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฅ๋ฉด์ ์ ๋ฐ์ ์ธ ์ฃผ๋ณ๊ด์ ๋ํ ๋งค์ฐ ์์ถ๋๊ณ ํจ์จ์ ์ธ ์์ฝ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
- ์ฉ๋: ๊ฐ์ฒด์ ๋ฟ๋ ํ์ฐ๊ด์ ๊ณ์ฐํ๋ ๋ฐ ์๋ฒฝํฉ๋๋ค. ํ์ฐ๊ด์ ๋๋ฌด, ๋, ๋๋ ๊ดํ ์๋ ํ๋ผ์คํฑ๊ณผ ๊ฐ์ ๋ฌด๊ด ๊ฐ์ฒด ํ๋ฉด์์ ๊ณ ๋ฅด๊ฒ ์ฐ๋๋๋ ๋น์ ๋๋ค. SH๋ ์ด๋ฌํ ํ๋ฉด์ ์ฃผ๋ณ ํ๊ฒฝ์ ๋น์ ๋ํ ์๋์ ์ธ ๋ฐฉํฅ์ ๋ฐ๋ผ ์ ํํ ์์๊ณผ ์์์ ๋ถ์ฌํฉ๋๋ค.
- ์ ๊ณต ๋ฐฉ์: API๋ SH ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ๋ฐฐ์ด(์ผ๋ฐ์ ์ผ๋ก 3์ฐจ ์กฐํ ํจ์์ ๋ํด 27๊ฐ์ ๊ฐ์ ๊ฐ๋ `Float32Array`)๋ก ์ ๊ณตํฉ๋๋ค. ์ด ์ซ์๋ค์ ํ๋์ ์ธ ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ ๋ ๋๋ง(PBR) ์ ฐ์ด๋์ ์ง์ ์ ๋ ฅ๋ ์ ์์ผ๋ฉฐ, ์ ฐ์ด๋๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌด๊ด ํ๋ฉด์ ๊ฐ ํฝ์ ์ ๋ํ ์ต์ข ์์์ ๊ณ์ฐํฉ๋๋ค.
2. ์ ๋ฐ์ฌ ์กฐ๋ช ์ ์ํ ๋ฐ์ฌ ํ๋ธ๋งต(Reflection Cubemaps)
๊ตฌ๋ฉด ์กฐํ ํจ์๋ ๋ฌด๊ด ํ๋ฉด์ ํ๋ฅญํ์ง๋ง, ๋ฐ์ง์ด๋ ํ๋ฉด์ ํ์ํ ์ธ๋ถ ์ ๋ณด๋ ๋ถ์กฑํฉ๋๋ค. ๋ฐ๋ก ์ฌ๊ธฐ์ ๋ฐ์ฌ ํ๋ธ๋งต(Reflection Cubemap)์ด ๋ฑ์ฅํฉ๋๋ค. ํ๋ธ๋งต์ ํ๋ธ์ ๋ฉด์ฒ๋ผ ๋ฐฐ์ด๋ ์ฌ์ฏ ๊ฐ์ ํ ์ค์ฒ๋ก ๊ตฌ์ฑ๋ ๊ณ ์ ์ ์ธ ์ปดํจํฐ ๊ทธ๋ํฝ ๊ธฐ์ ์ ๋๋ค. ์ด๋ค์ ํจ๊ป ํ ์ง์ ์์ ๋ณธ ํ๊ฒฝ์ 360๋ ํ๋ ธ๋ผ๋ง ์ด๋ฏธ์ง๋ฅผ ํ์ฑํฉ๋๋ค.
- ์ฉ๋: ํ๋ธ๋งต์ ์ ๋ฐ์ฌ(๋ฐ์ง์ด๋) ํ๋ฉด์ ์ ๋ช ํ๊ณ ์์ธํ ๋ฐ์ฌ๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ธ์์ฑ ๋๋ ๊ดํ ์๋ ๊ฐ์ฒด๋ฅผ ๋ ๋๋งํ ๋, ๋ ๋๋ง ์์ง์ ํ๋ธ๋งต์ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ๋ฌด์์ด ๋ฐ์ฌ๋์ด์ผ ํ๋์ง ์์๋ ๋๋ค. ๊ฐ์์ ํฌ๋กฌ ๊ณต์ ์ค์ ๋ฐฉ์ ์ฌ์ค์ ์ธ ๋ฐ์ฌ๊ฐ ๋น์น๋ ๊ฒ์ ๋ณด๋ ๊ฒ์ ํฌํ ๋ฆฌ์ผ๋ฆฌ์ฆ์ ๋ฌ์ฑํ๋ ๋ฐ ์ฃผ์ํ ์์์ ๋๋ค.
- ์ ๊ณต ๋ฐฉ์: API๋ ์ด๋ฅผ `XRReflectionCubeMap`์ผ๋ก ์ ๊ณตํ๋๋ฐ, ์ด๊ฒ์ 3D ์ฅ๋ฉด์ ํ๊ฒฝ ๋งต์ผ๋ก ์ง์ ์ฌ์ฉํ ์ ์๋ `WebGLTexture` ๊ฐ์ฒด์ ๋๋ค. ์ด ํ๋ธ๋งต์ ์ฌ์ฉ์๊ฐ ์์ง์ด๊ฑฐ๋ ์กฐ๋ช ์กฐ๊ฑด์ด ๋ฐ๋ ๋ ์์คํ ์ ์ํด ๋์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
์ค์ ๊ตฌํ: WebXR ์ฑ์ ์กฐ๋ช ์ถ์ ๊ธฐ๋ฅ ๋์ ํ๊ธฐ
์ด์ ์ด๋ก ์ ์ดํดํ์ผ๋, ์ด ๊ธฐ๋ฅ์ WebXR ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉํ๋ ๋ฐ ํ์ํ ๊ฐ๊ด์ ์ธ ๋จ๊ณ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ ์ฒด ๊ตฌํ ์ฝ๋๋ ๋ณต์กํ๊ณ ์ ํํ 3D ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ฌ๋ผ์ง ์ ์์ง๋ง, ํต์ฌ ํ๋ก์ธ์ค๋ ์ผ๊ด๋ ํจํด์ ๋ฐ๋ฆ ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- ์ธ์ ์์ ๋ฐ ๋ ๋ ๋ฃจํ ์คํ ๋ฐฉ๋ฒ์ ํฌํจํ WebXR ๊ธฐ๋ณธ ์ฌํญ์ ๋ํ ํ์คํ ์ดํด.
- Three.js ๋๋ Babylon.js์ ๊ฐ์ WebGL ๊ธฐ๋ฐ 3D ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์น์ํจ. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋๋ถ๋ถ์ ์ ์์ค ๋ณต์ก์ฑ์ ์ถ์ํํฉ๋๋ค.
- ํธํ๋๋ ๊ธฐ๊ธฐ ๋ฐ ๋ธ๋ผ์ฐ์ . ์ด ๊ธ์ ์ฐ๋ ์์ ์์ WebXR ์กฐ๋ช ์ถ์ ์ ARCore๊ฐ ์ค์น๋ ์ต์ ์๋๋ก์ด๋ ๊ธฐ๊ธฐ์ ํฌ๋กฌ์์ ๊ฐ์ฅ ์์ ์ ์ผ๋ก ์ง์๋ฉ๋๋ค.
- HTTPS: ๋ชจ๋ WebXR ๊ธฐ๋ฅ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ฌ์ดํธ๋ ๋ณด์ ์ฐ๊ฒฐ(HTTPS)์ ํตํด ์ ๊ณต๋์ด์ผ ํฉ๋๋ค.
๋จ๊ณ๋ณ ํตํฉ (๊ฐ๋ ์ )
๋ค์์ ํ์ํ ๋จ๊ณ์ ๋ํ ๊ฐ๋ ์ ์ค๋ช ์ ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณ ํฌํผ์ ๋ํด์๋ ๋ค์ ์น์ ์์ ๋ ผ์ํ ๊ฒ์ ๋๋ค.
1๋จ๊ณ: 'light-estimation' ๊ธฐ๋ฅ ์์ฒญํ๊ธฐ
AR ์ธ์
์ ์์ฑํ ๋ ๋ช
์์ ์ผ๋ก ์์ฒญํ์ง ์์ผ๋ฉด API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. `requestSession` ํธ์ถ ์ `requiredFeatures` ๋๋ `optionalFeatures` ๋ฐฐ์ด์ `'light-estimation'`์ ์ถ๊ฐํ์ฌ ์ด ์์
์ ์ํํฉ๋๋ค.
const session = await navigator.xr.requestSession('immersive-ar', { requiredFeatures: ['hit-test', 'dom-overlay', 'light-estimation'] });
2๋จ๊ณ: XRLightProbe ์์ฑํ๊ธฐ
์ธ์
์ด ์์๋๋ฉด, ์กฐ๋ช
์ ๋ณด๋ฅผ ๋ฐ๊ธฐ ์์ํ๊ณ ์ถ๋ค๋ ๊ฒ์ ์๋ ค์ผ ํฉ๋๋ค. ์ธ์
์ ๋ํ ๋ผ์ดํธ ํ๋ก๋ธ๋ฅผ ์์ฑํ์ฌ ์ด ์์
์ ์ํํฉ๋๋ค. ์ ํธํ๋ ๋ฐ์ฌ ๋งต ํ์์ ์ง์ ํ ์๋ ์์ต๋๋ค.
const lightProbe = await session.requestLightProbe();
3๋จ๊ณ: ๋ ๋ ๋ฃจํ์์ ์กฐ๋ช
๋ฐ์ดํฐ ์ ๊ทผํ๊ธฐ
์กฐ๋ช
๋ฐ์ดํฐ๋ ๋งค ํ๋ ์๋ง๋ค ์
๋ฐ์ดํธ๋ฉ๋๋ค. `requestAnimationFrame` ๋ ๋ ๋ฃจํ ์ฝ๋ฐฑ(์ธ์๋ก `time`๊ณผ `frame`์ ๋ฐ์) ๋ด์์ ํ๋ก๋ธ์ ๋ํ ์ต์ ์ถ์ ์น๋ฅผ ์ป์ ์ ์์ต๋๋ค.
function onXRFrame(time, frame) {
// ... get pose, etc. ...
const lightEstimate = frame.getLightEstimate(lightProbe);
if (lightEstimate) {
// We have lighting data! Now we can apply it.
applyLighting(lightEstimate);
}
// ... render the scene ...
}
์ธ์
์์ ํ ์์คํ
์ด ์ฒซ ๋ฒ์งธ ์ถ์ ์น๋ฅผ ์์ฑํ๋ ๋ฐ ๋ช ํ๋ ์์ด ๊ฑธ๋ฆด ์ ์์ผ๋ฏ๋ก `lightEstimate`๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
4๋จ๊ณ: 3D ์ฅ๋ฉด์ ๋ฐ์ดํฐ ์ ์ฉํ๊ธฐ
์ด ๋ถ๋ถ์์ 3D ์์ง์ด ์ฌ์ฉ๋ฉ๋๋ค. `lightEstimate` ๊ฐ์ฒด์๋ `sphericalHarmonicsCoefficients`์ `reflectionCubeMap`์ด ํฌํจ๋์ด ์์ต๋๋ค.
- ๊ตฌ๋ฉด ์กฐํ ํจ์ ์ ์ฉ: `sphericalHarmonicsCoefficients` ๋ฐฐ์ด์ PBR ์ฌ์ง์ ์ ๋ฌํ๋ฉฐ, ์ด๋ ์ข ์ข 3D ์์ง ๋ด์ `LightProbe` ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ์ํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์์ง์ ์ ฐ์ด๋๊ฐ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฐ ์กฐ๋ช ์ ๊ณ์ฐํฉ๋๋ค.
- ๋ฐ์ฌ ํ๋ธ๋งต ์ ์ฉ: `reflectionCubeMap`์ `WebGLTexture`์ ๋๋ค. ์ธ์ ์ `XRWebGLBinding`์ ์ฌ์ฉํ์ฌ ๋ ๋๋ฌ๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ฒ์ ์ ์ป์ ๋ค์, ์ด๋ฅผ ์ฅ๋ฉด์ ์ ์ญ ํ๊ฒฝ ๋งต์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ธ์์ฑ ๋๋ ๊ฑฐ์น ๊ธฐ ๊ฐ์ ๊ฐ์ง ๋ชจ๋ PBR ์ฌ์ง์ด ์ด๋ฅผ ๋ฐ์ฌํ๊ฒ ๋ฉ๋๋ค.
์์ง๋ณ ์์ : Three.js์ Babylon.js
๋คํํ๋ ์ธ๊ธฐ ์๋ WebGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ 4๋จ๊ณ์ ๋๋ถ๋ถ์ ํ๋ ์์ ์ ์ฒ๋ฆฌํ์ฌ ๊ฐ๋ฐ์๋ค์ด ํจ์ฌ ๋ ๊ฐ๋จํ๊ฒ ํ๋ก์ธ์ค๋ฅผ ์งํํ ์ ์๋๋ก ํฉ๋๋ค.
Three.js ๊ตฌํ ์ฐธ๊ณ ์ฌํญ
Three.js์๋ ๋ฐ์ด๋ `WebXRManager`์ ์กฐ๋ช ์ถ์ ์ ๊ฑฐ์ ํ๋ฌ๊ทธ ์ค ํ๋ ์ด ๊ธฐ๋ฅ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ์ ์ฉ ํฌํผ ํด๋์ค๊ฐ ์์ต๋๋ค.
ํต์ฌ์ XREstimatedLight
ํด๋์ค์
๋๋ค. ์ด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ์ฅ๋ฉด์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ ๋ ๋ฃจํ์์๋ `xrFrame.getLightEstimate(lightProbe)` ๊ฒฐ๊ณผ์ `lightProbe` ์์ฒด๋ฅผ ๋ผ์ดํธ์ `update()` ๋ฉ์๋์ ์ ๋ฌํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ํฌํผ ํด๋์ค๊ฐ ๋๋จธ์ง ๋ชจ๋ ๊ฒ์ ์ฒ๋ฆฌํฉ๋๋ค:
- Three.js `LightProbe` ๊ฐ์ฒด๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉฐ ๊ตฌ๋ฉด ์กฐํ ํจ์ ๊ณ์๋ก `sh` ์์ฑ์ ์๋์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
- `scene.environment` ์์ฑ์ ๋ฐ์ฌ ํ๋ธ๋งต์ผ๋ก ์๋ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ์กฐ๋ช ์ถ์ ์น๋ฅผ ์ฌ์ฉํ ์ ์์ ๋ ๊ธฐ๋ณธ ์กฐ๋ช ์ค์ ์ผ๋ก ๋์ฒดํ์ฌ ์ํํ ๊ฒฝํ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ณ ์์ค ์ถ์ํ๋ ๊ฐ๋ฐ์๊ฐ 3D ์ฝํ ์ธ ์ ์์ ์ง์คํ๊ณ `XREstimatedLight`๊ฐ ํ ์ค์ฒ ๋ฐ์ธ๋ฉ ๋ฐ ์ ฐ์ด๋ ์ ๋ํผ ์ ๋ฐ์ดํธ์ ๋ณต์ก์ฑ์ ์ฒ๋ฆฌํ๋๋ก ๋งก๊ธธ ์ ์์์ ์๋ฏธํฉ๋๋ค.
Babylon.js ๊ตฌํ ์ฐธ๊ณ ์ฌํญ
Babylon.js ๋ํ `WebXRDefaultExperience` ํฌํผ๋ฅผ ์ํ ๊ณ ์์ค์ ๊ธฐ๋ฅ ๊ธฐ๋ฐ ์์คํ ์ ์ ๊ณตํฉ๋๋ค.
๊ธฐ๋ฅ์ ํ์ฑํํ๋ ค๋ฉด, ๊ธฐ๋ฅ ๊ด๋ฆฌ์์ ์ ๊ทผํ์ฌ ์ด๋ฆ์ผ๋ก ํ์ฑํํ๋ฉด ๋ฉ๋๋ค:
const xr = await scene.createDefaultXRExperienceAsync({ /* options */ });
const lightEstimationFeature = xr.featuresManager.enableFeature(WebXRLightEstimation.Name, { /* options */ });
์ผ๋จ ํ์ฑํ๋๋ฉด, ์ด ๊ธฐ๋ฅ์ ์๋์ผ๋ก ๋ค์์ ์ํํฉ๋๋ค:
- `XRLightProbe`์ ์์ฑ ๋ฐ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- API์์ ์ ๊ณตํ๋ ๋ฐ์ฌ ํ๋ธ๋งต์ผ๋ก ์ฅ๋ฉด์ ์ฃผ `environmentTexture`๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
- Babylon์ PBR ์ฌ์ง ์์คํ ์ด ํ์ฐ ์กฐ๋ช ๊ณ์ฐ์ ์ฌ์ฉํ ์ ์๋ ๊ตฌ๋ฉด ์กฐํ ํจ์ ๊ณ์์ ๋ํ ์ ๊ทผ์ ์ ๊ณตํฉ๋๋ค.
- ์๋ก์ด ์กฐ๋ช ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ์ ๋ ์ฌ์ฉ์ ์ ์ ๋ก์ง์ ์ํด ๊ตฌ๋ ํ ์ ์๋ `onLightEstimatedObservable`๊ณผ ๊ฐ์ ์ ์ฉํ ๊ด์ฐฐ ๊ฐ๋ฅ ๊ฐ์ฒด(์ด๋ฒคํธ)๋ฅผ ํฌํจํฉ๋๋ค.
Three.js์ ์ ์ฌํ ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋ฐ์๊ฐ ๋จ ๋ช ์ค์ ์ฝ๋๋ก ์ด ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ํํ์ฌ ๊ธฐ์กด Babylon.js ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ์ํํ๊ฒ ํตํฉํ ์ ์๋๋ก ํฉ๋๋ค.
ํ์ฌ ๊ธฐ์ ์ ๊ณผ์ ์ ํ๊ณ
WebXR ์กฐ๋ช ์ถ์ ์ ๊ธฐ๋ ๋น์ ์ธ ์ง์ ์ด์ง๋ง, ํ์ฌ์ ํ๊ณ๋ฅผ ํ์ค์ ์ผ๋ก ์ดํดํ๊ณ ์ ๊ทผํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์ฑ๋ฅ ๋น์ฉ: ์ง์์ ์ผ๋ก ์นด๋ฉ๋ผ ํผ๋๋ฅผ ๋ถ์ํ๊ณ , ํ๋ธ๋งต์ ์์ฑํ๋ฉฐ, ๊ตฌ๋ฉด ์กฐํ ํจ์๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋นํ CPU ๋ฐ GPU ๋ฆฌ์์ค๋ฅผ ์๋ชจํฉ๋๋ค. ์ด๋ ํนํ ๋ฐฐํฐ๋ฆฌ๋ก ๊ตฌ๋๋๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ์ค์ํ ์ฑ๋ฅ ๊ณ ๋ ค ์ฌํญ์ ๋๋ค. ๊ฐ๋ฐ์๋ ์๋ฒฝํ ํ์ค๊ฐ์ ๋ํ ์๊ตฌ์ ๋ถ๋๋ฝ๊ณ ๋์ ํ๋ ์๋ฅ ์ ๊ฒฝํ์ ๋ํ ํ์์ฑ ์ฌ์ด์์ ๊ท ํ์ ๋ง์ถฐ์ผ ํฉ๋๋ค.
- ์ถ์ ์ ํ๋: ์ด๋ฆ์ด ๋ชจ๋ ๊ฒ์ ๋งํด์ค๋๋ค. ์ด๊ฒ์ ์ถ์ ์น์ ๋๋ค. ์์คํ ์ ๋น์ ์์ ์ธ ์กฐ๋ช ์กฐ๊ฑด, ์ฌ๋ฌ ์์์ ์กฐ๋ช ์ด ์๋ ๋งค์ฐ ๋ณต์กํ ์ฅ๋ฉด, ๋๋ ๋น์ ๊ธ๊ฒฉํ ๋ณํ์ ์ํด ์์ ์ ์์ต๋๋ค. ๋ฌผ๋ฆฌ์ ์ผ๋ก ์๋ฒฝํ ์ธก์ ์ด ์๋, ๊ทธ๋ด๋ฏํ ๊ทผ์ฌ์น๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๊ธฐ๊ธฐ ๋ฐ ๋ธ๋ผ์ฐ์ ์ง์: ์ด ๊ธฐ๋ฅ์ ์์ง ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ์ง ์์ต๋๋ค. ARCore์ ๊ฐ์ ํ๋ซํผ๋ณ AR ํ๋ ์์ํฌ์ ๋ํ ์์กด์ฑ ๋๋ฌธ์ ์ฃผ๋ก ํฌ๋กฌ์ ์คํํ๋ ์ต์ ์๋๋ก์ด๋ ๊ธฐ๊ธฐ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. iOS ๊ธฐ๊ธฐ์์์ ์ง์์ ๊ด๋ฒ์ํ ์ฑํ์ ์ํ ์ฃผ์ ๋๋ฝ ๋ถ๋ถ์ ๋๋ค.
- ๋ช ์์ ์ธ ๊ทธ๋ฆผ์ ์์: ํ์ฌ API๋ ์ฃผ๋ณ๊ด ๋ฐ ๋ฐ์ฌ๊ด์๋ ํ๋ฅญํ์ง๋ง, ์ง๋ฐฐ์ ์ธ ๋ฐฉํฅ์ฑ ๊ด์์ ๋ํ ์ ๋ณด๋ฅผ ์ง์ ์ ๊ณตํ์ง๋ ์์ต๋๋ค. ์ฆ, "์ด ํน์ ๋ฐฉํฅ์์ ๊ฐํ ๋น์ด ์ค๊ณ ์๋ค"๊ณ ์๋ ค์ค ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ๊ฐ์ ๊ฐ์ฒด์์ ์ค์ ํ๋ฉด์ผ๋ก ์ ๋ช ํ๊ณ ์ ํํ ์ค์๊ฐ ๊ทธ๋ฆผ์๋ฅผ ๋๋ฆฌ์ฐ๋ ๊ฒ์ ์ฌ์ ํ ์ถ๊ฐ์ ์ธ ๊ธฐ์ ์ด ํ์ํฉ๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ข ์ข SH ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฅ ๋ฐ์ ๋น์ ๋ฐฉํฅ์ ์ถ๋ก ํ๊ณ ์ฅ๋ฉด์ ํ์ค ๋ฐฉํฅ์ฑ ์กฐ๋ช ์ ๋ฐฐ์นํ์ง๋ง, ์ด๊ฒ์ ๊ทผ์ฌ์น์ ๋๋ค.
WebXR ์กฐ๋ช ์ ๋ฏธ๋: ๋ค์ ๋จ๊ณ๋?
์ค์๊ฐ ๋ ๋๋ง๊ณผ ์ปดํจํฐ ๋น์ ๋ถ์ผ๋ ๋๋ผ์ด ์๋๋ก ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ๋ชฐ์ ํ ์น์์์ ์กฐ๋ช ์ ๋ฏธ๋๋ ๋ฐ์ผ๋ฉฐ, ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ๋ฐ์ ์ด ๋์์ ์์ต๋๋ค.
๊ฐ์ ๋ ๋ฐฉํฅ์ฑ ์กฐ๋ช ๋ฐ ๊ทธ๋ฆผ์ API
๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์์ ์์ฃผ ์์ฒญํ๋ ๊ฒ์ API๊ฐ ๋ฐฉํฅ, ์์, ๊ฐ๋๋ฅผ ํฌํจํ์ฌ ์ฃผ ๊ด์์ ๋ํ ๋ ๋ช ์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ API๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ํํ๊ณ ๊ฒฝ๊ณ๊ฐ ๋ช ํํ ๊ทธ๋ฆผ์๋ฅผ ์ฝ๊ฒ ๋๋ฆฌ์ธ ์ ์๊ฒ ํ์ฌ ํ์ค๊ฐ์ ํฌ๊ฒ ํฅ์์ํฌ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ํ๋ฉด ๊ฐ์ง API(Plane Detection API)์ ํตํฉ๋์ด ์ค์ ๋ฐ๋ฅ๊ณผ ํ ์ด๋ธ์ ๊ทธ๋ฆผ์๋ฅผ ๋๋ฆฌ์ธ ์ ์์ต๋๋ค.
๋ ๋์ ์ถฉ์ค๋์ ํ๊ฒฝ ๋งต
๋ชจ๋ฐ์ผ ํ๋ก์ธ์๊ฐ ๋์ฑ ๊ฐ๋ ฅํด์ง์ ๋ฐ๋ผ, ์์คํ ์ด ๋ ๋์ ํด์๋์ ๋ ๋์ ๋์ ๋ฒ์(HDR)์ ๋ฐ์ฌ ํ๋ธ๋งต์ ์์ฑํ ๊ฒ์ผ๋ก ์์ํ ์ ์์ต๋๋ค. ์ด๋ ๋ ์์ํ๊ณ ์์ธํ ๋ฐ์ฌ๋ก ์ด์ด์ ธ ์ค์ ์ ๊ฐ์ ์ฌ์ด์ ๊ฒฝ๊ณ๋ฅผ ๋์ฑ ๋ชจํธํ๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค.
๋ ๋์ ํ๋ซํผ ์ฑํ
๊ถ๊ทน์ ์ธ ๋ชฉํ๋ ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ด ํ์คํ๋์ด ๋ชจ๋ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๊ธฐ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋๋ ๊ฒ์ ๋๋ค. Apple์ด AR ์ ํ์ ๊ณ์ ๊ฐ๋ฐํจ์ ๋ฐ๋ผ, iOS์ Safari๊ฐ ๊ฒฐ๊ตญ WebXR ์กฐ๋ช ์ถ์ API๋ฅผ ์ฑํํ์ฌ ์ด๋ฌํ ๊ณ ํ์ง ๊ฒฝํ์ ํจ์ฌ ๋ ๋ง์ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ ๊ฒ์ด๋ผ๋ ํฌ๋ง์ด ์์ต๋๋ค.
AI ๊ธฐ๋ฐ ์ฅ๋ฉด ์ดํด
๋ ๋ฉ๋ฆฌ ๋ด๋ค๋ณด๋ฉด, ๋จธ์ ๋ฌ๋์ ๋ฐ์ ์ ๊ธฐ๊ธฐ๊ฐ ๋จ์ํ ๋น์ ์ถ์ ํ๋ ๊ฒ์ ๋์ด ์ฅ๋ฉด์ ์๋ฏธ๋ก ์ ์ผ๋ก ์ดํดํ ์ ์๊ฒ ํ ๊ฒ์ ๋๋ค. ๊ธฐ๊ธฐ๋ "์ฐฝ๋ฌธ", "๋จํ", ๋๋ "ํ๋"์ ์ธ์ํ๊ณ ๊ทธ ์ง์์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ด์๊ณผ ๋ณต์กํ ๊ทธ๋ฆผ์ ์ํธ ์์ฉ์ ํฌํจํ๋ ํจ์ฌ ๋ ์ ํํ๊ณ ๊ฒฌ๊ณ ํ ์กฐ๋ช ๋ชจ๋ธ์ ์์ฑํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก : ๋ชฐ์ ํ ์น์ ๊ธธ์ ๋ฐํ๋ค
WebXR ์กฐ๋ช ์ถ์ ์ ๋จ์ํ ์ ์ง์ ๊ธฐ๋ฅ ์ด์์ผ๋ก, ์น์์์ ์ฆ๊ฐ ํ์ค์ ๋ฏธ๋๋ฅผ ์ํ ๊ธฐ๋ฐ ๊ธฐ์ ์ ๋๋ค. ๋์งํธ ๊ฐ์ฒด๊ฐ ๋ฌผ๋ฆฌ์ ์ฃผ๋ณ ํ๊ฒฝ์ ์ํด ์ฌ์ค์ ์ผ๋ก ์กฐ๋ช ๋๋๋ก ํจ์ผ๋ก์จ, AR์ ์ ๊ธฐํ ๊ธฐ๋ฏน์์ ์ง์ ์ผ๋ก ๋ชฐ์ ๊ฐ ์๊ณ ์ค๋๋ ฅ ์๋ ๋งค์ฒด๋ก ๊ฒฉ์์ํต๋๋ค.
์ด๋ ์ข ์ข AR ๊ฒฝํ์ ๋จ์ ๋ ๋๋์ผ๋ก ๋ง๋๋ ์ง๊ฐ์ ๊ฒฉ์ฐจ๋ฅผ ํด์ํฉ๋๋ค. ์ ์ ์๊ฑฐ๋์ ๊ฒฝ์ฐ, ๊ณ ๊ฐ์ด ๊ธ์ ๋จํ๊ฐ ์ง์์ ๋น์ ์ค์ ๋ก ๋ฐ์ฌํ ์ง ๋ณผ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๊ฒ์์ ๊ฒฝ์ฐ, ์บ๋ฆญํฐ๊ฐ ํ๋ ์ด์ด์ ์ธ๊ณ์ ๋ ํ์ค๊ฐ ์๊ณ ํตํฉ๋ ๋๋์ ์ค๋๋ค. ๊ต์ก์ ๊ฒฝ์ฐ, ์ญ์ฌ์ ์ ๋ฌผ์ ์ด์ ์๋ ์น ๋ธ๋ผ์ฐ์ ์์ ๋ถ๊ฐ๋ฅํ๋ ์์ค์ ์ฌ์ค๊ฐ์ผ๋ก ๋ณผ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ฑ๋ฅ ๋ฐ ๊ต์ฐจ ํ๋ซํผ ์ง์์ ๋ํ ๊ณผ์ ๊ฐ ๋จ์ ์์ง๋ง, ์ค๋๋ ์ฌ์ฉํ ์ ์๋ ๋๊ตฌ๋ค, ํนํ Three.js๋ Babylon.js์ ๊ฐ์ ๊ฐ๋ ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฐํฉ๋ ๋, ์ด ํ๋ ๋ณต์กํ๋ ๊ธฐ์ ์ ๋๋ผ์ธ ์ ๋๋ก ์ ๊ทผํ๊ธฐ ์ฌ์์ก์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ชฐ์ ํ ์น์ ๊ด์ฌ ์๋ ๋ชจ๋ ์น ๊ฐ๋ฐ์์ ํฌ๋ฆฌ์์ดํฐ๋ค์ด WebXR ์กฐ๋ช ์ถ์ API๋ฅผ ํ์ํด ๋ณผ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์คํ์ ์์ํ๊ณ , ํ๊ณ๋ฅผ ๋ฐ์ด๋์ผ๋ฉฐ, ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ์ฐจ์ธ๋ ์ฌ์ค์ AR ๊ฒฝํ์ ๊ธธ์ ๋ฐํ๋ ๋ฐ ๋์์ ์ฃผ์ญ์์ค.