WebGLã®ã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã«é¢ããå æ¬çã¬ã€ããäžè¬çãªãšã©ãŒããããã°æè¡ãå ç¢ã§èŠèŠçã«äžè²«æ§ã®ããã°ã©ãã£ãã¯ã¹ã確ä¿ããããã®ãã¹ããã©ã¯ãã£ã¹ã解説ããŸãã
WebGLã·ã§ãŒããŒããã°ã©ã ã®æ€èšŒïŒã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒ
WebGLã¯ãWebéçºè ããã©ãŠã¶å ã§çŽæ¥ãèŠäºãª2Dããã³3Dã°ã©ãã£ãã¯ã¹ãäœæããããšãå¯èœã«ããŸãããããããã®åã«ã¯ãå ç¢ã§ãšã©ãŒã®ãªãã·ã§ãŒããŒããã°ã©ã ãäœæãã責任ã䌎ããŸããGLSLïŒOpenGL Shading LanguageïŒã§èšè¿°ãããã·ã§ãŒããŒã¯GPUäžã§å®è¡ããããããã®ããã°ã©ã ã®ãšã©ãŒã¯ãäºæããªãèŠèŠçã¢ãŒãã£ãã¡ã¯ããããã©ãŒãã³ã¹ã®åé¡ããããã¯ã¯ã©ãã·ã¥ã«ã€ãªããå¯èœæ§ããããŸããã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã¯ãWebGLéçºã®éèŠãªåŽé¢ã§ãããã·ã§ãŒããŒãå®è¡äžã«æå³ãããšããã«åäœããŠããããšãä¿èšŒããŸãã
ã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒãéèŠãªçç±
åŸæ¥ã®CPUããŒã¹ã®ã³ãŒããšã¯ç°ãªããã·ã§ãŒããŒããã°ã©ã ã¯æ°åã®GPUã³ã¢ã§äžŠåã«å®è¡ãããŸãããã®ãããã·ã§ãŒããŒã®ãšã©ãŒã®ãããã°ã¯éåžžã«å°é£ã§ããåŸæ¥ã®ãããã°ããŒã«ã¯ãGPUã®å éšç¶æ ã«é¢ããå¿ èŠãªæŽå¯ãæäŸããããšãé£ããå Žåãå€ãã§ããããã«ãGPUãã³ããŒããã©ã€ãã®ããŒãžã§ã³ãç°ãªããšãGLSLã³ãŒãã®è§£éããããã«ç°ãªãå¯èœæ§ãããããã©ãããã©ãŒã éã§äžæŽåãçããããšããããŸããã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã¯ãéçºããã»ã¹ã®æ©ã段éã§ãããã®åé¡ãç¹å®ãã察åŠããã®ã«åœ¹ç«ã¡ãŸãã
å ·äœçã«ã¯ãã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã¯ããã€ãã®éèŠãªæžå¿µäºé ã«å¯Ÿå¿ããŸãïŒ
- æ£ç¢ºæ§ïŒ ã·ã§ãŒããŒãæåŸ ãããèŠèŠçåºåãããããããšãä¿èšŒããã
- ããã©ãŒãã³ã¹ïŒ ããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããå¹çã®ããã«ã·ã§ãŒããŒã³ãŒããæé©åããã
- ã¯ãã¹ãã©ãããã©ãŒã äºææ§ïŒ ç°ãªãGPUãã³ããŒããã©ã€ãã®ããŒãžã§ã³éã§ã®æœåšçãªäžæŽåãæ€åºããã
- ãšã©ãŒãã³ããªã³ã°ïŒ ãšã©ãŒãé©åã«åŠçããã¯ã©ãã·ã¥ãé²ãã
äžè¬çãªã·ã§ãŒããŒãšã©ãŒãšãã®å å
ã·ã§ãŒããŒããã°ã©ã ã§çºçããããšã©ãŒã®çš®é¡ãçè§£ããããšã¯ã广çãªã©ã³ã¿ã€ã æ€èšŒã«äžå¯æ¬ ã§ãã以äžã«ãäžè¬çãªã·ã§ãŒããŒãšã©ãŒãšãã®å žåçãªå åãããã€ã瀺ããŸãïŒ
ã³ã³ãã€ã«ãšã©ãŒ
ã³ã³ãã€ã«ãšã©ãŒã¯ãGLSLã³ãŒããèšèªã®æ§æãã»ãã³ãã£ã¯ã¹ã«éåããå Žåã«çºçããŸãããããã®ãšã©ãŒã¯éåžžãã·ã§ãŒããŒã®ã³ã³ãã€ã«ããã»ã¹äžã«ææãããåé¡ã®å Žæãšæ§è³ªã瀺ããšã©ãŒã¡ãã»ãŒãžãæäŸãããŸããããããã³ã³ãã€ã«ãšã©ãŒã解決ããåŸã§ããã©ã³ã¿ã€ã ãšã©ãŒãçºçããå¯èœæ§ããããŸãã
äŸïŒ
- æ§æãšã©ãŒïŒ ã»ãã³ãã³ã®æ¬ èœãäžæ£ãªããŒã¯ãŒããäžåè¡¡ãªæ¬åŒ§ã
- åãšã©ãŒïŒ èšç®ãä»£å ¥ã§ééã£ãåã®å€æ°ã䜿çšããã
- æªå®£èšã®å€æ°ïŒ 宣èšãããŠããªã倿°ãåç §ããã
ãªã³ã¯ãšã©ãŒ
ãªã³ã¯ãšã©ãŒã¯ãé ç¹ã·ã§ãŒããŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒã«äºææ§ããªãå Žåã«çºçããŸããããã¯ãã·ã§ãŒããŒãç°ãªã屿§åã䜿çšããŠãããvarying倿°ã®åãäžèŽããªãããŸãã¯uniformã®å®çŸ©ã«äžè²«æ§ããªãå Žåã«èµ·ããåŸãŸãã
äŸïŒ
- Varying倿°ã®äžäžèŽïŒ é ç¹ã·ã§ãŒããŒãç¹å®ã®åã®varying倿°ãåžžã«åºåãããããã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ç°ãªãåãååã®varying倿°ãæåŸ ããŠããã
- Attributeã®äžäžèŽïŒ é ç¹ã·ã§ãŒããŒãæå¹ãªãããã¡ãªããžã§ã¯ãã«ãã€ã³ããããŠããªã屿§ã䜿çšããŠããã
ã©ã³ã¿ã€ã ãšã©ãŒ
ã©ã³ã¿ã€ã ãšã©ãŒã¯ãã·ã§ãŒããŒããã°ã©ã ã®å®è¡äžã«çºçããŸãããããã®ãšã©ãŒã¯ãç¹å®ã®æ¡ä»¶äžã§ã®ã¿çŸããããšããããããã³ã³ãã€ã«ãšã©ãŒããªã³ã¯ãšã©ãŒããã蚺æãé£ããããšãå€ãã§ãã
äŸïŒ
- ãŒãé€ç®ïŒ å€ããŒãã§å²ãããšã«ãããæªå®çŸ©ã®åäœãåŒãèµ·ãããå€ãã®GLSLå®è£ ã¯`NaN`ãŸãã¯`Infinity`ãè¿ããŸããããã®åäœã«äŸåããããšã¯ããŒã¿ãã«ã§ã¯ãããŸããã
- ç¯å²å€ã¢ã¯ã»ã¹ïŒ é åããã¯ã¹ãã£ããã®æå¹ç¯å²å€ã§ã¢ã¯ã»ã¹ããã
- ã¹ã¿ãã¯ãªãŒããŒãããŒïŒ æå€§ã¹ã¿ãã¯ãµã€ãºãè¶ éãããããã¯ãã°ãã°ååž°çãªé¢æ°åŒã³åºãã«ãã£ãŠåŒãèµ·ããããŸãã
- ç¡éã«ãŒãïŒ æ±ºããŠçµäºããªãã«ãŒããäœæããGPUããã³ã°ãããã
- ç¡å¹ãªãã¯ã¹ãã£ã¢ã¯ã»ã¹ïŒ ç¡å¹ãªåº§æšããµã³ãã©ãŒèšå®ã§ãã¯ã¹ãã£ã«ã¢ã¯ã»ã¹ããã
- 粟床ã®åé¡ïŒ äžååãªç²ŸåºŠã§èšç®ãè¡ããæ°å€çäžå®å®æ§ãåŒãèµ·ããã
ã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã®ããã®ãã¯ããã¯
ã·ã§ãŒããŒããã°ã©ã ã®æ£ç¢ºæ§ãšããã©ãŒãã³ã¹ãã©ã³ã¿ã€ã ã§æ€èšŒããããã«ãããã€ãã®ãã¯ããã¯ã䜿çšã§ããŸãããããã®ãã¯ããã¯ã¯ãåçŽãªãããã°ããŒã«ãããããé«åºŠãªãããã¡ã€ãªã³ã°ããã³åæææ³ãŸã§å€å²ã«ããããŸãã
1. ãšã©ãŒãã§ãã¯
ã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã®æãåºæ¬çãªåœ¢åŒã¯ãåWebGLæäœã®åŸã«ãšã©ãŒããã§ãã¯ããããšã§ããWebGLã¯ããšã©ãŒãæ€åºããããã«äœ¿çšã§ãã `gl.getError()` ã®ãããªé¢æ°ãæäŸããŸãããã®é¢æ°ã¯ãçºçãããšã©ãŒã®çš®é¡ã瀺ããšã©ãŒã³ãŒããè¿ããŸããåæäœã®åŸã«ãšã©ãŒããã§ãã¯ããããšã§ãåé¡ã®åå ãè¿ éã«ç¹å®ã§ããŸãã
äŸ (JavaScript):
function checkGLError() {
const error = gl.getError();
if (error !== gl.NO_ERROR) {
console.error("WebGL error: ", error);
debugger; // ç¶æ
ãæ€æ»ããããã®ãã¬ãŒã¯ãã€ã³ã
}
}
// ... WebGLæäœ ...
_gl.drawArrays(gl.TRIANGLES, 0, 3);
checkGLError(); // æç»åŸã«ãšã©ãŒããã§ãã¯
2. ãã®ã³ã°ãšãããã°
ãã®ã³ã°ãšãããã°ã¯ãã·ã§ãŒããŒããã°ã©ã ã®åäœãçè§£ããããã«äžå¯æ¬ ã§ãã`console.log()`ã䜿çšããŠJavaScriptã³ãŒãããå€ãåºåã§ãã`debugger`ã¹ããŒãã¡ã³ãã䜿çšããŠãã¬ãŒã¯ãã€ã³ããèšå®ããããã°ã©ã ã®ç¶æ ãæ€æ»ã§ããŸããã·ã§ãŒããŒã®ãããã°ã«ã¯ãGPUããæ å ±ãååŸããããã®ç¹å®ã®ãã¯ããã¯ããããŸãã
ã·ã§ãŒããŒå€ã®ãããã°ïŒ 匷åãªãã¯ããã¯ã®1ã€ã¯ãã·ã§ãŒããŒããã®äžéå€ãç»é¢ã«åºåããããšã§ããããã¯ããã©ã°ã¡ã³ãã·ã§ãŒããŒã§`gl_FragColor`ã«å€ãä»£å ¥ããããšã§è¡ããŸããäŸãã°ã`myValue`ãšãã倿°ã®å€ããããã°ããã«ã¯ã次ã®ããã«ããŸãïŒ
// ãã©ã°ã¡ã³ãã·ã§ãŒããŒ
#ifdef GL_ES
precision highp float;
#endif
varying vec3 v_normal;
uniform vec3 u_lightDirection;
void main() {
float myValue = dot(normalize(v_normal), u_lightDirection);
// ãããã°: myValueãèµ€ãã£ã³ãã«ã«åºå
gl_FragColor = vec4(myValue, 0.0, 0.0, 1.0);
}
ããã«ãããèµ€ãã£ã³ãã«ã`myValue`ã®å€ã衚ãã·ãŒã³ãã¬ã³ããªã³ã°ãããŸããåºåãèŠèŠçã«æ€æ»ããããšã§ãã·ã§ãŒããŒã®åäœã«é¢ããæŽå¯ãåŸãããšãã§ããŸãã
3. ã·ã§ãŒããŒãšãã£ã¿ã«ãããããã°
å€ãã®ã·ã§ãŒããŒãšãã£ã¿ã¯ãã·ã§ãŒããŒã³ãŒããã¹ãããå®è¡ãããã倿°ã®å€ãæ€æ»ãããããã¬ãŒã¯ãã€ã³ããèšå®ãããã§ãããããã°æ©èœãæäŸããŸãããããã®ããŒã«ã¯ãã·ã§ãŒããŒããã°ã©ã ã®å®è¡ãããŒãçè§£ããäžã§éåžžã«è²Žéã§ãã
ãããã°æ©èœãåããã·ã§ãŒããŒãšãã£ã¿ã®äŸã¯æ¬¡ã®ãšããã§ãïŒ
- ShaderFrog: ãªã¢ã«ã¿ã€ã ã³ã³ãã€ã«ãšãããã°ãåããWebããŒã¹ã®ã·ã§ãŒããŒãšãã£ã¿ã
- RenderDoc: WebGLããµããŒããã匷åãªãªãŒãã³ãœãŒã¹ã®ã°ã©ãã£ãã¯ã¹ãããã¬ãŒã
- glslViewer: GLSLã·ã§ãŒããŒã衚瀺ããã³ãããã°ããããã®ã³ãã³ãã©ã€ã³ããŒã«ã
4. ãããã¡ã€ãªã³ã°ãšããã©ãŒãã³ã¹åæ
ãããã¡ã€ãªã³ã°ããã³ããã©ãŒãã³ã¹åæããŒã«ã¯ãã·ã§ãŒããŒããã°ã©ã ã®ããã©ãŒãã³ã¹ããã«ããã¯ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãããããã®ããŒã«ã¯éåžžãGPUæéãã·ã§ãŒããŒå®è¡æéãã¡ã¢ãªäœ¿çšéãªã©ã®ã¡ããªã¯ã¹ãæäŸããŸãããããã®ã¡ããªã¯ã¹ãåæããããšã§ãã·ã§ãŒããŒã³ãŒããããè¯ãããã©ãŒãã³ã¹ã®ããã«æé©åã§ããŸãã
WebGLãããã¡ã€ã©ïŒ ãã©ãŠã¶ã®éçºè ããŒã«ã«ã¯ãWebGLã®ããã©ãŒãã³ã¹ã«é¢ããæŽå¯ãæäŸã§ãããããã¡ã€ãªã³ã°æ©èœãå«ãŸããŠããããšããããããŸããäŸãã°ãChromeã®DevToolsã«ã¯ãGPUã¢ã¯ãã£ããã£ã远跡ããããã©ãŒãã³ã¹ããã«ããã¯ãç¹å®ã§ããGPUãããã¡ã€ã©ãå«ãŸããŠããŸããRenderDocãéåžžã«å¹æçãªãªãã©ã€ã³ãããã¡ã€ã©ã§ãã
5. èªåãã¹ã
èªåãã¹ãã䜿çšããŠãã·ã§ãŒããŒããã°ã©ã ã®æ£ç¢ºæ§ãæ€èšŒã§ããŸããããã«ã¯ãç°ãªãã·ãŒã³ãã¬ã³ããªã³ã°ããåºåãæåŸ ãããçµæãšæ¯èŒãããã¹ãã¹ã€ãŒããäœæããããšãå«ãŸããŸããèªåãã¹ãã¯ããªã°ã¬ãã·ã§ã³ãææããã³ãŒã倿ŽåŸãã·ã§ãŒããŒãæå³ãããšããã«åäœããããšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸãã
ãã¹ããã¬ãŒã ã¯ãŒã¯ã®äŸïŒ
- regl-test: WebGLå°çšã«èšèšããããã¹ããã¬ãŒã ã¯ãŒã¯ã
- Pixelmatch: ç»åããã¯ã»ã«åäœã§æ¯èŒããããã®JavaScriptã©ã€ãã©ãªã
6. éçè§£æ
éçè§£æããŒã«ã¯ãã·ã§ãŒããŒã³ãŒããå®è¡ããã«åæã§ããŸãããããã®ããŒã«ã¯ãæªäœ¿çšã®å€æ°ãåé·ãªèšç®ããŒãã«ããé€ç®ã®å¯èœæ§ãªã©ãæœåšçãªãšã©ãŒãæ€åºã§ããŸããéçè§£æã¯ãã·ã§ãŒããŒã³ãŒãã®å質ãšä¿å®æ§ãåäžãããã®ã«åœ¹ç«ã¡ãŸãã
GLSLãªã³ãã£ã³ã°ããŒã«ïŒ ã·ã§ãŒããŒã³ãŒãã®æœåšçãªåé¡ãç¹å®ããã®ã«åœ¹ç«ã€ããã€ãã®GLSLãªã³ãã£ã³ã°ããŒã«ãå©çšå¯èœã§ãããããã®ããŒã«ãéçºã¯ãŒã¯ãããŒã«çµ±åããŠãã·ã§ãŒããŒã³ãŒãã®ãšã©ãŒãèªåçã«ãã§ãã¯ããããšãã§ããŸãã
7. GPUãã³ããŒã®ãããã°ããŒã«
NVIDIAãAMDãIntelãªã©ã®GPUãã³ããŒã¯ãã·ã§ãŒããŒããã°ã©ã ã®ãããã°ã«äœ¿çšã§ããç¬èªã®ãããã°ããŒã«ãæäŸããŠããŸãããããã®ããŒã«ã¯ãäžè¬çãªWebGLãããã¬ãŒãããGPUã®å éšç¶æ ã«é¢ããè©³çŽ°ãªæ å ±ãæäŸããããšãå€ããã·ã§ãŒããŒå®è¡ããŒã¿ãžã®æãæ·±ãã¬ãã«ã®ã¢ã¯ã»ã¹ãæäŸã§ããŸãã
ã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã®ãã¹ããã©ã¯ãã£ã¹
ãããã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã®å¹æãåäžãããããšãã§ããŸãïŒ
- æç¢ºã§ç°¡æœãªã·ã§ãŒããŒã³ãŒããæžãïŒ ããæ§é åãããã·ã§ãŒããŒã³ãŒãã¯çè§£ããããããããã°ã容æã§ãã
- æå³ã®ãã倿°åã䜿çšããïŒ æå³ã®ãã倿°åã¯ãå倿°ã®ç®çãçè§£ããããããŸãã
- ã³ãŒãã«ã³ã¡ã³ããä»ããïŒ ã³ã¡ã³ãã¯ãã·ã§ãŒããŒã³ãŒãã®ããžãã¯ã説æããã®ã«åœ¹ç«ã¡ãŸãã
- è€éãªã·ã§ãŒããŒãå°ããªé¢æ°ã«åå²ããïŒ ããã«ãããã³ãŒããçè§£ãããããªãããããã°ã容æã«ãªããŸãã
- äžè²«ããã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã䜿çšããïŒ äžè²«ããã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã¯ãã³ãŒããèªã¿ããããä¿å®ããããããŸãã
- åWebGLæäœã®åŸã«ãšã©ãŒããã§ãã¯ããïŒ ããã«ãããåé¡ã®åå ãè¿ éã«ç¹å®ã§ããŸãã
- ãã®ã³ã°ããã³ãããã°ããŒã«ã䜿çšããïŒ ãããã®ããŒã«ã¯ãã·ã§ãŒããŒããã°ã©ã ã®åäœãçè§£ããã®ã«åœ¹ç«ã¡ãŸãã
- ãããã¡ã€ãªã³ã°ããã³ããã©ãŒãã³ã¹åæããŒã«ã䜿çšããïŒ ãããã®ããŒã«ã¯ãããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
- èªåãã¹ãã䜿çšããïŒ ããã«ããããªã°ã¬ãã·ã§ã³ãææããã³ãŒã倿ŽåŸãã·ã§ãŒããŒãæå³ãããšããã«åäœããããšãä¿èšŒã§ããŸãã
- è€æ°ã®ãã©ãããã©ãŒã ã§ãã¹ãããïŒ ããã«ãããã·ã§ãŒããŒãç°ãªãGPUãã³ããŒããã©ã€ãã®ããŒãžã§ã³ãšäºææ§ãããããšãä¿èšŒã§ããŸãã
ããŸããŸãªæ¥çã§ã®äŸ
ã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã¯ãèŠèŠåãã€ã³ã¿ã©ã¯ãã£ãã°ã©ãã£ãã¯ã¹ã«WebGLãæŽ»çšããããŸããŸãªæ¥çã§éèŠã§ãã以äžã«ããã€ãã®äŸãæããŸãïŒ
- ã²ãŒã ïŒ ã²ãŒã æ¥çã§ã¯ãã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã¯ãã²ãŒã ãã¹ã ãŒãºã«ãèŠèŠçãªäžå ·åãªãå®è¡ãããããšãä¿èšŒããããã«äžå¯æ¬ ã§ããäžçäžã®ããŸããŸãªããã€ã¹ãããã¬ã€ã€ãŒãæ¥ç¶ããå€§èŠæš¡ãªã³ã©ã€ã³ãã«ããã¬ã€ã€ãŒã²ãŒã ïŒMMOïŒãæ³åããŠã¿ãŠãã ãããç¹å®ã®ã¢ãã€ã«GPUã§ã®ã¿çŸããã·ã§ãŒããŒã®ãã°ã¯ããã¬ã€ã€ãŒäœéšã«æ·±å»ãªåœ±é¿ãäžããã³ã¹ãã®ãããããããã£ãã¯ã¹ãå¿ èŠãšããå¯èœæ§ããããŸãããšãã¥ã¬ãŒããããããã€ã¹ãã¯ã©ãŠãããŒã¹ã®ããã€ã¹ãã¡ãŒã ã§ã®ãã¹ããå«ãã培åºçãªã©ã³ã¿ã€ã æ€èšŒãäžå¯æ¬ ã§ãã
- å»çç»åïŒ å»çç»åã¢ããªã±ãŒã·ã§ã³ã¯ãMRIãCTã¹ãã£ã³ãªã©ã®3DããŒã¿ã»ãããèŠèŠåããããã«WebGLã䜿çšããŸããã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã¯ããããã®èŠèŠåã®æ£ç¢ºæ§ãšä¿¡é Œæ§ãä¿èšŒããããã«æ¥µããŠéèŠã§ããæ¬ é¥ã®ããã·ã§ãŒããŒã«ããå»çããŒã¿ã®èª€è§£ã¯ãæ·±å»ãªçµæãæãå¯èœæ§ããããŸããäŸãã°ããã蚺æã¢ããªã±ãŒã·ã§ã³ã§ã®è «çã®äžæ£ç¢ºãªã¬ã³ããªã³ã°ã¯ã誀ã£ãæ²»çæ±ºå®ã«ã€ãªããå¯èœæ§ããããŸãã倿§ãªæ£è ããŒã¿ã»ããã§ã®ãã¹ãããæ€èšŒæžã¿ã®ã¬ã³ããªã³ã°ã¢ã«ãŽãªãºã ãšã®æ¯èŒãå«ãã峿 Œãªæ€èšŒãããã³ã«ãæéèŠã§ãã
- ç§åŠçèŠèŠåïŒ ç§åŠçèŠèŠåã¢ããªã±ãŒã·ã§ã³ã¯ãæ°åã¢ãã«ãæµäœååŠã·ãã¥ã¬ãŒã·ã§ã³ãªã©ã®è€éãªããŒã¿ãèŠèŠåããããã«WebGLã䜿çšããŸããã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã¯ããããã®èŠèŠåã®æ£ç¢ºæ§ãšå®å šæ§ãä¿èšŒããããã«äžå¯æ¬ ã§ãã埮åŠãªè²ã®å€åãéèŠãªæž©åºŠå€åã衚ãè€éãªæ°åããŒã¿ãèŠèŠåããå ŽåãèããŠã¿ãŠãã ããã粟床ã®åé¡ãããã·ã§ãŒããŒã¯ããããã®å€åã誀ã£ãŠè¡šçŸããæ°åãã¬ã³ãã®èª€ã£ãè§£éã«ã€ãªãããæ¿çæ±ºå®ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
- eã³ããŒã¹ïŒ å€ãã®eã³ããŒã¹ãã©ãããã©ãŒã ã¯ã顧客ãååã3Dã§èŠèŠåã§ããããã«WebGLã䜿çšããŠããŸããã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã¯ããããã®èŠèŠåãæ£ç¢ºã§èŠèŠçã«é åçã§ããããšãä¿èšŒããããã«äžå¯æ¬ ã§ããå®¶å ·å°å£²æ¥è ãWebGLã䜿çšããŠè£œåã®3Dã¢ãã«ã衚瀺ããå Žåãç°ãªãããã€ã¹ããã©ãŠã¶ã§äžè²«ããã¬ã³ããªã³ã°ãä¿èšŒããããšèããŸããå®¶å ·ã®è²ãæ¯çãæªããã·ã§ãŒããŒã®ãã°ã¯ã顧客ã®äžæºãè¿åã«ã€ãªããå¯èœæ§ããããŸãã
- å°ç空éã¢ããªã±ãŒã·ã§ã³ïŒ å°å³ãå°åœ¢ã¬ã³ããªã³ã°ãGISãœãããŠã§ã¢ã¯ãããã©ãŒãã³ã¹ã®ããã«ãã°ãã°WebGLã䜿çšããŸããã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã¯ãæ£ç¢ºæ§ã®ããã«éèŠã§ããçŸå®äžçã®æšé«ããŒã¿ã«åºã¥ããŠè©³çްãªå°åœ¢ã衚瀺ãããã©ã€ãã·ãã¥ã¬ãŒã¿ãŒãèããŠã¿ãŠãã ãããå°åœ¢ã®æªã¿ã誀衚çŸã«ã€ãªããã·ã§ãŒããŒãšã©ãŒã¯ããã¬ãŒãã³ã°äœéšãæãªããé£è¡å®å šã·ããªãªã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
ã·ã§ãŒããŒæ€èšŒã®æªæ¥
ã·ã§ãŒããŒæ€èšŒã®åéã¯çµ¶ããé²åããŠããŸããã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã®ç²ŸåºŠãšå¹çãåäžãããããã®æ°ããããŒã«ããã¯ããã¯ãéçºãããŠããŸããææãªç ç©¶åéã«ã¯ã以äžã®ãããªãã®ããããŸãïŒ
- 圢åŒçæ€èšŒïŒ 圢åŒçææ³ãçšããŠã·ã§ãŒããŒããã°ã©ã ã®æ£ããã蚌æããã
- æ©æ¢°åŠç¿ïŒ æ©æ¢°åŠç¿ãçšããŠã·ã§ãŒããŒãšã©ãŒãèªåçã«æ€åºããã
- é«åºŠãªãããã°ããŒã«ïŒ GPUã®å éšç¶æ ã«é¢ããããæ·±ãæŽå¯ãæäŸãããããé«åºŠãªãããã°ããŒã«ãéçºããã
çµè«
ã©ã³ã¿ã€ã ã·ã§ãŒããŒæ€èšŒã¯ãWebGLéçºã®éèŠãªåŽé¢ã§ãããã®ã¬ã€ãã§æŠèª¬ããããã¯ããã¯ãšãã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãã·ã§ãŒããŒããã°ã©ã ãå ç¢ã§ãããã©ãŒãã³ã¹ãé«ãããã©ãããã©ãŒã éã§èŠèŠçã«äžè²«ããŠããããšãä¿èšŒã§ããŸããå ç¢ãªã·ã§ãŒããŒæ€èšŒããã»ã¹ãžã®æè³ã¯ãäžçäžã®èŽè¡ã®ããŒãºãæºããé«å質ãªWebGLäœéšãæäŸããããã«äžå¯æ¬ ã§ãã