ã«ã¹ã¿ã CSSãã£ã«ã¿ãŒã®äœ¿çšãéå§ããïŒã«ã¹ã¿ã Cã«ã¹ã±ãŒãã¹ã¿ã€ã«ãã£ã«ã¿ãŒãã£ã«ã¿ãŒïŒ
ãšã³ããªãŒ
ã«ã¹ã¿ã CSSãã£ã«ã¿ãŒïŒä»¥éCCSSFïŒïŒä»¥åã¯CSSã·ã§ãŒããŒãšåŒã°ããŠããŸããïŒã¯ãHTMLææžã®èŠçŽ ã«æäœãã®èŠèŠå¹æãèª²ãæ°ãããã©ãŠã¶ãŒæ©èœã§ãã
ã«ã¹ã¿ã ãã£ã«ã¿ãŒã¯ã
ãã£ã«ã¿ãŒå¹æ1.0仿§ã®äžéšã§ãã ãããã¯ããã©ãŠã¶ã«ãã§ã«çµã¿èŸŒãŸããŠããäžè¬çãªCSSãã£ã«ã¿ãŒïŒãŒãããã»ãã¢ãã³ã³ãã©ã¹ããã°ã¬ãŒã¹ã±ãŒã«ïŒãå®çŸ©ãããã®ä»æ§ã®å¥ã®éšåãè£å®ããŸãã
ã€ã³ã©ã€ã³CSSãã£ã«ã¿ãŒ
çµã¿èŸŒã¿ã®CSSãã£ã«ã¿ãŒã¯ãç»åãšãã£ã¿ãŒã®ãã£ã«ã¿ãŒãšåæ§ã®æ©èœãæäŸã
ãŸã ã
ãã©ã¡ãŒã¿ãŒãå¶åŸ¡ããããšã®ã¿ãå¯èœãªãäºåå®çŸ©ããããŠããã¿ã¹å¹æã®ã»ããããã
ãŸã ã
ããšãã°ã次ã®ç»åã¯ã°ã¬ãŒã¹ã±ãŒã«ã«å€æããããŒãããé©çšãããŸããã


ïŒåçãã¯ãªãã¯ããŠ
èªåã§
確èªã§ããŸããçµã¿èŸŒã¿ã®CSSãã£ã«ã¿ãŒã¯Chromeã®å®å®ããŒãžã§ã³ã§åäœããã¯ãã§ãïŒ
ã«ã¹ã¿ã CSSãã£ã«ã¿ãŒ
äžæ¹ãã«ã¹ã¿ã ãã£ã«ã¿ãŒã䜿çšãããšããšãã§ã¯ãèªäœã®ãã©ã¡ãŒã¿ãŒãå¶åŸ¡ã§ããã ãã§ãªãã
ã·ã§ãŒããŒã䜿çšããŠé©çšããããšãã§ã¯ãã®æ¬è³ªã決å®ã§ããããŸã£ããæ°ããã¿ã€ãã®ãšãã§ã¯ããäœæã§ããŸãã
ããšãã°ãããã¥ã¡ã³ãã«åã蟌ãŸãããã®ãããã¯ãå®éã®ãã¯ã¹ãã£ä»ãã®çäœã«å€æãããŸããã


