WebXRã®ç©ºé座æšç³»ãæ·±ãæãäžããåç §ç©ºéã座æšå€æãæ²¡å ¥åã§æ£ç¢ºãªXRäœéšãæ§ç¯ããããã®ãã¹ããã©ã¯ãã£ã¹ãæ¢ããŸãã
WebXR空é座æšãšã³ãžã³ïŒåº§æšç³»ç®¡çã®ãã¹ã¿ãŒ
WebXRã¯ããã©ãŠã¶ã§çŽæ¥ãæ²¡å ¥åã§ã€ã³ã¿ã©ã¯ãã£ããªæ¡åŒµçŸå®ïŒARïŒããã³ä»®æ³çŸå®ïŒVRïŒäœéšãæ§ç¯ããããã®é©ç°çãªå¯èœæ§ãæäŸããŸããå ç¢ã§æ£ç¢ºãªXRã¢ããªã±ãŒã·ã§ã³ãéçºããäžã§ã®åºæ¬çãªåŽé¢ã¯ã空é座æšãšã³ãžã³ãçè§£ã管çããããšã§ãããã®ããã°èšäºã§ã¯ãWebXRã®åº§æšç³»ã«é¢ããå æ¬çãªã¬ã€ããæäŸããåç §ç©ºéã座æšå€æããããŠäžçäžã®ãŠãŒã¶ãŒã«åããŠé åçãªXRäœéšãåµé ããããã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠè§£èª¬ããŸãã
WebXR座æšç³»ã®çè§£
WebXRã®äžæ žã¯ãäžæ¬¡å ã®ãã«ã«ã座æšç³»ã«äŸåããŠããŸãããã®ã·ã¹ãã ã¯ã空éå ã®ãªããžã§ã¯ãã®äœçœ®ãšåããå®çŸ©ããããã«3ã€ã®è»žïŒXãYãZïŒã䜿çšããŸãããããã®è»žãã©ã®ããã«å®çŸ©ãããWebXRãããããã©ã®ããã«äœ¿çšããããçè§£ããããšã¯ãæ£ç¢ºã§çŽæçãªXRäœéšãæ§ç¯ããããã«äžå¯æ¬ ã§ãã
- X軞ïŒéåžžã¯æ°Žå¹³è»žã衚ããæ£ã®å€ã¯å³æ¹åã«äŒžã³ãŸãã
- Y軞ïŒéåžžã¯åçŽè»žã衚ããæ£ã®å€ã¯äžæ¹åã«äŒžã³ãŸãã
- Z軞ïŒå¥¥è¡ã軞ã衚ããæ£ã®å€ã¯ãã¥ãŒã¯ãŒïŒèŠã人ïŒã«åãã£ãŠäŒžã³ãŸããæ³šæç¹ãšããŠãäžéšã®èŠçŽïŒOpenGLãªã©ïŒã§ã¯Z軞ã¯ãã¥ãŒã¯ãŒãã*é ããã*æ¹åã«äŒžã³ãŸãããWebXRã¯éåžžããã®éã®èŠçŽã䜿çšããŸãã
åç¹ïŒ0, 0, 0ïŒã¯ã3ã€ã®è»žãã¹ãŠã亀差ããç¹ã§ããXRã·ãŒã³å ã®ãã¹ãŠã®äœçœ®ãšåãã¯ããã®åç¹ãåºæºãšããŠå®çŸ©ãããŸãã
座æšç³»ã®å©ãæïŒHandednessïŒ
WebXRã¯éåžžãå³æåº§æšç³»ã䜿çšããŸããå³æåº§æšç³»ã§ã¯ãå³æã®æãæ£ã®X軞ããæ£ã®Y軞ã«åãã£ãŠäžžãããšã芪æãæ£ã®Zè»žã®æ¹åãæããŸãããã®èŠçŽã¯ãèšç®ã倿ãè¡ãéã«èŠããŠããããšãéèŠã§ãã
åç §ç©ºéïŒç©ºéçè§£ã®åºç€
åç §ç©ºéã¯ãWebXRã«ããã空éçè§£ã®åºç€ã§ãããããã¯XRã·ãŒã³å ã®ãªããžã§ã¯ãã®äœçœ®ãšåããè§£éããããã®ã³ã³ããã¹ããæäŸããŸããååç §ç©ºéã¯ç¬èªã®åº§æšç³»ãå®çŸ©ããéçºè ãä»®æ³ã³ã³ãã³ããç°ãªãåºæºç¹ã«åºå®ïŒã¢ã³ã«ãŒïŒããããšãå¯èœã«ããŸãã
WebXRã¯ããããããç¹å®ã®ç®çãæããããã€ãã®ã¿ã€ãã®åç §ç©ºéãå®çŸ©ããŠããŸãïŒ
- ãã¥ãŒã¯ãŒåç §ç©ºéïŒViewer Reference SpaceïŒïŒãã®åç §ç©ºéã¯ããã¥ãŒã¯ãŒã®é éšã«ã¢ã¿ãããããŸãããã®åç¹ã¯éåžžããŠãŒã¶ãŒã®äž¡ç®ã®éã«äœçœ®ããŸãããŠãŒã¶ãŒãé ãåãããšããã¥ãŒã¯ãŒåç §ç©ºéãäžç·ã«åããŸããããã¯ããããºã¢ãããã£ã¹ãã¬ã€ïŒHUDïŒã®ãããªé éšã«åºå®ãããã³ã³ãã³ããäœæããã®ã«åœ¹ç«ã¡ãŸãã
- ããŒã«ã«åç §ç©ºéïŒLocal Reference SpaceïŒïŒããŒã«ã«åç §ç©ºéã¯ããŠãŒã¶ãŒã®éå§äœçœ®ã«åºå®ãããŸãããŠãŒã¶ãŒãåãåã£ãŠããçŸå®äžçã®ç°å¢ã«å¯ŸããŠåºå®ããããŸãŸã§ããããã¯ãä»®æ³ãªããžã§ã¯ãããŠãŒã¶ãŒã®ç©ç空éã®ç¹å®ã®äœçœ®ã«åºå®ãç¶ããå¿ èŠãããäœéšãäœæããã®ã«çæ³çã§ããäŸãã°ãçŸå®äžçã®ããŒãã«ã«çœ®ãããä»®æ³ã®æ€ç©ãæ³åããŠã¿ãŠãã ãããããŒã«ã«åç §ç©ºéã¯ãã®æ€ç©ããã®å Žæã«ä¿ã¡ãŸãã
- æçåç §ç©ºéïŒBounded Reference SpaceïŒïŒããŒã«ã«åç §ç©ºéã«äŒŒãŠããŸãããXRäœéšãåäœããããã«èšèšãããå¢çãŸãã¯äœç©ãå®çŸ©ããŸããããã«ããããŠãŒã¶ãŒãå®å šã§ç®¡çããããšãªã¢å ã«ãšã©ãŸãããšãä¿èšŒãããŸããããã¯ãã«ãŒã ã¹ã±ãŒã«ã®VRäœéšã«ãšã£ãŠç¹ã«éèŠã§ãã
- ç¡çåç §ç©ºéïŒUnbounded Reference SpaceïŒïŒãã®åç §ç©ºéã«ã¯ãäºåã«å®çŸ©ãããå¢çããããŸããããŠãŒã¶ãŒã¯ãæœåšçã«ç¡éã®ä»®æ³ç°å¢å ãèªç±ã«åãåãããšãã§ããŸããããã¯ããã©ã€ãã·ãã¥ã¬ãŒã¿ãŒãåºå€§ãªä»®æ³é¢šæ¯ãæ¢çŽ¢ãããããªVRäœéšã§äžè¬çã§ãã
- ãã©ããã³ã°åç §ç©ºéïŒTracking Reference SpaceïŒïŒããã¯æãåºæ¬çãªç©ºéã§ããããŒããŠã§ã¢ã远跡ããããŒãºïŒå§¿å¢ïŒãçŽæ¥åæ ããŸããéåžžããããçŽæ¥æäœããããšã¯ãããŸããããä»ã®åç §ç©ºéã¯ãããåºã«æ§ç¯ãããŸãã
é©åãªåç §ç©ºéã®éžæ
é©åãªåç §ç©ºéãéžæããããšã¯ãæãŸããXRäœéšãåµé ããããã«äžå¯æ¬ ã§ããæ±ºå®ãäžãéã«ã¯ã以äžã®èŠçŽ ãèæ ®ããŠãã ããïŒ
- ç§»åæ§ïŒãŠãŒã¶ãŒã¯çŸå®äžçã§åãåããŸããïŒãããããªãããã¥ãŒã¯ãŒåç §ç©ºéãããããŒã«ã«ãŸãã¯æçåç §ç©ºéã®æ¹ãé©ããŠãããããããŸããã
- åºå®ïŒã¢ã³ã«ãªã³ã°ïŒïŒä»®æ³ãªããžã§ã¯ããçŸå®äžçã®ç¹å®ã®äœçœ®ã«åºå®ããå¿ èŠããããŸããïŒãããããªããããŒã«ã«åç §ç©ºéãæè¯ã®éžæã§ãã
- ã¹ã±ãŒã«ïŒXRäœéšã®ã¹ã±ãŒã«ã¯ã©ã®ãããã§ããïŒäœéšãç¹å®ã®ç©ç空éåãã«èšèšãããŠããå Žåãæçåç §ç©ºéãéèŠã«ãªããŸãã
- ãŠãŒã¶ãŒã®å¿«é©æ§ïŒéžæããåç §ç©ºéãããŠãŒã¶ãŒã®äºæ³ãããåããã€ã³ã¿ã©ã¯ã·ã§ã³ãšäžèŽããŠããããšã確èªããŠãã ãããå°ããªãã¬ã€ã¹ããŒã¹ã§ç¡çåç §ç©ºéã䜿çšãããšãäžå¿«æãåŒãèµ·ããå¯èœæ§ããããŸãã
äŸãã°ããŠãŒã¶ãŒããªãã³ã°ã«ãŒã ã«ä»®æ³ã®å®¶å ·ãé 眮ã§ããARã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠãããšæ³åããŠãã ãããããŒã«ã«åç §ç©ºéã¯ããŠãŒã¶ãŒãéšå±ãåãåã£ãŠãä»®æ³ã®å®¶å ·ãå ã®äœçœ®ã«åºå®ããããŸãŸã«ãªããããå®ç§ãªéžæã§ãã
座æšå€æïŒç©ºééã®ã®ã£ãããåãã
座æšå€æã¯ãç°ãªãåç §ç©ºééã§äœçœ®ãšåãã倿ããããã«äžå¯æ¬ ã§ããããã«ããããŠãŒã¶ãŒã®åããéžæããåç §ç©ºéã«é¢ä¿ãªããXRã·ãŒã³å ã«ä»®æ³ãªããžã§ã¯ããæ£ããé 眮ããã³é åã§ããŸããããã¯ãç°ãªãèšèªéã§ç¿»èš³ãããããªãã®ã§ãã座æšå€æã«ãã£ãŠãWebXRã¯ç©äºãã©ã®ãèšèªãïŒåç §ç©ºéïŒã§èšè¿°ãããŠããŠãããããã©ãã«ããããçè§£ã§ããŸãã
WebXRã¯ã座æšå€æã衚çŸããããã«å€æè¡åã䜿çšããŸãã倿è¡åã¯ããã座æšç³»ããå¥ã®åº§æšç³»ãžç¹ã倿ããããã«å¿ èŠãªå¹³è¡ç§»åãåè»¢ãæ¡å€§çž®å°ããšã³ã³ãŒããã4x4ã®è¡åã§ãã
倿è¡åã®çè§£
倿è¡åã¯ãããã€ãã®æäœãåäžã®è¡åã«çµåããŸãïŒ
- å¹³è¡ç§»åïŒTranslationïŒïŒãªããžã§ã¯ããXãYãZè»žã«æ²¿ã£ãŠç§»åãããŸãã
- å転ïŒRotationïŒïŒãªããžã§ã¯ããXãYãZ軞åšãã«å転ãããŸããããã¯å éšçã«ã¯ã©ãŒã¿ããªã³ã§è¡šçŸãããããšãå€ãã§ãããæçµçã«ã¯å šäœã®å€æè¡åå ã®å転è¡åæåã«è§£æ±ºãããŸãã
- æ¡å€§çž®å°ïŒScaleïŒïŒãªããžã§ã¯ãã®ãµã€ãºãXãYãZè»žã«æ²¿ã£ãŠå€æŽããŸãã
ç¹ã®åº§æšïŒ4Dãã¯ãã«ãšããŠè¡šçŸïŒã«å€æè¡åãä¹ç®ããããšã§ãæ°ãã座æšç³»ã§ã®å€æåŸã®åº§æšãåŸãããšãã§ããŸããå€ãã®WebXR APIã¯è¡åã®ä¹ç®ãèªåçã«åŠçããŠãããŸãããé«åºŠãªã·ããªãªã§ã¯ããã®èåŸã«ããæ°åŠãçè§£ããããšãäžå¯æ¬ ã§ãã
WebXRã§ã®å€æã®é©çš
WebXRã¯ã倿ãååŸããã³é©çšããããã®ããã€ãã®ã¡ãœãããæäŸããŸãïŒ
XRFrame.getViewerPose()
ïŒæå®ãããåç §ç©ºéã«ããããã¥ãŒã¯ãŒã®ããŒãºïŒäœçœ®ãšåãïŒãè¿ããŸããããã«ãããç¹å®ã®åºæºç¹ã«å¯Ÿãããã¥ãŒã¯ãŒã®äœçœ®ã決å®ã§ããŸããXRFrame.getPose()
ïŒæå®ãããåç §ç©ºéã«ãããXRInputSource
ïŒäŸïŒã³ã³ãããŒã©ãŒïŒãŸãã¯XRAnchor
ã®ããŒãºãè¿ããŸããããã¯ãã³ã³ãããŒã©ãŒããã®ä»ã®è¿œè·¡å¯Ÿè±¡ãªããžã§ã¯ãã®äœçœ®ãšåãã远跡ããããã«äžå¯æ¬ ã§ãã- è¡åã©ã€ãã©ãªã®äœ¿çšïŒgl-matrix (https://glmatrix.net/) ã®ãããªã©ã€ãã©ãªã¯ã倿è¡åã®äœæãæäœãé©çšãè¡ã颿°ãæäŸããŸãããããã®ã©ã€ãã©ãªã¯ãè€éãªå€æãå®è¡ããããã»ã¹ãç°¡çŽ åããŸãã
äŸãã°ããŠãŒã¶ãŒã®é ã®1ã¡ãŒãã«åã«ä»®æ³ãªããžã§ã¯ããé
眮ããã«ã¯ããŸãXRFrame.getViewerPose()
ã䜿çšããŠãã¥ãŒã¯ãŒã®ããŒãºãååŸããŸããæ¬¡ã«ããªããžã§ã¯ãããã¥ãŒã¯ãŒåç
§ç©ºéã®Zè»žã«æ²¿ã£ãŠ1ã¡ãŒãã«å¹³è¡ç§»åããã倿è¡åãäœæããŸããæåŸã«ããã®å€æããªããžã§ã¯ãã®äœçœ®ã«é©çšããŠãæ£ããå Žæã«é
眮ããŸãã
äŸïŒgl-matrixã«ãã座æšå€æ
以äžã¯ãgl-matrixã䜿çšããŠåº§æšã倿ããç°¡åãªJavaScriptã®äŸã§ãïŒ
// gl-matrix颿°ãã€ã³ããŒã
import { mat4, vec3 } from 'gl-matrix';
// ããŒã«ã«ç©ºéå
ã®ç¹ãå®çŸ©
const localPoint = vec3.fromValues(1, 2, 3); // X, Y, Z座æš
// 倿è¡åãäœæïŒäŸïŒ(4, 5, 6)ã§å¹³è¡ç§»åïŒ
const transformMatrix = mat4.create();
mat4.translate(transformMatrix, transformMatrix, vec3.fromValues(4, 5, 6));
// 倿åŸã®ç¹ãæ ŒçŽãããã¯ãã«ãäœæ
const worldPoint = vec3.create();
// 倿ãé©çš
vec3.transformMat4(worldPoint, localPoint, transformMatrix);
// worldPointã«ã¯å€æåŸã®åº§æšãæ ŒçŽããã
console.log("倿åŸã®ç¹ïŒ", worldPoint);
WebXRã«ããã座æšç³»ç®¡çã®ãã¹ããã©ã¯ãã£ã¹
广çãªåº§æšç³»ç®¡çã¯ãæ£ç¢ºã§ãå®å®ããçŽæçãªXRäœéšãäœæããããã«äžå¯æ¬ ã§ãã以äžã«ãåŸãã¹ããã¹ããã©ã¯ãã£ã¹ãããã€ã瀺ããŸãïŒ
- é©åãªåç §ç©ºéãéžæããïŒååç §ç©ºéã®ç¹æ§ãæ éã«æ€èšããã¢ããªã±ãŒã·ã§ã³ã®ããŒãºã«æãé©ãããã®ãéžæããŠãã ããã
- åç §ç©ºéã®åãæ¿ããæå°éã«ããïŒåç §ç©ºéãé »ç¹ã«åãæ¿ãããšãããã©ãŒãã³ã¹ã®ãªãŒããŒããããæœåšçãªäžæ£ç¢ºããçããå¯èœæ§ããããŸããã¢ããªã±ãŒã·ã§ã³ã§ã®åç §ç©ºéã®åãæ¿ãåæ°ãæå°éã«æããããã«ããŠãã ããã
- 倿è¡åãå¹ççã«äœ¿çšããïŒå€æè¡åã¯èšç®ã³ã¹ããé«ãã§ããäžèŠãªå€æã®äœæãé©çšãé¿ããŠãã ãããå¯èœãªéã倿è¡åããã£ãã·ã¥ããŠãããã©ãŒãã³ã¹ãåäžãããŸãããã
- 座æšç³»ã®éãã«å¯ŸåŠããïŒç°ãªãXRããã€ã¹ãã©ã€ãã©ãªéã§ã®åº§æšç³»ã®èŠçŽã®éãã«æ³šæããŠãã ãããã¢ããªã±ãŒã·ã§ã³ããããã®éããæ£ããåŠçããããã«ããŠãã ãããäŸãã°ãäžéšã®å€ãã·ã¹ãã ãã³ã³ãã³ãã¯å·Šæåº§æšç³»ã䜿çšããŠããå ŽåããããŸãã
- 培åºçã«ãã¹ãããïŒç°ãªãXRããã€ã¹ãç°å¢ã§ã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ããã座æšç³»ãæ£ããæ©èœããŠããããšã確èªããŠãã ãããæ£ç¢ºæ§ãå®å®æ§ãããã©ãŒãã³ã¹ã«æ³šæãæããŸãããã
- ããŒãºè¡šçŸãçè§£ããïŒWebXRã®ããŒãºïŒ
XRPose
ïŒã«ã¯ãäœçœ®ãšåãïŒã¯ã©ãŒã¿ããªã³ïŒã®äž¡æ¹ãå«ãŸããŠããŸããäž¡æ¹ã®ã³ã³ããŒãã³ããæ£ããæœåºãã䜿çšããŠããããšã確èªããŠãã ãããéçºè ã¯ãã°ãã°ãããŒãºã«ã¯äœçœ®ããŒã¿*ã®ã¿*ãå«ãŸããŠãããšèª€è§£ããã¡ã§ãã - ã¬ã€ãã³ã·ãŒãèæ ®ããïŒXRããã€ã¹ã«ã¯åºæã®ã¬ã€ãã³ã·ãŒããããŸãããã®ã¬ã€ãã³ã·ãŒãè£ããå®å®æ§ãåäžãããããã«ããŒãºãäºæž¬ããããã«è©Šã¿ãŠãã ãããWebXR Device APIã¯ããŒãºãäºæž¬ããã¡ãœãããæäŸããŠãããããã«ããç¥èŠãããã©ã°ãæžããããšãã§ããŸãã
- ã¯ãŒã«ãã¹ã±ãŒã«ãç¶æããïŒã¯ãŒã«ãã¹ã±ãŒã«ãäžè²«ããŠä¿ã£ãŠãã ãããã·ãŒã³å ã®ãªããžã§ã¯ããä»»æã«ã¹ã±ãŒãªã³ã°ããããšã¯é¿ããŠãã ãããããã¯ã¬ã³ããªã³ã°ã®ã¢ãŒãã£ãã¡ã¯ããããã©ãŒãã³ã¹ã®åé¡ã«ã€ãªããå¯èœæ§ããããŸããä»®æ³åäœãšçŸå®äžçã®åäœã®éã§1:1ã®ãããã³ã°ãç¶æããããã«åªããŠãã ããã
ããããèœãšã穎ãšãã®åé¿æ¹æ³
WebXRã§åº§æšç³»ãæ±ãã®ã¯é£ãããééããç¯ããããã§ãã以äžã«ãããããèœãšã穎ãšãã®åé¿æ¹æ³ãããã€ã瀺ããŸãïŒ
- è¡åä¹ç®ã®é åºãééã£ãŠããïŒè¡åã®ä¹ç®ã¯å¯æã§ã¯ãªããããè¡åãä¹ç®ããé åºãéèŠã§ããæãŸãã倿ãéæããããã«ãåžžã«è¡åãæ£ããé åºã§ä¹ç®ããŠããããšã確èªããŠãã ãããéåžžãå€æã¯æ¡å€§çž®å°ãå転ãå¹³è¡ç§»åïŒSRTïŒã®é ã«é©çšãããŸãã
- ããŒã«ã«åº§æšãšã¯ãŒã«ã座æšã®æ··åïŒããŒã«ã«åº§æšïŒãªããžã§ã¯ãèªèº«ã®åº§æšç³»ãåºæºãšãã座æšïŒãšã¯ãŒã«ã座æšïŒã·ãŒã³ã®ã°ããŒãã«åº§æšç³»ãåºæºãšãã座æšïŒãåºå¥ããããšãéèŠã§ããåæäœã§æ£ãã座æšç³»ã䜿çšããŠããããšã確èªããŠãã ããã
- 座æšç³»ã®å©ãæãç¡èŠããïŒåè¿°ã®éããWebXRã¯éåžžãå³æåº§æšç³»ã䜿çšããŸããããããäžéšã®ã³ã³ãã³ããã©ã€ãã©ãªã¯å·Šæåº§æšç³»ã䜿çšããŠããå ŽåããããŸãããããã®éãã«æ³šæããé©åã«å¯ŸåŠããŠãã ããã
- ç®ã®é«ããèæ
®ããªãïŒãã¥ãŒã¯ãŒåç
§ç©ºéã䜿çšããå Žåãåç¹ã¯éåžžããŠãŒã¶ãŒã®äž¡ç®ã®éã«äœçœ®ããŸãããªããžã§ã¯ãããŠãŒã¶ãŒã®ç®ã®é«ãã«é
眮ãããå Žåã¯ããŠãŒã¶ãŒã®ç®ã®é«ããèæ
®ããå¿
èŠããããŸãã
XRFrame.getViewerPose()
ã«ãã£ãŠè¿ãããXREye
ãªããžã§ã¯ãããã®æ å ±ãæäŸã§ããŸãã - ããªããã®èç©ïŒARäœéšã§ã¯ãæéã®çµéãšãšãã«ãã©ããã³ã°ãããªããããä»®æ³ãªããžã§ã¯ããçŸå®äžçãšãããŠããŸãããšããããŸããããªããã軜æžããäœçœ®åãããç¶æããããã«ãã«ãŒãã¯ããŒãžã£ãŒãVisual-Inertial OdometryïŒVIOïŒãªã©ã®æè¡ãå®è£ ããŠãã ããã
é«åºŠãªãããã¯ïŒã¢ã³ã«ãŒãšç©ºéãããã³ã°
åºæ¬çãªåº§æšå€æãè¶ ããŠãWebXRã¯ç©ºéçè§£ã®ããã®ããé«åºŠãªæ©èœãæäŸããŸãïŒ
- ã¢ã³ã«ãŒïŒAnchorsïŒïŒã¢ã³ã«ãŒã䜿çšãããšãä»®æ³ãªããžã§ã¯ããšçŸå®äžçã®éã«æ°žç¶çãªç©ºéçé¢ä¿ãäœæã§ããŸããã¢ã³ã«ãŒã¯ãã·ã¹ãã ãç°å¢ã«å¯ŸããŠåºå®ã詊ã¿ã空éå ã®ç¹ã§ããããã€ã¹ãäžæçã«ãã©ããã³ã°ã倱ã£ãŠãããã©ããã³ã°ãå埩ãããšãã«ã¢ã³ã«ãŒã¯åé 眮ã詊ã¿ãŸããããã¯ããŠãŒã¶ãŒãåãåã£ãããããã€ã¹ãã©ããã³ã°ãäžæããããããŠããä»®æ³ãªããžã§ã¯ããç¹å®ã®ç©ççãªå Žæã«åºå®ãç¶ããå¿ èŠãããäœéšãäœæããã®ã«åœ¹ç«ã¡ãŸãã
- 空éãããã³ã°ïŒSpatial MappingïŒïŒç©ºéãããã³ã°ïŒã·ãŒã³çè§£ãŸãã¯ã¯ãŒã«ããã©ããã³ã°ãšãåŒã°ããŸãïŒã«ãããã·ã¹ãã ã¯ãŠãŒã¶ãŒã®ç°å¢ã®3D衚çŸãäœæã§ããŸãããã®è¡šçŸã¯ãçŸå®äžçã®ãªããžã§ã¯ãã®èåŸã«ããä»®æ³ãªããžã§ã¯ãããªã¯ã«ãŒãžã§ã³ïŒé®èœïŒããããä»®æ³ãªããžã§ã¯ããšçŸå®äžçã®ãªããžã§ã¯ãéã®ç©çã€ã³ã¿ã©ã¯ã·ã§ã³ãå¯èœã«ããããããæ²¡å ¥æã®ããä¿¡ææ§ã®é«ãXRäœéšãæäŸãããããããã«äœ¿çšã§ããŸãã空éãããã³ã°ã¯æ®éçã«ãµããŒããããŠããããã§ã¯ãªããç¹å®ã®ããŒããŠã§ã¢æ©èœãå¿ èŠã§ãã
æ°žç¶çãªç©ºéé¢ä¿ã®ããã®ã¢ã³ã«ãŒã®äœ¿çš
ã¢ã³ã«ãŒãäœæããã«ã¯ããŸãã¢ã³ã«ãŒã®ç®çã®å Žæã衚ãXRFrame
ãšXRPose
ãååŸããå¿
èŠããããŸããæ¬¡ã«ãXRFrame.createAnchor()
ã¡ãœãããåŒã³åºããXRPose
ãæž¡ããŸãããã®ã¡ãœããã¯ãæ°ããäœæãããã¢ã³ã«ãŒã衚ãXRAnchor
ãªããžã§ã¯ããè¿ããŸãã
以äžã®ã³ãŒãã¹ããããã¯ãã¢ã³ã«ãŒãäœæããæ¹æ³ã瀺ããŠããŸãïŒ
// XRFrameãšXRPoseãååŸ
const pose = frame.getPose(hitTestResult.localPose, localReferenceSpace);
// ã¢ã³ã«ãŒãäœæ
const anchor = frame.createAnchor(pose);
// ãšã©ãŒãåŠç
if (!anchor) {
console.error("ã¢ã³ã«ãŒã®äœæã«å€±æããŸããã");
return;
}
// ã¢ã³ã«ãŒãäœæããããã®äœçœ®ãç¶æããããšããŸã
// çŸå®äžçã«å¯ŸããŠã
ã°ããŒãã«ãªã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
äžçäžã®ãŠãŒã¶ãŒåãã«WebXRäœéšãèšèšããéã«ã¯ãã¢ã¯ã»ã·ããªãã£ãèæ ®ããããšãäžå¯æ¬ ã§ããããã«ã¯ã次ã®ãããªèŠçŽ ãå«ãŸããŸãïŒ
- èšèªãµããŒãïŒãã¹ãŠã®ããã¹ãããã³é³å£°ã³ã³ãã³ãã«ç¿»èš³ãæäŸããŸãã
- æåçãªé æ ®ïŒæåçãªéãã«æ³šæããç¹å®ã®æåã§äžå¿«ãŸãã¯äžé©åãšèŠãªãããå¯èœæ§ã®ããç»åãèšèã®äœ¿çšãé¿ããŸãã
- å ¥åæ¹æ³ïŒã³ã³ãããŒã©ãŒãé³å£°ã³ãã³ããèŠç·ããŒã¹ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãªã©ãããŸããŸãªå ¥åæ¹æ³ããµããŒãããŸãã
- ä¹ãç©é ãïŒæ¥æ¿ãŸãã¯äžå¿«ãªåããé¿ããå®å®ããåºæºãã¬ãŒã ãæäŸãããŠãŒã¶ãŒãèŠéè§ã調æŽã§ããããã«ããããšã§ãä¹ãç©é ããæå°éã«æããŸãã
- èŠèŠé害ïŒããã¹ãããã®ä»ã®èŠèŠèŠçŽ ã®ãµã€ãºãšã³ã³ãã©ã¹ãã調æŽãããªãã·ã§ã³ãæäŸããŸããè¿œå æ å ±ãæäŸããããã«é³å£°ãã¥ãŒã䜿çšããããšãæ€èšããŠãã ããã
- èŽèŠé害ïŒãã¹ãŠã®é³å£°ã³ã³ãã³ãã«ãã£ãã·ã§ã³ãŸãã¯ãã©ã³ã¹ã¯ãªãããæäŸããŸããè¿œå æ å ±ãæäŸããããã«èŠèŠçãªãã¥ãŒã䜿çšããããšãæ€èšããŠãã ããã
çµè«
座æšç³»ç®¡çããã¹ã¿ãŒããããšã¯ãé åçã§æ£ç¢ºãªWebXRäœéšãæ§ç¯ããããã®åºæ¬ã§ããåç §ç©ºéã座æšå€æãããã³ãã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã§ãäžçäžã®ãŠãŒã¶ãŒã«ãšã£ãŠæ²¡å ¥åã§çŽæçãªXRã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããWebXRãã¯ãããžãŒãé²åãç¶ããã«ã€ããŠããããã®ã³ã¢ã³ã³ã»ããã®ç¢ºããªçè§£ã¯ãæ²¡å ¥åãŠã§ãäœéšã®éçãæŒãåºããããšããéçºè ã«ãšã£ãŠããã«éèŠã«ãªãã§ãããã
ãã®ããã°èšäºã§ã¯ãWebXRã«ããã座æšç³»ç®¡çã®å æ¬çãªæŠèŠã説æããŸãããããã§èª¬æããæŠå¿µãæè¡ã詊ããŠã¿ãŠã詳现ã«ã€ããŠã¯WebXR APIã®ããã¥ã¡ã³ãã調ã¹ãããšããå§ãããŸãããããã®ååãåãå ¥ããããšã§ãWebXRã®å¯èœæ§ãæå€§éã«åŒãåºããäžçäžã®ãŠãŒã¶ãŒã®ããã«çã«å€é©çãªXRäœéšãåµé ããããšãã§ããŸãã