ã·ã§ãŒããŒããã°ã©ãã³ã°ã®ç·åã¬ã€ããã²ãŒã ãæ ç»ãã€ã³ã¿ã©ã¯ãã£ãäœéšãªã©ãæ§ã ãªãã©ãããã©ãŒã ã§é åçãªããžã¥ã¢ã«ãšãã§ã¯ããäœæãã圹å²ãæ¢ããŸãã
ã·ã§ãŒããŒããã°ã©ãã³ã°ïŒããžã¿ã«é åã§ããžã¥ã¢ã«ãšãã§ã¯ããè§£ãæŸã€
çµ¶ããé²åããã³ã³ãã¥ãŒã¿ã°ã©ãã£ãã¯ã¹ã®äžçã«ãããŠãã·ã§ãŒããŒããã°ã©ãã³ã°ã¯æ¯ãã®ããããªããžã¥ã¢ã«ãšãã§ã¯ãïŒVFXïŒãäœæããããã®ç€ãšãªã£ãŠããŸããå€§äœæ ç»ã®ãªã¢ã«ãªæ°Žã®ã·ãã¥ã¬ãŒã·ã§ã³ããã人æ°ãããªã²ãŒã ã®é åçãªããŒãã£ã¯ã«ãšãã§ã¯ããŸã§ãã·ã§ãŒããŒã¯ç§ãã¡ãæ¥åžžçã«äœéšããå€ãã®ããžã¥ã¢ã«ã®èåŸã«ããçžã®äžã®åæã¡ã§ãããã®ç·åã¬ã€ãã§ã¯ãã·ã§ãŒããŒããã°ã©ãã³ã°ã®æ žå¿çãªæŠå¿µãæãäžãããã®å€æ§ãªå¿çšãæ¢ããããªãèªèº«ãèŠäºãªããžã¥ã¢ã«ãšãã§ã¯ããäœæã§ããããã«åãäžããŸãã
ã·ã§ãŒããŒãšã¯ïŒ
ã·ã§ãŒããŒãšã¯ããã®æ žå¿ã«ãããŠãã°ã©ãã£ãã¯ã¹ããã»ãã·ã³ã°ãŠãããïŒGPUïŒäžã§å®è¡ãããå°ããªããã°ã©ã ã§ããæ±çšçãªã³ã³ãã¥ãŒãã£ã³ã°ã¿ã¹ã¯ãåŠçããCPUãšã¯ç°ãªããGPUã¯äžŠååŠçã«ç¹åããŠèšèšãããŠãããè€éãªã°ã©ãã£ã«ã«èšç®ãå®è¡ããã®ã«çæ³çã§ããã·ã§ãŒããŒã¯3Dã¢ãã«ã®åã ã®é ç¹ããã©ã°ã¡ã³ãïŒãã¯ã»ã«ïŒã«å¯ŸããŠåäœããéçºè ããªã¢ã«ã¿ã€ã ã§ãã®å€èгãæäœã§ããããã«ããŸãã
ãã®ããã«èããŠã¿ãŠãã ãããã·ã§ãŒããŒãšã¯ãç»é¢ã®ç¹å®ã®éšåãã©ã®ããã«æç»ããããGPUã«æç€ºããããããã°ã©ã ã§ããåãã¯ã»ã«ã®è²ããã¯ã¹ãã£ããã®ä»ã®èŠèŠçããããã£ã決å®ããé«åºŠã«ã«ã¹ã¿ãã€ãºãããèŠèŠçã«è±ããªã¬ã³ããªã³ã°ãå¯èœã«ããŸãã
ã·ã§ãŒããŒãã€ãã©ã€ã³
ã·ã§ãŒããŒãã€ãã©ã€ã³ãçè§£ããããšã¯ãã·ã§ãŒããŒãã©ã®ããã«æ©èœããããææ¡ããäžã§éåžžã«éèŠã§ãããã®ãã€ãã©ã€ã³ã¯ãGPUãã·ãŒã³ãã¬ã³ããªã³ã°ããããã«å®è¡ããäžé£ã®æäœã衚ããŸãã以äžã«ç°¡ç¥åãããæŠèŠã瀺ããŸãã
- é ç¹ã·ã§ãŒããŒïŒ ããã¯ãã€ãã©ã€ã³ã®æåã®ã¹ããŒãžã§ãã3Dã¢ãã«ã®åé ç¹ã«å¯ŸããŠåäœãããã®äœçœ®ã倿ããæ³ç·ããã¯ã¹ãã£åº§æšãªã©ã®ä»ã®é ç¹åºæã®å±æ§ãèšç®ããŸããé ç¹ã·ã§ãŒããŒã¯ãæ¬è³ªçã«3D空éã«ãããã¢ãã«ã®åœ¢ç¶ãšäœçœ®ãå®çŸ©ããŸãã
- ãžãªã¡ããªã·ã§ãŒããŒïŒãªãã·ã§ã³ïŒïŒ ãã®ã¹ããŒãžã§ã¯ããžãªã¡ããªããã®å Žã§äœæãŸãã¯å€æŽã§ããŸããåäžã®ããªããã£ãïŒäŸïŒäžè§åœ¢ïŒãå ¥åãšããŠåãåããè€æ°ã®ããªããã£ããåºåããããšãã§ããããã·ãŒãžã£ã«çæãççºã·ãã¥ã¬ãŒã·ã§ã³ãªã©ã®ãšãã§ã¯ããå¯èœã«ããŸãã
- ãã©ã°ã¡ã³ãã·ã§ãŒããŒïŒãã¯ã»ã«ã·ã§ãŒããŒïŒïŒ ããã§éæ³ãèµ·ãããŸãããã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ãã¬ã³ããªã³ã°ãããç»åã®åã ã®ãã¯ã»ã«ïŒãã©ã°ã¡ã³ãïŒã«å¯ŸããŠåäœããŸããã©ã€ãã£ã³ã°ããã¯ã¹ãã£ããã®ä»ã®ããžã¥ã¢ã«ãšãã§ã¯ããªã©ã®èŠçŽ ãèæ ®ããŠããã¯ã»ã«ã®æçµçãªè²ã決å®ããŸãã
- ã©ã¹ã¿ã©ã€ãŒãŒã·ã§ã³ïŒ ãã®ããã»ã¹ã¯ã倿ãããé ç¹ããã©ã°ã¡ã³ãïŒãã¯ã»ã«ïŒã«å€æãããã©ã°ã¡ã³ãã·ã§ãŒããŒã§åŠçã§ããç¶æ ã«ããŸãã
- åºåïŒ æçµçã«ã¬ã³ããªã³ã°ãããç»åãç»é¢ã«è¡šç€ºãããŸãã
ã·ã§ãŒããŒèšèªïŒGLSLãšHLSL
ã·ã§ãŒããŒã¯ãGPUçšã«èšèšãããå°éã®ããã°ã©ãã³ã°èšèªã§èšè¿°ãããŸããæãæ®åããŠãã2ã€ã®ã·ã§ãŒããŒèšèªã¯æ¬¡ã®ãšããã§ãã
- GLSL (OpenGL Shading Language): ããã¯ã¯ãã¹ãã©ãããã©ãŒã ã®ã°ã©ãã£ãã¯ã¹APIã§ããOpenGLã®æšæºã·ã§ãŒãã£ã³ã°èšèªã§ããGLSLã¯WebéçºïŒWebGLïŒãã¯ãã¹ãã©ãããã©ãŒã ã²ãŒã ã§åºã䜿çšãããŠããŸãã
- HLSL (High-Level Shading Language): ããã¯ãäž»ã«Windowsããã³Xboxãã©ãããã©ãŒã ã§äœ¿çšãããã°ã©ãã£ãã¯ã¹APIã§ããDirectXåãã®Microsoftç¬èªã®ã·ã§ãŒãã£ã³ã°èšèªã§ãã
GLSLãšHLSLã¯æ§æãç°ãªããŸãããæ ¹åºã«ããæŠå¿µã¯äŒŒãŠããŸããäžæ¹ã®èšèªãçè§£ããã°ãããäžæ¹ãåŠã¶ã®ã容æã«ãªããŸãããŸããGLSLãšHLSLéã§ã·ã§ãŒããŒã倿ã§ããã¯ãã¹ã³ã³ãã€ã«ããŒã«ãååšããŸãã
ã·ã§ãŒããŒããã°ã©ãã³ã°ã®åºæ¬æŠå¿µ
ã³ãŒãã«é£ã³èŸŒãåã«ãããã€ãã®åºæ¬çãªæŠå¿µã«ã€ããŠèª¬æããŸãã
倿°ãšããŒã¿å
ã·ã§ãŒããŒã¯ãã°ã©ãã£ã«ã«ãªæ å ±ã衚çŸããããã«æ§ã ãªããŒã¿åã䜿çšããŸããäžè¬çãªããŒã¿åã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
- float: å粟床浮åå°æ°ç¹æ°ã衚ããŸãïŒäŸïŒ3.14ïŒã
- int: æŽæ°ã衚ããŸãïŒäŸïŒ10ïŒã
- vec2, vec3, vec4: ãããã2ã3ã4次å ã®æµ®åå°æ°ç¹æ°ãã¯ãã«ã衚ããŸãããããã¯åº§æšãè²ãæ¹åãæ ŒçŽããããã«ãã䜿çšãããŸããäŸãã°ã`vec3 color = vec3(1.0, 0.0, 0.0);` ã¯èµ€è²ã衚ããŸãã
- mat2, mat3, mat4: ãããã2x2ã3x3ã4x4ã®è¡åã衚ããŸããè¡åã¯å転ãã¹ã±ãŒãªã³ã°ãå¹³è¡ç§»åãªã©ã®å€æã«äœ¿çšãããŸãã
- sampler2D: 2Dãã¯ã¹ãã£ãµã³ãã©ã衚ãããã¯ã¹ãã£ããŒã¿ãžã®ã¢ã¯ã»ã¹ã«äœ¿çšãããŸãã
å ¥å倿°ãšåºå倿°
ã·ã§ãŒããŒã¯ãå ¥å倿°ãšåºå倿°ãéããŠã¬ã³ããªã³ã°ãã€ãã©ã€ã³ãšéä¿¡ããŸãã
- AttributesïŒé ç¹ã·ã§ãŒããŒå ¥åïŒ: Attributesã¯ãCPUããé ç¹ã·ã§ãŒããŒã«åé ç¹ããšã«æž¡ããã倿°ã§ããäŸãšããŠã¯ãé ç¹ã®äœçœ®ãæ³ç·ããã¯ã¹ãã£åº§æšãªã©ããããŸãã
- VaryingsïŒé ç¹ã·ã§ãŒããŒåºåããã©ã°ã¡ã³ãã·ã§ãŒããŒå ¥åïŒ: Varyingsã¯ãé ç¹éã§è£éãããé ç¹ã·ã§ãŒããŒãããã©ã°ã¡ã³ãã·ã§ãŒããŒã«æž¡ããã倿°ã§ããäŸãšããŠã¯ãè£éããããã¯ã¹ãã£åº§æšãè²ãªã©ããããŸãã
- Uniforms: Uniformsã¯ãCPUã«ãã£ãŠèšå®å¯èœã§ãã·ã§ãŒããŒããã°ã©ã ã«ãã£ãŠåŠçããããã¹ãŠã®é ç¹ãšãã©ã°ã¡ã³ãã§äžå®ã«ä¿ãããã°ããŒãã«å€æ°ã§ããå ã®äœçœ®ãè²ã倿è¡åãªã©ã®ãã©ã¡ãŒã¿ãæž¡ãããã«äœ¿çšãããŸãã
- åºå倿°ïŒãã©ã°ã¡ã³ãã·ã§ãŒããŒåºåïŒ: ãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ãã¯ã»ã«ã®æçµçãªè²ãåºåããŸããããã¯éåžžãGLSLã§ã¯ `gl_FragColor` ãšããååã®å€æ°ã«æžã蟌ãŸããŸãã
çµã¿èŸŒã¿å€æ°ãšé¢æ°
ã·ã§ãŒããŒèšèªã«ã¯ãäžè¬çãªã¿ã¹ã¯ãå®è¡ããããã®äžé£ã®çµã¿èŸŒã¿å€æ°ãšé¢æ°ãçšæãããŠããŸãã
- gl_Position (é ç¹ã·ã§ãŒããŒ): é ç¹ã®ã¯ãªãã空é座æšã衚ããŸããé ç¹ã·ã§ãŒããŒã¯ãé ç¹ã®æçµçãªäœçœ®ãå®çŸ©ããããã«ãã®å€æ°ãèšå®ããå¿ èŠããããŸãã
- gl_FragCoord (ãã©ã°ã¡ã³ãã·ã§ãŒããŒ): ãã©ã°ã¡ã³ãã®ã¹ã¯ãªãŒã³ç©ºé座æšã衚ããŸãã
- texture2D(sampler2D, vec2): æå®ããããã¯ã¹ãã£åº§æšã§2Dãã¯ã¹ãã£ããµã³ããªã³ã°ããŸãã
- normalize(vec3): æ£èŠåããããã¯ãã«ïŒé·ãã1ã®ãã¯ãã«ïŒãè¿ããŸãã
- dot(vec3, vec3): 2ã€ã®ãã¯ãã«ã®ãããç©ãèšç®ããŸãã
- mix(float, float, float): 2ã€ã®å€ã®éã§ç·åœ¢è£éãå®è¡ããŸãã
åºæ¬çãªã·ã§ãŒããŒã®äŸ
äžå¿çãªæŠå¿µã説æããããã«ãããã€ãã®ç°¡åãªã·ã§ãŒããŒã®äŸãèŠãŠãããŸãããã
ã·ã³ãã«ãªé ç¹ã·ã§ãŒããŒïŒGLSLïŒ
#version 330 core
layout (location = 0) in vec3 aPos;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * model * vec4(aPos, 1.0);
}
ãã®é ç¹ã·ã§ãŒããŒã¯ãé ç¹äœçœ®ãå ¥åïŒ`aPos`ïŒãšããŠåãåããã¢ãã«ã»ãã¥ãŒã»ãããžã§ã¯ã·ã§ã³å€æãé©çšããŠæçµçãªã¯ãªãã空éäœçœ®ïŒ`gl_Position`ïŒãèšç®ããŸãã`model`ã`view`ã`projection` è¡åã¯CPUã«ãã£ãŠèšå®ããããŠããã©ãŒã ã§ãã
ã·ã³ãã«ãªãã©ã°ã¡ã³ãã·ã§ãŒããŒïŒGLSLïŒ
#version 330 core
out vec4 FragColor;
uniform vec3 color;
void main()
{
FragColor = vec4(color, 1.0);
}
ãã®ãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ããã¯ã»ã«ã®è²ããŠããã©ãŒã ã®è²ïŒ`color`ïŒã«èšå®ããŸãã`FragColor`倿°ã¯ãã¯ã»ã«ã®æçµçãªè²ã衚ããŸãã
ãã¯ã¹ãã£ã®é©çšïŒGLSLïŒ
ãã®äŸã§ã¯ã3Dã¢ãã«ã«ãã¯ã¹ãã£ãé©çšããæ¹æ³ã瀺ããŸãã
é ç¹ã·ã§ãŒããŒ
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;
out vec2 TexCoord;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * model * vec4(aPos, 1.0);
TexCoord = aTexCoord;
}
ãã©ã°ã¡ã³ãã·ã§ãŒããŒ
#version 330 core
out vec4 FragColor;
in vec2 TexCoord;
uniform sampler2D texture1;
void main()
{
FragColor = texture(texture1, TexCoord);
}
ãã®äŸã§ã¯ãé ç¹ã·ã§ãŒããŒããã¯ã¹ãã£åº§æšïŒ`TexCoord`ïŒããã©ã°ã¡ã³ãã·ã§ãŒããŒã«æž¡ããŸãããã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ã`texture`颿°ã䜿çšããŠæå®ããã座æšã§ãã¯ã¹ãã£ããµã³ããªã³ã°ãããã¯ã»ã«ã®è²ããµã³ããªã³ã°ãããè²ã«èšå®ããŸãã
ã·ã§ãŒããŒã«ããé«åºŠãªããžã¥ã¢ã«ãšãã§ã¯ã
åºæ¬çãªã¬ã³ããªã³ã°ãè¶ ããŠãã·ã§ãŒããŒã¯å€å²ã«ãããé«åºŠãªããžã¥ã¢ã«ãšãã§ã¯ããäœæããããã«äœ¿çšã§ããŸãã
ã©ã€ãã£ã³ã°ãšã·ã£ããŠ
ã·ã§ãŒããŒã¯ããªã¢ã«ãªã©ã€ãã£ã³ã°ãšã·ã£ããŠãå®è£ ããããã«äžå¯æ¬ ã§ããæ¡æ£å ãé¡é¢åå°å ãç°å¢å ã®æåãèšç®ããããã·ã£ããŠãããã³ã°æè¡ãå®è£ ããŠãªã¢ã«ãªåœ±ãäœæãããããããã«äœ¿çšã§ããŸãã
ãã©ã³ãããªã³ã»ãã©ã³ãªã©ãããŸããŸãªã©ã€ãã£ã³ã°ã¢ãã«ãååšããããããç°ãªãã¬ãã«ã®ãªã¢ãªãºã ãšèšç®ã³ã¹ããæäŸããŸããçŸä»£ã®ç©çããŒã¹ã¬ã³ããªã³ã°ïŒPBRïŒæè¡ãã·ã§ãŒããŒã䜿çšããŠå®è£ ãããçŸå®äžçã§å ãããŸããŸãªç©è³ªãšã©ã®ããã«çžäºäœçšããããã·ãã¥ã¬ãŒãããããšã§ãããã«é«ããªã¢ãªãºã ãç®æããŠããŸãã
ãã¹ãããã»ãã·ã³ã°ãšãã§ã¯ã
ãã¹ãããã»ãã·ã³ã°ãšãã§ã¯ãã¯ãã¡ã€ã³ã®ã¬ã³ããªã³ã°ãã¹ã®åŸã«ã¬ã³ããªã³ã°ãããç»åã«é©çšãããŸããã·ã§ãŒããŒã䜿çšããŠã次ã®ãããªãšãã§ã¯ããå®è£ ã§ããŸãã
- ãã«ãŒã : æããé åã®åšãã«ã°ããŒå¹æãçã¿åºããŸãã
- ãã©ãŒ: 飿¥ãããã¯ã»ã«ã®è²ãå¹³ååããŠç»åãæ»ããã«ããŸãã
- ã«ã©ãŒã³ã¬ã¯ã·ã§ã³: ç¹å®ã®ã ãŒããã¹ã¿ã€ã«ãäœãåºãããã«ç»åã®è²ã調æŽããŸãã
- 被åçæ·±åºŠ: ãã³ããåã£ãŠããªããªããžã§ã¯ãã®ãŒãããã·ãã¥ã¬ãŒãããŸãã
- ã¢ãŒã·ã§ã³ãã©ãŒ: åããŠãããªããžã§ã¯ãã®ãŒãããã·ãã¥ã¬ãŒãããŸãã
- è²åå·®: ã¬ã³ãºã®äžå®å šæ§ã«ãã£ãŠåŒãèµ·ããããè²ã®æªã¿ãã·ãã¥ã¬ãŒãããŸãã
ããŒãã£ã¯ã«ãšãã§ã¯ã
ã·ã§ãŒããŒã¯ãçãç ãççºãªã©ã®è€éãªããŒãã£ã¯ã«ãšãã§ã¯ããäœæããããã«äœ¿çšã§ããŸããåã ã®ããŒãã£ã¯ã«ã®äœçœ®ãè²ããµã€ãºãæäœããããšã§ãèŠèŠçã«èŠäºã§ãã€ãããã¯ãªãšãã§ã¯ããäœæã§ããŸãã
ã³ã³ãã¥ãŒãã·ã§ãŒããŒã¯ã倿°ã®ããŒãã£ã¯ã«ã«å¯ŸããŠäžŠåã«èšç®ãå®è¡ã§ãããããããŒãã£ã¯ã«ã·ãã¥ã¬ãŒã·ã§ã³ã«ãã䜿çšãããŸãã
æ°Žã·ãã¥ã¬ãŒã·ã§ã³
ãªã¢ã«ãªæ°Žã·ãã¥ã¬ãŒã·ã§ã³ã®äœæã¯ãã·ã§ãŒããŒããã°ã©ãã³ã°ã®ææŠçã§ãããªããããããã®ããå¿çšåéã§ããã·ã§ãŒããŒã¯ãæ³¢ãåå°ã屿ãã·ãã¥ã¬ãŒãããæ²¡å ¥æã®ããèŠèŠçã«é åçãªæ°Žé¢ãäœæããããã«äœ¿çšã§ããŸãã
Gerstneræ³¢ãé«éããŒãªãšå€æïŒFFTïŒãªã©ã®æè¡ãããªã¢ã«ãªæ³¢ã®ãã¿ãŒã³ãçæããããã«ãã䜿çšãããŸãã
ããã·ãŒãžã£ã«çæ
ã·ã§ãŒããŒã¯ããã¯ã¹ãã£ããžãªã¡ããªãããã·ãŒãžã£ã«ã«çæããããã«äœ¿çšã§ããäºåã«äœæãããã¢ã»ããã«é Œãããšãªããè€éã§è©³çްãªã·ãŒã³ãäœæã§ããŸãã
äŸãã°ãã·ã§ãŒããŒã䜿çšããŠå°åœ¢ãé²ããã®ä»ã®èªç¶çŸè±¡ãçæã§ããŸãã
ã·ã§ãŒããŒããã°ã©ãã³ã°ã®ããã®ããŒã«ãšãªãœãŒã¹
ã·ã§ãŒããŒããã°ã©ã ã®åŠç¿ãšéçºã«åœ¹ç«ã€ããã€ãã®ããŒã«ãšãªãœãŒã¹ããããŸãã
- ã·ã§ãŒããŒIDE: ShaderEDãShadertoyãRenderDocãªã©ã®ããŒã«ã¯ãã·ã§ãŒããŒã®èšè¿°ããããã°ããããã¡ã€ãªã³ã°ã®ããã®å°çšç°å¢ãæäŸããŸãã
- ã²ãŒã ãšã³ãžã³: UnityãUnreal Engineã¯ãçµã¿èŸŒã¿ã®ã·ã§ãŒããŒãšãã£ã¿ãšãããžã¥ã¢ã«ãšãã§ã¯ããäœæããããã®èšå€§ãªãªãœãŒã¹ã©ã€ãã©ãªãæäŸããŸãã
- ãªã³ã©ã€ã³ãã¥ãŒããªã¢ã«ãšããã¥ã¡ã³ã: The Book of Shadersãlearnopengl.comãå ¬åŒã®OpenGLããã³DirectXããã¥ã¡ã³ããªã©ã®ãŠã§ããµã€ãã¯ãå æ¬çãªãã¥ãŒããªã¢ã«ãšãªãã¡ã¬ã³ã¹è³æãæäŸããŠããŸãã
- ãªã³ã©ã€ã³ã³ãã¥ããã£: Stack OverflowãRedditã®r/GraphicsProgrammingãªã©ã®ãã©ãŒã©ã ããªã³ã©ã€ã³ã³ãã¥ããã£ã¯ã質åãããããç¥èãå ±æããããä»ã®ã·ã§ãŒããŒããã°ã©ããŒãšååãããããããã®ãã©ãããã©ãŒã ãæäŸããŸãã
ã·ã§ãŒããŒã®æé©åæè¡
ã·ã§ãŒããŒã®æé©åã¯ãç¹ã«ã¢ãã€ã«ããã€ã¹ãããŒãšã³ãã®ããŒããŠã§ã¢ã§è¯å¥œãªããã©ãŒãã³ã¹ãéæããããã«éåžžã«éèŠã§ãã以äžã«ããã€ãã®æé©åæè¡ã瀺ããŸãã
- ãã¯ã¹ãã£ã«ãã¯ã¢ããã®åæž: ãã¯ã¹ãã£ã«ãã¯ã¢ããã¯æ¯èŒçé«äŸ¡ã§ããã·ã§ãŒããŒã§ã®ãã¯ã¹ãã£ã«ãã¯ã¢ããã®æ°ãæå°éã«æããŸãã
- äœç²ŸåºŠã®ããŒã¿åã䜿çšãã: `double`倿°ã®ä»£ããã«`float`倿°ã䜿çšããå¯èœãªå Žåã¯`highp`ã®ä»£ããã«`lowp`ãŸãã¯`mediump`ã䜿çšããŸãã
- åå²ãæå°éã«æãã: åå²ïŒ`if`æã®äœ¿çšïŒã¯ãç¹ã«GPUã§ããã©ãŒãã³ã¹ãäœäžãããå¯èœæ§ããããŸããåå²ãé¿ãããã`mix`ã`step`ãªã©ã®ä»£æ¿æè¡ã䜿çšããããã«ããŠãã ããã
- æ°åŠæŒç®ã®æé©å: æé©åãããæ°åŠé¢æ°ã䜿çšããäžèŠãªèšç®ãé¿ããŸãã
- ã·ã§ãŒããŒã®ãããã¡ã€ãªã³ã°: ãããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠãã·ã§ãŒããŒã®ããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããŸãã
æ§ã ãªç£æ¥ã«ãããã·ã§ãŒããŒããã°ã©ãã³ã°
ã·ã§ãŒããŒããã°ã©ãã³ã°ã¯ãã²ãŒã ãæ ç»ä»¥å€ã®æ§ã ãªç£æ¥ã§å¿çšãããŠããŸãã
- å»çç»å: ã·ã§ãŒããŒã¯ãMRIãCTã¹ãã£ã³ãªã©ã®å»çç»åã®å¯èŠåãšåŠçã«äœ¿çšãããŸãã
- ç§åŠçå¯èŠå: ã·ã§ãŒããŒã¯ãæ°åã¢ãã«ãæµäœååŠã·ãã¥ã¬ãŒã·ã§ã³ãªã©ã®è€éãªç§åŠããŒã¿ãå¯èŠåããããã«äœ¿çšãããŸãã
- 建ç¯: ã·ã§ãŒããŒã¯ããªã¢ã«ãªå»ºç¯ããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ãã·ãã¥ã¬ãŒã·ã§ã³ãäœæããããã«äœ¿çšãããŸãã
- èªåè»: ã·ã§ãŒããŒã¯ããªã¢ã«ãªè»ã®ã¬ã³ããªã³ã°ãã·ãã¥ã¬ãŒã·ã§ã³ã®äœæã«äœ¿çšãããŸãã
ã·ã§ãŒããŒããã°ã©ãã³ã°ã®æªæ¥
ã·ã§ãŒããŒããã°ã©ãã³ã°ã¯çµ¶ããé²åããŠããåéã§ããæ°ããããŒããŠã§ã¢ããã³ãœãããŠã§ã¢æè¡ããå¯èœãªããšã®éçãåžžã«æŒãåºããŠããŸããããã€ãã®æ°ããªãã¬ã³ãã«ã¯ã次ã®ãããªãã®ããããŸãã
- ã¬ã€ãã¬ãŒã·ã³ã°: ã¬ã€ãã¬ãŒã·ã³ã°ã¯ãå ç·ã®çµè·¯ãã·ãã¥ã¬ãŒãããŠéåžžã«ãªã¢ã«ãªç»åãäœæããã¬ã³ããªã³ã°æè¡ã§ããã·ã§ãŒããŒã¯ãGPUäžã§ã¬ã€ãã¬ãŒã·ã³ã°ã¢ã«ãŽãªãºã ãå®è£ ããããã«äœ¿çšãããŸãã
- ãã¥ãŒã©ã«ã¬ã³ããªã³ã°: ãã¥ãŒã©ã«ã¬ã³ããªã³ã°ã¯ãæ©æ¢°åŠç¿ãšã³ã³ãã¥ãŒã¿ã°ã©ãã£ãã¯ã¹ãçµã¿åãããŠãæ°ãã驿°çãªã¬ã³ããªã³ã°æè¡ãçã¿åºããŸããã·ã§ãŒããŒã¯ããã¥ãŒã©ã«ã¬ã³ããªã³ã°ã¢ã«ãŽãªãºã ãå®è£ ããããã«äœ¿çšãããŸãã
- ã³ã³ãã¥ãŒãã·ã§ãŒããŒ: ã³ã³ãã¥ãŒãã·ã§ãŒããŒã¯ãGPUäžã§æ±çšèšç®ãå®è¡ããããã«ãŸããŸã人æ°ãé«ãŸã£ãŠããŸããç©çã·ãã¥ã¬ãŒã·ã§ã³ãAIãããŒã¿åŠçãªã©ã®ã¿ã¹ã¯ã«äœ¿çšãããŸãã
- WebGPU: WebGPUã¯ãGPUã®æ©èœã«ã¢ã¯ã»ã¹ããããã®ã¢ãã³ã§å¹ççãªã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããæ°ãããŠã§ãã°ã©ãã£ãã¯ã¹APIã§ããWebGLã«åã£ãŠä»£ãããWebäžã§ããé«åºŠãªã·ã§ãŒããŒããã°ã©ãã³ã°ãå¯èœã«ãããšèããããŠããŸãã
çµè«
ã·ã§ãŒããŒããã°ã©ãã³ã°ã¯ãèŠäºãªããžã¥ã¢ã«ãšãã§ã¯ããäœæããã³ã³ãã¥ãŒã¿ã°ã©ãã£ãã¯ã¹ã®éçãæŒãåºããããã®åŒ·åãªããŒã«ã§ããæ žå¿çãªæŠå¿µãçè§£ããé¢é£ããããŒã«ãšæè¡ãç¿åŸããããšã§ãããªãã®åµé çãªå¯èœæ§ãè§£ãæŸã¡ãããžã§ã³ãå®çŸããããšãã§ããŸããã²ãŒã éçºè ãæ ç»ã¢ãŒãã£ã¹ããç§åŠè ã®ãããã§ãã£ãŠããã·ã§ãŒããŒããã°ã©ãã³ã°ã¯èŠèŠçåµé ã®äžçãæ¢æ±ããããã®ãŠããŒã¯ã§ããããã®ããéãæäŸããŸããæè¡ã鲿©ããã«ã€ããŠãã·ã§ãŒããŒã®åœ¹å²ã¯å¢ãç¶ããã ãã§ãããã·ã§ãŒããŒããã°ã©ãã³ã°ã¯ããžã¿ã«æä»£ã«ãããŠãŸããŸã䟡å€ã®ããã¹ãã«ãšãªãã§ãããã
ãã®ã¬ã€ãã¯ãããªãã®ã·ã§ãŒããŒããã°ã©ãã³ã°ã®æ ã®åºç€ãæäŸããŸããç·Žç¿ããå®éšãããªã³ã©ã€ã³ã§å©çšå¯èœãªåºå€§ãªãªãœãŒã¹ãæ¢æ±ããŠãã¹ãã«ãããã«åäžãããç¬èªã®ãŠããŒã¯ãªããžã¥ã¢ã«ãšãã§ã¯ããäœæããããšãå¿ããªãã§ãã ããã