WebGLã¹ããŒã¹ãã¯ã¹ãã£ã®åãæ¢æ±ãã3Dã°ã©ãã£ãã¯ã¹ã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªäœ¿çšéãæé©åãã詳现ãªããžã¥ã¢ã«ãšã°ããŒãã«ãªãŠãŒã¶ãŒã®ããã®ããã©ãŒãã³ã¹åäžãå®çŸããŸãã
WebGLã¹ããŒã¹ãã¯ã¹ãã£ïŒã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®ããã®ã¡ã¢ãªå¹çã®è¯ããã¯ã¹ãã£ç®¡ç
WebGLéçºã®äžçã§ã¯ãèŠèŠçã«èŠäºã§é«æ§èœãª3Dã¢ããªã±ãŒã·ã§ã³ãäœæããããšã¯ãå€ãã®å Žåãå¹ççãªãã¯ã¹ãã£ç®¡çã«ããã£ãŠããŸããåŸæ¥ã®ãã¯ã¹ãã£ã¢ãããŒãã¯ãç¹ã«é«è§£å床ã®ã¢ã»ãããå€§èŠæš¡ãªä»®æ³ç°å¢ãæ±ãéã«ã倧éã®ã¡ã¢ãªãæ¶è²»ããå¯èœæ§ããããŸããããã¯ãç¹ã«ããŒããŠã§ã¢èœåããããã¯ãŒã¯ç¶æ³ãç°ãªãã°ããŒãã«ãªãŠãŒã¶ãŒåãã«èšèšãããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠãé倧ãªããã«ããã¯ãšãªãåŸãŸããWebGLã¹ããŒã¹ãã¯ã¹ãã£ã¯ããã®èª²é¡ã«å¯Ÿããé åçãªè§£æ±ºçãæäŸããéçºè ã¯ãã¯ã¹ãã£ã®å¿ èŠãªéšåã®ã¿ãããŒãããŠã¬ã³ããªã³ã°ã§ããããã«ãªããå€§å¹ ãªã¡ã¢ãªç¯çŽãšå šäœçãªããã©ãŒãã³ã¹ã®åäžã«ã€ãªãããŸãã
å¹ççãªãã¯ã¹ãã£ç®¡çã®å¿ èŠæ§ãçè§£ãã
ãã¯ã¹ãã£ã¯3Dã°ã©ãã£ãã¯ã¹ã®åºæ¬çãªæ§æèŠçŽ ã§ãããµãŒãã§ã¹ã«è²ããã£ããŒã«ããªã¢ãªãºã ãæäŸããŸãããããã倧ããªãã¯ã¹ãã£ã¯å©çšå¯èœãªGPUã¡ã¢ãªãããã«æ¶è²»ããããã©ãŒãã³ã¹ã®äœäžããã©ãŠã¶ã®ã¯ã©ãã·ã¥ããããã¯ã¢ã»ããã®ããŒããå šãã§ããªããªãããšãããããŸããããã¯ç¹ã«æ¬¡ã®ãããªå Žåã«åé¡ãšãªããŸãïŒ
- é«è§£å床ãã¯ã¹ãã£ã®æ±ãïŒè©³çްãªãã¯ã¹ãã£ã¯ãªã¢ã«ãªããžã¥ã¢ã«ã«äžå¯æ¬ ã§ããããã®ã¡ã¢ãªãããããªã³ãã¯ããªãã®ãã®ã«ãªãå¯èœæ§ããããŸãã
- å€§èŠæš¡ãªä»®æ³ç°å¢ã®äœæïŒã²ãŒã ãã·ãã¥ã¬ãŒã·ã§ã³ããããã³ã°ã¢ããªã±ãŒã·ã§ã³ã¯ããã°ãã°å€æ°ã®ãã¯ã¹ãã£ãå¿ èŠãšããåºå€§ãªé¢šæ¯ãè€éãªã·ãŒã³ãå«ã¿ãŸãã
- ã°ããŒãã«ãªãŠãŒã¶ãŒåãã®ã¢ããªã±ãŒã·ã§ã³éçºïŒãŠãŒã¶ãŒã¯ãGPUèœåããããã¯ãŒã¯åž¯åãæ§ã ãªå¹ åºãããã€ã¹ãããŠã§ãã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããŸããã¡ã¢ãªäœ¿çšéãæé©åããããšã§ãããŒããŠã§ã¢ã«é¢ããã誰ã«ãšã£ãŠãã¹ã ãŒãºãªäœéšãä¿èšŒãããŸããçºå±éäžåœã®ãŠãŒã¶ãŒãäœæ§èœããã€ã¹ã§é«è§£å床ã®å°å³ãã¯ã¹ãã£ãããŒãããããšããå Žé¢ãæ³åããŠã¿ãŠãã ãããæé©åããªããã°ããã®äœéšã¯å£æªãªãã®ã«ãªããŸãã
åŸæ¥ã®ãã¯ã¹ãã£ã¢ãããŒãã§ã¯ããã¯ã¹ãã£å šäœãGPUã¡ã¢ãªã«ããŒããããŸããããšããã®äžéšããèŠããŠããªãããããã¯ãã®æç¹ã§å¿ èŠãšãããŠããªãå Žåã§ãåæ§ã§ããããã¯ãç¹ã«äœã¹ããã¯ã®ããã€ã¹ã倧ããªãã¯ã¹ãã£ãæ±ãå Žåã«ãã¡ã¢ãªã®ç¡é§é£ããããã©ãŒãã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸãã
WebGLã¹ããŒã¹ãã¯ã¹ãã£ã®ç޹ä»
WebGLã¹ããŒã¹ãã¯ã¹ãã£ïŒéšååžžé§ãã¯ã¹ãã£ãšããŠãç¥ãããïŒã¯ããã¯ã¹ãã£ã®å¿ èŠãªéšåã®ã¿ãGPUã¡ã¢ãªã«ããŒãããã¡ã«ããºã ãæäŸããŸãããã®ã¢ãããŒãã«ãããéçºè ã¯å©çšå¯èœãªGPUã¡ã¢ãªãããã¯ããã«å€§ããªãã¯ã¹ãã£ãäœæã§ããŸãããªããªãã衚瀺ãããŠããããŸãã¯é¢é£ããéšåã®ã¿ããªã³ããã³ãã§ããŒããããããã§ããããã¯é«è§£å床ã®ãããªãã¹ããªãŒãã³ã°ãããããªãã®ã ãšèããŠãã ããããã¡ã€ã«å šäœãäžåºŠã«ããŠã³ããŒãããã®ã§ã¯ãªããçŸåšèŠèŽããŠããéšåã ããããŠã³ããŒãããŸãã
ã¹ããŒã¹ãã¯ã¹ãã£ã®æ žãšãªãèãæ¹ã¯ã倧ããªãã¯ã¹ãã£ãããå°ãã管çããããã¿ã€ã«ããããã¯ã«åå²ããããšã§ãããããã®ã¿ã€ã«ã¯ãã¬ã³ããªã³ã°ã«å¿ èŠãªãšãã«ã®ã¿GPUã¡ã¢ãªã«ããŒããããŸããGPUã¯ãããã®ã¿ã€ã«ã®åžžé§ã管çããå¿ èŠã«å¿ããŠã·ã¹ãã ã¡ã¢ãªããã£ã¹ã¯ããèªåçã«ãã§ããããŸãããã®ããã»ã¹ã¯ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠééçã§ãããéçºè ã¯æåã®ã¡ã¢ãªç®¡çã§ã¯ãªããã¬ã³ããªã³ã°ããžãã¯ã«éäžããããšãã§ããŸãã
äž»èŠãªæŠå¿µ
- ã¿ã€ã«/ãããã¯ïŒã¹ããŒã¹ãã¯ã¹ãã£ã®åºæ¬åäœããã¯ã¹ãã£ã¯ããå°ããªã¿ã€ã«ã«åå²ããããããã¯ç¬ç«ããŠããŒãããã³ã¢ã³ããŒãã§ããŸãã
- ä»®æ³ãã¯ã¹ãã£ïŒãã®ãã¹ãŠã®ã¿ã€ã«ãGPUã¡ã¢ãªã«åžžé§ããŠãããã©ããã«é¢ãããããã¯ã¹ãã£å šäœã®ããšã
- ç©çãã¯ã¹ãã£ïŒçŸåšGPUã¡ã¢ãªã«ããŒããããŠããä»®æ³ãã¯ã¹ãã£ã®éšåã
- åžžé§ïŒResidencyïŒïŒã¿ã€ã«ãçŸåšGPUã¡ã¢ãªã«åžžé§ïŒããŒãïŒããŠãããã©ããã瀺ãã¿ã€ã«ã®ç¶æ ã
- ããŒãžããŒãã«ïŒä»®æ³ãã¯ã¹ãã£åº§æšãç©çã¡ã¢ãªäœçœ®ã«ãããã³ã°ããããŒã¿æ§é ã§ãGPUãé©åãªã¿ã€ã«ã«å¹ççã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
ã¹ããŒã¹ãã¯ã¹ãã£ã䜿çšããã¡ãªãã
WebGLã¹ããŒã¹ãã¯ã¹ãã£ã¯ã3Dã°ã©ãã£ãã¯ã¹ã¢ããªã±ãŒã·ã§ã³ã«ããã€ãã®å€§ããªã¡ãªããããããããŸãïŒ
- ã¡ã¢ãªãããããªã³ãã®åæžïŒå¿ èŠãªã¿ã€ã«ã®ã¿ãããŒãããããšã§ãã¹ããŒã¹ãã¯ã¹ãã£ã¯å¿ èŠãªGPUã¡ã¢ãªã®éãæå°éã«æããã¡ã¢ãªå¶éãè¶ ããããšãªãããã倧ãã詳现ãªãã¯ã¹ãã£ã®äœ¿çšãå¯èœã«ããŸãããã®ã¡ãªããã¯ãã¢ãã€ã«ããã€ã¹ãäœã¹ããã¯ã®ããŒããŠã§ã¢ã«ãšã£ãŠç¹ã«éèŠã§ãã
- ããã©ãŒãã³ã¹ã®åäžïŒã¡ã¢ãªãã¬ãã·ã£ãŒã®è»œæžã¯ãã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ã®åäžã«ã€ãªããå¯èœæ§ããããŸããäžèŠãªããŒã¿è»¢éãé¿ããã¡ã¢ãªã®ç«¶åãæå°éã«æããããšã§ãã¹ããŒã¹ãã¯ã¹ãã£ã¯ããã¹ã ãŒãºãªãã¬ãŒã ã¬ãŒããšããéãããŒãæéã«è²¢ç®ã§ããŸãã
- ãã倧ããªä»®æ³ç°å¢ã®ãµããŒãïŒã¹ããŒã¹ãã¯ã¹ãã£ã¯ãåŸæ¥ã®ãã¯ã¹ãã£ã¢ãããŒãã§ã¯ã¬ã³ããªã³ã°ãäžå¯èœã ã£ãåºå€§ãªä»®æ³ç°å¢ã®äœæãå¯èœã«ããŸããè¡æãã¥ãŒããã¹ããªãŒãã¬ãã«ã®è©³çްãŸã§ãºãŒã ã€ã³ã§ããã°ããŒãã«ãããã³ã°ã¢ããªã±ãŒã·ã§ã³ãæ³åããŠã¿ãŠãã ãããã¹ããŒã¹ãã¯ã¹ãã£ã¯ãããå®çŸå¯èœã«ããŸãã
- ãªã³ããã³ãã®ãã¯ã¹ãã£ããŒãã£ã³ã°ïŒã¿ã€ã«ã¯å¿ èŠãªãšãã«ã®ã¿GPUã¡ã¢ãªã«ããŒãããããããåçãªãã¯ã¹ãã£æŽæ°ãšå¹ççãªãªãœãŒã¹ç®¡çãå¯èœã«ãªããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒã¹ããŒã¹ãã¯ã¹ãã£ã¯ãäœã¹ããã¯ããé«ã¹ããã¯ã®ããã€ã¹ãŸã§ã·ãŒã ã¬ã¹ã«ã¹ã±ãŒã«ã§ããŸããäœã¹ããã¯ã®ããã€ã¹ã§ã¯ãäžå¯æ¬ ãªã¿ã€ã«ã®ã¿ãããŒããããé«ã¹ããã¯ã®ããã€ã¹ã§ã¯ãããå€ãã®ã¿ã€ã«ãããŒãããŠãã£ããŒã«ãåäžãããããšãã§ããŸãã
å®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹
WebGLã¹ããŒã¹ãã¯ã¹ãã£ã¯ã以äžãå«ãå¹ åºãã¢ããªã±ãŒã·ã§ã³ã«é©çšã§ããŸãïŒ
- ä»®æ³å°çåãšãããã³ã°ã¢ããªã±ãŒã·ã§ã³ïŒã€ã³ã¿ã©ã¯ãã£ããªå°å³ã®ããã®é«è§£ååºŠè¡æç»åãå°åœ¢ããŒã¿ã®ã¬ã³ããªã³ã°ãäŸãšããŠã¯ãå šçã®æ°è±¡ãã¿ãŒã³ã®å¯èŠåãã¢ããŸã³ç±åž¯éšæã®æ£®æäŒæ¡ãã¬ã³ãã®åæããšãžããã®èå€åŠéºè·¡ã®æ¢çŽ¢ãªã©ããããŸãã
- ã²ãŒã ïŒå°åœ¢ã建ç©ããã£ã©ã¯ã¿ãŒçšã®é«è§£å床ãã¯ã¹ãã£ãåãããå€§èŠæš¡ã§è©³çްãªã²ãŒã ã¯ãŒã«ãã®äœæãæªæ¥ã®æ±äº¬ãèå°ã«ããåºå€§ãªãªãŒãã³ã¯ãŒã«ãã²ãŒã ãæ¢çŽ¢ãããã¹ãŠã®å»ºç©ãä¹ãç©ã«è€éãªãã£ããŒã«ãæœãããŠããã®ãæ³åããŠã¿ãŠãã ãããã¹ããŒã¹ãã¯ã¹ãã£ã¯ãããçŸå®ã«ããããšãã§ããŸãã
- å»ççšç»åïŒèšºæãæ²»çèšç»ã®ããã«ãCTã¹ãã£ã³ãMRIç»åãªã©ã®å€§èŠæš¡ãªå»çããŒã¿ã»ãããé«ã¬ãã«ã®ãã£ããŒã«ã§å¯èŠåããŸããã€ã³ãã®å»åž«ã¯ãã¹ããŒã¹ãã¯ã¹ãã£ãåããWebGLã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠãé«è§£å床ã®è³ã¹ãã£ã³ãé éã§æ€æ»ã§ããŸãã
- 建ç¯ããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ïŒå£ãå®¶å ·ãååã®è©³çްãªãã¯ã¹ãã£ã䜿çšããŠã建ç©ãã€ã³ããªã¢ã®ãªã¢ã«ãªã¬ã³ããªã³ã°ãäœæããŸãããã€ãã®ã¯ã©ã€ã¢ã³ãã¯ãæ¥æ¬ã®å»ºç¯å®¶ãèšèšãã建ç©ãããŒãã£ã«ã§ãã¢ãŒããã¹ããŒã¹ãã¯ã¹ãã£ã®ãããã§ç©ºéã詳现ã«äœéšã§ããŸãã
- ç§åŠçããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ïŒæ°åã¢ãã«ãæµäœååŠã·ãã¥ã¬ãŒã·ã§ã³ãªã©ã®è€éãªç§åŠããŒã¿ããããŸããŸãªãã©ã¡ãŒã¿ã衚ã詳现ãªãã¯ã¹ãã£ã§å¯èŠåããŸããäžçäžã®ç ç©¶è ã¯ãå¹ççãªå¯èŠåã®ããã«ã¹ããŒã¹ãã¯ã¹ãã£ã掻çšããWebGLã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠãæ°åå€åããŒã¿ã®åæã«å ±åã§åãçµãããšãã§ããŸãã
WebGLã¹ããŒã¹ãã¯ã¹ãã£ã®å®è£
WebGLã¹ããŒã¹ãã¯ã¹ãã£ã®å®è£ ã«ã¯ãããã€ãã®äž»èŠãªã¹ããããå«ãŸããŸãïŒ
- æ¡åŒµæ©èœãµããŒãã®ç¢ºèªïŒãŠãŒã¶ãŒã®ãã©ãŠã¶ãšããŒããŠã§ã¢ã
EXT_sparse_textureæ¡åŒµæ©èœããµããŒãããŠããããšã確èªããŸãã - ã¹ããŒã¹ãã¯ã¹ãã£ã®äœæïŒ
TEXTURE_SPARSE_BIT_EXTãã©ã°ãæå¹ã«ããŠWebGLãã¯ã¹ãã£ãªããžã§ã¯ããäœæããŸãã - ã¿ã€ã«ãµã€ãºã®å®çŸ©ïŒãã¯ã¹ãã£ãåå²ããããã«äœ¿çšãããã¿ã€ã«ã®ãµã€ãºãæå®ããŸãã
- ã¿ã€ã«ã®ããŒãïŒé©åãªãªãã»ãããšæ¬¡å
ãæå®ããŠ
texSubImage2D颿°ã䜿çšããå¿ èŠãªã¿ã€ã«ãGPUã¡ã¢ãªã«ããŒãããŸãã - åžžé§ç®¡çïŒå¯èŠæ§ããã®ä»ã®åºæºã«åºã¥ããŠå¿ èŠã«å¿ããŠã¿ã€ã«ãããŒãããã³ã¢ã³ããŒããããã¿ã€ã«ã®åžžé§ã管çããããã®æŠç¥ãå®è£ ããŸãã
ã³ãŒãäŸïŒæŠå¿µçïŒ
ããã¯ç°¡ç¥åãããæŠå¿µçãªäŸã§ããå®éã®å®è£ ã«ã¯ãæ éãªãšã©ãŒãã³ããªã³ã°ãšãªãœãŒã¹ç®¡çãå¿ èŠã§ãã
// æ¡åŒµæ©èœã®ãµããŒãã確èª
const ext = gl.getExtension('EXT_sparse_texture');
if (!ext) {
console.error('EXT_sparse_textureæ¡åŒµæ©èœã¯ãµããŒããããŠããŸããã');
return;
}
// ã¹ããŒã¹ãã¯ã¹ãã£ãäœæ
const texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texStorage2D(gl.TEXTURE_2D, levels, internalFormat, width, height, gl.TEXTURE_SPARSE_BIT_EXT);
// ã¿ã€ã«ãµã€ãºãå®çŸ©ïŒäŸïŒ128x128ïŒ
const tileWidth = 128;
const tileHeight = 128;
// ã¿ã€ã«ãããŒãïŒäŸïŒx=0, y=0ã®ã¿ã€ã«ïŒ
const tileData = new Uint8Array(tileWidth * tileHeight * 4); // äŸïŒRGBA8ããŒã¿
gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, tileWidth, tileHeight, gl.RGBA, gl.UNSIGNED_BYTE, tileData);
// åžžé§ã管çïŒäŸïŒå¿
èŠã«å¿ããŠããã«ã¿ã€ã«ãããŒãïŒ
// ...
èæ ®äºé ãšãã¹ããã©ã¯ãã£ã¹
- ã¿ã€ã«ãµã€ãºã®éžæïŒé©åãªã¿ã€ã«ãµã€ãºãéžæããããšã¯ããã©ãŒãã³ã¹ã«ãšã£ãŠéèŠã§ããå°ããã¿ã€ã«ã¯åžžé§ã«å¯ŸããŠãã现ããå¶åŸ¡ãæäŸããŸããããªãŒããŒããããå¢å ãããå¯èœæ§ããããŸãã倧ããã¿ã€ã«ã¯ãªãŒããŒããããæžãããŸãããäžèŠãªããŒã¿ã®ããŒãã«ã€ãªããå¯èœæ§ããããŸããç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã«æé©ãªã¿ã€ã«ãµã€ãºãèŠã€ããã«ã¯ãå®éšãéµãšãªããŸããè¯ãåºçºç¹ã¯128x128ãŸãã¯256x256ã§ãã
- åžžé§ç®¡çïŒå¹æçãªåžžé§ç®¡çæŠç¥ãå®è£
ããããšã¯ãããã©ãŒãã³ã¹ãæå€§åããããã«äžå¯æ¬ ã§ããæ¬¡ã®ãããªãã¯ããã¯ã®äœ¿çšãæ€èšããŠãã ããïŒ
- å¯èŠæ§ã«ãªã³ã°ïŒã«ã¡ã©ã«èŠããã¿ã€ã«ã®ã¿ãããŒãããŸãã
- 詳现ã¬ãã«ïŒLODïŒïŒé ãã®ãªããžã§ã¯ãã«ã¯äœè§£å床ã®ã¿ã€ã«ããè¿ãã®ãªããžã§ã¯ãã«ã¯é«è§£å床ã®ã¿ã€ã«ãããŒãããŸãã
- åªå 床ããŒã¹ã®ããŒãã£ã³ã°ïŒçŸåšã®ãã¥ãŒã«ãšã£ãŠæãéèŠãªã¿ã€ã«ã®ããŒããåªå ããŸãã
- ã¡ã¢ãªããžã§ããïŒå©çšå¯èœãªGPUã¡ã¢ãªã«æ³šæããã¹ããŒã¹ãã¯ã¹ãã£ã䜿çšã§ããæå€§ã¡ã¢ãªéã®äžéãèšå®ããŸããã¡ã¢ãªããžã§ããã«éãããšãã«ã¿ã€ã«ãã¢ã³ããŒãããã¡ã«ããºã ãå®è£ ããŸãã
- ãšã©ãŒãã³ããªã³ã°ïŒ
EXT_sparse_textureæ¡åŒµæ©èœããµããŒããããŠããªãå Žåãã¡ã¢ãªå²ãåœãŠã«å€±æããå Žåãªã©ã®ç¶æ³ã«é©åã«å¯ŸåŠããããã®å ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããŸãã - ãã¹ããšæé©åïŒããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããã¹ããŒã¹ãã¯ã¹ãã£ã®å®è£ ãæé©åããããã«ãããŸããŸãªããã€ã¹ããã©ãŠã¶ã§ã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããŸãããããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠãã¡ã¢ãªäœ¿çšéãšã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ã枬å®ããŸãã
課é¡ãšå¶é
WebGLã¹ããŒã¹ãã¯ã¹ãã£ã¯å€§ããªå©ç¹ãæäŸããŸãããèæ ®ãã¹ãããã€ãã®èª²é¡ãšå¶éããããŸãïŒ
- æ¡åŒµæ©èœã®ãµããŒãïŒ
EXT_sparse_textureæ¡åŒµæ©èœã¯ããã¹ãŠã®ãã©ãŠã¶ãããŒããŠã§ã¢ã§æ®éçã«ãµããŒããããŠããããã§ã¯ãããŸãããæ¡åŒµæ©èœã®ãµããŒãã確èªããããããµããŒãããŠããªãããã€ã¹ã®ããã®ãã©ãŒã«ããã¯ã¡ã«ããºã ãæäŸããããšãéèŠã§ãã - å®è£ ã®è€éãïŒã¹ããŒã¹ãã¯ã¹ãã£ã®å®è£ ã¯ãåŸæ¥ã®ãã¯ã¹ãã£ã䜿çšãããããè€éã«ãªãå¯èœæ§ããããã¿ã€ã«ç®¡çãšåžžé§å¶åŸ¡ã«æ³šææ·±ãé æ ®ãå¿ èŠã§ãã
- ããã©ãŒãã³ã¹ãªãŒããŒãããïŒã¹ããŒã¹ãã¯ã¹ãã£ã¯å šäœçãªããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãããã¿ã€ã«ç®¡çãšããŒã¿è»¢éã«é¢é£ãããªãŒããŒããããååšããŸãã
- éå®çãªå¶åŸ¡ïŒGPUãã¿ã€ã«ã®åžžé§ã管çãããããããŒãããã³ã¢ã³ããŒãã®ããã»ã¹ã«å¯Ÿããå¶åŸ¡ã¯éå®çã§ãã
ã¹ããŒã¹ãã¯ã¹ãã£ã®ä»£æ¿æ¡
ã¹ããŒã¹ãã¯ã¹ãã£ã¯åŒ·åãªããŒã«ã§ãããWebGLã§ã®ãã¯ã¹ãã£ç®¡çãæé©åããããã«äœ¿çšã§ããä»ã®ãã¯ããã¯ããããŸãïŒ
- ãã¯ã¹ãã£å§çž®ïŒå§çž®ãã¯ã¹ãã£ãã©ãŒãããïŒäŸïŒDXT, ETC, ASTCïŒã䜿çšãããšããã¯ã¹ãã£ã®ã¡ã¢ãªãããããªã³ããå€§å¹ ã«åæžã§ããŸãã
- ããããããã³ã°ïŒããããããïŒãã¯ã¹ãã£ã®äœè§£å床çïŒãçæãããšãã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãåäžãããšã€ãªã¢ã·ã³ã°ã¢ãŒãã£ãã¡ã¯ããæžå°ããŸãã
- ãã¯ã¹ãã£ã¢ãã©ã¹ïŒè€æ°ã®å°ããªãã¯ã¹ãã£ã1ã€ã®å€§ããªãã¯ã¹ãã£ã«ãŸãšããããšã§ãæç»åŒã³åºãã®æ°ãæžãããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
- ã¹ããªãŒãã³ã°ãã¯ã¹ãã£ïŒãã¯ã¹ãã£ãéåæã§ããŒãããGPUã¡ã¢ãªã«ã¹ããªãŒãã³ã°ããããšã§ãããŒãæéãæ¹åããã¡ã¢ãªãã¬ãã·ã£ãŒã軜æžã§ããŸãã
çµè«
WebGLã¹ããŒã¹ãã¯ã¹ãã£ã¯ã3Dã°ã©ãã£ãã¯ã¹ã¢ããªã±ãŒã·ã§ã³ã«ãããã¡ã¢ãªäœ¿çšéãæé©åããããã©ãŒãã³ã¹ãåäžãããããã®åŒ·åãªã¡ã«ããºã ãæäŸããŸãããã¯ã¹ãã£ã®å¿ èŠãªéšåã®ã¿ãGPUã¡ã¢ãªã«ããŒãããããšã§ãã¹ããŒã¹ãã¯ã¹ãã£ã¯éçºè ããã倧ããããã詳现ãªä»®æ³ç°å¢ãäœæããã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãåäžãããããå¹ åºãããã€ã¹ããµããŒãããããšãå¯èœã«ããŸããèæ ®ãã¹ãããã€ãã®èª²é¡ãå¶éã¯ãããŸãããã¹ããŒã¹ãã¯ã¹ãã£ã®å©ç¹ã¯ãç¹ã«é«è§£å床ã®ãã¯ã¹ãã£ãå€§èŠæš¡ãªä»®æ³ç°å¢ãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠããã°ãã°æ¬ ç¹ãäžåããŸãã
WebGLãé²åãç¶ããã°ããŒãã«ãªãŠã§ãéçºã«ãããŠãŸããŸãæ®åããã«ã€ããŠãã¹ããŒã¹ãã¯ã¹ãã£ã¯äžçäžã®ãŠãŒã¶ãŒã«èŠèŠçã«èŠäºã§é«æ§èœãª3DäœéšãæäŸããããã«ããŸããŸãéèŠãªåœ¹å²ãæããããšã«ãªãã§ããããã¹ããŒã¹ãã¯ã¹ãã£ã®åçãšæè¡ãçè§£ããããšã§ãéçºè ã¯çŸããå¹ççãªã¢ããªã±ãŒã·ã§ã³ãäœæããããŒããŠã§ã¢ã®èœåããããã¯ãŒã¯ç¶æ³ã«é¢ãããããŠãŒã¶ãŒã«ã¹ã ãŒãºã§é åçãªäœéšãæäŸã§ããŸããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®ããã«æé©ãªããã©ãŒãã³ã¹ã確ä¿ãããããåžžã«å€æ§ãªããã€ã¹ããã©ãŠã¶ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããããšãå¿ããªãã§ãã ããã
ãããªãèªã¿ç©ãšãªãœãŒã¹
- WebGL仿§æž: https://www.khronos.org/registry/webgl/specs/latest/1.0/
- OpenGLã¹ããŒã¹ãã¯ã¹ãã£æ¡åŒµ: https://www.khronos.org/opengl/wiki/Sparse_Texture
- WebGLã®ãã¥ãŒããªã¢ã«ãšäŸïŒMDN Web DocsãStack Overflowãªã©ã®ãµã€ãã§ãWebGL sparse textures exampleããæ€çŽ¢ããŠãã ããã