ïŒåçãã¯ãªãã¯ããŠ
èªåã§
確èªã§ããŸãã詳现ã«ã€ããŠã¯ã
CSSãã£ã«ã¿ãŒã
æ©èœãããæ¹æ³ãåç
§ããŠãã ããïŒ
ãã«ãã€ã³ãã£ã«ã¿ãŒã¯ãã«ã¹ã¿ã ãã£ã«ã¿ãŒã«ã¯ã¢ã¯ã»ã¹ã§ããªãæ©èœã«ã¢ã¯ã»ã¹ã§ããŸãã ãã©ãŠã¶ã®äœæè
ãåœåèããŠãã以äžã®ããšãéæã§ããŸãã
æãé¡èãªãã«ãã€ã³ãã£ã«ã¿ãŒã¯ãæå®ãããDOMã³ã³ãã³ããããã¯ã»ã«ãèªã¿åãããšãã§ããŸããã€ãŸãããŒãããªã©ãè¡ãããšãã§ããŸãïŒ
ã«ã¹ã¿ã ãã£ã«ã¿ãŒã®
å¶éã»ã¯ã·ã§ã³ãåç
§ ïŒã
ã·ã§ãŒããŒãšã¯äœã§ããïŒ
ã«ã¹ã¿ã ãã£ã«ã¿ãŒå¹æã¯ãã·ã§ãŒããŒãšåŒã°ããå°ããªããã°ã©ã ã«ãã£ãŠèšå®ãããŸãã
ã·ã§ãŒããŒã¯ãã°ã©ãã£ãã¯èŠçŽ ã®3D圢ç¶ãšå€èŠ³ãæ±ºå®ããŸãïŒã·ã§ãŒããŒã¯
ããªãŽã³ã°ãªããã§åäœã
ãŸã ïŒã
ã·ã§ãŒããŒã¯ããããªã«ãŒãã®ããŒããŠã§ã¢ã§çŽæ¥åäœããŸãã 倧éã®ããŒã¿ã䞊ååŠçã§ãããããéåžžã«é«éã«åŠçã§ããŸãããCPUã§å®è¡ãããããã°ã©ã ã®äžè¬çãªãµã€ã¯ã«ã«æ¯ã¹ãŠåé·ã«ãªãããšããããããŸãã
CCSSFã¯ãã·ã§ãŒããŒãèšè¿°ããããã®èšèªãšããŠ
GLSLã䜿çšããŸãã
ã·ã§ãŒããŒèšèªïŒ
OpenGL ã
OpenGL ES ã
WebGL ã
DirectX ïŒã䜿çšããã°ã©ãã£ãã¯
ã·ã§ãŒããŒã«ç²ŸéããŠããå Žåããã¹ãŠã䌌ãŠããŸã-ã«ã¹ã¿ã CSSãã£ã«ã¿ãŒã§äœ¿çšãããã·ã§ãŒããŒã¯åãããã«æ©èœããŸãã
ã·ã§ãŒããŒã®çš®é¡
CCSSFã§äœ¿çšãããã·ã§ãŒããŒã«ã¯ãé ç¹ã·ã§ãŒããŒïŒé ç¹ã·ã§ãŒããŒïŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒïŒãã©ã°ã¡ã³ãã·ã§ãŒããŒïŒïŒãã¯ã»ã«ã·ã§ãŒããŒãšãåŒã°ããŸãïŒã®2çš®é¡ããããŸãã
é ç¹ã·ã§ãŒããŒã¯ãã©ãã«ãããã瀺ããŸãã ãããã䜿çšãããšã3D空éã§ã°ãªããã®é ç¹ãç§»åãããªããžã§ã¯ããå€åœ¢ããã³åé
眮ã§ããŸãã
ãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ããªããžã§ã¯ãã®è¡šé¢ãã©ã®ããã«èŠãããã瀺ããŸãã ãªããžã§ã¯ããæç»ããããæ¢åã®ãã¯ã»ã«ã®æå±ããªããžã§ã¯ãã®å€èгã«å€æŽãããã§ããŸãã
äžè¬ã«ãæå¹ãªGPUããã°ã©ã ãäœæã§ããããã«ããã«ã¯ãäž¡æ¹ã®ã·ã§ãŒããŒãå¿
èŠã§ãã ãã ããã«ã¹ã¿ã CSSãã£ã«ã¿ãŒã®å Žåããããã®ã¿ã€ãã®ãããã1ã€ã®ã¿ãå¿
èŠã§ãããæ¬ èœããŠãããã©ãŠã¶ãŒã®å Žåã
ããã©ã«ãã®ãã¹ã¹ã«ãŒã·ã§ãŒããŒã䜿çšã
ãŸã ã
ã«ã¹ã¿ã CSSãã£ã«ã¿ãŒã¯ã©ã®ããã«æ©èœããŸããïŒ
æè¿ã®ãã©ãŠã¶èªäœã¯ãã°ã©ãã£ãã¯ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®äœ¿çšã䜿çšããŠããŸãã
HTMLããŒãžã¯ã
DOMèŠçŽ ã«å¯Ÿå¿ãããã¯ã¹ãã£ä»ãåè§åœ¢ã®ã³ã¬ã¯ã·ã§ã³ãšããŠãã©ãŠã¶ã«ãã£ãŠã¬ã³ããªã³ã°ãããŸãã
ã«ã¹ã¿ã CSSãã£ã«ã¿ãŒã䜿çšãããšããã©ãŠã¶ãŒã§ã¬ã³ããªã³ã°ãããæ
å ±ã®æµãã«ããã¿ã€ããç»é¢ã«æç»ãããåã«ãããã®é·æ¹åœ¢ã®åœ¢ç¶ãšå€èгã倿Žã§ããŸãã
ããã¯ã
CSS 3D倿ãã©ã®ããã«æ©èœãããã«äŒŒãŠããŸãããæå®ãããæ©èœãåãããã©ã¡ãŒã¿ãŒã䜿çšãã代ããã«ãDOMã³ã³ãã³ããåŠçããããã®ç¬èªã®ã³ãŒããå®è¡ã§ããŸãã
ã³ã³ãã³ãã°ãªãã
CCSSFã䜿çšããåDOMèŠçŽ ã¯
ããŠãŒã¶ãŒãå®çŸ©ããã¢ã¶ã€ã¯ãæã€
äžè§åœ¢ã®ã°ãªããã«å€æ
ãããŸã ã
<imgsr= "
cs317217.userapi.com/v317217705/37a5/ghtCCVl9SeM.jpg " alt = "image" />
é衚瀺ã®ããã¹ããæ³šæ 翻蚳è
-svgãªããžã§ã¯ããæ¿å
¥ããæ¹æ³ãèŠã€ãããªãã£ããããã¹ã¯ãªãŒã³ã·ã§ãããæ®ããŸãã
ããã©ã«ãã§ã¯ãã°ãªããã«ã¯2ã€ã®äžè§åœ¢ã®ã¿ãå«ãŸããŠããŸãïŒåè§åœ¢ãäœæããããã«æäœéå¿
èŠãªäžè§åœ¢ïŒã
ãã®ã°ãªããã¯ãDOMèŠçŽ ïŒéåžžã¯ç»é¢ã«æç»ãããïŒã®ã³ã³ãã³ãçšã«äœæããããã¯ã¹ãã£ãååŸããã«ã¹ã¿ã ã·ã§ãŒããŒãé©çšãããŸãã
ã°ãªããæ¥ç¶
äžè§åœ¢ã®ã¡ãã·ã¥ã¯2ã€ã®æ¹æ³ã§äœæã§ããŸãïŒCSSããå¶åŸ¡ïŒïŒ
- æ·»ä»ãããäžè§åœ¢
- åé¢ãããäžè§åœ¢
äžè§åœ¢ã
ã¢ã¿ãããããã°ãªããã¯
çµåããããªããžã§ã¯ãã®1ã€ã§ããã飿¥ããäžè§åœ¢ã«ã¯å
±éã®é ç¹ããããŸãã é ç¹ãç§»åãããšãããã«é¢é£ä»ããããŠãããã¹ãŠã®äžè§åœ¢ãå€åœ¢ããŸãïŒåžã®ã·ãŒãã®ããã«ïŒã ãã®ãªãã·ã§ã³ã¯ããã©ã«ãã§äœ¿çšãããŸãã
åé¢ãããäžè§åœ¢ã®ã¡ãã·ã¥
㯠ãå€ãã®å¥ã
ã®äžè§åœ¢ããçµã¿ç«ãŠãããŸãã åé ç¹ã¯1ã€ã®äžè§åœ¢ã«ã®ã¿å±ããŸãã ã°ãªãããåå¥ã®ã³ã³ããŒãã³ãã«åå²ã§ããŸãã ã¡ãã·ã¥ã«ã¯ç©Žãå«ããããšããé ç¹ã·ã§ãŒããŒã«å®å
šã«æ¹é ããããšãã§ããŸãã
ã°ãªããã¢ã¶ã€ã¯ãšæ¥ç¶ã¯ããã¹ãŠã®CSSé·ç§»ã§åããŸãŸã§ããå¿
èŠããããŸãã
ã·ã§ãŒããŒå
¥å
é ç¹ã·ã§ãŒããŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ã次ã®3ã€ã®ã¿ã€ãã®ãã©ã¡ãŒã¿ãŒãåãå
¥ããããšãã§ããŸãã
- ãŠããã©ãŒã
- 屿§
- éã ïŒå€åïŒ
ã·ã§ã€ãã¯ãã°ãªããã®ãã¹ãŠã®é ç¹ãšãã¯ã»ã«ïŒãªããžã§ã¯ãã®è²ãªã©ïŒã«å¯ŸããŠåäžã®å€ãæã€ãã©ã¡ãŒã¿ãŒã§ãã
屿§ã¯é ç¹ã®åã
ã®ãã©ã¡ãŒã¿ãŒã§ãããåã¡ãã·ã¥ã®é ç¹ã¯å
屿§ã«å¯ŸããŠç¬èªã®å€ãååŸã
ãŸã ïŒããšãã°ãé ç¹ã®äœçœ®ïŒã
å·®åã¯ãé ç¹ãããã©ã°ã¡ã³ãã«æž¡ããããã©ã¡ãŒã¿ãŒã§ãã ãããã¯äžè§åœ¢ã®åé ç¹ã«ç€ºãããäžè§åœ¢å
ã®ãã€ã³ãã®å€ã¯GPUãè£éããŸãïŒããšãã°ãã©ã€ãã£ã³ã°ïŒã
ãã£ã«ã¿ãŒå¹æã®ä»æ§ã§ã¯ãç°ãªãã¿ã€ãã®å
¥åïŒ
texturesã䜿çšã§ã
ãŸã ã ãã ãããããã¯ãŸã å®è£
ãããŠããŸããïŒãããŠããããã䜿çšããããšãããšãã·ã§ãŒããŒãéãã«å£ããŸãïŒã
ãã©ãŠã¶ã¯ãã«ã¹ã¿ã CSSãã£ã«ã¿ãŒãé©çšããããã¹ãŠã®èŠçŽ ã«å¯ŸããŠäœæããã³åæåã
ããããã©ã«ãã®
çµã¿èŸŒã¿ãã©ã¡ãŒã¿ãŒãæäŸ
ããŸã ã
attribute vec4 a_position; attribute vec2 a_texCoord; attribute vec2 a_meshCoord; attribute vec3 a_triangleCoord;
çµã¿èŸŒã¿ã®
屿§ã䜿çšãããšãã°ãªããå
ã®åã
ã®é ç¹ãšäžè§åœ¢ãèå¥ããã³æ€çŽ¢ã§ããŸãã
uniform mat4 u_projectionMatrix; uniform vec2 u_textureSize; uniform vec4 u_meshBox; uniform vec2 u_tileSize; uniform vec2 u_meshSize;
åã蟌ã¿
ãã©ãŒã ã¯ãã°ãªããå
šäœã«å
±éã®DOMèŠçŽ ããŒã¿ã«é¢ããæ
å ±
ãæäŸããŸãã
varying vec2 v_texCoord;
çµã¿èŸŒã¿ã®
éãã¯ããšãã§ã¯ããããã©ã«ãã®ã·ã§ãŒããŒã䜿çšããå Žåã®ãã¯ã¹ãã£åº§æšãæäŸããŸãã
ãããã®ãã©ã¡ãŒã¿ãŒã®æ£ç¢ºãªå®çŸ©ã¯ããã£ã«ã¿ãŒå¹æã®å°éåéïŒ
屿§ ã
åœ¢ç¶ ã
çžéç¹ ïŒã«èšèŒãããŠããŸãã
泚æ ïŒçŸæç¹ã§ã¯ããã®å°éåéã®ãã¹ãŠã®çµã¿èŸŒã¿ãã©ã¡ãŒã¿ãŒãå®è£
ãããŠããããã§ã¯ãããŸããã
ããšãã°ã
u_textureSizeããã³
u_meshSize ãã©ãŒã ã æ¬ èœããŠããŸãã CSSã§åå¥ã«å®çŸ©ããããšã«ããããã®åé¡ã解決ã§ããŸãã
ãŸãã
v_texCoordã® éã ã¯ãŸã
æ©èœããªãããã
ç¬èªã® éããäœæããŠããã¯ã¹ãã£ã®åº§æšã
a_texCoord 屿§ããé ç¹ã·ã§ãŒããŒã«è»¢éããå¿
èŠããããŸãã
ãã®ãšãã£ã·ã§ã³ã®
WebKitããã¹ã¿ãŒãåé¡ã§ã«ã¹ã¿ã CSSãã£ã«ã¿ãŒã®å®è£
ã®é²æç¶æ³ã確èªã§ããŸãã
çµã¿èŸŒã¿ã®ãã©ã¡ãŒã¿ãŒã«å ããŠã
CSSã¹ã¿ã€ã«ã䜿çšããŠå¹æã®
ãã©ãŒã ãèšè¿°ããããšãã§ã
ãŸã ã
.shaded { -webkit-filter: custom(url(distort.vs) mix(url(tint.fs) normal source-atop), distortAmount 0.5, lightVector 1.0 1.0 0.0); }
// ( ) ... uniform float distortAmount; uniform vec3 lightVector; ...
ããã«ãããå€éšãããšãã§ã¯ããå¶åŸ¡ã§ããŸãã ç¹ã«ã
CSS transitionsã䜿çšãããšãCSSã§èª¬æãããŠãã
ãã©ãŒã ã®å€ãè£éãããŸãã
泚æ ïŒ
ãã©ãŒã ãš
å·®åã«äœ¿çšã§ããã¹ãããã®æ°
ã¯å¶éãããŠãããç¹å®ã®GPUã«äŸåããŸãïŒ å±æ§ã«ãåãããšãåœãŠã¯ãŸããŸãã ãCSSãã£ã«ã¿ãŒã§ã¯æ©èœããŸããïŒã
ããã§ ãWebGLã®ã·ã¹ãã ã§äœ¿çšå¯èœãªã·ã§ãŒããŒãã©ã¡ãŒã¿ãŒã®æ°ã確èªã§ããŸãïŒç€ºãããŠããæ°å€ã¯CCSSFã§ãåæ§ã§ããå¿
èŠããããŸããäžéšã®ã¹ãããã¯çµã¿èŸŒã¿ãã©ã¡ãŒã¿ãŒã«å²ãåœãŠãããŠããŸãïŒã
Webãµã€ãã§ã«ã¹ã¿ã CSSãã£ã«ã¿ãŒã䜿çšããæ¹æ³
CCSSFã¯ã styleãä»ããŠä»ã®CSSã¹ã¿ã€ã«ãšåãæ¹æ³ã§é©çšãããŸãã æ¬¡ã®ããã«ãªããŸãã
<style> .shader { -webkit-filter: custom(url(shaders/crumple.vs) mix(url(shaders/crumple.fs) normal source-atop), 50 50, amount 0, strength 0.2, lightIntensity 1.05); } </style>
ãŸãã¯ããã©ã°ã¡ã³ãã·ã§ãŒããŒã®ã¿ã䜿çšããŠããå ŽåïŒ
<style> .shader { -webkit-filter: custom(none mix(url(shaders/tint.fs) normal source-atop), amount 0); } </style>
åæ§ã«ããã©ã°ã¡ã³ãã·ã§ãŒããŒã®ä»£ããã«noneã䜿çšãããšå€±æããŸãïŒä»ã®ãšããïŒã ãã®ç¶æ³ã§ã®è§£æ±ºçã¯ã空ã®ãã©ã°ã¡ã³ãã·ã§ãŒããŒã眮ãæããããšã§ãã
ãã©ãŠã¶ã«GLSLã·ã§ãŒããŒã®ãœãŒã¹ãžã®ãªã³ã¯ãäžããCSSã¹ã¿ã€ã«ãä»ããŠãã©ã¡ãŒã¿ãŒãæå®ããŸãã ãã©ãŠã¶ã¯ã·ã§ãŒããŒããã€ããªã«ã³ã³ãã€ã«ããHTMLã³ã³ãã³ãã«é©çšããŸãã
ã·ã§ãŒããŒãæ¢ã«ããå Žåã¯ãã·ã§ãŒããŒãHTMLã«é©çšããã®ã¯ç°¡åã§ããéåžžã®CSSã¹ã¿ã€ã«ã®ããã«ã·ã§ãŒããŒãæäœããã ãã§ãã
<div class="shader">
ããšãã°ã CSSãã©ã³ãžã·ã§ã³ãšã«ã¹ã¿ã CSSãã£ã«ã¿ãŒã䜿çšããŠãããŒãžèŠçŽ ã«ã«ãŒãœã«ãåããããšãã«å¹æãåçã«å€æŽã§ããŸãã
-webkit-transition: -webkit-filter ease-in-out 1s;
CCSSFãã©ã¡ãŒã¿ãŒã¯ãã€ã³ã©ã€ã³CSSããããã£ãšåãæ¹æ³ã§è£éãããŸãã
CCSSFãæ©èœãããã«ã¯ïŒ
泚æ ïŒãã®ãã¯ãããžãŒã¯éåžžã«æ°ããã倧ãŸãã«å®è£
ã§ããŸãã 詳现ã倿Žãããããäžéšã®æ©èœãåäœããªãã£ãããå®è£
ã«ãã°ãããå¯èœæ§ããããŸãã
ãã®æçš¿ã¯2012幎9æã®ç¶æ³ãåæ ããŠããŸãã ãã以éã説æãããšããã«æ©èœããªãå Žåã¯ãã°ãŒã°ã«ãæ£ç¢ºãªæ§æãšåäœãèªèããã®ã«åœ¹ç«ã¡ãŸãã
çŸåšãã«ã¹ã¿ã CSSãã£ã«ã¿ãŒã¯Chrome Canaryã®çŸåšã®ãã«ãã§æ©èœããŸãïŒã¬ã³ãŒãäœææã®æ£ç¢ºãªããŒãžã§ã³ã¯24.0.1278.0ã§ãïŒã
ããããChrome CanaryãããŠã³ããŒãããŸãã

