é«åºŠãªãã¯ã¹ãã£å§çž®æè¡ã§WebGLã¢ããªã±ãŒã·ã§ã³ãæé©åããGPUã¡ã¢ãªäœ¿çšéãå€§å¹ ã«åæžããæ§ã ãªããã€ã¹ã§ã®ããã©ãŒãã³ã¹ãåäžãããŸãã
ããã³ããšã³ãWebGLãã¯ã¹ãã£å§çž®ã¢ã«ãŽãªãºã ïŒGPUã¡ã¢ãªã®æé©å
çŸä»£ã®Webéçºã®é åãç¹ã«ã€ã³ã¿ã©ã¯ãã£ããª3Dã°ã©ãã£ãã¯ã¹ã®åéã§ã¯ãWebGLãæé«äœã«åèšããŠããŸããããã«ãããéçºè ã¯GPUã®ãã¯ãŒãçŽæ¥æŽ»çšãããã€ãŠã¯ãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã«éå®ãããŠããæ²¡å ¥æã®ããäœéšãäœãåºãããšãã§ããŸãããããããããã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã¯ããªãœãŒã¹ãã©ãã ãå¹ççã«ç®¡çããããã«å€§ããäŸåããŠãããGPUã¡ã¢ãªã®äœ¿çšéã¯éèŠãªèŠçŽ ã§ããæã圱é¿åã®ããæé©åæè¡ã®äžã€ããã¯ã¹ãã£å§çž®ã§ãããã®ããã°èšäºã§ã¯ãWebGLãã¯ã¹ãã£å§çž®ã¢ã«ãŽãªãºã ã®äžçãæ·±ãæãäžãããã®éèŠæ§ãå®è£ ããããŠäžçã®Webéçºè ã«ãšã£ãŠã®å®çšçãªå©ç¹ãæ¢ããŸãã
GPUã¡ã¢ãªæé©åã®éèŠæ§
GPUã¡ã¢ãªããŸãã¯ãããªRAMïŒVRAMïŒã¯ãGPUãã·ãŒã³ãã¬ã³ããªã³ã°ããããã«å¿ èŠãªãã¯ã¹ãã£ããžãªã¡ããªããã®ä»ã®èŠèŠããŒã¿ãä¿åããããã®å°çšã¡ã¢ãªãšããŠæ©èœããŸããWebGLã¢ããªã±ãŒã·ã§ã³ã倧ããéå§çž®ã®ãã¯ã¹ãã£ãå©çšãããšãå©çšå¯èœãªVRAMãããã«äœ¿ãæãããŠããŸãå¯èœæ§ããããŸããããã¯ã以äžã®ãããªäžé£ã®ããã©ãŒãã³ã¹åé¡ã«ã€ãªãããŸãïŒ
- ãã¬ãŒã ã¬ãŒãã®äœäžïŒGPUã¯ãããäœéãªã·ã¹ãã ã¡ã¢ãªããããŒã¿ãååŸããããã«ããå€ãã®æéãè²»ãããçµæãšããŠãã¬ãŒã ã¬ãŒãã®é¡èãªäœäžãåŒãèµ·ãããŸãã
- ã«ã¯ã€ããé å»¶ïŒã¢ããªã±ãŒã·ã§ã³ãã«ã¯ã€ãããé å»¶ãããããããšãããããŠãŒã¶ãŒäœéšãäžå¿«ãªãã®ã«ããŸãã
- æ¶è²»é»åã®å¢å ïŒGPUã®è² è·ãé«ãŸããæ¶è²»é»åãå¢å ããã¢ãã€ã«ããã€ã¹ã§ã¯ããããªãŒå¯¿åœãçããªãå¯èœæ§ããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ãã·ã¥ïŒæ¥µç«¯ãªå ŽåãGPUãå©çšå¯èœãªã¡ã¢ãªãããå€ãã®ã¡ã¢ãªãå²ãåœãŠãããšãããšãã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããå¯èœæ§ããããŸãã
ãããã£ãŠãGPUã¡ã¢ãªäœ¿çšéã®æé©åã¯ãã¹ã ãŒãºã§å¿çæ§ãé«ããèŠèŠçã«è±ããªWebGLäœéšãæäŸããããã«æãéèŠã§ããããã¯ããŠãŒã¶ãŒãæ§ã ãªããŒããŠã§ã¢èœåããããã¯ãŒã¯é床ãã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ãæã€å¯èœæ§ãããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã察象ãšããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«éèŠã§ããããŒãšã³ãããã€ã¹åãã«æé©åããããšã§ãããåºããªãŒããšå æ¬çãªããžã¿ã«äœéšãä¿èšŒãããŸãã
ãã¯ã¹ãã£å§çž®ãšã¯ïŒ
ãã¯ã¹ãã£å§çž®ã¯ããã¯ã¹ãã£ã®ä¿åãšè»¢éã«å¿ èŠãªããŒã¿éãåæžããããšãå«ã¿ãŸããããã¯ããã¯ã¹ãã£ããŒã¿ãããå¹ççãªãã©ãŒãããã«ãšã³ã³ãŒãããæ§ã ãªã¢ã«ãŽãªãºã ãæ¡çšããããšã«ãã£ãŠéæãããŸããçã®ãã¯ã»ã«ããŒã¿ïŒäŸïŒRGBAå€ïŒãä¿åãã代ããã«ãå§çž®ãã¯ã¹ãã£ã¯ãGPUãã¬ã³ããªã³ã°ããã»ã¹äžã«è¿ éã«ãã³ãŒãã§ããé«åºŠã«æé©åããããã©ãŒãããã§ããŒã¿ãä¿åããŸããããã«ããã以äžã®ãããªå€§ããªå©ç¹ãããããããŸãïŒ
- ã¡ã¢ãªãããããªã³ãã®åæžïŒå§çž®ãã¯ã¹ãã£ã¯ãéå§çž®ã®ãã¯ã¹ãã£ãããå€§å¹ ã«å°ãªãVRAMããå¿ èŠãšããŸãããããã«ãããããå€ãã®ãã¯ã¹ãã£ãããŒãã§ããããè€éã§èŠèŠçã«çŸããã·ãŒã³ãå¯èœã«ãªããŸãã
- ããŒãæéã®ççž®ïŒãã¯ã¹ãã£ãã¡ã€ã«ãå°ãããªãããšã§ãããŠã³ããŒããšããŒãæéãççž®ãããç¹ã«äžéšã®å°åã§æ®åããŠããäœéãªãããã¯ãŒã¯æ¥ç¶ã«ãããŠãåæã®ãŠãŒã¶ãŒäœéšãåäžããäœæçãªåŸ ã¡æéãççž®ãããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒGPUã¯ãã¯ã¹ãã£ããŒã¿ãžã®ã¢ã¯ã»ã¹ãšåŠçãã¯ããã«é«éã«è¡ããããã«ãªãããã¬ãŒã ã¬ãŒããšå šäœçãªå¿çæ§ãåäžããŸãã
- é»åå¹çïŒã¡ã¢ãªè»¢éãšåŠçã®åæžã¯ãç¹ã«ã¢ãã€ã«ããã€ã¹ã«ãšã£ãŠæçãªãäœæ¶è²»é»åã«è²¢ç®ããŸãã
WebGLã«ãããäžè¬çãªãã¯ã¹ãã£å§çž®ã¢ã«ãŽãªãºã
WebGLã§ãµããŒããããŠãããã¯ã¹ãã£å§çž®ã¢ã«ãŽãªãºã ã¯ããã€ããããããããã«é·æãšçæããããŸãããããã®ã¢ã«ãŽãªãºã ãçè§£ããããšã¯ãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã«æé©ãªãªãã·ã§ã³ãéžæããããã®éµãšãªããŸããéžæã¯ãå€ãã®å Žåãã¿ãŒã²ãããã©ãããã©ãŒã ãç»åã³ã³ãã³ããããã³æãŸããèŠèŠå質ã«äŸåããŸãã
1. S3TC (DXT)
S3TCïŒDXTãDXTCããŸãã¯BCãšããŠãç¥ãããŠããŸãïŒã¯ãS3 Graphicsã«ãã£ãŠéçºããã人æ°ã®ããã·ãŒå§çž®ã¢ã«ãŽãªãºã ãã¡ããªãŒã§ãããã¹ã¯ãããããã³ã¢ãã€ã«ãã©ãããã©ãŒã ã§åºããµããŒããããŠããŸããS3TCã¢ã«ãŽãªãºã ã¯ãã¯ã¹ãã£ã4x4ãã¯ã»ã«ã®ãããã¯ã«å§çž®ããéå§çž®ãã¯ã¹ãã£ãšæ¯èŒããŠæå€§6:1ã®å§çž®çãéæããŸããäžè¬çãªããªã¢ã³ãã¯æ¬¡ã®ãšããã§ãïŒ
- DXT1 (BC1)ïŒ1ãããã®ã¢ã«ãã¡ãŸãã¯ã¢ã«ãã¡ãã£ã³ãã«ãªãã®ãã¯ã¹ãã£ããµããŒãããŸããæé«ã®å§çž®çãæäŸããŸãããç»è³ªã¯äœäžããŸãã
- DXT3 (BC2)ïŒå®å šãªã¢ã«ãã¡ãã£ã³ãã«ãæã€ãã¯ã¹ãã£ããµããŒãããŸãããå§çž®çã¯äœããªããŸããã¢ã«ãã¡ãã£ã³ãã«ä»ãã®DXT1ãããåªããç»è³ªãåŸãããŸãã
- DXT5 (BC3)ïŒå®å šãªã¢ã«ãã¡ãæã€ãã¯ã¹ãã£ããµããŒãããéåžžãDXT3ãšæ¯èŒããŠåªããç»è³ªãæäŸããå§çž®çãšèŠèŠçå¿ å®åºŠã®ãã©ã³ã¹ãåããŠããŸãã
å©ç¹ïŒé«ãå§çž®çãåºç¯ãªããŒããŠã§ã¢ãµããŒããé«éãªãã³ãŒãã æ¬ ç¹ïŒããã·ãŒå§çž®ïŒã¢ãŒãã£ãã¡ã¯ããçºçããå¯èœæ§ãããïŒãäžéšã®ããªã¢ã³ãã§ã®ã¢ã«ãã¡ãã£ã³ãã«ã®å¶éã
äŸïŒã¹ããŒããã©ã³ã§å®è¡ããã3Dã²ãŒã ãæ³åããŠã¿ãŠãã ãããDXT1ã¯éæåºŠã®ãªããªããžã§ã¯ãã«ãã䜿çšãããDXT5ã¯è€éãªåœ±ãéšåçã«éæãªå¹æãæã€ãªããžã§ã¯ãã«äœ¿çšãããŸãã
2. ETC (Ericsson Texture Compression)
ETCã¯ãã¢ãã€ã«ããã€ã¹åãã«èšèšãããå¥ã®ããã·ãŒãã¯ã¹ãã£å§çž®ã¢ã«ãŽãªãºã ã§ããããã¯ãªãŒãã³ã¹ã¿ã³ããŒãã§ãããAndroidããã€ã¹ã§åºããµããŒããããŠããŸããETCã¯ãå§çž®çãšèŠèŠå質ã®è¯ããã©ã³ã¹ãæäŸããŸãã
- ETC1ïŒã¢ã«ãã¡ãã£ã³ãã«ã®ãªããã¯ã¹ãã£ããµããŒãããŸããè¯å¥œãªå§çž®çãæäŸããå¹ççã«ãµããŒããããŠãããããAndroidéçºã§éåžžã«äººæ°ã®ããéžæè¢ã§ãã
- ETC2 (EAC)ïŒã¢ã«ãã¡ãã£ã³ãã«ããµããŒãããããšã§ETC1ãæ¡åŒµããéçºè ãå®å šãªéæåºŠãæã€ãã¯ã¹ãã£ãå§çž®ã§ããããã«ããŸãã
å©ç¹ïŒåªããå§çž®çãAndroidããã€ã¹ã§ã®åºç¯ãªãµããŒããå¹ççãªããŒããŠã§ã¢ãã³ãŒãã æ¬ ç¹ïŒããã·ãŒå§çž®ãäžéšã®ãã¹ã¯ããããã©ãããã©ãŒã ã§ã®ãµããŒããå°ãªãã
äŸïŒ3D補åã¢ãã«ãå±ç€ºããã¢ãã€ã«ã¢ããªãèããŠã¿ãŸããããETC1ã¯äž»èŠãªè£œåãã¯ã¹ãã£ã«äœ¿çšã§ãã倧ããªèŠèŠçæå€±ãªãã«ãã¡ã€ã«ãµã€ãºãæé©åã§ããŸããã¢ãã«ã«ã¬ã©ã¹çªãåéæã®çŽ æããã£ãå Žåã¯ãEACã䜿çšããå¿ èŠããããŸãã
3. ASTC (Adaptive Scalable Texture Compression)
ASTCã¯ãããé«åºŠã§æè»ãªããã·ãŒå§çž®ã¢ã«ãŽãªãºã ã§ãããå¯å€ã®å§çž®çãšãçµæãšããŠåŸãããèŠèŠå質ã«å¯Ÿããããå€ãã®å¶åŸ¡ãå¯èœã«ããŸããæé«ã®ç»è³ªãšå§çž®çã®æè»æ§ãæäŸããåºç¯ãªæ¡çšãšããç¹ã§ã¯3ã€ã®ã¢ã«ãŽãªãºã ã®äžã§ææ°ã§ããå€ãã®çŸä»£ã®ã¢ãã€ã«ããã€ã¹ããOpenGL 4.3以äžããµããŒããããã¹ã¯ãããããŒããŠã§ã¢ãªã©ããŸããŸãå€ãã®ããã€ã¹ã§ãµããŒããããŠããŸãã
å©ç¹ïŒéåžžã«æè»ãªå§çž®çãåªããèŠèŠå質ãHDRãã¯ã¹ãã£ãã¢ã«ãã¡ãã£ã³ãã«ãªã©ããµããŒãã æ¬ ç¹ïŒæ°ããæšæºã§ãããããDXTãETCãšæ¯èŒããŠãµããŒãç¯å²ãçããããŒããŠã§ã¢ãžã®èŠæ±ãé«ãããšã³ã³ãŒãããã»ã¹äžã«ããå€ãã®èšç®èœåãå¿ èŠãšããã
äŸïŒASTCã¯ãèŠèŠçã«èŠæ±ã®å³ããã¢ããªã±ãŒã·ã§ã³ã®ãã¯ã¹ãã£ã«é©ããŠããŸããããŒãã£ã«ãªã¢ãªãã£ïŒVRïŒã¢ããªã±ãŒã·ã§ã³ã§ã¯ãæ²¡å ¥æã®ããç°å¢ãšé«ãèŠèŠçå¿ å®åºŠããé«å質ãªå§çž®ãèŠæ±ãããããASTCã¯æé©åããããŠãŒã¶ãŒäœéšãæäŸããããã®è²ŽéãªããŒã«ãšãªããŸãã
4. PVRTC (PowerVR Texture Compression)
PVRTCã¯ãImagination Technologiesã«ãã£ãŠéçºãããããã·ãŒãã¯ã¹ãã£å§çž®ã¢ã«ãŽãªãºã ã§ãäž»ã«å€ãã®ã¢ãã€ã«ããã€ã¹ãç¹ã«åæäžä»£ã®iPhoneãiPadã«æèŒãããŠããPowerVR GPUåãã§ããDXTã«äŒŒãŠããŸããã圌ãã®ã¢ãŒããã¯ãã£ã«æé©åãããŠããŸãã
å©ç¹ïŒè¯å¥œãªå§çž®çãå€ãã®ã¢ãã€ã«ããã€ã¹ã§ã®ããŒããŠã§ã¢ãµããŒãã æ¬ ç¹ïŒASTCãããå€ãã®ã¢ãŒãã£ãã¡ã¯ããçæããå¯èœæ§ããããä»ã®æ¹æ³ã»ã©åºããµããŒããããŠããŸããã
WebGLã§ã®ãã¯ã¹ãã£å§çž®ã®å®è£
WebGLã§ãã¯ã¹ãã£å§çž®ãå®è£ ããã«ã¯ãããã€ãã®ã¹ããããããããããããæãŸããçµæãéæããããã«éèŠã§ããããã»ã¹ã¯å¥œã¿ã®ã¯ãŒã¯ãããŒã«ãã£ãŠç°ãªããŸãããåºæ¬ååã¯äžè²«ããŠããŸãã
1. é©åãªå§çž®ã¢ã«ãŽãªãºã ã®éžæ
æåã®ã¹ãããã¯ããããžã§ã¯ãã®ããŒãºã«æãé©ãããã¯ã¹ãã£å§çž®ã¢ã«ãŽãªãºã ãéžæããããšã§ããã¿ãŒã²ãããã©ãããã©ãŒã ãããã©ãŒãã³ã¹èŠä»¶ãããã³èŠèŠåè³ªã®æåŸ å€ãèæ ®ããŠãã ãããããšãã°ãã¿ãŒã²ãããªãŒãã£ãšã³ã¹ãäž»ã«Androidããã€ã¹ã䜿çšããŠããå ŽåãETC1ãŸãã¯ETC2ãé©åãªéžæã§ããããåºç¯ãªãµããŒããšé«åè³ªãæ±ãããªããASTCã¯è¯ãéžæè¢ã§ãããããé«ããªãœãŒã¹èŠä»¶ã䌎ããŸãããã¹ã¯ããããšã¢ãã€ã«ã§å¹ åºãäºææ§ãä¿ã¡ãªãããã¡ã€ã«ãµã€ãºãå°ããä¿ã€ããã«ã¯ãDXTã䟿å©ã§ãã
2. ãã¯ã¹ãã£ã®ãšã³ã³ãŒã
ãã¯ã¹ãã£ã®ãšã³ã³ãŒãã¯ããã¯ã¹ãã£ãå ã®ãã©ãŒãããïŒäŸïŒPNGãJPGïŒããå§çž®ãã©ãŒãããã«å€æããããã»ã¹ã§ããããã¯ããã€ãã®æ¹æ³ã§è¡ãããšãã§ããŸãïŒ
- ãªãã©ã€ã³ãšã³ã³ãŒãã£ã³ã°ïŒããã¯äžè¬çã«æãæšå¥šãããã¢ãããŒãã§ããéçºããã»ã¹äžã«å°çšã®ããŒã«ãã©ã€ãã©ãªïŒS3TCã³ã³ãã¬ããµãŒãETCã«ãšã³ã³ãŒããããŠãŒãã£ãªãã£ãªã©ïŒã䜿çšããŸããããã«ãããæãå€ãã®å¶åŸ¡ãå¯èœã«ãªããéåžžã¯ããè¯ãå§çž®å質ãåŸãããŸãã
- ã©ã³ã¿ã€ã ãšã³ã³ãŒãã£ã³ã°ïŒå¯èœã§ã¯ãããŸãããã©ã³ã¿ã€ã ãšã³ã³ãŒãã£ã³ã°ïŒãã©ãŠã¶ã§ãã¯ã¹ãã£ããšã³ã³ãŒãããããšïŒã¯ã significantãªãªãŒããŒãããã远å ãããã¯ã¹ãã£ã®ããŒããé ããããããäžè¬çã«æšå¥šãããŸãããæ¬çªç°å¢ã«ã¯é©ããŠããŸããã
äŸïŒã¿ãŒã²ãããã©ãããã©ãŒã ãšéžæããå§çž®ã¢ã«ãŽãªãºã ã«å¿ããŠãMali Texture Compression ToolãTexturePackerãªã©ã®ããŒã«ã䜿çšããŸãããããã®ããŒã«ã¯PNGãã¡ã€ã«ãDXT5ãŸãã¯ETC1ãã¯ã¹ãã£ã«å€æããŸããéçºäžããããã®å§çž®ããããã¯ã¹ãã£ãã¡ã€ã«ã¯ãããžã§ã¯ãã®ã¢ã»ããã©ã€ãã©ãªã«å«ãŸããŸãã
3. WebGLãžã®çµ±å
ãã¯ã¹ãã£ãå§çž®ãããããããããWebGLã¢ããªã±ãŒã·ã§ã³ã«çµ±åããŸããããã«ã¯ãå§çž®ããããã¯ã¹ãã£ããŒã¿ãããŒãããGPUã«ã¢ããããŒããã3Dã¢ãã«ã«é©çšããããšãå«ãŸããŸããããã»ã¹ã¯ãéžæããWebGLãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã«ãã£ãŠç°ãªãå ŽåããããŸãã以äžã«äžè¬çãªæŠèŠã瀺ããŸãïŒ
- å§çž®ãã¯ã¹ãã£ããŒã¿ã®ããŒãïŒé©åãªãã¡ã€ã«ããŒãæ¹æ³ã䜿çšããŠãå§çž®ãã¯ã¹ãã£ãã¡ã€ã«ïŒäŸïŒDXTçšã®DDSãETCçšã®PKMïŒãããŒãããŸãã
- WebGLãã¯ã¹ãã£ã®äœæïŒ`gl.createTexture()`颿°ã䜿çšããŠæ°ãããã¯ã¹ãã£ãªããžã§ã¯ããäœæããŸãã
- ãã¯ã¹ãã£ã®ãã€ã³ãïŒ`gl.bindTexture()`颿°ã䜿çšããŠããã¯ã¹ãã£ãªããžã§ã¯ãããã¯ã¹ãã£ãŠãããã«ãã€ã³ãããŸãã
- ãã¯ã¹ãã£ãã©ãŒãããã®æå®ïŒ`gl.compressedTexImage2D()`颿°ã䜿çšããŠãå§çž®ãã¯ã¹ãã£ããŒã¿ãGPUã«ã¢ããããŒãããŸãããã®é¢æ°ã¯ããã¯ã¹ãã£ã¿ãŒã²ããïŒäŸïŒ`gl.TEXTURE_2D`ïŒããã¯ã¹ãã£ã¬ãã«ïŒäŸïŒããŒã¹ã¬ãã«ã®0ïŒãå éšãã©ãŒãããïŒäŸïŒDXT5çšã®`gl.COMPRESSED_RGBA_S3TC_DXT5`ïŒããã¯ã¹ãã£ã®å¹ ãšé«ããããã³å§çž®ãã¯ã¹ãã£ããŒã¿ãæå®ããåŒæ°ãåããŸãã
- ãã¯ã¹ãã£ãã©ã¡ãŒã¿ã®èšå®ïŒ`gl.TEXTURE_MIN_FILTER`ã`gl.TEXTURE_MAG_FILTER`ãªã©ã®ãã¯ã¹ãã£ãã©ã¡ãŒã¿ãèšå®ããŠããã¯ã¹ãã£ã®ãµã³ããªã³ã°æ¹æ³ãå¶åŸ¡ããŸãã
- ãã€ã³ããšé©çšïŒã·ã§ãŒããŒã§ããã¯ã¹ãã£ãé©åãªãã¯ã¹ãã£ãŠãããã«ãã€ã³ããããã¯ã¹ãã£åº§æšã䜿çšããŠãã¯ã¹ãã£ããµã³ããªã³ã°ããŸãã
äŸïŒ
function loadCompressedTexture(gl, url, format) {
const texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
// Set texture parameters
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
const xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "arraybuffer";
xhr.onload = function() {
if (xhr.status === 200) {
const buffer = xhr.response;
const data = new Uint8Array(buffer);
// Determine the format and upload the compressed data.
if (format === 'DXT5') {
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, gl.COMPRESSED_RGBA_S3TC_DXT5, width, height, 0, data);
} else if (format === 'ETC1') {
// Similar implementation for ETC1/ETC2/ASTC
// depending on platform support
}
gl.generateMipmap(gl.TEXTURE_2D);
gl.bindTexture(gl.TEXTURE_2D, null);
}
};
xhr.send();
return texture;
}
// Example Usage:
const myTexture = loadCompressedTexture(gl, 'path/to/texture.dds', 'DXT5');
4. ã¯ãã¹ãã©ãããã©ãŒã äºææ§ã®åŠç
ãã©ãããã©ãŒã ã«ãã£ãŠãµããŒãããããã¯ã¹ãã£å§çž®ãã©ãŒãããã¯ç°ãªããŸããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«éçºããå Žåãæ§ã ãªããã€ã¹ããã©ãŠã¶éã§ã®äºææ§ã確ä¿ããå¿ èŠããããŸããããã€ãã®éèŠãªèæ ®äºé ã¯æ¬¡ã®ãšããã§ãïŒ
- WebGLæ¡åŒµæ©èœïŒWebGLæ¡åŒµæ©èœã䜿çšããŠãç°ãªãå§çž®ãã©ãŒãããã®ãµããŒãã確èªããŸããããšãã°ãDXTãµããŒãã«ã¯`WEBGL_compressed_texture_s3tc`æ¡åŒµãETC1ãµããŒãã«ã¯`WEBGL_compressed_texture_etc1`æ¡åŒµãASTCã«ã¯é¢é£ããæ¡åŒµã確èªã§ããŸãã
- ãã©ãŒã«ããã¯ã¡ã«ããºã ïŒç¹å®ã®å§çž®ãã©ãŒãããããµããŒããããŠããªãã·ããªãªãåŠçããããã®ãã©ãŒã«ããã¯ã¡ã«ããºã ãå®è£ ããŸããããã«ã¯ãéå§çž®ãã¯ã¹ãã£ããããåºããµããŒããããŠããå¥ã®ãã©ãŒãããã䜿çšããããšãå«ãŸããå ŽåããããŸãã
- ãã©ãŠã¶æ€åºïŒãã©ãŠã¶æ€åºæè¡ã䜿çšããŠãç¹å®ãã©ãŠã¶ãšãã®å§çž®æ©èœã«åãããŠå®è£ ã調æŽããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšæé©åã®ãã³ã
WebGLãã¯ã¹ãã£å§çž®ã®å©ç¹ãæå€§éã«æŽ»çšããã¢ããªã±ãŒã·ã§ã³ãæé©åããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãèæ ®ããŠãã ããïŒ
- é©åãªãã©ãŒããããéžæããïŒå§çž®çãç»è³ªããã©ãããã©ãŒã ãµããŒãã®ãã©ã³ã¹ãæãè¯ãå§çž®ãã©ãŒããããéžæããŸãã
- ãã¯ã¹ãã£ãµã€ãºãæé©åããïŒé©åãªå¯žæ³ã®ãã¯ã¹ãã£ã䜿çšããŸããå¿ èŠä»¥äžã«å€§ããªãã¯ã¹ãã£ã䜿çšãããšãäžèŠãªã¡ã¢ãªãšãªãœãŒã¹ã®æ¶è²»ãå¢ããããé¿ããŠãã ããã2ã®ã¹ãä¹ã®ãµã€ãºã¯ãæé©åã®çç±ãããã°ãã°å¥œãŸããŸãã
- ããããããïŒãã¹ãŠã®ãã¯ã¹ãã£ã«ãããããããçæããŸããããããããã¯ãã«ã¡ã©ããã®ç°ãªãè·é¢ã§ã¬ã³ããªã³ã°ããããã«äœ¿çšããããäºåã«èšç®ãããçž®å°çã®ãã¯ã¹ãã£ã§ããããã«ããããšã€ãªã¢ã·ã³ã°ã¢ãŒãã£ãã¡ã¯ããå€§å¹ ã«åæžãããã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãåäžããŸãã
- ãã¯ã¹ãã£ããŒãªã³ã°ïŒãã¯ã¹ãã£ããŒãªã³ã°ãå®è£ ããŠãã¯ã¹ãã£ãªããžã§ã¯ããåå©çšãããã¯ã¹ãã£ãç¹°ãè¿ãäœæããã³ç Žæ£ãããªãŒããŒããããåæžããŸããããã¯ãåçã³ã³ãã³ããæã€ã¢ããªã±ãŒã·ã§ã³ã§ç¹ã«å¹æçã§ãã
- ãããåŠçïŒå¯èœãªéãæç»ã³ãŒã«ããããåŠçããŸããGPUã«éä¿¡ãããæç»ã³ãŒã«ã®æ°ãæå°éã«æããããšã§ãã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
- ãããã¡ã€ãªã³ã°ïŒå®æçã«WebGLã¢ããªã±ãŒã·ã§ã³ããããã¡ã€ãªã³ã°ããŠãããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããŸããWebãã©ãŠã¶ã®éçºè ããŒã«ã¯ããã®ããã»ã¹ã«éåžžã«è²ŽéãªæŽå¯ãæäŸããŸãããã©ãŠã¶ããŒã«ã䜿çšããŠVRAM䜿çšéããã¬ãŒã ã¬ãŒããæç»ã³ãŒã«æ°ãç£èŠããŸãããã¯ã¹ãã£å§çž®ãæå€§ã®å©çãããããé åãç¹å®ããŸãã
- ç»åã³ã³ãã³ããèæ ®ããïŒã·ã£ãŒããªãã£ããŒã«ãé«åšæ³¢æåãå€ããã¯ã¹ãã£ã«ã¯ASTCã®æ¹ãé©ããŠããå ŽåããããŸãããã£ããŒã«ãå°ãªããã¯ã¹ãã£ã«ã¯DXTãETCã䜿çšã§ãããããã¯ããåºã䜿çšãããŠãããã»ãšãã©ã®ããã€ã¹ã§å©çšå¯èœãªãããäžè¬çã«é«éãªãã³ãŒããšã¬ã³ããªã³ã°ãæäŸãããããçŽ æŽãããéžæè¢ãšãªããŸãã
ã±ãŒã¹ã¹ã¿ãã£ïŒå®äžçã®äŸ
ãã¯ã¹ãã£å§çž®ãå®äžçã§ã©ã®ããã«é©çšãããŠããããèŠãŠã¿ãŸãããïŒ
- ã¢ãã€ã«ã²ãŒã ïŒãåç¥ãã®ãããªã¢ãã€ã«ã²ãŒã ïŒäžççã«äººæ°ããããã¢ãã€ã«ã§å©çšå¯èœïŒã¯ãã²ãŒã ã®ãã¡ã€ã«ãµã€ãºãåæžããããŒãæéãæ¹åãã倿§ãªã¢ãã€ã«ããã€ã¹ã§ã¹ã ãŒãºãªãã¬ãŒã ã¬ãŒããç¶æããããã«ããã¯ã¹ãã£å§çž®ã«å€§ããäŸåããŠããŸããDXTãšETCã¯ããã£ã©ã¯ã¿ãŒãç°å¢ãç¹æ®å¹æã«äœ¿çšããããã¯ã¹ãã£ãå§çž®ããããã«äžè¬çã«äœ¿çšãããŸãããã®æé©åã¯ãèŠèŠå質ãšããã©ãŒãã³ã¹ã®å¶éãšã®ãã©ã³ã¹ããšãã®ã«åœ¹ç«ã¡ãŸãã
- Eã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ïŒEã³ããŒã¹ãã©ãããã©ãŒã ã¯ããã°ãã°3D補åãã¥ãŒã¢ãå©çšããŸãããã¯ã¹ãã£å§çž®ã«ãããã¡ã¢ãªäœ¿çšéãæå°éã«æããªãããé«å質ã®è£œåã¢ãã«ïŒäŸïŒéŽïŒãè¿ éã«ããŒãã§ããŸããASTCã¯é«ãèŠèŠå質ã®ããã«äžè¬çã«äœ¿çšãããDXT/ETCã¯å€æ§ãªãŠãŒã¶ãŒããŒã¹ã§ã®äºææ§ã®ããã«åœ¹ç«ã¡ãŸãã
- WebããŒã¹ã®3Dã³ã³ãã£ã®ã¥ã¬ãŒã¿ïŒã«ãŒã³ã³ãã£ã®ã¥ã¬ãŒã¿ãäœå® ãã©ã³ããžã¥ã¢ã©ã€ã¶ãããã³åæ§ã®ã¢ããªã¯ãé«éã§å¿çæ§ã®é«ããŠãŒã¶ãŒäœéšã®ããã«ãã¯ã¹ãã£å§çž®ã«äŸåããŠããŸãããŠãŒã¶ãŒã¯è²ãçŽ æããã¯ã¹ãã£ãã«ã¹ã¿ãã€ãºã§ããå倿Žã¯è¿ éã«ã¬ã³ããªã³ã°ãããå¿ èŠããããŸãããã¯ã¹ãã£å§çž®ã«ãããã¢ããªã±ãŒã·ã§ã³ã¯ãªãœãŒã¹ãéãããããã€ã¹ã§ãè¯å¥œã«åäœããŸãã
- å»çèŠèŠåã¢ããªïŒ3Då»çã¹ãã£ã³ïŒCTã¹ãã£ã³ãMRIã¹ãã£ã³ïŒã®èŠèŠåã¯ãWebGLã§ç¹æ®ãªèŠèŠåæè¡ã䜿çšããŸãããã¯ã¹ãã£å§çž®ã¯ãå€§èŠæš¡ã§è€éãªããŒã¿ã»ãããå¹ççã«ã¬ã³ããªã³ã°ããããã«äžå¯æ¬ ã§ãããå»åž«ãç§åŠè ãé«è§£å床ã®å»çç»åãã¹ã ãŒãºã«è¡šç€ºã§ããããã«ãã蚺æèœåãšç 究掻åãäžçäžã§åäžãããŸãã
WebGLã«ããããã¯ã¹ãã£å§çž®ã®æªæ¥
ãã¯ã¹ãã£å§çž®ã®åéã¯åžžã«é²åããŠããŸããããŒããŠã§ã¢ãšãœãããŠã§ã¢ã®èœåãåäžããã«ã€ããŠãæ°ããã¢ã«ãŽãªãºã ãšæé©åãæåŸ ãããŸããå°æ¥ã®ãã¬ã³ããšã€ãããŒã·ã§ã³ã«ã¯ã以äžãå«ãŸããå¯èœæ§ããããŸãïŒ
- ããåºç¯ãªASTCãµããŒãïŒASTCã®ããŒããŠã§ã¢ãµããŒããããæ®åããã«ã€ããŠããã®æ¡çšãåçã«å¢å ããããã«åªããç»è³ªãšããé«åºŠãªå§çž®çãå¯èœã«ãªãããšãæåŸ ãããŸãã
- æ¹åãããããŒããŠã§ã¢ãã³ãŒãïŒGPUã¡ãŒã«ãŒã¯ããã¯ã¹ãã£ãã³ãŒãã®é床ãšå¹çãæ¹åããããã«ç¶ç¶çã«åãçµãã§ããŸãã
- AIãæŽ»çšããå§çž®ïŒæ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ãæ¢æ±ãããã¯ã¹ãã£å§çž®ãã©ã¡ãŒã¿ãèªåçã«æé©åãããã¯ã¹ãã£ã³ã³ãã³ããšã¿ãŒã²ãããã©ãããã©ãŒã ã«åºã¥ããŠæã广çãªå§çž®ã¢ã«ãŽãªãºã ãéžæããŸãã
- é©å¿åå§çž®æè¡ïŒãŠãŒã¶ãŒã®ããã€ã¹èœåãšãããã¯ãŒã¯æ¡ä»¶ã«åºã¥ããŠåçã«èª¿æŽãããå§çž®æŠç¥ãå®è£ ããŸãã
çµè«
ãã¯ã¹ãã£å§çž®ã¯ãGPUã¡ã¢ãªäœ¿çšéãæé©åããWebGLã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããã®åŒ·åãªæè¡ã§ããç°ãªãå§çž®ã¢ã«ãŽãªãºã ãçè§£ãããã¹ããã©ã¯ãã£ã¹ãå®è£ ããç¶ç¶çã«ãããã¡ã€ãªã³ã°ãšã¢ãããŒãã®æ¹è¯ãè¡ãããšã§ãéçºè ã¯ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ã¢ã¯ã»ã¹å¯èœãªæ²¡å ¥åã§å¿çæ§ã®é«ã3Däœéšãäœæã§ããŸããWebæè¡ãé²åããã«ã€ããŠããã¯ã¹ãã£å§çž®ãåãå ¥ããããšã¯ããã€ãšã³ãã®ãã¹ã¯ããããããªãœãŒã¹ã«å¶çŽã®ããã¢ãã€ã«ããã€ã¹ãŸã§ãå¹ åºãããã€ã¹ã§æé«ã®ãŠãŒã¶ãŒäœéšãæäŸããããã«äžå¯æ¬ ã§ããæ£ããéžæãè¡ããæé©åãåªå ããããšã§ãWebéçºè ã¯èªãã®åµé ç©ãäžçäžã®ãŠãŒã¶ãŒã«é¿ãæž¡ããããæ²¡å ¥æãããå¹ççãªããžã¿ã«äœéšãä¿é²ããããšãä¿èšŒã§ããŸãã