[KDPVã®ç
ã¯ããã¥ãŒããªã¢ã«ã§åŸãããç
ãããå°ãè€éã§ãã]ç
ã¯åžžã«è¬ã®å
茪ã«å²ãŸããŠããŸãã ãããèŠãã®ã¯ããããã¢ãã«åããã®ã¯é£ããã ä»ã®å€ãã®ç©ççŸè±¡ãšåæ§ã«ãç
ã¯äºæž¬ãéåžžã«é£ããã«ãªã¹ã·ã¹ãã ã§ãã ã·ãã¥ã¬ãŒã·ã§ã³ã®ç¶æ
ã¯ãåã
ã®ç²åéã®çžäºäœçšã«å€§ããäŸåããŸãã
ãã®ããããããªããã»ããµã§åŠçããã®ã¯éåžžã«å°é£ã§ããç
ã¯ãããŸããŸãªå Žæã§äœçŸäžåãç¹°ãè¿ãããåäžã®ç²åã®åäœã«å解ã§ããŸãã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãã¹ã¢ãŒã¯ã·ã§ãŒããŒããŒãããäœæããããšã«ã€ããŠè©³ãã説æããæŠåšåº«ãæ¡åŒµããŠç¬èªã®å¹æãäœæã§ããããã«ãããã€ãã®äŸ¿å©ãªã·ã§ãŒããŒéçºãã¯ããã¯ã説æããŸãã
ç§ãã¡ãåŠã¶ããš
ãããç§ãã¡ãåªåããæçµçµæã§ãã
ãªã¢ã«ã¿ã€ã ã²ãŒã ã§ã®æ¶²äœã®ãã€ããã¯ã¹ã«é¢ããJos Stamã®
ç 究ã§èª¬æãããŠããã¢ã«ãŽãªãºã ãå®è£
ããŸãã ããã«
ããã¯ã¹ãã£ã«
ã¬ã³ããªã³ã°ããæ¹æ³ãåŠã³
ãŸã ããã®ææ³ã¯
ãã¬ãŒã ãããã¡ãšãåŒã°ã
ãŸã ã å€ãã®ãšãã§ã¯ããäœæã§ãããããã·ã§ãŒããŒã®ããã°ã©ãã³ã°ã«éåžžã«åœ¹ç«ã¡ãŸãã
æºåãã
ãã®ãã¥ãŒããªã¢ã«ã®äŸãšã³ãŒãã§ã¯JavaScriptãš
ThreeJSã䜿çšããŠããŸãããã·ã§ãŒããŒããµããŒãããä»»æã®ãã©ãããã©ãŒã ã§äœ¿çšã§ããŸãã ïŒããã°ã©ãã³ã°ã®åºç€ã«æ
£ããŠããªãå Žåã¯ã
ãã®ãã¥ãŒããªã¢ã«ãåŠç¿ããå¿
èŠããããŸããïŒ
ãã¹ãŠã®ã³ãŒããµã³ãã«ã¯CodePenã«ä¿åãã
ãŸãããèšäºã«é¢é£ä»ããããŠãã
GitHubãªããžããªã«ããããŸãïŒã³ãŒããèªãæ¹ã䟿å©ãªå ŽåããããŸãïŒã
çè«ãšåºç€
Jos Stamã®ç 究ããã®ã¢ã«ãŽãªãºã ã¯ãé床ãšèŠèŠçå質ãåªå
ããŠãã²ãŒã ã§å¿
èŠãªç©çç粟床ãæãªããŸãã
ç¹ã«åŸ®åæ¹çšåŒã«ç²ŸéããŠããªãå Žåããã®äœæ¥ã¯å®éãããã¯ããã«è€éã«èŠãããããããŸããã ãã ãããã®ææ³ã®æå³ã¯æ¬¡ã®å³ã«èŠçŽãããŠããŸãã
åæ£ã®ãããã§ãåã»ã«ã¯ãã®å¯åºŠãé£æ¥ã»ã«ãšäº€æããŸããçŸå®çãªå€èŠ³ã®ç
å¹æãäœæããããã«å¿
èŠãªã®ã¯ããã ãã§ããåå埩ã§ã®åã»ã«ã®å€ã¯ãé£æ¥ãããã¹ãŠã®ã»ã«ã«ãåæ£ããããŸãã ãã®ååã¯ããã«æ確ã«ãªããšã¯éããŸãããäŸãè©ŠããŠã¿ããå Žåã¯
ãã€ã³ã¿ã©ã¯ãã£ããã¢ãã芧ãã ããã
CodePenã®ã€ã³ã¿ã©ã¯ãã£ããªãã¢ãã芧ãã ãã ã
ã»ã«ãã¯ãªãã¯ãããšãå€
100
ãå²ãåœãŠãããŸãã åã»ã«ããã®å€ãé£æ¥ããã»ã«ã«åŸã
ã«è»¢éããæ¹æ³ãããããŸãã ããã確èªããæãç°¡åãªæ¹æ³ã¯ã[
次ãž]ãã¯ãªãã¯ããŠåã
ã®ãã¬ãŒã ã衚瀺ããããšã§ãã
衚瀺ã¢ãŒããåãæ¿ããŠãè²ã®çªå·ããããã®çªå·ãšäžèŽãããšãã«ã©ã®ããã«èŠãããã確èªããŸãã
äžèšã®ãã¢ã¯äžå€®åŠçè£
眮ã§åäœãããµã€ã¯ã«ã¯åã»ã«ã§ç¹°ãè¿ãããŸãã ãã®ã«ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
ãã®ã³ãŒãã¯ãã¢ã«ãŽãªãºã ã®åºç€ã§ãã åã»ã«ã¯ãé£æ¥ãã4ã€ã®ã»ã«ã®å€ã®äžéšããèªèº«ã®å€ãåŒãããã®ãåãåããŸã
f
ã¯1æªæºã®ä¿æ°ã§ããã»ã«ã®çŸåšã®å€ã«4ãæããŠãé«ãå€ããäœãå€ã«åæ£ããŸãã
ãããæ確ã«ããããã«ã次ã®ç¶æ³ãèæ
®ããŠãã ããã
äžå€®ã®ã»ã« ïŒã°ãªããã®
[1,1]
äœçœ®ïŒãååŸããäžèšã®æ£ä¹±æ¹çšåŒãé©çšããŸãã
f
ã
0.1
ãããšä»®å®ããŸãïŒ
0.1 * (100+100+100+100-4*100) = 0.1 * (400-400) = 0
ãã¹ãŠã®ã»ã«ã®å€ãåãã§ãããããæ£ä¹±ã¯çºçããŸããïŒ
次ã«ã
å·Šäžé
ã®ã»ã«ãæ€èšããŸãïŒè¡šç€ºãããŠããã°ãªããå€ã®ãã¹ãŠã®ã»ã«ã®å€ã¯
0
ãšèããããŸãïŒã
0.1 * (100+100+0+0-4*0) = 0.1 * (200) = 20
ããã§ãçŽ
å©ç㯠20ã«ãªããŸããïŒ æåŸã®ã±ãŒã¹ãèŠãŠã¿ãŸãããã 1ã€ã®ã¿ã€ã ã¹ãããã®åŸïŒãã®æ°åŒããã¹ãŠã®ã»ã«ã«é©çšããåŸïŒãã°ãªããã¯æ¬¡ã®ããã«ãªããŸãã
äžå€®ã®ã»ã«ã®åæ£ãããäžåºŠèŠãŠã¿ãŸãããã
0.1 * (70+70+70+70-4*100) = 0.1 * (280 - 400) = -12
çŽæžã¯12ã«ãªããŸããïŒ ãããã£ãŠãå€ã¯åžžã«å€§ããå°ã«å€åããŸãã
ããŠããã£ãšãªã¢ã«ã«ãããå Žåã¯ãã»ã«ã®ãµã€ãºãå°ããããå¿
èŠããããŸãïŒãã¢ã§è¡ãããšãã§ããŸãïŒããç¹å®ã®æ®µéã§ã¯ãåã»ã«ãé çªã«åŠçããå¿
èŠãããããããã¹ãŠãéåžžã«é
ããªãå§ããŸãã ç§ãã¡ã®ç®æšã¯ããããªããã»ããµã®èœåã䜿çšããŠããã¹ãŠã®ã»ã«ïŒãã¯ã»ã«ãªã©ïŒãåæã«äžŠè¡ããŠåŠçã§ããã·ã§ãŒããŒã§ãã®ã¢ã«ãŽãªãºã ãèšè¿°ããããšã§ãã
èŠçŽãããšãç§ãã¡ã®äžè¬çãªææ³ã¯ãåãã¯ã»ã«ã®åãã¬ãŒã ãè²ã®å€ã®äžéšã倱ãããããé£æ¥ãããã¯ã»ã«ã«æž¡ãããšã§ãã ãšãŠãç°¡åã§ããã ãã®ã·ã¹ãã ãå®è£
ããŠãäœãèµ·ãããèŠãŠã¿ãŸãããïŒ
å®è£
ç»é¢å
šäœãã¬ã³ããªã³ã°ããåºæ¬çãªã·ã§ãŒããŒããå§ããŸãã åäœããããšã確èªããã«ã¯ãç»é¢ãé»äžè²ïŒãŸãã¯ãã®ä»ïŒã§å¡ãã€ã¶ããŠãã ããã ããã¯ãç§ãJavascriptã§äœ¿çšããåè·¯ãã©ã®ãããªãã®ãã瀺ããŠããŸãã
äžéšã®ãã¿ã³ãã¯ãªãã¯ããŠãHTMLãCSSãJSã³ãŒãã衚瀺ããŸãã
ã·ã§ãŒããŒã¯ã·ã³ãã«ã§ãïŒ
uniform vec2 res; void main() { vec2 pixel = gl_FragCoord.xy / res.xy; gl_FragColor = vec4(0.0,0.0,0.0,1.0); }
res
ããã³
pixel
ã¯ãçŸåšã®ãã¯ã»ã«ã®åº§æšã瀺ããŸãã ç»é¢ãµã€ãºãçµ±äžå€æ°ãšããŠ
res
æž¡ããŸãã ïŒä»ã®ãšããããããã¯äœ¿çšããŠããŸããããããã«åœ¹ç«ã¡ãŸããïŒ
ã¹ããã1ïŒãã¯ã»ã«éã§å€ã移åãã
å®è£
ãããããšãããäžåºŠç¹°ãè¿ããŸãã
ç§ãã¡ã®äžè¬çãªãã¯ããã¯ã¯ããã¹ãŠã®ãã¬ãŒã ã®ãã¹ãŠã®ãã¬ãŒã ãè²ã®å€ã®äžéšã倱ãããããé£æ¥ãããã¯ã»ã«ã«æž¡ãããšã§ãã
ãã®å®åŒåã§ã¯ãã·ã§ãŒããŒã®å®è£
ã¯
äžå¯èœã§ãã çç±ã¯ããããŸããïŒ ã·ã§ãŒããŒã§ã§ããããšã¯ãåŠçäžã®çŸåšã®ãã¯ã»ã«ã®ã«ã©ãŒå€ãè¿ãããšã ãã§ãã ã€ãŸãã解決çãçŸåšã®ãã¯ã»ã«ã®ã¿ã«åœ±é¿ããããã«ãåé¡ãåå®åŒåããå¿
èŠããããŸãã ç§ãã¡ã¯èšãããšãã§ããŸãïŒ
åãã¯ã»ã«ã¯ããã®é£ã®ãã¯ã»ã«ã®è²ãå°ãååŸããç¬èªã®ãã¯ã»ã«ãå°ã倱ãå¿
èŠããããŸãã
ããã§ããã®ãœãªã¥ãŒã·ã§ã³ãå®è£
ã§ããŸãã ãã ãããããå®è¡ããããšãããšãæ ¹æ¬çãªåé¡ãçºçããŸã...
ããåçŽãªã±ãŒã¹ãèããŠã¿ãŸãããã èµ€ã§ã€ã¡ãŒãžãåŸã
ã«åæç»ããã·ã§ãŒããŒãå¿
èŠã ãšããŸãããã 次ã®ã·ã§ãŒããŒãäœæã§ããŸãã
uniform vec2 res; uniform sampler2D texture; void main() { vec2 pixel = gl_FragCoord.xy / res.xy; gl_FragColor = texture2D( tex, pixel );
åãã¬ãŒã ã®åãã¯ã»ã«ã®èµ€æåã¯
0.01
ãã€å¢å ããããšãäºæ³ãããŸãã 代ããã«ããã¹ãŠã®ãã¯ã»ã«ãæåãããå°ãã ãèµ€ããªã£ãŠããéçãªç»åãååŸããŸãã ãã¹ãŠã®ãã¬ãŒã ãã·ã§ãŒãã£ã³ã°ãããŠãããšããäºå®ã«ãããããããåãã¯ã»ã«ã®èµ€æåã¯äžåºŠã ãå¢å ããŸãã
ãªããããèµ·ãã£ãŠããã®ãç解ã§ããŸããïŒ
åé¡
åé¡ã¯ãã·ã§ãŒããŒã§å®è¡ããæäœãç»é¢ã«è»¢éããããã®åŸæ°žä¹
ã«æ¶ããŠããŸãããšã§ãã ããã§ãããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã

åäžãªå€æ°ãšãã¯ã¹ãã£ãŒãã·ã§ãŒããŒã«æž¡ãããã¯ã»ã«ãå°ãèµ€ãããç»é¢äžã«æç»ããŠãæåããããçŽããŸãã
ã·ã§ãŒããŒã§æç»ãããã®ã¯ãã¹ãŠã次ã®æç»ã¹ãããã§ã¯ãªã¢ãããŸãã次ã®ãããªãã®ãå¿
èŠã§ãã

ç»é¢ã«çŽæ¥ã¬ã³ããªã³ã°ãã代ããã«ããã¯ã»ã«ããã¯ã¹ãã£ã«æç»ã
ããã®ãã¯ã¹ãã£ãç»é¢ã«æç»ã§ããŸãã åãç»åãç»é¢ã«è¡šç€ºãããŸãããåºåãå
¥åãšããŠè»¢éã§ããããã«ãªããŸããã ãããã£ãŠããã¹ãŠã®ãã¬ãŒã ããªã»ããããã ãã§ãªããå€ãèç©ãŸãã¯åé
ããã·ã§ãŒããŒãååŸã§ããŸãã ããã¯ããã¬ãŒã ãããã¡ãŒã䜿çšãããã©ãŒã«ã¹ããšåŒã°ããŸãã
ãã¬ãŒã ãããã¡ãŒã§ãã©ãŒã«ã¹
äžè¬çãªææ³ã¯ããã¹ãŠã®ãã©ãããã©ãŒã ã§åãã§ãã Googleã¯ã䜿çšããèšèªãããŒã«ã®
ããã¯ã¹ãã£ã«ã¬ã³ããªã³ã°ãããå®è£
ã®è©³çŽ°ãåŠç¿ããŸãã ãŸãã
ãã¬ãŒã ãããã¡ãŒãªããžã§ã¯ãã®äœ¿çšæ¹æ³ã確èªã§ã
ãŸã ãããã¯ãç»é¢ã§ã¯ãªãããããã¡ãŒå
ã®ã¬ã³ããªã³ã°é¢æ°ã®åãªãå¥åã§ãã
ThreeJSã§ã¯ããã®é¢æ°ã®é¡äŒŒç©ã¯
WebGLRenderTargetã§ãã ã¬ã³ããªã³ã°ã®äžéãã¯ã¹ãã£ãšããŠäœ¿çšããŸãã ãã ããå°ããªé害ãæ®ã
ãŸãã ã
åæã«èªã¿åãã1ã€ã®ãã¯ã¹ãã£ã«ã¬ã³ããªã³ã°ããããšã¯ã§ããŸãã ã ãã®å¶éãåé¿ããæãç°¡åãªæ¹æ³ã¯ã2ã€ã®ãã¯ã¹ãã£ã䜿çšããããšã§ãã
AãšBãäœæãã2ã€ã®ãã¯ã¹ãã£ãšããŸãã ãã®å Žåãã¡ãœããã¯æ¬¡ã®ããã«ãªããŸãã
- Aãã·ã§ãŒããŒã«æž¡ããBã«ã¬ã³ããªã³ã°ããŸãã
- Bãç»é¢ã«ã¬ã³ããªã³ã°ããŸãã
- Bãã·ã§ãŒããŒã«æž¡ããAã«ã¬ã³ããªã³ã°ããŸãã
- Aãç»é¢ã«ã¬ã³ããªã³ã°ããŸãã
- ç¹°ãè¿ã1ã
çãã³ãŒãã¯æ¬¡ã®ãšããã§ãã
- Aãã·ã§ãŒããŒã«æž¡ããBã«ã¬ã³ããªã³ã°ããŸãã
- Bãç»é¢ã«ã¬ã³ããªã³ã°ããŸãã
- AãšBãå€æŽããŸãïŒã€ãŸããå€æ°Aã«ã¯Bã«ãããã¯ã¹ãã£ãå«ãŸããããã«ãªããéãåæ§ã§ãïŒã
- ç¹°ãè¿ã1ã
ããã ãã§ã ThreeJSã§ã®ãã®ã¢ã«ãŽãªãºã ã®å®è£
ã¯æ¬¡ã®ãšããã§ãã
æ°ããã·ã§ãŒããŒã³ãŒãã¯[
HTML ]ã¿ãã«ãããŸãã
éå§æã®é»ãç»é¢ããŸã 衚瀺ãããŠããŸãã ã·ã§ãŒããŒãããã»ã©å€ãããŸããïŒ
uniform vec2 res;
ãã®è¡ãè¿œå ãããšããäºå®ã«å ããŠïŒ
testïŒ ïŒïŒ
gl_FragColor.r += 0.01;
ç»é¢ãåŸã
ã«èµ€ããªãããšãããããŸãã ããã¯éåžžã«éèŠãªã¹ããããªã®ã§ãç°¡åã«èª¬æããæåã®ã¢ã«ãŽãªãºã ã®åäœãšæ¯èŒããããšãã§ããŸãã
ã¿ã¹ã¯ïŒ gl_FragColor.r += pixel.x;
ã
gl_FragColor.r += pixel.x;
ãšã©ããªã
ãŸããïŒ å
ã®äŸãšã¯ç°ãªãããã¬ãŒã ãããã¡ã䜿çšããäŸã§ã¯ïŒ ãªãçµæãç°ãªãã®ãããªããããªã®ããå°ãèããŠãã ããã
ã¹ããã2ïŒç
æºãå
¥æãã
ãã¹ãŠãåããåã«ãç
ãäœãåºãæ¹æ³ãèŠã€ããå¿
èŠããããŸãã æãç°¡åãªæ¹æ³ã¯ãã·ã§ãŒããŒã®ä»»æã®é åãæåã§çœã§ãã€ã³ãããããšã§ãã
// float dist = distance(gl_FragCoord.xy, res.xy/2.0); if(dist < 15.0){ // 15 gl_FragColor.rgb = vec3(1.0); }
ãã¬ãŒã ãããã¡ãŒã®æ£ç¢ºæ§ã確èªããå Žåã¯ãè²ã®å€ã
è¿œå ããã ãã§ãªããè²ã®å€ã
è¿œå ããããšãã§ããŸãã åãåŸã
ã«çœããªãããšãããããŸãã
// float dist = distance(gl_FragCoord.xy, res.xy/2.0); if(dist < 15.0){ // 15 gl_FragColor.rgb += 0.01; }
å¥ã®æ¹æ³ã¯ããã®åºå®ç¹ãããŠã¹ã®äœçœ®ã«çœ®ãæããããšã§ãã ããŠã¹ãã¿ã³ãæŒãããŠãããã©ããã瀺ã3çªç®ã®å€ãæž¡ãããšãã§ããŸãã ãã®æ¹æ³ã§ã¯ãå·ŠããŒãæŒãããšã§ç
ãäœæã§ããŸãã ãã®æ©èœã®å®è£
ã¯æ¬¡ã®ãšããã§ãã
ã¯ãªãã¯ããŠç
ãäœæããŸãã
ã·ã§ãŒããŒã¯æ¬¡ã®ããã«ãªããŸãã
// uniform vec2 res; // uniform sampler2D bufferTexture; // x,y - . z - / uniform vec3 smokeSource; void main() { vec2 pixel = gl_FragCoord.xy / res.xy; gl_FragColor = texture2D( bufferTexture, pixel ); // float dist = distance(smokeSource.xy,gl_FragCoord.xy); // , if(smokeSource.z > 0.0 && dist < 15.0){ gl_FragColor.rgb += smokeSource.z; } }
ã¿ã¹ã¯ïŒã·ã§ãŒããŒã§ã¯éåžžãåå²ïŒæ¡ä»¶ä»ãé·ç§»ïŒãé«äŸ¡ã§ããããšãå¿ããªãã§ãã ããã ifã³ã³ã¹ãã©ã¯ãã䜿çšããã«ã·ã§ãŒããŒãæžãæããããšã¯ã§ããŸããïŒ ïŒãœãªã¥ãŒã·ã§ã³ã¯CodePenã«ãããŸããïŒ
ç解ã§ããªãå Žåã¯ã
åã®ãã¥ãŒããªã¢ã«ã§ãã·ã§ãŒããŒã§ã®ããŠã¹ã®äœ¿çšã«é¢ãã詳现ãªèª¬æããããŸãïŒç
§æã«é¢ããéšåïŒã
ã¹ããã3ïŒç
ãåæ£ããã
ããã§æãç°¡åã§ãããæãèå³æ·±ãéšåã§ãïŒ ãã¹ãŠããŸãšããŠãæåŸã«ã·ã§ãŒããŒã«äŒãã
å¿
èŠããããŸãã
åãã¯ã»ã«ã¯ é£æ¥ ãã¯ã»ã« ããè²ã®äžéšãåãåãã
ç¬èªã®äžéšã倱ããŸãã次ã®ããã«ãªããŸãã
// float xPixel = 1.0/res.x; // float yPixel = 1.0/res.y; vec4 rightColor = texture2D(bufferTexture,vec2(pixel.x+xPixel,pixel.y)); vec4 leftColor = texture2D(bufferTexture,vec2(pixel.x-xPixel,pixel.y)); vec4 upColor = texture2D(bufferTexture,vec2(pixel.x,pixel.y+yPixel)); vec4 downColor = texture2D(bufferTexture,vec2(pixel.x,pixel.y-yPixel)); // gl_FragColor.rgb += 14.0 * 0.016 * ( leftColor.rgb + rightColor.rgb + downColor.rgb + upColor.rgb - 4.0 * gl_FragColor.rgb );
ä¿æ°
f
ã¯åããŸãŸã§ãã ãã®å Žåãã¿ã€ã ã¹ãããïŒ
0.016
ãã€ãŸãããã°ã©ã ã¯60 fpsã§å®è¡ããããã1/60ïŒããããå€
14
ã«èœã¡çããŸã§ç°ãªãæ°å€ãããã¯ã¢ããããŸããã çµæã¯æ¬¡ã®ãšããã§ãã
ãããããã¯ãã¹ãŠãã³ã°ã¢ããããïŒ
ããã¯ãCPUã®ãã¢ã§äœ¿çšããã®ãšåãæ£åžæ¹çšåŒã§ãããã·ãã¥ã¬ãŒã·ã§ã³ã¯åæ¢ããŸãïŒ ãã®çç±ã¯äœã§ããïŒ
ãã¯ã¹ãã£ïŒã³ã³ãã¥ãŒã¿ãŒäžã®ãã¹ãŠã®æ°å€ãªã©ïŒã®ç²ŸåºŠã«ã¯éçãããããšãããããŸããã ããæç¹ã§ãæžç®ããä¿æ°ãå°ãããªããããŠ0ã«äžžãããããããã·ãã¥ã¬ãŒã·ã§ã³ãåæ¢ããŸãã ãããä¿®æ£ããã«ã¯ãæå°å€ãäžåã£ãŠããªãããšã確èªããå¿
èŠããããŸãã
float factor = 14.0 * 0.016 * (leftColor.r + rightColor.r + downColor.r + upColor.r - 4.0 * gl_FragColor.r); // float minimum = 0.003; if (factor >= -minimum && factor < 0.0) factor = -minimum; gl_FragColor.rgb += factor;
ä¿æ°ãååŸããããã«
rgb
代ããã«
r
ã³ã³ããŒãã³ãã䜿çšããŸããããã¯ãåã
ã®æ°å€ã䜿çšããæ¹ãç°¡åã§ããããã¹ãŠã®ã³ã³ããŒãã³ããåãå€ãæã£ãŠããããã§ãïŒç
ãçœãããïŒã
è©Šè¡é¯èª€ãéããŠãé©åãªãããå€ã¯
0.003
ã§ãããããã°ã©ã ã¯åæ¢ããŸããã ç§ã¯ãåžžã«äžå®ã®æžå°ãä¿èšŒããããã«ãè² ã®å€ã®ä¿æ°ã®ã¿ãå¿é
ããŠããŸãã ãã®ä¿®æ£ãè¿œå ãããšã次ã®ãã®ãåŸãããŸãã
ã¹ããã4ïŒã¹ã¢ãŒã¯ã¢ãã
ãããããŸã ç
ã®ããã«ã¯èŠããŸããã ãã¹ãŠã®æ¹åã§ã¯ãªããäžã«ç§»åãããå Žåã¯ãéã¿ãè¿œå ããå¿
èŠããããŸãã äžã®ãã¯ã»ã«ãåžžã«ä»ã®æ¹åããã圱é¿ãäžããå Žåããã¯ã»ã«ãäžæããŠããããã«èŠããŸãã
ä¿æ°ãè©ŠããŠã¿ããšããã®åŒã§ããªãè¯ããã®ãéžæã§ããŸãã
// float factor = 8.0 * 0.016 * ( leftColor.r + rightColor.r + downColor.r * 3.0 + upColor.r - 6.0 * gl_FragColor.r );
ãããŠãããã¯ã·ã§ãŒããŒã®å€èŠ³ã§ãïŒ
åæ£æ¹çšåŒã«é¢ãã泚æ
ç§ã¯ãªããºã§éãã ã®ã§ãç«ã¡äžãã£ãç
ããããã«èŠããŸããã 圌ãä»ã®æ¹åã«åããããšãã§ããŸãã
ã·ãã¥ã¬ãŒã·ã§ã³ã®ãæ¡å€§ãã¯éåžžã«ç°¡åã§ããããšãè¿œå ããããšãéèŠã§ãã ïŒå€
6.0
ã
5.0
å€æŽããŠãäœãèµ·ãããã確èªããŠãã ããïŒã æããã«ãããã¯çŽ°èã倱ããããå€ããåŸããšããäºå®ã«ãããã®ã§ãã
ãã®æ¹çšåŒã¯ãç§ãã貧匱ãªåæ£ãã®ã¢ãã«ãšããŠåŒçšããè«æã§å®éã«èšåãããŠããŸãã ä»äºã«ã¯ãã£ãšå®å®ããå¥ã®æ¹çšåŒããããŸãããããã¯ç§ãã¡ã«ãšã£ãŠéåžžã«äŸ¿å©ã§ã¯ãããŸãããäž»ã«ãèªã¿åãå
ã®ã°ãªããã«æžã蟌ãå¿
èŠãããããã§ãã ã€ãŸããäžåºŠã«1ã€ã®ãã¯ã¹ãã£ãèªã¿æžãããå¿
èŠããããŸãã
ç§ãã¡ãæã£ãŠãããã®ã¯ç§ãã¡ã®ç®çã«ã¯ååã§ãããèå³ãããã°ãäœåã®èª¬æãå匷ããããšãã§ããŸãã ããã«
ãäžå€®åŠçè£
眮ã®å¯Ÿè©±åãã¢ã«å¥ã®æ¹çšåŒãå®è£
ãã
ãŠããŸã
diffuse_advanced()
é¢æ°ãåç
§ããŠãã ããã
軜埮ãªä¿®æ£
ç»é¢ã®äžéšã§ç
ãäœæãããšãããã«ç
ãè©°ãŸã£ãŠããããšã«æ°ä»ããããããŸããã ããã¯ãäžçªäžã®è¡ã®ãã¯ã»ã«ããã®äžã«ååšããªããã¯ã»ã«ããå€ãååŸããããšããŠããããã§ãã
ãããä¿®æ£ããããã«ãäžã®ãã¯ã»ã«ã§äžã«
0
èŠã€ããŸãã
CPUã®ãã¢ã§ã¯ãäžã®ã»ã«ãåæ£ããªãããšã確èªããã ãã§ããã«å¯ŸåŠããŸããã å¢çã®å€åŽã®ãã¹ãŠã®ã»ã«ãæåã§
0
èšå®ããããšãã§ã
0
ã ïŒCPUã®ãã¢ã®ã°ãªããã¯ã1è¡1åã§ãã¹ãŠã®æ¹åã®å¢çãè¶
ããŠããŸããã€ãŸããå¢çã¯è¡šç€ºãããŸããïŒ
ã¹ããŒãã°ãªãã
ããã§ãšãããããŸãïŒ ããã§ãæ¢è£œã®ã¹ã¢ãŒã¯ã·ã§ãŒããŒãã§ããŸããïŒ æåŸã«ãäœæ¥ã§èšåããéåºŠå Žã«ã€ããŠç°¡åã«èª¬æããããšæããŸãã
移åïŒç§»æµïŒã¹ããŒãžã¯ãéçéåºŠå Žã«æ²¿ã£ãŠå¯åºŠã移åããŸããç
ã¯äžæ¹åãä»ã®æ¹åã«åçã«åæ£ããå¿
èŠã¯ãããŸãã;å³ã«ç€ºããããªäžè¬çãªãã¿ãŒã³ã«åŸãããšãã§ããŸãã ããã¯ãè²ã®å€ãçŸåšã®ãã€ã³ãã§ç
ã移åããæ¹åãè¡šãå¥ã®ãã¯ã¹ãã£ãéä¿¡ããããšã§å®è£
ã§ããŸãã ããã¯ãã©ã€ãã£ã³ã°ãã¥ãŒããªã¢ã«ã§æ³ç·ãããã䜿çšããŠåãã¯ã»ã«ã®æ¹åã瀺ãã®ã«äŒŒãŠããŸãã
å®éãé床ãã¯ã¹ãã£ãéçã§ããå¿
èŠã¯ãããŸããïŒ ãã¬ãŒã ãããã¡ãŒã§ãã©ãŒã«ã¹ã䜿çšããŠããªã¢ã«ã¿ã€ã ã§é床ãå€æŽã§ããŸãã ããã«ã€ããŠã¯ãã¥ãŒããªã¢ã«ã§èª¬æããŸãããããã®æ©èœã«ã¯ç 究ã®å€§ããªå¯èœæ§ããããŸãã
ãããã«
ãã®ãã¥ãŒããªã¢ã«ããåŠã¶ã¹ãæãéèŠãªããšã¯ãç»é¢ã®ä»£ããã«ãã¯ã¹ãã£ã«ã¬ã³ããªã³ã°ããæ©èœãéåžžã«æçšãªãã¯ããã¯ã§ããããšã§ãã
ã©ã®ãã¬ãŒã ãããã¡ãŒã䟿å©ã§ããïŒ
å€ãã®å Žåããããã¯ã²ãŒã ã®
åŸåŠçã«äœ¿çšãããŸãã åãªããžã§ã¯ãã§äœ¿çšããã®ã§ã¯ãªããã«ã©ãŒãã£ã«ã¿ãŒãé©çšããå Žåã¯ããã¹ãŠã®ãªããžã§ã¯ããç»é¢ã«åãããŠãã¯ã¹ãã£ã«ã¬ã³ããªã³ã°ãããã®ãã¯ã¹ãã£ã«ã·ã§ãŒããŒãé©çšããŠç»é¢ã«æç»ããŸãã
å¥ã®ãŠãŒã¹ã±ãŒã¹ã¯ã
è€æ°ã®ãã¹ãå¿
èŠãš
ããã·ã§ãŒããŒã®å®è£
ã§ã
ã äŸïŒblur ã éåžžãç»åã¯ã·ã§ãŒããŒãééããx軞ã«æ²¿ã£ãŠãã©ãŒããã次ã«åã³ééããŠy軞ã«æ²¿ã£ãŠãã©ãŒããŸãã
æåŸã®äŸã¯ã
åã®ãã¥ãŒããªã¢ã«ã§èª¬æãã
é
延ã¬ã³ããªã³ã°ã§ãã ããã¯ãã·ãŒã³ã«è€æ°ã®å
æºãå¹æçã«è¿œå ããç°¡åãªæ¹æ³ã§ãã ããã§çŽ æŽãããã®ã¯ãç
§æã®èšç®ãå
æºã®æ°ã«äŸåããªããªã£ãããšã§ãã
æè¡èšäºãæããªãã§ãã ãã
ããå€ãã®è©³çŽ°ã¯ãç§ãåŒçšããç 究ã§èŠã€ããããšãã§ããŸãã ç·åœ¢ä»£æ°ã«ç²ŸéããŠããå¿
èŠããããŸãããã·ã¹ãã ãåæããŠå®è£
ããããšããããšã劚ããªãã§ãã ããã ãã®æ¬è³ªã¯ãå®è£
ããã®ãéåžžã«ç°¡åã§ãïŒä¿æ°ã®èª¿æŽåŸïŒã
ã·ã§ãŒããŒã«ã€ããŠããå°ãåŠãã§ããã ããã°å¹žãã§ãã