tools.google.com/dlpage/chromesxs
CCSSFã¯WindowsãšOSXã§åäœããã¯ãã§ãïŒWindows 7ã䜿çšããŠããŸãïŒã
OSãšãã©ãŠã¶ãŒããããããµããŒãããŠããå Žåã§ãããã¹ãŠãå€ããŸãã¯åŒ±ãGPUãŸãã¯äžé©åãªãã©ã€ããŒã§å®è¡ãããå¯èœæ§ããããŸãïŒã·ã¹ãã èŠä»¶ã¯ããã«ç€ºãããŠãããã®ãšã»ãŒåãã§ã-WebGLäºææ§ãã§ã㯠ïŒ
ã«ã¹ã¿ã CSSãã£ã«ã¿ãŒã¯ããã©ã«ãã§ã¯æå¹ã«ãªã£ãŠããªããããæ¬¡ã®ããŒã䜿çšããŠChromeãã³ã³ãœãŒã«ããå®è¡ããå¿
èŠããããŸãã
chrome --enable-css-shaders
Windowsäžã®Chromeã«å«ãŸããŠããCSSã·ã§ãŒããŒãååŸããç°¡åãªæ¹æ³ã¯ãChrome Canaryãžã®ã·ã§ãŒãã«ãããäœæããã¿ãŒã²ãããã£ãŒã«ãã«--enable-css-shadersãã©ã¡ãŒã¿ãŒã远å ããããšã§ãã
å¥ã®æ¹æ³ã¯ãäžèšã®ã³ãã³ãã§ããããã¡ã€ã«ãäœæããããšã§ãã
Chrome Canaryã®æ°ããããŒãžã§ã³ã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã®ç¹å¥ãªã¿ããflagsãã«ãç¹å¥ãªãã©ã°ãããããŸãïŒãEnable CSS Shadersããæ€çŽ¢ïŒã
chrome://flags/
CCSSFãæ©èœããããšã確èªããæ¹æ³ã¯ïŒ
ãã®äŸãåç
§ããŠãã ããã
çç¶ã®ææãèŠããšãããã§ãšãããããã¯æ©èœããŸã;ïŒã

