座æšç³»åŠçããã¹ã¿ãŒããŠWebXRã®æé©ãªããã©ãŒãã³ã¹ãåŒãåºããŸããããæ¬ã¬ã€ãã¯ã倿§ãªãã©ãããã©ãŒã ã§ã·ãŒã ã¬ã¹ãã€å¹ççãªæ²¡å ¥åäœéšãåµé ããããã®å®è·µçãªæŠç¥ãæäŸããŸãã
WebXR空éããã©ãŒãã³ã¹ã®æé©åïŒæ²¡å ¥åäœéšã®ããã®åº§æšç³»åŠç
WebXRã¯ããŠã§ããã©ãŠã¶å ã§çŽæ¥ãæ²¡å ¥åã®ä»®æ³çŸå®ããã³æ¡åŒµçŸå®äœéšãæ§ç¯ããããã®åºç€ãæäŸããŸãããããã®äœéšãè€éã«ãªãã«ã€ããŠãã¹ã ãŒãºã§é åçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«ã¯ãããã©ãŒãã³ã¹ã®æé©åãæãéèŠã«ãªããŸãããã®æé©åã®éèŠãªåŽé¢ã¯ã座æšç³»ãçè§£ããå¹ççã«åŠçããããšã«ãããŸãããã®èšäºã§ã¯ãWebXRã«ããã座æšç³»åŠçã®è€éããæãäžããããã©ãŒãã³ã¹ã®ããã«ããã¯ãæå°éã«æããããã®å®çšçãªæŠç¥ãæäŸãã倿§ãªããã€ã¹ããã©ãããã©ãŒã ã§WebXRã¢ããªã±ãŒã·ã§ã³ãã¹ã ãŒãºã«åäœããããšãä¿èšŒããŸãã
WebXR座æšç³»ã®çè§£
æé©åæè¡ã«é£ã³èŸŒãåã«ãWebXRã«é¢ããããŸããŸãªåº§æšç³»ãçè§£ããããšãäžå¯æ¬ ã§ãã
- ããŒã«ã«ç©ºéïŒ ã·ãŒã³å ã®å3Dãªããžã§ã¯ãã«åºæã®åº§æšç³»ã§ãããªããžã§ã¯ãã®äœçœ®ãå転ãã¹ã±ãŒã«ã¯ããã®ããŒã«ã«åç¹ãåºæºã«å®çŸ©ãããŸãã
- ã¯ãŒã«ã空éïŒ ã·ãŒã³å šäœã®ããã®ã°ããŒãã«åº§æšç³»ã§ããã·ãŒã³å ã®ãã¹ãŠã®ãªããžã§ã¯ãã¯ãæçµçã«ã¯ãŒã«ã空éãåºæºã«é 眮ãããŸãã
- ãã¥ãŒã¹ããŒã¹ïŒèŠç¹ç©ºéïŒïŒ ãŠãŒã¶ãŒã®èŠç¹ããã®åº§æšç³»ã§ããŠãŒã¶ãŒã®ç®ïŒãŸãã¯ã¹ãã¬ãªã¬ã³ããªã³ã°ã®å Žåã¯äž¡ç®ã®éïŒãäžå¿ã«ããŠããŸããã«ã¡ã©ã¹ããŒã¹ãšããŠãç¥ãããŠããŸãã
- åç §ç©ºéïŒ WebXRã®åºæ¬çãªæŠå¿µã§ãåç §ç©ºéã¯WebXRã·ãŒã³ãçŸå®äžçãšã©ã®ããã«é¢é£ããããå®çŸ©ããŸããXRããã€ã¹ã®äœçœ®ãšåããä»®æ³ç°å¢ã«ã©ã®ããã«ãããã³ã°ãããããæ±ºå®ããŸããåç §ç©ºéã«ã¯ããã€ãã®çš®é¡ããããŸãã
- ãã¥ãŒã¯ãŒåç §ç©ºéïŒ åç¹ã¯ãŠãŒã¶ãŒã®åæäœçœ®ã«åºå®ãããŸããXRããã€ã¹ãåãããšä»®æ³ç°å¢ãåããŸããç座åã®äœéšã«é©ããŠããŸãã
- ããŒã«ã«åç §ç©ºéïŒ ãã¥ãŒã¯ãŒã«äŒŒãŠããŸãããåç¹ã¯ãŠãŒã¶ãŒã®ç©ç空éã®ã©ãã«ã§ãèšå®ã§ããŸããå°ãåºã远跡ãšãªã¢ãæäŸããŸãã
- ããŒã«ã«ããã¢åç §ç©ºéïŒ åç¹ã¯åºã«ãããY軞ãäžãåããŸããéããããšãªã¢å ã§ã®æ©è¡ãç«äœã®äœéšãå¯èœã«ããŸããXRããã€ã¹ããã®åºæšå®ãµããŒããå¿ èŠã§ãã
- ããŠã³ãããããã¢åç §ç©ºéïŒ ããŒã«ã«ããã¢ã«äŒŒãŠããŸããã远跡ãšãªã¢ã®å¢çã瀺ãããªãŽã³ãæäŸããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã¯å®å šãªãã¬ã€ã¹ããŒã¹å ã«åããå¶éã§ããŸãã
- ã¢ã³ããŠã³ãããåç §ç©ºéïŒ å¶éãªãåºç¯å²ã§ã®è¿œè·¡ãå¯èœã«ããŸããé«åºŠãªè¿œè·¡æè¡ïŒäŸïŒARKitãARCoreïŒãå¿ èŠã§ãã
WebXR APIã¯ãããŸããŸãªçš®é¡ã®åç §ç©ºéãèŠæ±ããããã®ã¡ãœãããæäŸããŸããåç §ç©ºéã®éžæã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãšåº§æšç³»å€æã®è€éãã«å€§ãã圱é¿ããŸãã
座æšç³»å€æã®ããã©ãŒãã³ã¹ã³ã¹ã
3Dãªããžã§ã¯ããã¬ã³ããªã³ã°ããããã³ã«ããã®åº§æšã¯ããŒã«ã«ç©ºéããã¯ãŒã«ã空éãžã次ã«ãã¥ãŒã¹ããŒã¹ãžããããŠæçµçã«ããã€ã¹ã®ã¹ã¯ãªãŒã³ç©ºéãžãšå€æãããªããã°ãªããŸããããããã®å€æã«ã¯è¡åä¹ç®ãå«ãŸããããã¯ç¹ã«å€æ°ã®ãªããžã§ã¯ããè€éãªã·ãŒã³ãæ±ãå Žåã«èšç®ã³ã¹ããé«ããªãå¯èœæ§ããããŸãããã¬ãŒã ããšã«è¡ããã倿ãå€ããã°å€ãã»ã©ãããã©ãŒãã³ã¹ã¯äœäžããŸãã
ããã«ãç¹ã«`bounded-floor`ã`unbounded`åç §ç©ºéã«ãããŠãåç §ç©ºéã«å¯ŸããŠãªããžã§ã¯ãã®äœçœ®ãåžžã«æŽæ°ããããšã¯ã倧ããªãªãŒããŒãããã远å ããå¯èœæ§ããããŸãããªããžã§ã¯ãã®è¡åãé »ç¹ã«æŽæ°ãããšãã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ã«åœ±é¿ãäžãããã¬ãŒã èœã¡ãåŒãèµ·ããããŠãŒã¶ãŒã«ãšã£ãŠäžå¿«ãªäœéšãããããããšããããŸãããŠãŒã¶ãŒã®åãã«åºã¥ããŠæ¯ãã¬ãŒã æŽæ°ããå¿ èŠãããæ°çŸã®ãªããžã§ã¯ããæã€è€éãªã·ãŒã³ãæ³åããŠã¿ãŠãã ãããããã¯ããã«ããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ãªãåŸãŸãã
ç°¡åãªäŸãèããŠã¿ãŸããããçŸå®äžçã®è¡šé¢ã«åºå®ãããä»®æ³ããŒã«ãŒã衚瀺ããå Žåã§ããARã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã®ããŒã«ãŒã®äœçœ®ã¯ãæ€åºããã衚é¢ã«å¯Ÿããããã€ã¹ã®ããŒãºã«åºã¥ããŠåžžã«æŽæ°ãããªããã°ãªããŸããããã®æŽæ°ãæé©åãããŠããªããšãé¡èãªã©ã°ããžãã¿ãŒã«ã€ãªãããäœéšã®ãªã¢ãªãºã ãäœäžãããŸãã
座æšç³»åŠçãæé©åããããã®æŠç¥
WebXRã«ããã座æšç³»å€æã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ãæå°éã«æããããã®ããã€ãã®æŠç¥ã以äžã«ç€ºããŸãã
1. è¡åæŒç®ã®æå°å
è¡åä¹ç®ã¯ã座æšç³»å€æã«ãããäž»èŠãªããã©ãŒãã³ã¹ããã«ããã¯ã§ãããããã£ãŠãè¡åæŒç®ã®æ°ãæžããããšãéèŠã§ãã
- 倿ã®ãã£ãã·ã¥ïŒ ãªããžã§ã¯ãã®å€æè¡åãè€æ°ã®ãã¬ãŒã ã§äžå®ã§ããå Žåãæ¯ãã¬ãŒã åèšç®ãã代ããã«ãè¡åããã£ãã·ã¥ããŠåå©çšããŸããããã¯ç¹ã«ãã·ãŒã³å ã®éçãªãªããžã§ã¯ãã«å¯ŸããŠå¹æçã§ãã
- äºåèšç®ãããå€æïŒ å¯èœãªéããã·ãŒã³ã®åæåäžã«å€æè¡åãäºåèšç®ããŸããäŸãã°ã2ã€ã®ãªããžã§ã¯ãã®çžå¯Ÿäœçœ®ãäºåã«ããã£ãŠããå Žåããããã®éã®å€æè¡åãäžåºŠèšç®ããŠä¿åããŸãã
- æäœã®ãããåŠçïŒ åã ã®ãªããžã§ã¯ããäžã€ãã€å€æãã代ããã«ãé¡äŒŒã®ãªããžã§ã¯ãããŸãšããŠãããåŠçããåäžã®è¡åæŒç®ã§å€æããŸããããã¯ãããŒãã£ã¯ã«ããã«ãã£ã³ã°ãããã¯ã®ãããªå€æ°ã®åäžãªããžã§ã¯ããã¬ã³ããªã³ã°ããéã«ç¹ã«å¹æçã§ãã
- ã€ã³ã¹ã¿ã³ã¹ã¬ã³ããªã³ã°ã®äœ¿çšïŒ ã€ã³ã¹ã¿ã³ã¹ã¬ã³ããªã³ã°ã䜿çšãããšãåäžã®æç»ã³ãŒã«ã§ãç°ãªã倿ãæã€åãã¡ãã·ã¥ã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãã¬ã³ããªã³ã°ã§ããŸããããã«ãããæ£®ã®æšã ãã¹ã«ã€ããã¯ã¹ã®æã ãªã©ã倿°ã®åäžãªããžã§ã¯ãã®ã¬ã³ããªã³ã°ã«é¢é£ãããªãŒããŒããããå€§å¹ ã«åæžã§ããŸãã
äŸ (three.js):
// Assuming 'object' is a THREE.Object3D
if (!object.cachedMatrix) {
object.cachedMatrix = object.matrixWorld.clone();
}
// Use object.cachedMatrix for rendering instead of recalculating
2. é©åãªåç §ç©ºéã®éžæ
åç §ç©ºéã®éžæã¯ã座æšç³»åŠçã®è€éãã«å€§ãã圱é¿ããŸãã以äžã®èŠçŽ ãèæ ®ããŠãã ããã
- ã¢ããªã±ãŒã·ã§ã³ã®èŠä»¶ïŒ æå³ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«æãåèŽããåç §ç©ºéãéžæããŸããç座åã®äœéšã«ã¯`viewer`ãŸãã¯`local`åç §ç©ºéã§ååãããããŸãããæ©è¡äœéšã«ã¯`local-floor`ãŸãã¯`bounded-floor`ãããé©åãããããŸãããå€§èŠæš¡ãªARã¢ããªã±ãŒã·ã§ã³ã«ã¯`unbounded`ãå¿ èŠã§ãã
- è¿œè·¡ç²ŸåºŠïŒ åç §ç©ºéã«ãã£ãŠã远跡ã®ç²ŸåºŠãšå®å®æ§ã®ã¬ãã«ãç°ãªããŸãã`unbounded`空éã¯æãèªç±åºŠãé«ãäžæ¹ã§ãããªãããäžæ£ç¢ºããçããããå ŽåããããŸãã
- ããã©ãŒãã³ã¹ãžã®åœ±é¿ïŒ ã·ãŒã³ã®åº§æšç³»ãé »ç¹ã«æŽæ°ããå¿ èŠãããåç §ç©ºéïŒäŸïŒ`unbounded`ïŒã¯ãããã©ãŒãã³ã¹ãžã®è² è·ãé«ããªãå¯èœæ§ããããŸãã
äŸãã°ããŠãŒã¶ãŒã座ã£ããŸãŸã§ããã·ã³ãã«ãªVRã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠããå Žåãã·ãŒã³ã®åç¹ãåžžã«æŽæ°ããå¿ èŠæ§ãæå°éã«æããããã`unbounded`åç §ç©ºéã䜿çšããããã`viewer`åç §ç©ºéã䜿çšããæ¹ãå¹ççã§ãããã
3. ããŒãºæŽæ°ã®æé©å
XRããã€ã¹ã®ããŒãºïŒäœçœ®ãšåãïŒã¯ãWebXR APIã«ãã£ãŠåžžã«æŽæ°ãããŸãããããã®ããŒãºæŽæ°ãã©ã®ããã«åŠçããããæé©åããããšããããã©ãŒãã³ã¹ã«ãšã£ãŠéèŠã§ãã
- æŽæ°ã®ã¹ããããªã³ã°ïŒ æ¯ãã¬ãŒã ããŒãºæŽæ°ãåŠçãã代ããã«ãããäœãé »åºŠã«ã¹ããããªã³ã°ããããšãæ€èšããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ãéåžžã«æ£ç¢ºãªè¿œè·¡ãå¿ èŠãšããªãå Žåã«ç¹ã«å¹æçã§ãã
- 空éã¢ã³ã«ãŒïŒ ARã¢ããªã±ãŒã·ã§ã³ã§ã¯ã空éã¢ã³ã«ãŒã䜿çšããŠä»®æ³ãªããžã§ã¯ããçŸå®äžçã®ç¹å®ã®äœçœ®ã«åºå®ããŸããããã«ãããã¢ã³ã«ãŒããããªããžã§ã¯ãã¯ã¢ã³ã«ãŒã«å¯ŸããŠåºå®ããããŸãŸã§ãããããæŽæ°ã®é »åºŠãæžããããšãã§ããŸãã
- ãããã¬ã³ãã³ã°ïŒ ãããã¬ã³ãã³ã°æè¡ãå®è£ ããŠãæŽæ°ã®åéã®ããã€ã¹ã®ããŒãºãäºæž¬ããŸããããã«ãããç¹ã«æŽæ°ãã¹ããããªã³ã°ãããŠããå Žåã«ãåããæ»ããã«ããç¥èŠãããé å»¶ãæžããã®ã«åœ¹ç«ã¡ãŸãã
äŸ (Babylon.js):
// Get the current viewer pose
const pose = frame.getViewerPose(referenceSpace);
// Only update the object's position if the pose has changed significantly
const threshold = 0.01; // Example threshold value
if (pose && (Math.abs(pose.transform.position.x - lastPose.transform.position.x) > threshold ||
Math.abs(pose.transform.position.y - lastPose.transform.position.y) > threshold ||
Math.abs(pose.transform.position.z - lastPose.transform.position.z) > threshold)) {
// Update the object's position based on the new pose
// ...
lastPose = pose;
}
4. WebAssemblyã®æŽ»çš
WebAssemblyïŒWASMïŒã䜿çšãããšããŠã§ããã©ãŠã¶å ã§èšç®éçŽçãªã³ãŒãããã€ãã£ãã«è¿ãé床ã§å®è¡ã§ããŸããè€éãªåº§æšç³»èšç®ãã«ã¹ã¿ã ã¢ã«ãŽãªãºã ãããå Žåã¯ãããããWASMã§å®è£ ããããšãæ€èšããŠãã ãããããã«ãããJavaScriptãšæ¯èŒããŠããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
- è¡åã©ã€ãã©ãªïŒ è¡åæŒç®ãè¡ãããã«ãæé©åãããWASMè¡åã©ã€ãã©ãªãå©çšããŸãããããã®ã©ã€ãã©ãªã¯ãå€ãã®å ŽåãJavaScriptã®å¯Ÿå¿ãããã®ãããå€§å¹ ã«é«éã§ãã
- ã«ã¹ã¿ã ã¢ã«ãŽãªãºã ïŒ ããã©ãŒãã³ã¹ãéèŠãªã¢ã«ãŽãªãºã ïŒäŸïŒééååŠãç©çã·ãã¥ã¬ãŒã·ã§ã³ïŒãWASMã§å®è£ ããã¡ã€ã³ã®JavaScriptã¹ã¬ããããè² è·ã軜æžããŸãã
gl-matrixïŒWASMã«ã³ã³ãã€ã«å¯èœïŒãã«ã¹ã¿ã ã®WASMæé©åã©ã€ãã©ãªãªã©ãããã€ãã®åªããWASMè¡åã©ã€ãã©ãªãå©çšå¯èœã§ãã
5. WebGLæé©åã®å©çš
WebGLã¯WebXRã§äœ¿çšãããåºç€ãšãªãã°ã©ãã£ãã¯ã¹APIã§ããWebGLã³ãŒããæé©åããããšã§ãå šäœçãªããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
- æç»ã³ãŒã«ã®æå°åïŒ ãªããžã§ã¯ãããããåŠçããããã€ã³ã¹ã¿ã³ã·ã³ã°ã®ãããªæè¡ã䜿çšãããããŠãæç»ã³ãŒã«ã®æ°ãæžãããŸããåæç»ã³ãŒã«ã¯ãªãŒããŒãããã䌎ããããããããæå°éã«æããããšãéèŠã§ãã
- ã·ã§ãŒããŒã®æé©åïŒ ã·ã§ãŒããŒã³ãŒããæé©åããŠãã¬ã³ããªã³ã°ãã€ãã©ã€ã³ã®èšç®ã®è€éãã軜æžããŸããå¹ççãªã¢ã«ãŽãªãºã ã䜿çšããäžèŠãªèšç®ãé¿ããŸãã
- ãã¯ã¹ãã£ã¢ãã©ã¹ã®äœ¿çšïŒ è€æ°ã®ãã¯ã¹ãã£ãåäžã®ãã¯ã¹ãã£ã¢ãã©ã¹ã«çµåããŠããã¯ã¹ãã£ãã€ã³ãã£ã³ã°æäœã®æ°ãæžãããŸãã
- ããããããã³ã°ïŒ ããããããã³ã°ã䜿çšããŠãã¯ã¹ãã£ã®äœè§£å床ããŒãžã§ã³ãçæããç¹ã«é ãã®ãªããžã§ã¯ãã®ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãåäžãããŸãã
- ãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ïŒ ä»ã®ãªããžã§ã¯ãã®èåŸã«é ããŠãããªããžã§ã¯ãã®ã¬ã³ããªã³ã°ãé¿ããããã«ããªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ãå®è£ ããŸãã
6. ããã©ãŒãã³ã¹ã®ãããã¡ã€ãªã³ã°ãšåæ
ããã©ãŒãã³ã¹ãããã¡ã€ãªã³ã°ã¯ãããã«ããã¯ãç¹å®ããWebXRã¢ããªã±ãŒã·ã§ã³ãæé©åããããã«äžå¯æ¬ ã§ãããã©ãŠã¶ã®éçºè ããŒã«ïŒäŸïŒChrome DevToolsãFirefox Developer ToolsïŒã䜿çšããŠãã³ãŒãã®ããã©ãŒãã³ã¹ããããã¡ã€ãªã³ã°ããæ¹åå¯èœãªé åãç¹å®ããŸãã
- ãã¬ãŒã ã¬ãŒãã®ç£èŠïŒ ã¢ããªã±ãŒã·ã§ã³ã®ãã¬ãŒã ã¬ãŒããç£èŠããXRããã€ã¹ã®ç®æšãªãã¬ãã·ã¥ã¬ãŒãïŒéåžž60HzãŸãã¯90HzïŒãäžåã£ãŠããããšã確èªããŸãã
- CPUããã³GPU䜿çšçïŒ CPUãšGPUã®äœ¿çšçã远跡ããŠãããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããŸããé«ãCPU䜿çšçã¯éå¹ççãªJavaScriptã³ãŒãã瀺ããé«ãGPU䜿çšçã¯éå¹ççãªã¬ã³ããªã³ã°ã³ãŒãã瀺ãå¯èœæ§ããããŸãã
- ã¡ã¢ãªäœ¿çšéïŒ ã¡ã¢ãªãªãŒã¯ãéå°ãªã¡ã¢ãªå²ãåœãŠãé²ãããã«ãã¡ã¢ãªäœ¿çšéãç£èŠããŸãã
- WebXR Device APIçµ±èšïŒ WebXR Device APIã¯ããã¬ãŒã ã¿ã€ãã³ã°æ å ±ãªã©ãXRã·ã¹ãã ã®ããã©ãŒãã³ã¹ã«é¢ããçµ±èšãæäŸããŸãããã®ããŒã¿ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ãXRããŒããŠã§ã¢ã®èœåã«å¯ŸããŠã©ã®ããã«åäœããŠããããçè§£ããŸãã
ã±ãŒã¹ã¹ã¿ãã£ãšäŸ
ãããã®æé©åæè¡ãå®éã®ã·ããªãªã§ã©ã®ããã«é©çšã§ãããã説æããããã«ãããã€ãã®ã±ãŒã¹ã¹ã¿ãã£ãèŠãŠã¿ãŸãããã
ã±ãŒã¹ã¹ã¿ãã£1ïŒè¡šé¢ã¢ã³ã«ãŒã䜿çšããARã¢ããªã±ãŒã·ã§ã³
ããARã¢ããªã±ãŒã·ã§ã³ãããŠãŒã¶ãŒã®ãªãã³ã°ã«ãŒã ã«ä»®æ³ã®å®¶å ·ã衚瀺ããŸããå®¶å ·ãªããžã§ã¯ãã¯ãæ€åºããã衚é¢ïŒäŸïŒåºãããŒãã«ïŒã«åºå®ãããŸããåœåãã¢ããªã±ãŒã·ã§ã³ã¯ããã€ã¹ã®ããŒãºã«åºã¥ããŠåå®¶å ·ãªããžã§ã¯ãã®äœçœ®ãæ¯ãã¬ãŒã æŽæ°ããŠããããã®çµæãé¡èãªã©ã°ããžãã¿ãŒãçºçããŠããŸããã
æé©åæŠç¥ïŒ
- 空éã¢ã³ã«ãŒïŒ 空éã¢ã³ã«ãŒã䜿çšããŠãå®¶å ·ãªããžã§ã¯ããæ€åºããã衚é¢ã«åºå®ããŸããããã«ãããé »ç¹ãªæŽæ°ã®å¿ èŠæ§ãæžå°ããŸãã
- ãããã¬ã³ãã³ã°ïŒ ãããã¬ã³ãã³ã°ãå®è£ ããŠãæŽæ°ã®åéã®ä»®æ³å®¶å ·ã®åããæ»ããã«ããŸãã
- æŽæ°ã®ã¹ããããªã³ã°ïŒ å®¶å ·ãªããžã§ã¯ãã®ããŒãºæŽæ°ã®é »åºŠãæžãããŸãã
çµæïŒ å®å®æ§ãåäžããã©ã°ãæžå°ãããããªã¢ã«ã§æ²¡å ¥æã®ããARäœéšãå®çŸããŸããã
ã±ãŒã¹ã¹ã¿ãã£2ïŒå€æ°ã®ãªããžã§ã¯ããæã€VRã¢ããªã±ãŒã·ã§ã³
ããVRã¢ããªã±ãŒã·ã§ã³ããäœåãã®æšã ãããæ£®ã®ç°å¢ãã·ãã¥ã¬ãŒãããŸããåæšãåå¥ã«ã¬ã³ããªã³ã°ãããšãããã©ãŒãã³ã¹ãäœäžãããã¬ãŒã ãããããããŸãã
æé©åæŠç¥ïŒ
- ã€ã³ã¹ã¿ã³ã¹ã¬ã³ããªã³ã°ïŒ ã€ã³ã¹ã¿ã³ã¹ã¬ã³ããªã³ã°ã䜿çšããŠãåäžã®æç»ã³ãŒã«ã§ãç°ãªã倿ãæã€åãæšã®ã¡ãã·ã¥ã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãã¬ã³ããªã³ã°ããŸãã
- ãã¯ã¹ãã£ã¢ãã©ã¹ïŒ ãã¹ãŠã®æšã®ãã¯ã¹ãã£ãåäžã®ãã¯ã¹ãã£ã¢ãã©ã¹ã«çµåããŠããã¯ã¹ãã£ãã€ã³ãã£ã³ã°æäœã®æ°ãæžãããŸãã
- 詳现床ïŒLODïŒïŒ LODæè¡ãå®è£ ããŠããŠãŒã¶ãŒããé ãæšã ã®äœè§£å床ããŒãžã§ã³ãã¬ã³ããªã³ã°ããŸãã
- ãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ïŒ ä»ã®ãªããžã§ã¯ãã®èåŸã«é ããŠããæšã®ã¬ã³ããªã³ã°ãé¿ããããã«ããªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ãå®è£ ããŸãã
çµæïŒ ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãã倿°ã®æšã ããã£ãŠãã¢ããªã±ãŒã·ã§ã³ãå®å®ãããã¬ãŒã ã¬ãŒããç¶æã§ããããã«ãªããŸããã
ã¯ãã¹ãã©ãããã©ãŒã ã«é¢ããèæ ®äºé
WebXRã¢ããªã±ãŒã·ã§ã³ã¯ãæºåž¯é»è©±ãã¹ã¿ã³ãã¢ãã³VRãããã»ããããã¹ã¯ãããã³ã³ãã¥ãŒã¿ãªã©ã倿§ãªããã€ã¹ããã©ãããã©ãŒã ã§åäœããããã«èšèšãããŠããŸããåãã©ãããã©ãŒã ã«ã¯ç¬èªã®ããã©ãŒãã³ã¹ç¹æ§ãšå¶éããããŸããã¢ããªã±ãŒã·ã§ã³ãæé©åããéã«ã¯ããããã®èŠçŽ ãèæ ®ããããšãéèŠã§ãã
- ã¢ãã€ã«ããã€ã¹ïŒ ã¢ãã€ã«ããã€ã¹ã¯éåžžããã¹ã¯ãããã³ã³ãã¥ãŒã¿ãããåŠçèœåãšã¡ã¢ãªãå°ãªãã§ãããããã£ãŠãã¢ãã€ã«ãã©ãããã©ãŒã åãã«ã¢ããªã±ãŒã·ã§ã³ãç©æ¥µçã«æé©åããããšãéèŠã§ãã
- ã¹ã¿ã³ãã¢ãã³VRãããã»ããïŒ ã¹ã¿ã³ãã¢ãã³VRãããã»ããã¯ããããªãŒå¯¿åœãéãããŠããŸããããã©ãŒãã³ã¹ãæé©åããããšã§ããããªãŒå¯¿åœãå»¶ã°ãããŠãŒã¶ãŒãããé·ãæ²¡å ¥äœéšã楜ãããããã«ãªããŸãã
- ãã¹ã¯ãããã³ã³ãã¥ãŒã¿ïŒ ãã¹ã¯ãããã³ã³ãã¥ãŒã¿ã¯éåžžãã¢ãã€ã«ããã€ã¹ãã¹ã¿ã³ãã¢ãã³VRãããã»ãããããå€ãã®åŠçèœåãšã¡ã¢ãªãæã£ãŠããŸãããããã倿§ãªããŒããŠã§ã¢æ§æã§ã¹ã ãŒãºã«åäœããããã«ã¢ããªã±ãŒã·ã§ã³ãæé©åããããšã¯äŸç¶ãšããŠéèŠã§ãã
ã¯ãã¹ãã©ãããã©ãŒã ã®WebXRåãã«éçºããéã¯ãæ©èœæ€åºã䜿çšããŠãããã€ã¹ã®èœåã«åºã¥ããŠã¢ããªã±ãŒã·ã§ã³ã®èšå®ãšã¬ã³ããªã³ã°å質ãé©å¿ãããããšãæ€èšããŠãã ããã
WebXRããã©ãŒãã³ã¹ã«é¢ããã°ããŒãã«ãªèŠç¹
WebXRã¯äžççã«æ¡çšãããŠãããããã©ãŒãã³ã¹ã«å¯ŸãããŠãŒã¶ãŒã®æåŸ ã¯ããã€ãšã³ãããŒããŠã§ã¢ãã€ã³ã¿ãŒãããã€ã³ãã©ãžã®ã¢ã¯ã»ã¹ã®éãã«ãããå°åã«ãã£ãŠç°ãªãå ŽåããããŸããçºå±éäžåœã§ã¯ãäœã¹ããã¯ã®ããã€ã¹ãé ãã€ã³ã¿ãŒãããæ¥ç¶ã䜿çšãããŠãŒã¶ãŒã®å²åãé«ãå¯èœæ§ããããŸãããããã£ãŠãäœã¹ããã¯ããã€ã¹ã§ã®ããã©ãŒãã³ã¹ãåäžãããæé©åã¯ãã°ããŒãã«ãªèŠèŽè ã«ãªãŒãããããã«ç¹ã«éèŠã§ãã
ã°ããŒãã«ãªèŠèŽè åãã«WebXRã¢ããªã±ãŒã·ã§ã³ãèšèšããéã«ã¯ããããã®èŠçŽ ãèæ ®ããŠãã ããã
- é©å¿åå質èšå®ïŒ ãŠãŒã¶ãŒã®ããã€ã¹ãšãããã¯ãŒã¯æ¥ç¶ã«åºã¥ããŠãã·ãŒã³ã®ã¬ã³ããªã³ã°å質ãšè€éããèªåçã«èª¿æŽããé©å¿åå質èšå®ãå®è£ ããŸãã
- ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒïŒ CDNã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ã¢ã»ããïŒäŸïŒãã¯ã¹ãã£ãã¢ãã«ïŒãäžçäžã®ãŠãŒã¶ãŒã«é ä¿¡ããé«éãªããŠã³ããŒãé床ãšäœé å»¶ãä¿èšŒããŸãã
- ããŒã«ã©ã€ãºãããã³ã³ãã³ãïŒ å€æ§ãªã°ããŒãã«ãªèŠèŽè ã«å¯Ÿå¿ããããã«ãè€æ°ã®èšèªã§ããŒã«ã©ã€ãºãããã³ã³ãã³ãïŒäŸïŒããã¹ããé³å£°ïŒãæäŸããŸãã
çµè«
座æšç³»åŠçã®æé©åã¯ãWebXRã¢ããªã±ãŒã·ã§ã³ã§æé©ãªããã©ãŒãã³ã¹ãéæããããã«äžå¯æ¬ ã§ããé¢äžããããŸããŸãªåº§æšç³»ãçè§£ããè¡åæŒç®ãæå°éã«æããé©åãªåç §ç©ºéãéžæããããŒãºæŽæ°ãæé©åããWebAssemblyãæŽ»çšããWebGLã®æé©åãå©çšããã³ãŒãããããã¡ã€ãªã³ã°ããããšã§ã倿§ãªããã€ã¹ããã©ãããã©ãŒã ã§ã¹ã ãŒãºã«åäœãããã·ãŒã ã¬ã¹ã§é åçãªæ²¡å ¥åäœéšãåµé ã§ããŸããWebXRãé²åãç¶ããã«ã€ããŠããããã®æé©åæè¡ããã¹ã¿ãŒããããšã¯ãé«åè³ªãªæ²¡å ¥åäœéšãã°ããŒãã«ãªèŠèŽè ã«æäŸããããã«ãŸããŸãéèŠã«ãªãã§ãããã
åèè³æ
- WebXR Device API 仿§æž: https://www.w3.org/TR/webxr/
- Three.js WebXR ãµã³ãã«: https://threejs.org/examples/#webxr_ar_cones
- Babylon.js WebXR ããã¥ã¡ã³ã: https://doc.babylonjs.com/features/featuresDeepDive/webXR/introToWebXR
- gl-matrix: http://glmatrix.net/