WebGLããã°ã©ãã³ã°ã®å æ¬çã¬ã€ãããã©ãŠã¶ã§é åçãª3Dã°ã©ãã£ãã¯ã¹ãäœæããããã®åºæ¬æŠå¿µãšé«åºŠãªã¬ã³ããªã³ã°æè¡ã解説ããŸãã
WebGLããã°ã©ãã³ã°ïŒ3Dã°ã©ãã£ãã¯ã¹ã¬ã³ããªã³ã°æè¡ã®ç¿åŸ
WebGLïŒWeb Graphics LibraryïŒã¯ããã©ã°ã€ã³ã䜿çšããã«ãäºææ§ã®ããWebãã©ãŠã¶å ã§ã€ã³ã¿ã©ã¯ãã£ããª2Dããã³3Dã°ã©ãã£ãã¯ã¹ãã¬ã³ããªã³ã°ããããã®JavaScript APIã§ããããã«ãããéçºè ã¯GPUïŒGraphics Processing UnitïŒã®ãã¯ãŒã掻çšããŠã髿§èœã§èŠèŠçã«å°è±¡çãªäœéšããã©ãŠã¶äžã§çŽæ¥äœæã§ããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãWebGLã®åºæ¬çãªæŠå¿µãšé«åºŠãªã¬ã³ããªã³ã°æè¡ãæ¢æ±ããäžçäžã®èŠèŽè ã«åããŠé åçãª3Dã°ã©ãã£ãã¯ã¹ãäœæããåã身ã«ã€ããŠããã ããŸãã
WebGLãã€ãã©ã€ã³ã®çè§£
WebGLã®ã¬ã³ããªã³ã°ãã€ãã©ã€ã³ã¯ã3DããŒã¿ãç»é¢ã«è¡šç€ºããã2Dç»åã«å€æããäžé£ã®ã¹ãããã§ãããã®ãã€ãã©ã€ã³ãçè§£ããããšã¯ã广çãªWebGLããã°ã©ãã³ã°ã«ãšã£ãŠæ¥µããŠéèŠã§ããäž»ãªã¹ããŒãžã¯ä»¥äžã®éãã§ãïŒ
- é ç¹ã·ã§ãŒããŒïŒ 3Dã¢ãã«ã®é ç¹ãåŠçããŸãã倿ïŒäŸïŒå転ãã¹ã±ãŒãªã³ã°ãå¹³è¡ç§»åïŒãã©ã€ãã£ã³ã°èšç®ããããŠåé ç¹ã®ã¯ãªãã空éã«ãããæçµçãªäœçœ®ã決å®ããŸãã
- ã©ã¹ã¿ã©ã€ãºïŒ 倿ãããé ç¹ããã¬ã³ããªã³ã°ããããã©ã°ã¡ã³ãïŒãã¯ã»ã«ïŒã«å€æããŸããããã«ã¯ãã©ã®ãã¯ã»ã«ãåäžè§åœ¢ã®å¢çå ã«åãŸãããæ±ºå®ããäžè§åœ¢å šäœã§å±æ§ãè£éããäœæ¥ãå«ãŸããŸãã
- ãã©ã°ã¡ã³ãã·ã§ãŒããŒïŒ åãã©ã°ã¡ã³ãã®è²ã決å®ããŸãããã¯ã¹ãã£ãã©ã€ãã£ã³ã°å¹æããã®ä»ã®èŠèŠå¹æãé©çšããŠãã¬ã³ããªã³ã°ããããªããžã§ã¯ãã®æçµçãªå€èгãäœæããŸãã
- ãã¬ã³ãã£ã³ã°ãšãã¹ãïŒ ãã©ã°ã¡ã³ãã®è²ãæ¢åã®ãã¬ãŒã ãããã¡ïŒè¡šç€ºãããŠããç»åïŒãšåæããæ·±åºŠãã¹ããšã¹ãã³ã·ã«ãã¹ããå®è¡ããŠãã©ã®ãã©ã°ã¡ã³ãã衚瀺ãããããæ±ºå®ããŸãã
WebGLç°å¢ã®ã»ããã¢ãã
WebGLã§ããã°ã©ãã³ã°ãéå§ããã«ã¯ãåºæ¬çãªHTMLãã¡ã€ã«ãJavaScriptãã¡ã€ã«ãããã³WebGL察å¿ã®ãã©ãŠã¶ãå¿ èŠã§ãã以äžã¯åºæ¬çãªHTMLæ§é ã§ãïŒ
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WebGL Example</title>
<style>
body { margin: 0; }
canvas { display: block; }
</style>
</head>
<body>
<canvas id="glcanvas" width="640" height="480">ã䜿ãã®ãã©ãŠã¶ã¯HTML5ã®<code><canvas></code>èŠçŽ ããµããŒãããŠããªãããã§ã</canvas>
<script src="script.js"></script>
</body>
</html>
JavaScriptãã¡ã€ã«ïŒscript.js
ïŒã§ã¯ã次ã®ããã«WebGLãåæåããŸãïŒ
const canvas = document.querySelector('#glcanvas');
const gl = canvas.getContext('webgl');
if (!gl) {
alert('WebGLãåæåã§ããŸãããã䜿ãã®ãã©ãŠã¶ãŸãã¯ãã·ã³ããµããŒãããŠããªãå¯èœæ§ããããŸãã');
}
// ããã§glã䜿ã£ãŠæç»ãéå§ã§ããŸãïŒ
gl.clearColor(0.0, 0.0, 0.0, 1.0); // å®å
šã«äžéæãªé»ã§ã¯ãªã¢
gl.clear(gl.COLOR_BUFFER_BIT); // æå®ãããã¯ãªã¢ã«ã©ãŒã§ã«ã©ãŒãããã¡ãã¯ãªã¢
ã·ã§ãŒããŒïŒWebGLã®å¿èéš
ã·ã§ãŒããŒã¯ãGLSLïŒOpenGL Shading LanguageïŒã§èšè¿°ãããGPUäžã§å®è¡ãããå°ããªããã°ã©ã ã§ããã¬ã³ããªã³ã°ããã»ã¹ãå¶åŸ¡ããããã«äžå¯æ¬ ã§ããåè¿°ã®éããã·ã§ãŒããŒã«ã¯äž»ã«2ã€ã®ã¿ã€ãããããŸãïŒ
- é ç¹ã·ã§ãŒããŒïŒ ã¢ãã«ã®é ç¹ã倿ãã責任ããããŸãã
- ãã©ã°ã¡ã³ãã·ã§ãŒããŒïŒ åãã¯ã»ã«ïŒãã©ã°ã¡ã³ãïŒã®è²ã決å®ãã責任ããããŸãã
以äžã¯ãé ç¹ã·ã§ãŒããŒã®ç°¡åãªäŸã§ãïŒ
attribute vec4 aVertexPosition;
uniform mat4 uModelViewMatrix;
uniform mat4 uProjectionMatrix;
void main() {
gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition;
}
ãããŠãããã察å¿ãããã©ã°ã¡ã³ãã·ã§ãŒããŒã§ãïŒ
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); // çœè²
}
ãããã®ã·ã§ãŒããŒã¯ãåã«é ç¹äœçœ®ã倿ãããã©ã°ã¡ã³ãã®è²ãçœã«èšå®ããã ãã§ãããããã䜿çšããã«ã¯ãJavaScriptã³ãŒãå ã§ã³ã³ãã€ã«ããã·ã§ãŒããŒããã°ã©ã ã«ãªã³ã¯ããå¿ èŠããããŸãã
åºæ¬çãªã¬ã³ããªã³ã°æè¡
ããªããã£ãã®æç»
WebGLã¯ãå³åœ¢ãæç»ããããã«ããã€ãã®ããªããã£ãã¿ã€ããæäŸããŠããŸããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
gl.POINTS
gl.LINES
gl.LINE_STRIP
gl.LINE_LOOP
gl.TRIANGLES
gl.TRIANGLE_STRIP
gl.TRIANGLE_FAN
ã»ãšãã©ã®3Dã¢ãã«ã¯ãäžè§åœ¢ãåžžã«å¹³é¢çã§ãããè€éãªè¡šé¢ãæ£ç¢ºã«è¡šçŸã§ãããããäžè§åœ¢ïŒgl.TRIANGLES
ãgl.TRIANGLE_STRIP
ããŸãã¯gl.TRIANGLE_FAN
ïŒã䜿çšããŠæ§ç¯ãããŸãã
äžè§åœ¢ãæç»ããã«ã¯ããã®3ã€ã®é ç¹ã®åº§æšãæäŸããå¿ èŠããããŸãããããã®åº§æšã¯éåžžãå¹ççãªã¢ã¯ã»ã¹ã®ããã«GPUäžã®ãããã¡ãªããžã§ã¯ãã«æ ŒçŽãããŸãã
ãªããžã§ã¯ãã®çè²
WebGLã§ã¯ãããŸããŸãªæè¡ã䜿çšããŠãªããžã§ã¯ããçè²ã§ããŸãïŒ
- ãŠããã©ãŒã ã«ã©ãŒïŒ ãã©ã°ã¡ã³ãã·ã§ãŒããŒã§uniform倿°ã䜿çšããŠããªããžã§ã¯ãå šäœã«åäžã®è²ãèšå®ããŸãã
- é ç¹ã«ã©ãŒïŒ åé ç¹ã«è²ãå²ãåœãŠããã©ã°ã¡ã³ãã·ã§ãŒããŒã䜿çšããŠäžè§åœ¢å šäœã§è²ãè£éããŸãã
- ãã¯ã¹ãã£ãªã³ã°ïŒ ãªããžã§ã¯ãã®è¡šé¢ã«ç»åïŒãã¯ã¹ãã£ïŒãé©çšããŠããã詳现ã§ãªã¢ã«ãªããžã¥ã¢ã«ãäœæããŸãã
倿ïŒã¢ãã«ããã¥ãŒããããžã§ã¯ã·ã§ã³è¡å
倿ã¯ã3D空éã§ãªããžã§ã¯ããé çœ®ãæ¹åä»ããã¹ã±ãŒãªã³ã°ããããã«äžå¯æ¬ ã§ããWebGLã¯ããããã®å€æã衚çŸããããã«è¡åã䜿çšããŸãã
- ã¢ãã«è¡åïŒ ãªããžã§ã¯ããããŒã«ã«åº§æšç³»ããã¯ãŒã«ã空éã«å€æããŸããããã«ã¯ãå¹³è¡ç§»åãå転ãã¹ã±ãŒãªã³ã°ãªã©ã®æäœãå«ãŸããŸãã
- ãã¥ãŒè¡åïŒ ã¯ãŒã«ã空éãã«ã¡ã©ã®åº§æšç³»ã«å€æããŸããããã¯ãåºæ¬çã«ã¯ãŒã«ãå ã§ã®ã«ã¡ã©ã®äœçœ®ãšåããå®çŸ©ããŸãã
- ãããžã§ã¯ã·ã§ã³è¡åïŒ 3Dã·ãŒã³ã2Då¹³é¢ã«æåœ±ããé è¿å¹æãçã¿åºããŸãããã®è¡åã¯ãèŠéè§ãã¢ã¹ãã¯ãæ¯ãè¿ã¯ãªããé¢/é ã¯ãªããé¢ã決å®ããŸãã
ãããã®è¡åãæãåãããããšã§ãã·ãŒã³å ã®ãªããžã§ã¯ããæ£ããé 眮ããã³æ¹åä»ãããè€éãªå€æãå®çŸã§ããŸããglMatrixïŒglmatrix.netïŒã®ãããªã©ã€ãã©ãªã¯ãWebGLçšã®å¹ççãªè¡åããã³ãã¯ãã«æŒç®ãæäŸããŸãã
é«åºŠãªã¬ã³ããªã³ã°æè¡
ã©ã€ãã£ã³ã°
ãªã¢ã«ãªã©ã€ãã£ã³ã°ã¯ã説åŸåã®ãã3Dã·ãŒã³ãäœæããããã«éåžžã«éèŠã§ããWebGLã¯ãããŸããŸãªã©ã€ãã£ã³ã°ã¢ãã«ããµããŒãããŠããŸãïŒ
- ç°å¢å ïŒã¢ã³ããšã³ãã©ã€ãïŒïŒ ã·ãŒã³å ã®ãã¹ãŠã®ãªããžã§ã¯ãã«ããã®äœçœ®ãåãã«é¢ä¿ãªããåºæ¬çãªã¬ãã«ã®ç §æãæäŸããŸãã
- æ¡æ£å ïŒãã£ãã¥ãŒãºã©ã€ãïŒïŒ å æºãšè¡šé¢æ³ç·ã®éã®è§åºŠã«åºã¥ããŠã衚é¢ããã®å ã®æ£ä¹±ãã·ãã¥ã¬ãŒãããŸãã
- é¡é¢åå°å ïŒã¹ããã¥ã©ã©ã€ãïŒïŒ å æ²¢ã®ãã衚é¢ããã®å ã®åå°ãã·ãã¥ã¬ãŒããããã€ã©ã€ããäœæããŸãã
ãããã®ã³ã³ããŒãã³ããçµã¿åãããŠããããªã¢ã«ãªã©ã€ãã£ã³ã°å¹æãçã¿åºããŸãããã©ã³ã©ã€ãã£ã³ã°ã¢ãã«ã¯ãç°å¢å ãæ¡æ£å ãé¡é¢åå°å ãçµã¿åããããäžè¬çã§æ¯èŒçã«ã·ã³ãã«ãªã©ã€ãã£ã³ã°ã¢ãã«ã§ãã
æ³ç·ãã¯ãã«ïŒ æ¡æ£å ãšé¡é¢åå°å ãèšç®ããã«ã¯ãåé ç¹ã®æ³ç·ãã¯ãã«ãæäŸããå¿ èŠããããŸããæ³ç·ãã¯ãã«ãšã¯ããã®é ç¹ã«ããã衚é¢ã«åçŽãªãã¯ãã«ã§ãããããã®ãã¯ãã«ã¯ãå æºãšè¡šé¢ã®éã®è§åºŠã決å®ããããã«äœ¿çšãããŸãã
ãã¯ã¹ãã£ãªã³ã°
ãã¯ã¹ãã£ãªã³ã°ã¯ã3Dã¢ãã«ã®è¡šé¢ã«ç»åãé©çšããããšã§ããããã«ãããã¢ãã«èªäœã®è€éããå¢ãããšãªãã詳现ãªãã¿ãŒã³ãè²ã質æãå ããããšãã§ããŸããWebGLã¯ãããŸããŸãªãã¯ã¹ãã£åœ¢åŒãšãã£ã«ã¿ãªã³ã°ãªãã·ã§ã³ããµããŒãããŠããŸãã
- ãã¯ã¹ãã£ãããã³ã°ïŒ åé ç¹ã®ãã¯ã¹ãã£åº§æšïŒUV座æšïŒããã¯ã¹ãã£ç»åã®ç¹å®ã®ç¹ã«ãããã³ã°ããŸãã
- ãã¯ã¹ãã£ãã£ã«ã¿ãªã³ã°ïŒ ãã¯ã¹ãã£åº§æšããã¯ã¹ãã£ã®ãã¯ã»ã«ãšå®å šã«äžèŽããªãå Žåã«ããã¯ã¹ãã£ãã©ã®ããã«ãµã³ããªã³ã°ããããæ±ºå®ããŸããäžè¬çãªãã£ã«ã¿ãªã³ã°ãªãã·ã§ã³ã«ã¯ãç·åœ¢ãã£ã«ã¿ãªã³ã°ãããããããã³ã°ããããŸãã
- ããããããã³ã°ïŒ ãã¯ã¹ãã£ç»åã®çž®å°çã®ã·ãªãŒãºãäœæããé ãã«ãããªããžã§ã¯ããã¬ã³ããªã³ã°ããéã®ããã©ãŒãã³ã¹ãåäžããããšã€ãªã¢ã·ã³ã°ã®ã¢ãŒãã£ãã¡ã¯ããäœæžããããã«äœ¿çšããŸãã
å€ãã®ç¡æãã¯ã¹ãã£ããªã³ã©ã€ã³ã§å©çšå¯èœã§ããäŸãã°ãAmbientCGïŒambientcg.comïŒã®ãããªãµã€ãã§ã¯ãPBRïŒç©çããŒã¹ã¬ã³ããªã³ã°ïŒãã¯ã¹ãã£ãæäŸãããŠããŸãã
ã·ã£ããŠãããã³ã°
ã·ã£ããŠãããã³ã°ã¯ããªã¢ã«ã¿ã€ã ã§åœ±ãã¬ã³ããªã³ã°ããããã®æè¡ã§ããå æºã®èŠç¹ããã·ãŒã³ãã¬ã³ããªã³ã°ããŠæ·±åºŠããããäœæããããã䜿çšããŠã·ãŒã³ã®ã©ã®éšåã圱ã«ãªã£ãŠãããã倿ããŸãã
ã·ã£ããŠãããã³ã°ã®åºæ¬çãªæé ã¯æ¬¡ã®ãšããã§ãïŒ
- å æºã®èŠç¹ããã·ãŒã³ãã¬ã³ããªã³ã°ããïŒ ããã«ããæ·±åºŠããããäœæãããŸããæ·±åºŠãããã«ã¯ãå æºããåãã¯ã»ã«ã®æãè¿ããªããžã§ã¯ããŸã§ã®è·é¢ãä¿åãããŸãã
- ã«ã¡ã©ã®èŠç¹ããã·ãŒã³ãã¬ã³ããªã³ã°ããïŒ åãã©ã°ã¡ã³ãã«ã€ããŠããã®äœçœ®ãå æºã®åº§æšç©ºéã«å€æãããã®æ·±åºŠã深床ãããã«ä¿åãããŠããå€ãšæ¯èŒããŸãããã©ã°ã¡ã³ãã®æ·±åºŠã深床ãããã®å€ãã倧ããå Žåãããã¯åœ±ã®äžã«ãããŸãã
ã·ã£ããŠãããã³ã°ã¯èšç®ã³ã¹ããé«ãå ŽåããããŸããã3Dã·ãŒã³ã®ãªã¢ãªãºã ãå€§å¹ ã«åäžãããããšãã§ããŸãã
ããŒãã«ãããã³ã°
ããŒãã«ãããã³ã°ã¯ãäœè§£å床ã®ã¢ãã«ã«é«è§£å床ã®è¡šé¢ã®è©³çްãã·ãã¥ã¬ãŒãããæè¡ã§ããããŒãã«ãããïŒåãã¯ã»ã«ã«ãããè¡šé¢æ³ç·ã®æ¹åãä¿åãããã¯ã¹ãã£ïŒã䜿çšããŠãã©ã€ãã£ã³ã°èšç®äžã«è¡šé¢æ³ç·ãæåãããŸãã
ããŒãã«ãããã³ã°ã¯ãããªãŽã³æ°ãå¢ããããšãªãã¢ãã«ã«ããªãã®ãã£ããŒã«ã远å ã§ãããããããã©ãŒãã³ã¹ãæé©åããããã®è²Žéãªæè¡ã§ãã
ç©çããŒã¹ã¬ã³ããªã³ã°ïŒPBRïŒ
ç©çããŒã¹ã¬ã³ããªã³ã°ïŒPBRïŒã¯ãå ãšè¡šé¢ã®çžäºäœçšãããç©ççã«æ£ç¢ºãªæ¹æ³ã§ã·ãã¥ã¬ãŒãããããšãç®æãã¬ã³ããªã³ã°æè¡ã§ããPBRã¯ãã©ããã¹ãã¡ã¿ãªãã¯ãã¹ãã¢ã³ããšã³ããªã¯ã«ãŒãžã§ã³ãªã©ã®ãã©ã¡ãŒã¿ã䜿çšããŠã衚é¢ã®å€èŠ³ãæ±ºå®ããŸãã
PBRã¯ãåŸæ¥ã®ã©ã€ãã£ã³ã°ã¢ãã«ããããªã¢ã«ã§äžè²«æ§ã®ããçµæãçã¿åºãããšãã§ããŸãããããè€éãªã·ã§ãŒããŒãšãã¯ã¹ãã£ãå¿ èŠã«ãªããŸãã
ããã©ãŒãã³ã¹æé©åæè¡
WebGLã¢ããªã±ãŒã·ã§ã³ã¯ãç¹ã«è€éãªã·ãŒã³ãæ±ã£ãããã¢ãã€ã«ããã€ã¹ã§ã¬ã³ããªã³ã°ãããããå Žåãããã©ãŒãã³ã¹ã«å€§ããªè² è·ããããå¯èœæ§ããããŸãã以äžã¯ããã©ãŒãã³ã¹ãæé©åããããã®ããã€ãã®æè¡ã§ãïŒ
- ããªãŽã³æ°ãæžããïŒ ããå°ãªãããªãŽã³ãæã€ã·ã³ãã«ãªã¢ãã«ã䜿çšããŸãã
- ã·ã§ãŒããŒãæé©åããïŒ ã·ã§ãŒããŒã®è€éãã軜æžããäžèŠãªèšç®ãé¿ããŸãã
- ãã¯ã¹ãã£ã¢ãã©ã¹ã䜿çšããïŒ è€æ°ã®ãã¯ã¹ãã£ãåäžã®ãã¯ã¹ãã£ã¢ãã©ã¹ã«çµåããŠããã¯ã¹ãã£ã®åãæ¿ãåæ°ãæžãããŸãã
- ãã©ã¹ã¿ã ã«ãªã³ã°ãå®è£ ããïŒ ã«ã¡ã©ã®èŠéå ã«ãããªããžã§ã¯ãã®ã¿ãã¬ã³ããªã³ã°ããŸãã
- 詳现ã¬ãã«ïŒLODïŒã䜿çšããïŒ é ãã«ãããªããžã§ã¯ãã«ã¯äœè§£å床ã®ã¢ãã«ã䜿çšããŸãã
- ãããã¬ã³ããªã³ã°ïŒ åããããªã¢ã«ãæã€ãªããžã§ã¯ããã°ã«ãŒãåãããŸãšããŠã¬ã³ããªã³ã°ããŠæç»åŒã³åºãã®åæ°ãæžãããŸãã
- ã€ã³ã¹ã¿ã³ã·ã³ã°ã䜿çšããïŒ ã€ã³ã¹ã¿ã³ã·ã³ã°ã䜿çšããŠãåããªããžã§ã¯ãã®è€æ°ã®ã³ããŒãç°ãªã倿ã§ã¬ã³ããªã³ã°ããŸãã
WebGLã¢ããªã±ãŒã·ã§ã³ã®ãããã°
WebGLã¢ããªã±ãŒã·ã§ã³ã®ãããã°ã¯é£ããå ŽåããããŸããã圹ç«ã€ããŒã«ããã¯ããã¯ãããã€ããããŸãïŒ
- ãã©ãŠã¶ã®éçºè ããŒã«ïŒ ãã©ãŠã¶ã®éçºè ããŒã«ã䜿çšããŠãWebGLã®ç¶æ ãæ€æ»ããã·ã§ãŒããŒãšã©ãŒã衚瀺ããããã©ãŒãã³ã¹ããããã¡ã€ã«ããŸãã
- WebGL InspectorïŒ WebGLã®ç¶æ ãæ€æ»ããã·ã§ãŒããŒã³ãŒãã衚瀺ããæç»åŒã³åºããã¹ãããã¹ã«ãŒã§ãããã©ãŠã¶æ¡åŒµæ©èœã§ãã
- ãšã©ãŒãã§ãã¯ïŒ WebGLã®ãšã©ãŒãã§ãã¯ãæå¹ã«ããŠãéçºããã»ã¹ã®æ©ã段éã§ãšã©ãŒããã£ããããŸãã
- ã³ã³ãœãŒã«ãã°ïŒ
console.log()
ã¹ããŒãã¡ã³ãã䜿çšããŠããããã°æ å ±ãã³ã³ãœãŒã«ã«åºåããŸãã
WebGLãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãª
ããã€ãã®WebGLãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã¯ãéçºããã»ã¹ãç°¡çŽ åããè¿œå æ©èœãæäŸããããšãã§ããŸãã人æ°ã®ããéžæè¢ã«ã¯ä»¥äžããããŸãïŒ
- Three.js (threejs.org)ïŒ WebGLã·ãŒã³ãäœæããããã®é«ã¬ãã«APIãæäŸããå æ¬çãª3Dã°ã©ãã£ãã¯ã¹ã©ã€ãã©ãªã§ãã
- Babylon.js (babylonjs.com)ïŒ ã²ãŒã éçºã«éç¹ã眮ãããããäžã€ã®äººæ°ã®ãã3Dãšã³ãžã³ã§ãã
- PixiJS (pixijs.com)ïŒ 3Dã°ã©ãã£ãã¯ã¹ã«ã䜿çšã§ãã2Dã¬ã³ããªã³ã°ã©ã€ãã©ãªã§ãã
- GLBoost (glboost.org)ïŒ PBRã«ããããã©ãŒãã³ã¹ã«éç¹ã眮ããæ¥æ¬ã®ã©ã€ãã©ãªã§ãã
ãããã®ã©ã€ãã©ãªã¯ãäºåã«æ§ç¯ãããã³ã³ããŒãã³ãããŠãŒãã£ãªãã£ãããŒã«ãæäŸããéçºãå€§å¹ ã«ã¹ããŒãã¢ãããããWebGLã¢ããªã±ãŒã·ã§ã³ã®å質ãåäžãããããšãã§ããŸãã
WebGLéçºã«ãããã°ããŒãã«ãªèæ ®äºé
äžçäžã®èŠèŽè åãã«WebGLã¢ããªã±ãŒã·ã§ã³ãéçºããéã«ã¯ã以äžã®ç¹ãèæ ®ããããšãéèŠã§ãïŒ
- ã¯ãã¹ãã©ãŠã¶äºææ§ïŒ ãã¹ãŠã®ãŠãŒã¶ãŒã§æ£ããåäœããããšã確èªããããã«ãç°ãªããã©ãŠã¶ïŒChromeãFirefoxãSafariãEdgeïŒããã³ãã©ãããã©ãŒã ïŒWindowsãmacOSãLinuxãAndroidãiOSïŒã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŸãã
- ããã€ã¹ã®ããã©ãŒãã³ã¹ïŒ ããŒãšã³ãã®ã¢ãã€ã«ããã€ã¹ãå«ããããŸããŸãªããã€ã¹åãã«ã¢ããªã±ãŒã·ã§ã³ãæé©åããŸããããã€ã¹ã®èœåã«åºã¥ããŠã¬ã³ããªã³ã°å質ã調æŽããããã«ãã¢ãããã£ããªã°ã©ãã£ãã¯ã¹èšå®ã®äœ¿çšãæ€èšããŸãã
- ã¢ã¯ã»ã·ããªãã£ïŒ é害ãæã€ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããããã«ããŸããç»åã«ä»£æ¿ããã¹ããæäŸããæç¢ºã§ç°¡æœãªèšèªã䜿çšããã¢ããªã±ãŒã·ã§ã³ãããŒããŒãã§æäœå¯èœã§ããããšã確èªããŸãã
- ããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒ ããåºãèŠèŽè ã«ãªãŒãããããã«ãã¢ããªã±ãŒã·ã§ã³ã®ããã¹ããšã¢ã»ãããç°ãªãèšèªã«ç¿»èš³ããŸãã
çµè«
WebGLã¯ããã©ãŠã¶ã§ã€ã³ã¿ã©ã¯ãã£ããª3Dã°ã©ãã£ãã¯ã¹ãäœæããããã®åŒ·åãªæè¡ã§ããWebGLãã€ãã©ã€ã³ãçè§£ããã·ã§ãŒããŒããã°ã©ãã³ã°ãç¿åŸããé«åºŠãªã¬ã³ããªã³ã°æè¡ã掻çšããããšã§ãWebããŒã¹ã®äœéšã®éçãæŒãåºããèŠäºãªããžã¥ã¢ã«ãäœæã§ããŸããæäŸãããããã©ãŒãã³ã¹æé©åãšãããã°ã®ãã³ãã«åŸãããšã§ãã¢ããªã±ãŒã·ã§ã³ãããŸããŸãªããã€ã¹ã§ã¹ã ãŒãºã«å®è¡ãããããšãä¿èšŒã§ããŸãããŸããå¯èœãªéãå¹ åºãèŠèŽè ã«ãªãŒãããããã«ãã°ããŒãã«ãªèæ ®äºé ãèæ ®ããããšãå¿ããªãã§ãã ãããWebGLã®åãæŽ»çšããããªãã®åµé çãªå¯èœæ§ãè§£ãæŸã¡ãŸãããïŒ