é·æ¹åœ¢ã®åçãã衚瀺ãããªãå Žåã¯ãäœãåé¡ããããŸãã; S.

ããã€ãã®äŸã¯ã€ã³ã¿ãŒãããäžã§ã©ã³ãã ã«çºèŠããããã®ã§ãããæéãçµã€ãšå£ããããšãããããšã«æ³šæããŠãã ããã ããšãã°ã 2012幎5æä»¥éã®åæã®Chromiumã«ã¹ã¿ã ãã«ãã§æ©èœãããšãã§ã¯ãã¯ãææ°ã®Chrome Canaryã§ã¯æ©ââèœããŸããã
泚æ ïŒäœããã®çç±ã§ãå®è£
ã¯å®å®ããŠããŸããã ããæç¹ã§CCSSFãæ©èœããå¥ã®æç¹ã§ãåãããŒãžã§ã®ããŒãžã®ãªããŒããŸãã¯åšæçãªç§»è¡äžã§ãã£ãŠããCCSSFã¯ãã§ã«å£ããŠããå¯èœæ§ããããŸãã
ãã®ãããªå ŽåïŒ
- åèªã¿èŸŒã¿ããŒãž
- ã¿ããéããŠãæ°ããã¿ãã§ããŒãžãéããŸã
- ãã©ãŠã¶ãåèµ·åããŸã
1ã€ã®ã¿ãã§å£ããã·ã§ãŒããŒã¯ãä»ã®ãã¹ãŠã®ã¿ãã®ã·ã§ãŒããŒã殺ãããšãã§ããŸãïŒããŒãžããªããŒãããŠãã·ã§ãŒããŒã¯å£ãããŸãŸã«ãªããŸãïŒã
æåã®ããŒãžã®èªã¿èŸŒã¿äžã«ãã·ã§ãŒããŒã¯éšåçã«ã¬ã³ããªã³ã°ãããDOMèŠçŽ ã§ãæ©èœããŸãã ãã®å Žåãã¿ããéããŠå床ããŒãžãéããšããªããŒãã¯åœ¹ã«ç«ããªããªããŸãã
ã«ã¹ã¿ã ãã£ã«ã¿ãŒã®å¶é
ã³ã³ãã³ãã¢ã¯ã»ã¹
CCSSFã§äœ¿çšãããã·ã§ãŒããŒã¯ãDOMã³ã³ãã³ãã®ãã¯ã¹ãã£ãã¯ã»ã«ãèªã¿åãããšãã§ãããç»é¢ã«ãã¯ã»ã«ãçŽæ¥æç»ããããšãã§ããŸãã ã
ãããã®å¶éã¯ããµã€ãã«çµã¿èŸŒãŸããäžæ£ãªãµãŒãããŒãã£ã·ã§ãŒããŒã䜿çšããŠãµã€ãã®ã³ã³ãã³ããèªã¿åãããšãã§ããå Žåã®ã¿ã€ãã³ã°æ»æã«å¯Ÿããåå¿ãšããŠçŸããŸããïŒãã¯ã»ã«ã«ã©ãŒãœãŒã¹ã«å¿ããŠãç°ãªãã·ã§ãŒããŒã³ãŒãã䜿çšãããŸããïŒã
DOMèŠçŽ ã®ãã¯ã»ã«ãæäœã§ããå¯äžã®æ¹æ³ã¯ã次ã®ãªãã·ã§ã³ã®çµã¿èŸŒã¿ãã©ã°ã¡ã³ãã·ã§ãŒããŒcss_ColorMatrix ã css_MixColorã䜿çšããŠãå
ã®è²ããèšç®ãããè²ã«åãæ¿ããããšã§ãã

èŠå ïŒä»æ§ã§ã¯ã gl_FragColorã䜿çšããŠåè²ã®å€ãäœæããããšãã§ããŸãã
ãããŸã§ã®ãšãããããã¯æ©èœããŠããŸããã
WebGLã¯å¥ã®æ¹æ³ã§ãã®åé¡ã解決ããŸãããã¯ãªãŒã³ãã³ã³ãã³ã ïŒåããµãŒããŒäžã§äœæããããããµãŒãããŒãã£ãµãŒããŒã®ã¯ãã¹ãã¡ã€ã³ã¢ã¯ã»ã¹ã«ãã£ãŠçŽæ¥èš±å¯ãããïŒ ãžã®ã¢ã¯ã»ã¹ã®ã¿ãæäŸããŸã ã
ã·ã§ãŒããŒã¢ãããŒãã®ãã€ãã¹é¢ã¯ãå€ãã®è峿·±ãã¿ã€ãã®ã¢ããªã±ãŒã·ã§ã³ãšäºææ§ããªãããšã§ãããã©ã¹é¢ã¯ãCSSã·ã§ãŒããŒãä»»æã®ã³ã³ãã³ãã«é©çšã§ããããšã§ãã
ã°ãªãããµã€ãº
å°ãªããšãçŸåšã®å®è£
ã§ã¯ããã1ã€ã®å¶éã¯ãã¢ã¶ã€ã¯ã°ãªããããšã®äžè§åœ¢ã®åºå®æ°ã§ãã
20,000以äžã®äžè§åœ¢ã®ã°ãªãããäœæããããšã¯ã§ããŸããã ãããã£ãŠãé ç¹ã®æ°ã65.536ã«å¶éããŠã16ãããæ°ã®ã€ã³ããã¯ã¹ä»ãäžè§åœ¢ã䜿çšããŠã¬ã³ããªã³ã°ããããšããå§ãããŸãã
ç¬èªã®CSS广ãäœæããæ¹æ³ã¯ïŒ
å¿
èŠãªã®ã¯ãã©ãŠã¶ãšããã¹ããšãã£ã¿ã ãã§ãã CCSSFã§äœ¿çšãããã·ã§ãŒããŒã¯ãã¬ãŒã³ããã¹ããã¡ã€ã«ã§ãã
ã¯ãŒã¯ãããŒã¯ãHTML + CSSã®å Žåãšåãã§ãã倿Žãå ãããã©ãŠã¶ãŒã§ããŒãžãæŽæ°ãã衚瀺ããããã©ããã確èªããŸãã
CSS FilterLabãšåŒã°ããAdobeã®ããŒã«ãããããšãã§ã¯ããã©ã¡ãŒã¿ã®ç·šéãç°¡åã«ããŸãã
泚æ ïŒã·ã§ãŒããŒããã€ããªã«ã³ã³ãã€ã«ããã®ã¯æ¯èŒçé
ãæäœã§ãã å€ãã®ã·ã§ãŒããŒãããå ŽåãããŒãžã®èªã¿èŸŒã¿ãèããé
ããªãå¯èœæ§ããããŸãã
Chromeã®WebGLã§ã¯ãæ¢ã«äœ¿çšãããŠããã·ã§ãŒããŒãã€ããªã®ãã£ãã·ã¥ãå®è£
ãããŠãããããã圹ç«ã¡ãŸãã
ã«ã¹ã¿ã CSSãã£ã«ã¿ãŒã§äœ¿çšãããã·ã§ãŒããŒã¯ã©ã®ãããªãã®ã§ããïŒ
ã·ã³ãã«ãªé ç¹ã·ã§ãŒããŒã¯æ¬¡ã®ããã«ãªããŸãã
precision mediump float; attribute vec4 a_position; uniform mat4 u_projectionMatrix; void main() { gl_Position = u_projectionMatrix * a_position; }
ã·ã³ãã«ãªãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯æ¬¡ã®ããã«ãªããŸãã
precision mediump float; void main() { float r = 1.0; float g = 1.0; float b = 1.0; float a = 1.0; css_ColorMatrix = mat4( r, 0.0, 0.0, 0.0, 0.0, g, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, a ); }
粟床ã®å
¥åã¯ãã¹ã¯ãããOpenGLã«ã¯åœ±é¿ããŸããããOpenGL ESã䜿çšããã¢ãã€ã«ããã€ã¹ã§ã¯æ©èœããŸãã ãã ããçŸåšã®å®è£
ãæ©èœããããã«ã¯ãããããæå®ããå¿
èŠããããŸãã
ã·ã§ãŒããŒã¯ã次ã®ããã«HTMLã³ã³ãã³ãã«é©çšãããŸãã
<style> .shader { -webkit-filter: custom(url(simple.vs) mix(url(simple.fs) normal source-atop), 1 1) } </style> <body> <div class="shader"> Hello world! </div> <body>
ããã¯ã2ã€ã®äžè§åœ¢ïŒ1åx 1è¡ïŒãæ¥ç¶ãããåçŽãªã¢ã¶ã€ã¯ã°ãªããã«é©çšããããã©ã°ã¡ã³ãã·ã§ãŒããŒãšé ç¹ã·ã§ãŒããŒã®äž¡æ¹ã䜿çšããæå°éã®CSSã¹ã¿ã€ã«ã§ãã
ã«ã¹ã¿ã 广ãäœæããæ¹æ³ã¯ïŒ
ããã§ã ããã§äœ¿çšãããã®ãšåæ§ã«ãçé¢å¹æã®ãããã«åçŽåãããããŒãžã§ã³ãäœæããæ¹æ³ãèŠãŠã¿ãŸãããã
DOMã³ã³ãã³ããå«ãæ»ãããªãã¯ã¹ãã£ããå§ããŸãïŒæåã®åçïŒã çäœã§å
ã¿èŸŒã¿ãçŽæ¥å
ã§ç
§ãããã3Dãªããžã§ã¯ãã§ãããã®ããã«åœ±ãä»ããŸãïŒ2çªç®ã®åçïŒã


ãã¡ãã®å®éã®äŸãã芧ãã ãã ã
ã¡ãã·ã¥å€åœ¢
ãã¹ãŠã®ã¡ãã·ã¥å€åœ¢ã¯é ç¹ã·ã§ãŒããŒã§çºçããŸãã
æåã«ãé·æ¹åœ¢ã®å¹³é¢ãçäœã®åœ¢ã«ã©ããããæ¹æ³ãèŠã€ãããã®åŸã§åœ±ãé©çšããå¿
èŠããããŸãã
é ç¹äœçœ®ãåçã«åæ£ããã2D空éã«ããåçŽãªé·æ¹åœ¢ã®ã°ãªããããå§ããŸãã ãããã®2Däœçœ®ã3Dçäœã«ãããã³ã°ããå¿
èŠããããŸãã
ãã©ãŠã¶ãŒãæäŸããçµã¿èŸŒã¿a_position 屿§ã䜿çšããŠãå
ã®å¹³é¢ã®é ç¹ã®åº§æšãååŸã§ããŸãã 倿°ã䜿çšããã«ã¯ã倿°ã宣èšããå¿
èŠããããŸãã
attribute vec4 a_position;
ãã®å±æ§ã¯ããŒã«ã«å€æ°ã«èšæ¶ãããåŸã§å€æŽããŸã ïŒ å±æ§ã¯èªã¿åãå°çšã§ããããïŒã
vec4 position = a_position;
ã³ã³ãã¥ãŒã¿ã°ã©ãã£ãã¯ã¹ã®äžè¬çãªæäœã¯ ã2Dãã¯ã¹ãã£åº§æšã䜿çšããŠã°ãªããã®åšãã«é·æ¹åœ¢ã®ç»åãã©ãããããšãã®
href = " en.wikipedia.org/wiki/UV_mapping "> UVãããã³ã°ã«ãããã¯ã¹ãã£ãªã³ã°ã§ãã å¿
èŠãªãã®ãšéåžžã«ãã䌌ãŠããŸãã
ãã©ãŠã¶ã«ãã£ãŠæäŸãããçµã¿èŸŒã¿ã°ãªãã
屿§ã® 1ã€ã¯ãé ç¹ã®ãã¯ã¹ãã£åº§æšãæã€2ã³ã³ããŒãã³ããã¯ãã«
a_texCoordã§ãã
attribute vec2 a_texCoord;
ãã¯ã¹ãã£åº§æšã¯Uããã³VãšåŒã°ããå軞ã«ã€ããŠ
0ã1ã®ç¯å²ã«ãããç»åã®é·ããšé«ãã«æ²¿ã£ãŠã°ãªããã®äžéšããããããŸãã
Uããã³V座æšã«å¯Ÿå¿ããXãYãZ座æšãååŸããã«ã¯ã
çé¢åº§æšç³» ïŒæ¥µåº§æšãšãåŒã°ããŸãïŒãš
çŽäº€åº§æšç³»ã®éã®å€æã䜿çšã
ãŸã ã
x = r * sin( Ξ ) * cos( Ï ) y = r * sin( Ξ ) * sin( Ï ) z = r * cos( Ξ )
çé¢åº§æšç³»ã¯æ¬¡ã®åº§æšã䜿çšããŸãã
- ååŸr
- 倩é ïŒåŸæïŒ Ξ ïŒéé[0 ...Ï]ïŒ
- æ¹äœè§ïŒæ¹äœè§ïŒ Ï ïŒã¹ãã³[0 ...2Ï]ïŒ
ãŠãŒã¶ãŒã«CSS
ãã©ãŒã ã§ååŸãå®çŸ©ãããŸãã
uniform float sphereRadius;
ãããŠãU座æšãšV座æšãæ¹äœè§ãšå€©é ã«ãããã³ã°ããŸãã
vec3 computeSpherePosition( vec2 uv, float r ) { vec3 p; float fi = uv.x * PI * 2.0; float th = uv.y * PI; px = r * sin( th ) * cos( fi ); py = r * sin( th ) * sin( fi ); pz = r * cos( th ); }
vec3 sphere = computeSpherePosition( a_texCoord, sphereRadius );
ããã§ãå
ã®ãã©ããäœçœ®ãšãGLSLã®çµã¿èŸŒã¿é¢æ°ã䜿çšããŠèšç®ããã°ããã®æ°ããçé¢äœçœ®ïŒ2ã€ã®å€éã®ç·åœ¢è£éïŒã®éãç§»åã§ããŸãã
uniform float amount;
ãŠãŒã¶ãŒæäŸã®
ãã©ãŒã ãã©ã¡ãŒã¿ãŒã䜿çšããŠé·ç§»ãå¶åŸ¡ããŸãïŒCSSããã®
ãã©ãŒã ãã©ã¡ãŒã¿ãŒã¯ãCSSé·ç§»ã䜿çšããŠãã©ãŠã¶ãŒã§è£éã§ããŸãïŒã
position.xyz = mix( position.xyz, sphere, amount );
æåŸã«ããã©ãŠã¶ã«ãã£ãŠæäŸããã
gl_Positionã®ãããªãã¯ã¹
圢åŒã«åŸã£ãŠèšç®ãããäœçœ®ã倿ããçµã¿èŸŒã¿GLSL倿°ã«æžã蟌ãããšã«ãããã°ãªããã®é ç¹ã眮ãæããããšãã§ããŸãã
gl_Position = u_projectionMatrix * position;
衚é¢ã·ã§ãŒãã£ã³ã°
ã·ã§ãŒãã£ã³ã°ã®ã«ãŠã³ãã¯ãé ç¹ã·ã§ãŒããŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒãçµã¿åãããŠè¡ãããŸãã
ã·ã§ãŒããŒïŒé ç¹ã·ã§ãŒããŒ
é ç¹ã·ã§ãŒããŒã§ã¯ãåé ç¹ã®ã©ã€ãã£ã³ã°ãèšç®ããããã
å·®åãšããŠãã©ã°ã¡ã³ãã·ã§ãŒããŒã«æž¡ããŸãããã©ã°ã¡ã³ãã·ã§ãŒããŒã§ã¯ãããã䜿çšããŠDOMãã¯ã¹ãã£ã®è²ã倿ŽããŸãã
ã·ã§ãŒãã£ã³ã°ã«ã¯ãåçŽãª
ã©ã³ããŒãæ£ä¹±ã¢ãã«ã䜿çšããŸãã
åå°å
ã¯ãæ³ç·è¡šé¢ãã¯ãã«ãšæ£èŠåãããå
æ¹åãã¯ãã«ã®ã¹ã«ã©ãŒç©ãšèŠãªãããŸãã
åé ç¹ã«ã©ã€ãã®äœçœ®ãš
æ³ç·ãµãŒãã§ã¹ãå¿
èŠã§ãã
ãŠãŒã¶ãŒã¯ãCSSãä»ããŠ
éä¿¡ããã3ã€ã®ã³ã³ããŒãã³ãã®
lightPositionãã¯ãã«
ãã©ãŒã ãšããŠå
æºã®äœçœ®ãå®çŸ©ã§ããŸãã
uniform vec3 lightPosition;
GLSLã«çµã¿èŸŒãŸããŠããnormalize颿°ã䜿çšããŠæ£èŠåããŸãã
vec3 lightPositionNormalized = normalize( lightPosition );
次ã«ãå¹³ãã§çé¢ã®æ³ç·ãèšç®ããå¿
èŠããããŸãã
æ¥ç¶ãããã°ãªãããæäœããäžè§åœ¢ã®ãã¹ãŠã®é ç¹ã«åæã«ã¢ã¯ã»ã¹ããå¿
èŠãããããããµãŒãã§ã¹æ³ç·ã¯éåžžCPUåŽã§èæ
®ãããŸãïŒã·ã§ãŒããŒã¯äžåºŠã«1ã€ã®é ç¹ã®ã¿ã衚瀺ããŸãïŒã
ãã ããããã§ã¯åçŽãªå¹ŸäœåŠç圢ç¶ãæ±ã£ãŠãããããæ³ç·ãåæçã«èšç®ã§ããŸãã
å¹³é¢ã®æ³ç·ã«ã€ããŠã¯ãå°ãããŸãããŠããŸããå¹³é¢ã®æ£ããæ³ç·ã¯ãXYå¹³é¢ã«åçŽãªã¢ãã¿ãŒããåããå¿
èŠããããŸãã
ãããããã®ãããªæ³ç·ã¯ã倿ŽãããŠããªãDOMèŠçŽ ãäžããããã€ãã®å Žæã§é°åœ±ä»ããããŸããããã¯ãã·ã§ãŒããŒãã¹ãŒããŒã€ã³ããŒãºãããŠããªãæ®ãã®ããŒãžèŠçŽ ã®èæ¯ã«å¯ŸããŠäžèªç¶ã§ãã
ãããã£ãŠãå
æºã«åãããããã¯ãã«ã衚é¢ã®æ³ç·ãšããŠäœ¿çšããŸãã
vec3 planeNormal = lightPositionNormalized;
ããã«ãããå€åœ¢ããŠããªãèŠçŽ ãåžžã«å®å
šã«ç
§ããããšãã§ããŸãã
çã®æ³ç·ã«ã¯ãåçŽãªåæåŒã䜿çšããŸãã 衚é¢äžã®çã®æ³ç·ã¯ãçã®äžå¿ãã衚é¢ãŸã§ã®æ£èŠåããããã¯ãã«ã§ãã
vec3 sphereNormal = normalize( position.xyz );
é·ç§»ç¶æ
ã«é©åãªæ³ç·ãååŸããã«ã¯ãæ³ç·ããæ³ç·ãçæ³ç·ã«ç§»åãããã®é·ç§»ãã¯ãã«ãæ£èŠåããŸãã
vec3 normal = normalize( mix( planeNormal, sphereNormal, amount ) );
æåŸã«ãGLSLã«çµã¿èŸŒãŸãã
ããã颿°ã䜿çšããŠãã©ã³ããŒãã®åŒã«åŸã£ãŠã«ãã¬ããžãèšç®ãã
æå€§ã®åŒã§è² ã®å€ãä¿®æ£ã§ããŸãã
float light = max( dot( normal, lightPositionNormalized ), 0.0 );
ãã¯ãã«ã·ã§ãŒããŒã®æåŸã®ã¢ã¯ã·ã§ã³ã«ããã
å·®ãéããŠå
匷床ããã©ã°ã¡ã³ãã·ã§ãŒããŒã«è»¢éã
ãŸã ã
varying float v_light;
v_light = light;
ã·ã§ãŒããŒïŒãã©ã°ã¡ã³ãã·ã§ãŒããŒ
ãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯éåžžã«ã·ã³ãã«ã§ãéããã®ã¯ãã¹ãŠé ç¹ã·ã§ãŒããŒã§ãã¹ã¿ãŒãããŸããã
å·®ããå
匷床ãååŸã
ãŸã ã
varying float v_light;
ãããŠãããã䜿çšããŠè²ä¿æ°ãå€èª¿ããŸãïŒéæåºŠã¯å€æŽããŸããïŒã
float r, g, b; r = g = b = v_light;
ãããŠããããã䜿çšããŠ
css_ColorMatrixé·ç§»
è¡åãååŸããŸãã
css_ColorMatrix = mat4( r, 0.0, 0.0, 0.0, 0.0, g, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, 1.0 );
ãã®å Žåããããšåçã®è²ãååŸããŸãã
gl_FragColor = vec4( r, g, b, 1.0 ) * sourceColor;
æçµçãªé ç¹ã·ã§ãŒããŒ
ããŠã³ããŒãããé衚瀺ã®ããã¹ã粟å¯ããã£ã¢ã ãããŒã;
//ã€ã³ã©ã€ã³å±æ§
屿§vec4 a_position;
屿§vec2 a_texCoord;
//ã€ã³ã©ã€ã³ãã©ãŒã
åäžãªmat4 u_projectionMatrix;
// CSSãä»ããŠéä¿¡ããããã©ãŒã
åäžãªãããŒãé;
åäžãããŒãsphereRadius;
åäžãªvec3 lightPosition;
//éã
å¯å€ãããŒãv_light;
//宿°
const float PI = 3.1415;
//ããŒã¹ãã¯ãã£ããããªãã¯ã¹ãäœæããŸã
vec3 computeSpherePositionïŒvec2 uvãfloat rïŒ{
vec3 p;
float fi = uv.x * PI * 2.0;
float th = uv.y * PI;
px = r * sinïŒthïŒ* cosïŒfiïŒ;
py = r * sinïŒthïŒ* sinïŒfiïŒ;
pz = r * cosïŒthïŒ;
return p;
}
//ã¡ã€ã³
void mainïŒïŒ{
vec4 position = a_position;
// UV座æšã䜿çšããŠå¹³é¢ãçã«ãããã³ã°ããŸã
vec3 sphere = computeSpherePositionïŒa_texCoordãsphereRadiusïŒ;
//å¹³é¢ããçäœãžã®ç§»è¡
position.xyz = mixïŒposition.xyzãçãéïŒ;
//é ç¹ã®äœçœ®ãèšå®ããŸã
gl_Position = u_projectionMatrix * position;
//å
ãæ°ããŸã
vec3 lightPositionNormalized = normalizeïŒlightPositionïŒ;
vec3 planeNormal = lightPositionNormalized;
vec3 sphereNormal = normalizeïŒposition.xyzïŒ;
vec3 normal = normalizeïŒmixïŒplaneNormalãsphereNormalãamountïŒïŒ;
float light = maxïŒãããïŒéåžžãlightPositionNormalizedïŒã0.0ïŒ;
//ãšã¯ç°ãªã
v_light = light;
}
æçµãã©ã°ã¡ã³ãã·ã§ãŒããŒ
ããŠã³ããŒãããé衚瀺ã®ããã¹ã粟å¯ããã£ã¢ã ãããŒã;
å¯å€ãããŒãv_light;
void mainïŒïŒ{
float rãgãb;
r = g = b = v_light;
css_ColorMatrix = mat4ïŒrã0.0ã0.0ã0.0ã
0.0ãgã0.0ã0.0ã
0.0ã0.0ãbã0.0ã
0.0ã0.0ã0.0ã1.0ïŒ;
}
CSSã¹ã¿ã€ã«
ããŠã³ããŒãããé衚瀺ã®ããã¹ã.shader {
-webkit-filterïŒcustomïŒurlïŒsphere.vsïŒmixïŒurlïŒsphere.fsïŒnormal source-atopïŒã
16 32ãé1ãsphereRadius 0.35ãlightPosition 0.0 0.0 1.0ïŒ;
-webkit-transitionïŒ-webkit-filter ease-in-out 1s;
}
.shaderïŒãããŒ{
-webkit-filterïŒcustomïŒurlïŒsphere.vsïŒmixïŒurlïŒsphere.fsïŒnormal source-atopïŒã
16 32ãé0ãsphereRadius 0.35ãlightPosition 0.0 0.0 1.0ïŒ;
}
ã«ã¹ã¿ã ãšãã§ã¯ãã®ãã®ä»ã®äŸ
ã·ã§ãŒããŒã®ãããã°
CCSSFã§äœ¿çšãããã·ã§ãŒããŒã®ãããã°ã¯ãé£ããäœæ¥ã§ãã å°ãªããšãçŸæç¹ã§ã¯ãChromeã³ã³ãœãŒã«ã«ãšã©ãŒãã°ã¯ãããŸããïŒWebGLãšã¯ç°ãªããã·ã§ãŒããŒã³ã³ãã€ã«ã®çµæãååŸãããšã©ãŒãŸãã¯ã¿ã€ããã¹ãèŠã€ããããšãã§ããŸãïŒã
Macã§ã¯ãChromeãèµ·åããã³ã³ãœãŒã«ãŠã£ã³ããŠã«
ãšã©ãŒåºåã衚瀺ã§ããŸãããWindowsã§ã¯ã³ã³ãœãŒã«ã«æžã蟌ãŸããŸããã
èãããã解決çã¯ãæè¿
@aerotwistãš
@brendankennyã«ãã£ãŠäœæããã
Sublimeããã¹ããšãã£ã¿ãŒã®
GLã·ã§ãŒããŒæ€èšŒãã©ã°ã€ã³ã䜿çšããããš
ã§ã ã
ã·ã§ãŒããŒãããã¡ã€ãªã³ã°
æ®å¿µãªãããWebGLãšåæ§ã«ãGPUã§äœãèµ·ãããã確èªããæ¹æ³ã¯ãããŸããïŒSåŽã
ããã§ããã·ã§ãŒããŒã®åäœã«é¢ããå
éšæ
å ±ãååŸããããã«äœ¿çšã§ããããªãã¯ãããã€ããããŸãã
ããšãã°ããšãã§ã¯ãã®ã¢ã¯ã·ã§ã³ããã©ã°ã¡ã³ãã·ã§ãŒããŒã«é¢é£ä»ããããŠãããã©ããã確èªããå Žåã¯ãDOMèŠçŽ ã®ãµã€ãºã倿ŽããŠãããå°ããèŠçŽ ã§ããé©åã«æ©èœãããã©ããã確èªããŸãã
ãã«ã¹ã¯ãªãŒã³èŠçŽ ã«é©çšããã广ãé¿ããããã«ããŠãã ããã ããã¯éçç£çã§ãããããŒãžãæ§ç¯ãããšãã«ããã«ããã¯ã«ãªãå¯èœæ§ããããŸãã
ãšãã§ã¯ãã®å¹æãé ç¹ã·ã§ãŒããŒã«é¢é£ä»ããããŠãããã©ããã確èªããå Žåã¯ãç°ãªãã¢ã¶ã€ã¯ã®ã°ãªããã§è©ŠããŠãã ããã
åãããŒãžã«å€§ããªã¢ã¶ã€ã¯ã®ããå€ãã®èŠçŽ ã«ãšãã§ã¯ããé©çšãããšãäžè§åœ¢ã®åèšã«ãŠã³ã¿ãŒãéåžžã«ãã°ããå¢ããããšãã§ããããšã«æ³šæããŠãã ããã
䟿å©ãªãªã³ã¯
çŽ æ
é衚瀺ã®ããã¹ãPS
Keytenã®èŠè«ã§ç¿»èš³ããã圌ã¯äžèšã®äœã詊ã¿ãŸããã§ãã=ïŒ