WebGLã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ããã®é«åºŠãªã©ã€ãã«ãªã³ã°æè¡ãè€éãª3Dã·ãŒã³ã§ã®ããã©ãŒãã³ã¹åäžã«ã€ããŠè§£èª¬ãå®è£ 詳现ãå©ç¹ãå°æ¥ã®ååãåŠã³ãŸãã
WebGLã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ïŒé«åºŠãªã©ã€ãã«ãªã³ã°æè¡
ãªã¢ã«ã¿ã€ã ã¬ã³ããªã³ã°ã«ãããŠã倿°ã®åçã©ã€ããæã€è€éãª3Dã·ãŒã³ã®æç»ã¯ãçŸä»£ã®ã°ã©ãã£ãã¯ã¹ãšã³ãžã³ã«ãšã£ãŠå€§ããªèª²é¡ã§ããã©ã€ãã®æ°ãå¢å ããã«ã€ããŠãåãã¯ã»ã«ãã·ã§ãŒãã£ã³ã°ããããã®èšç®ã³ã¹ãã¯æ³å€ãªãã®ã«ãªããŸããåŸæ¥ã®ãã©ã¯ãŒãã¬ã³ããªã³ã°ã¯ãã®ã·ããªãªã«èŠæŠããããã©ãŒãã³ã¹ã®ããã«ããã¯ã蚱容ã§ããªããã¬ãŒã ã¬ãŒããåŒãèµ·ãããŸããã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã¯ãç¹ã«ã©ã€ãæ°ãå€ãã·ãŒã³ã§å¹ççãªã©ã€ãã«ãªã³ã°ãšããã©ãŒãã³ã¹åäžãæäŸãã匷åãªãœãªã¥ãŒã·ã§ã³ãšããŠç»å ŽããŸããããã®ããã°èšäºã§ã¯ãWebGLã«ãããã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã®è€éããæãäžãããã®é«åºŠãªã©ã€ãã«ãªã³ã°æè¡ãæ¢æ±ããèŠèŠçã«èŠäºã§é«æ§èœãª3DãŠã§ãã¢ããªã±ãŒã·ã§ã³ãäœæããããã®å©ç¹ãå®èšŒããŸãã
ãã©ã¯ãŒãã¬ã³ããªã³ã°ã®éçãçè§£ãã
æšæºçãªãã©ã¯ãŒãã¬ã³ããªã³ã°ã§ã¯ãåå æºã¯ã·ãŒã³å ã®ãã¹ãŠã®å¯èŠãã¯ã»ã«ã«å¯ŸããŠè©äŸ¡ãããŸãããã®ããã»ã¹ã«ã¯ãè·é¢ãæžè¡°ã衚é¢ç¹æ§ãªã©ã®èŠçŽ ãèæ ®ããŠãåã©ã€ãã®æçµçãªãã¯ã»ã«ã«ã©ãŒãžã®è²¢ç®åºŠãèšç®ããããšãå«ãŸããŸãããã®ã¢ãããŒãã®èšç®è€é床ã¯ã©ã€ãã®æ°ãšãã¯ã»ã«ã®æ°ã«çŽæ¥æ¯äŸãããããå€ãã®ã©ã€ããæã€ã·ãŒã³ã§ã¯éåžžã«éå¹çã§ããæ±äº¬ã®è³ãããªå€åžããäœçŸãã®ã¹ãããã©ã€ããããã³ã³ãµãŒãã¹ããŒãžã®ãããªã·ããªãªãèããŠã¿ãŠãã ããããã®ãããªå ŽåãåŸæ¥ã®ãã©ã¯ãŒãã¬ã³ããªã³ã°ã®ããã©ãŒãã³ã¹ã³ã¹ãã¯æç¶äžå¯èœãªãã®ã«ãªããŸãã
äž»ãªéçã¯ãåãã¯ã»ã«ã«å¯ŸããŠå®è¡ãããåé·ãªèšç®ã«ãããŸããå€ãã®ã©ã€ãã¯ãé ããããä»ã®ãªããžã§ã¯ãã«é®èœãããŠããããŸãã¯å ã匱ããããªã©ã®çç±ã§ãç¹å®ã®ãã¯ã»ã«ã®æçµçãªè²ã«å€§ããè²¢ç®ããªãå¯èœæ§ããããŸãããããã®ç¡é¢ä¿ãªã©ã€ããè©äŸ¡ããããšã¯ã貎éãªGPUãªãœãŒã¹ã浪費ããŸãã
ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã®ç޹ä»
ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã¯ãæŽç·Žãããã©ã€ãã«ãªã³ã°æè¡ãæ¡çšããããšã§ãåŸæ¥ã®ãã©ã¯ãŒãã¬ã³ããªã³ã°ã®éçã«å¯ŸåŠããŸããäžå¿çãªã¢ã€ãã¢ã¯ã3Dã¬ã³ããªã³ã°ç©ºéããã¯ã©ã¹ã¿ãŒããšåŒã°ããå°ããªããªã¥ãŒã ã®ã°ãªããã«åå²ããããšã§ãããããã®ã¯ã©ã¹ã¿ãŒã¯ãã·ãŒã³å ã®å±æçãªé åã衚ããŸããæ¬¡ã«ãã¬ã³ããªã³ã°ããã»ã¹ã¯ã©ã®ã©ã€ããåã¯ã©ã¹ã¿ãŒã«åœ±é¿ãäžããããæ±ºå®ãããã®æ å ±ãããŒã¿æ§é ã«æ ŒçŽããŸããæçµçãªã·ã§ãŒãã£ã³ã°ãã¹ã§ã¯ãç¹å®ã®ã¯ã©ã¹ã¿ãŒã«é¢é£ããã©ã€ãã®ã¿ãèæ ®ãããèšç®ãªãŒããŒããããå€§å¹ ã«åæžãããŸãã
2ãã¹ã¢ãããŒã
ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã¯ãéåžž2ã€ã®äž»èŠãªãã¹ãå«ã¿ãŸãïŒ
- ã¯ã©ã¹ã¿ãŒäœæãšã©ã€ãå²ãåœãŠïŒ æåã®ãã¹ã§ã¯ã3D空éãã¯ã©ã¹ã¿ãŒã«åå²ãããåã©ã€ãã圱é¿ãäžããå¯èœæ§ã®ããã¯ã©ã¹ã¿ãŒã«å²ãåœãŠãããŸããããã«ã¯ãåã©ã€ãã®ããŠã³ãã£ã³ã°ããªã¥ãŒã ïŒäŸïŒçãåéïŒãèšç®ããã©ã®ã¯ã©ã¹ã¿ãŒããã®ããªã¥ãŒã ãšäº€å·®ããããæ±ºå®ããããšãå«ãŸããŸãã
- ã·ã§ãŒãã£ã³ã°ãã¹ïŒ 2çªç®ã®ãã¹ã§ã¯ãã·ãŒã³ãã¬ã³ããªã³ã°ãããåãã¯ã»ã«ã«å¯ŸããŠå¯Ÿå¿ããã¯ã©ã¹ã¿ãŒãç¹å®ãããŸãããã®ã¯ã©ã¹ã¿ãŒã«é¢é£ä»ããããã©ã€ããããã¯ã»ã«ã®ã·ã§ãŒãã£ã³ã°ã«äœ¿çšãããŸãã
ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã®ããã©ã¹ã
ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã®ããã©ã¹ãã¯ãåºæ¬çãªã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒãã¬ã³ããªã³ã°ã®æŠå¿µãåºã«ããæ©èœåŒ·åãšæé©åãæããŸãããããã®æ©èœåŒ·åã«ã¯ãéåžžããã©ã¹ã¿ã ã«ãªã³ã°ããªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ãªã©ã®ããæŽç·Žãããã©ã€ãã«ãªã³ã°æè¡ããã¡ã¢ãªã¢ã¯ã»ã¹ãšã·ã§ãŒããŒå®è¡ã®æé©åãå«ãŸããŸãã
æè¡ã®è©³çްãªå èš³
1. ã¯ã©ã¹ã¿ãŒã®äœæ
æåã®ã¹ãããã¯ã3Dã¬ã³ããªã³ã°ç©ºéãã¯ã©ã¹ã¿ãŒã®ã°ãªããã«åå²ããããšã§ãããããã®ã¯ã©ã¹ã¿ãŒã®æ¬¡å ãšé 眮ã¯ãããã©ãŒãã³ã¹ãšã¡ã¢ãªäœ¿çšéãæé©åããããã«èª¿æŽã§ããŸããäžè¬çãªæŠç¥ã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- åäžã°ãªããïŒ ã¯ã©ã¹ã¿ãŒãèŠåçãªã°ãªããã«é 眮ããåçŽãªã¢ãããŒãã§ããå®è£ ã¯ç°¡åã§ãããã©ã€ãã®ååžãäžåäžãªã·ãŒã³ã«ã¯æé©ã§ãªãå ŽåããããŸãã
- é©å¿ã°ãªããïŒ ã·ãŒã³ã®ç°ãªãé åã«ãããã©ã€ãã®å¯åºŠã«åºã¥ããŠãã¯ã©ã¹ã¿ãŒã®ãµã€ãºãšé 眮ãåçã«èª¿æŽãããŸããããã«ããããã©ãŒãã³ã¹ãåäžããŸãããè€éããå¢ããŸãã
ã¯ã©ã¹ã¿ãŒã°ãªããã¯éåžžãã«ã¡ã©ã®ãã¥ãŒãã©ã¹ã¿ã ã«æŽåããããã¹ãŠã®å¯èŠãã¯ã»ã«ãã¯ã©ã¹ã¿ãŒå ã«åãŸãããã«ããŸããæ·±åºŠæåã¯ãã«ã¡ã©ããé ãããã«ã€ããŠå¢å ããæ·±åºŠç¯å²ãèæ ®ããŠãç·åœ¢ãŸãã¯éç·åœ¢ïŒäŸïŒå¯Ÿæ°çïŒã«åå²ã§ããŸãã
2. ã©ã€ãã®å²ãåœãŠ
ã¯ã©ã¹ã¿ãŒãäœæãããããåã©ã€ããããã圱é¿ãäžããå¯èœæ§ã®ããã¯ã©ã¹ã¿ãŒã«å²ãåœãŠãå¿ èŠããããŸããããã«ã¯ãã©ã€ãã®ããŠã³ãã£ã³ã°ããªã¥ãŒã ïŒäŸïŒãã€ã³ãã©ã€ãã®å Žåã¯çãã¹ãããã©ã€ãã®å Žåã¯åéïŒãèšç®ããã©ã®ã¯ã©ã¹ã¿ãŒããã®ããªã¥ãŒã ãšäº€å·®ããããæ±ºå®ããããšãå«ãŸããŸããåé¢è»žå®çïŒSATïŒã®ãããªã¢ã«ãŽãªãºã ã䜿çšããŠãã©ã€ãã®ããŠã³ãã£ã³ã°ããªã¥ãŒã ãšã¯ã©ã¹ã¿ãŒå¢çãšã®äº€å·®ãå¹ççã«ãã¹ãã§ããŸãã
ãã®ããã»ã¹ã®çµæã¯ãåã¯ã©ã¹ã¿ãŒãããã«åœ±é¿ãäžããã©ã€ãã®ãªã¹ãã«ãããã³ã°ããããŒã¿æ§é ã§ãããã®ããŒã¿æ§é ã¯ã次ã®ãããªããŸããŸãªæè¡ã䜿çšããŠå®è£ ã§ããŸãïŒ
- ãªã¹ãã®é åïŒ åã¯ã©ã¹ã¿ãŒã¯ãé¢é£ããã©ã€ãã€ã³ããã¯ã¹ã®ãªã¹ããæã¡ãŸãã
- ã³ã³ãã¯ããªè¡šçŸïŒ ã©ã€ãã€ã³ããã¯ã¹ãé£ç¶ããé åã«æ ŒçŽãããªãã»ããã䜿çšããŠåã¯ã©ã¹ã¿ãŒã«é¢é£ä»ããããã©ã€ããèå¥ãããããã¡ã¢ãªå¹çã®é«ãã¢ãããŒãã§ãã
3. ã·ã§ãŒãã£ã³ã°ãã¹
ã·ã§ãŒãã£ã³ã°ãã¹äžãåãã¯ã»ã«ãåŠçããããã®æçµçãªè²ãèšç®ãããŸãããã®ããã»ã¹ã«ã¯ã次ã®ã¹ããããå«ãŸããŸãïŒ
- ã¯ã©ã¹ã¿ãŒã®ç¹å®ïŒ ç»é¢åº§æšãšæ·±åºŠã«åºã¥ããŠãçŸåšã®ãã¯ã»ã«ãã©ã®ã¯ã©ã¹ã¿ãŒã«å±ããããæ±ºå®ããŸãã
- ã©ã€ãã®ååŸïŒ ã©ã€ãå²ãåœãŠããŒã¿æ§é ãããç¹å®ãããã¯ã©ã¹ã¿ãŒã«é¢é£ä»ããããã©ã€ãã®ãªã¹ããååŸããŸãã
- ã·ã§ãŒãã£ã³ã°èšç®ïŒ ååŸãããªã¹ãå ã®åã©ã€ãã«ã€ããŠããã¯ã»ã«ã®è²ãžã®è²¢ç®åºŠãèšç®ããŸãã
ãã®ã¢ãããŒãã«ãããåãã¯ã»ã«ã«å¯ŸããŠé¢é£ããã©ã€ãã®ã¿ãèæ ®ãããããã«ãªããåŸæ¥ã®ãã©ã¯ãŒãã¬ã³ããªã³ã°ãšæ¯èŒããŠèšç®ãªãŒããŒããããå€§å¹ ã«åæžãããŸããäŸãã°ãã ã³ãã€ã®è¡è·¯ç¯ãè»äž¡ã®ãããã©ã€ããæ°å€ãããã¹ããªãŒãã·ãŒã³ãæ³åããŠã¿ãŠãã ãããã©ã€ãã«ãªã³ã°ããªããã°ããã¹ãŠã®ã©ã€ãããã¹ãŠã®ãã¯ã»ã«ã«å¯ŸããŠèšç®ãããŸããã¯ã©ã¹ã¿ãŒåã¬ã³ããªã³ã°ã䜿çšãããšãã·ã§ãŒãã£ã³ã°ããããªããžã§ã¯ãã®è¿ãã«ããã©ã€ãã®ã¿ãèæ ®ãããå¹çãåçã«åäžããŸãã
WebGLå®è£ ã®è©³çް
WebGLã§ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ãå®è£ ããã«ã¯ãã·ã§ãŒããŒããã°ã©ãã³ã°ãããŒã¿æ§é ãã¡ã¢ãªç®¡çãæ éã«æ€èšããå¿ èŠããããŸããWebGL 2ã¯ããã©ã³ã¹ãã©ãŒã ãã£ãŒãããã¯ããŠããã©ãŒã ãããã¡ãªããžã§ã¯ãïŒUBOïŒãã³ã³ãã¥ãŒãã·ã§ãŒããŒïŒæ¡åŒµæ©èœçµç±ïŒãªã©ãå¹ççãªå®è£ ã容æã«ããéèŠãªæ©èœãæäŸããŸãã
ã·ã§ãŒããŒããã°ã©ãã³ã°
ã©ã€ãå²ãåœãŠãšã·ã§ãŒãã£ã³ã°ãã¹ã¯ãéåžžGLSLã·ã§ãŒããŒã䜿çšããŠå®è£ ãããŸããã©ã€ãå²ãåœãŠã·ã§ãŒããŒã¯ãã¯ã©ã¹ã¿ãŒã€ã³ããã¯ã¹ãèšç®ããã©ã€ããé©åãªã¯ã©ã¹ã¿ãŒã«å²ãåœãŠã圹å²ãæ ããŸããã·ã§ãŒãã£ã³ã°ã·ã§ãŒããŒã¯ãé¢é£ããã©ã€ããååŸããæçµçãªã·ã§ãŒãã£ã³ã°èšç®ãå®è¡ããŸãã
GLSLã¹ããããäŸïŒã©ã€ãå²ãåœãŠïŒ
#version 300 es
in vec3 lightPosition;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform vec3 clusterDimensions;
uniform vec3 clusterCounts;
out int clusterIndex;
void main() {
vec4 worldPosition = vec4(lightPosition, 1.0);
vec4 viewPosition = viewMatrix * worldPosition;
vec4 clipPosition = projectionMatrix * viewPosition;
vec3 ndc = clipPosition.xyz / clipPosition.w;
// Calculate cluster index based on NDC coordinates
ivec3 clusterCoords = ivec3(floor(ndc.xyz * 0.5 + 0.5) * clusterCounts);
clusterIndex = clusterCoords.x + clusterCoords.y * int(clusterCounts.x) + clusterCoords.z * int(clusterCounts.x * clusterCounts.y);
}
GLSLã¹ããããäŸïŒã·ã§ãŒãã£ã³ã°ïŒ
#version 300 es
precision highp float;
in vec2 v_texcoord;
uniform sampler2D u_texture;
uniform samplerBuffer u_lightBuffer;
uniform ivec3 u_clusterCounts;
uniform int u_clusterIndex;
out vec4 fragColor;
// Function to retrieve light data from the buffer
vec3 getLightPosition(int index) {
return texelFetch(u_lightBuffer, index * 3 + 0).xyz;
}
vec3 getLightColor(int index) {
return texelFetch(u_lightBuffer, index * 3 + 1).xyz;
}
float getLightIntensity(int index) {
return texelFetch(u_lightBuffer, index * 3 + 2).x;
}
void main() {
vec4 baseColor = texture(u_texture, v_texcoord);
vec3 finalColor = baseColor.rgb;
// Iterate through lights associated with the cluster
for (int i = 0; i < numLightsInCluster(u_clusterIndex); ++i) {
int lightIndex = getLightIndexFromCluster(u_clusterIndex, i);
vec3 lightPos = getLightPosition(lightIndex);
vec3 lightColor = getLightColor(lightIndex);
float lightIntensity = getLightIntensity(lightIndex);
// Perform shading calculations (e.g., Lambertian shading)
// ...
}
fragColor = vec4(finalColor, baseColor.a);
}
ããŒã¿æ§é
å¹ççãªããŒã¿æ§é ã¯ãã¯ã©ã¹ã¿ãŒãšã©ã€ãæ å ±ãæ ŒçŽãã¢ã¯ã»ã¹ããããã«äžå¯æ¬ ã§ããUBOã¯ãã¯ã©ã¹ã¿ãŒã®æ¬¡å ãæ°ãªã©ã®å®æ°ããŒã¿ãæ ŒçŽããããã«äœ¿çšã§ãããã¯ã¹ãã£ãããã¡ã¯ã©ã€ãããŒã¿ãšã¯ã©ã¹ã¿ãŒã®å²ãåœãŠãæ ŒçŽããããã«äœ¿çšã§ããŸãã
ãã«ãªã³ã®ã³ã³ãµãŒãããŒã«ã®ç §æã衚çŸããã·ã¹ãã ãèããŠã¿ãŸããããUBOã«ã¯ã¹ããŒãžã®å¯žæ³ãã«ã¡ã©ã®äœçœ®ã«é¢ããããŒã¿ãæ ŒçŽããããããããŸããããã¯ã¹ãã£ãããã¡ã«ã¯ãåã¹ããŒãžã©ã€ãã®è²ã匷床ãäœçœ®ããããŠãããã®ã©ã€ããã©ã®ã¯ã©ã¹ã¿ãŒã«åœ±é¿ãäžãããã«é¢ããããŒã¿ãä¿æã§ããŸãã
ã³ã³ãã¥ãŒãã·ã§ãŒããŒ
ã³ã³ãã¥ãŒãã·ã§ãŒããŒïŒå©çšå¯èœãªå Žå㯠`EXT_shader_compute_derivatives` æ¡åŒµæ©èœã䜿çšïŒã¯ãã©ã€ãå²ãåœãŠããã»ã¹ãé«éåããããã«äœ¿çšã§ããŸããã³ã³ãã¥ãŒãã·ã§ãŒããŒã¯GPUäžã§ã®èšç®ã®äžŠåå®è¡ãå¯èœã«ããã¯ã©ã¹ã¿ãŒã®äº€å·®èšç®ãã©ã€ãã®å²ãåœãŠãªã©ã®ã¿ã¹ã¯ã«çæ³çã§ãããã ããåºç¯ãªå©çšå¯èœæ§ãšããã©ãŒãã³ã¹ç¹æ§ã¯æ éã«èæ ®ããå¿ èŠããããŸãã
ã¡ã¢ãªç®¡ç
WebGLã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¡ã¢ãªãå¹ççã«ç®¡çããããšãäžå¯æ¬ ã§ããUBOãšãã¯ã¹ãã£ãããã¡ã䜿çšããŠãCPUãšGPUéã®ããŒã¿è»¢éãæå°éã«æããããšãã§ããŸããããã«ãããã«ãããã¡ãªã³ã°ãªã©ã®æè¡ã䜿çšããŠãã¬ã³ããªã³ã°äžã®åæ¢ãé²ãããšãã§ããŸãã
ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã®å©ç¹
ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã¯ãç¹ã«å€ãã®åçã©ã€ããæã€ã·ãŒã³ã«ãããŠãåŸæ¥ã®ãã©ã¯ãŒãã¬ã³ããªã³ã°ã«æ¯ã¹ãŠããã€ãã®å©ç¹ãæäŸããŸãïŒ
- ããã©ãŒãã³ã¹ã®åäžïŒ ç¡é¢ä¿ãªã©ã€ããã«ãªã³ã°ããããšã§ãã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã¯ã·ã§ãŒãã£ã³ã°ãã¹ã®èšç®ãªãŒããŒããããå€§å¹ ã«åæžããããé«ããã¬ãŒã ã¬ãŒããå®çŸããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒ ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã®ããã©ãŒãã³ã¹ã¯ãåŸæ¥ã®ãã©ã¯ãŒãã¬ã³ããªã³ã°ãšæ¯èŒããŠã©ã€ãã®æ°ã«å¯ŸããŠããè¯ãã¹ã±ãŒã«ããŸããããã«ãããæ°çŸããããã¯æ°åã®åçã©ã€ããæã€ã·ãŒã³ã«é©ããŠããŸãã
- èŠèŠçåè³ªïŒ ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã¯ãããã©ãŒãã³ã¹ãç ç²ã«ããããšãªãããå€ãã®ã©ã€ãã䜿çšã§ãããããããèŠèŠçã«è±ãã§ãªã¢ã«ãªã·ãŒã³ã®äœæãå¯èœã«ããŸãã
ããªæ±äº¬ã®ãããªæªæ¥éœåžãèå°ã«ããã²ãŒã ãèããŠã¿ãŸããããéœåžã¯ããªã³ãµã€ã³ããããã©ã€ããæã€é£è¡è»äž¡ããããŠæ°å€ãã®åçå æºã§æºããããŠããŸããã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã«ãããã²ãŒã ãšã³ãžã³ã¯ãã®è€éãªã·ãŒã³ãé«ããã£ããŒã«ãšãªã¢ãªãºã ã§ã¬ã³ããªã³ã°ãã€ã€ãããã©ãŒãã³ã¹ãç ç²ã«ããŸããããããåŸæ¥ã®ãã©ã¯ãŒãã¬ã³ããªã³ã°ãšæ¯èŒãããšããã¬ã€å¯èœãªãã¬ãŒã ã¬ãŒããç¶æããããã«ã¯ã©ã€ãã®æ°ãå€§å¹ ã«æžããå¿ èŠããããã·ãŒã³ã®èŠèŠçå¿ å®åºŠãæãªãããŸãã
課é¡ãšèæ ®äºé
ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã¯å€§ããªå©ç¹ãæäŸããŸãããããã€ãã®èª²é¡ãšèæ ®äºé ãæç€ºããŸãïŒ
- å®è£ ã®è€éãïŒ ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã®å®è£ ã¯ãåŸæ¥ã®ãã©ã¯ãŒãã¬ã³ããªã³ã°ãããè€éã§ããããŒã¿æ§é ãšã·ã§ãŒããŒã®æ éãªèšèšãå¿ èŠã§ãã
- ã¡ã¢ãªäœ¿çšéïŒ ã¯ã©ã¹ã¿ãŒãšã©ã€ãã®æ å ±ãæ ŒçŽããã«ã¯ã远å ã®ã¡ã¢ãªãå¿ èŠã§ããå¿ èŠãªã¡ã¢ãªéã¯ãã¯ã©ã¹ã¿ãŒã®ãµã€ãºãšé 眮ãããã³ã©ã€ãã®æ°ã«äŸåããŸãã
- ãªãŒããŒãããïŒ ã©ã€ãå²ãåœãŠãã¹ã¯ãããçšåºŠã®ãªãŒããŒããããå°å ¥ããŸãããã®ãªãŒããŒãããã®ã³ã¹ãã¯ãã©ã€ãã«ãªã³ã°ã«ããããã©ãŒãã³ã¹åäžãšæ¯èŒæ€èšããå¿ èŠããããŸãã
- éæåºŠïŒ ã¯ã©ã¹ã¿ãŒåã¬ã³ããªã³ã°ã§éæåºŠãæ±ãã«ã¯ãæ éãªèæ ®ãå¿ èŠã§ããéæãªãªããžã§ã¯ãã¯ãå¥éã¬ã³ããªã³ã°ããããç°ãªãã¬ã³ããªã³ã°æè¡ã䜿çšããå¿ èŠãããå ŽåããããŸãã
äŸãã°ããªãŒã¹ãã©ãªã¢æ²ã®ãµã³ãŽç€ãã·ãã¥ã¬ãŒãããããŒãã£ã«ãªã¢ãªãã£ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããããå ãšãµã³ãŽã®è€éãªãã£ããŒã«ã«ã¯å€ãã®ã©ã€ããå¿ èŠã«ãªããŸãããããã倿°ã®éæãªéãæ€ç©ã®ååšã¯ãã¢ãŒãã£ãã¡ã¯ããé¿ããããã©ãŒãã³ã¹ãç¶æããããã«æ éãªåãæ±ããå¿ èŠãšããŸãã
ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã®ä»£æ¿æ¡
ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã¯åŒ·åãªæè¡ã§ãããå€ãã®ã©ã€ããæã€ã·ãŒã³ãæ±ãããã®ä»ã®ããã€ãã®ã¢ãããŒããååšããŸãããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- ãã£ãã¡ãŒãã¬ã³ããªã³ã°ïŒ ãã®æè¡ã¯ãã·ãŒã³ãè€æ°ã®ãã¹ã§ã¬ã³ããªã³ã°ãããžãªã¡ããªãšã©ã€ãã£ã³ã°ã®èšç®ãåé¢ããŸãããã£ãã¡ãŒãã¬ã³ããªã³ã°ã¯ãå€ãã®ã©ã€ããæã€ã·ãŒã³ã§ã¯ãã©ã¯ãŒãã¬ã³ããªã³ã°ãããå¹ççã§ãããéæåºŠãã¢ã³ããšã€ãªã¢ã·ã³ã°ã§èª²é¡ãçããããšããããŸãã
- ã¿ã€ã«åãã£ãã¡ãŒãã¬ã³ããªã³ã°ïŒ ãã£ãã¡ãŒãã¬ã³ããªã³ã°ã®å€çš®ã§ãç»é¢ãã¿ã€ã«ã«åå²ããã¿ã€ã«ããšã«ã©ã€ãã«ãªã³ã°ãå®è¡ããŸããããã«ãããæšæºã®ãã£ãã¡ãŒãã¬ã³ããªã³ã°ãããããã©ãŒãã³ã¹ãåäžããããšããããŸãã
- ãã©ã¯ãŒã+ã¬ã³ããªã³ã°ïŒ ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒãã¬ã³ããªã³ã°ã®ç°¡ç¥çã§ãã©ã€ãã«ãªã³ã°ã«åäžã®ã¹ã¯ãªãŒã³ã¹ããŒã¹ã°ãªããã䜿çšããŸããããã¯ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ãããå®è£ ã容æã§ãããè€éãªã·ãŒã³ã§ã¯ããã»ã©å¹ççã§ã¯ãªãå ŽåããããŸãã
å°æ¥ã®ååãšæé©å
ãªã¢ã«ã¿ã€ã ã¬ã³ããªã³ã°ã®åéã¯åžžã«é²åããŠãããããã€ãã®ãã¬ã³ããã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã®æªæ¥ã圢äœã£ãŠããŸãïŒ
- ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ïŒ GPUããã匷åã«ãªããç¹æ®ãªããŒããŠã§ã¢æ©èœãå°å ¥ãããã«ã€ããŠãã©ã€ãã«ãªã³ã°ãšã·ã§ãŒãã£ã³ã°ã®èšç®ã¯ããã«å¹ççã«ãªããŸãã
- æ©æ¢°åŠç¿ïŒ æ©æ¢°åŠç¿æè¡ã䜿çšããŠãã¯ã©ã¹ã¿ãŒã®é 眮ãã©ã€ãã®å²ãåœãŠãã·ã§ãŒãã£ã³ã°ãã©ã¡ãŒã¿ãæé©åãããããªãããã©ãŒãã³ã¹åäžã«ã€ãªããããšãã§ããŸãã
- ã¬ã€ãã¬ãŒã·ã³ã°ïŒ ã¬ã€ãã¬ãŒã·ã³ã°ã¯ãåŸæ¥ã®ã©ã¹ã¿ã©ã€ãŒãŒã·ã§ã³ããŒã¹ã®ã¬ã³ããªã³ã°æè¡ã«ä»£ããå®è¡å¯èœãªä»£æ¿ææ®µãšããŠæµ®äžããŠããŸããã¬ã€ãã¬ãŒã·ã³ã°ã¯ãããªã¢ã«ãªç §æãšåœ±ãæäŸã§ããŸãããèšç®è² è·ãé«ãã§ããã¬ã€ãã¬ãŒã·ã³ã°ãšã©ã¹ã¿ã©ã€ãŒãŒã·ã§ã³ãçµã¿åããããã€ããªããã¬ã³ããªã³ã°æè¡ãããäžè¬çã«ãªããããããŸããã
ã·ãŒã³ã®è€éãã«å¿ããŠé©å¿çã«ã¯ã©ã¹ã¿ãŒãµã€ãºã決å®ãããããæŽç·Žãããã¢ã«ãŽãªãºã ã®éçºãèããŠã¿ãŸããããæ©æ¢°åŠç¿ã䜿çšããããšã§ããããã®ã¢ã«ãŽãªãºã ã¯æé©ãªã¯ã©ã¹ã¿ãŒé 眮ããªã¢ã«ã¿ã€ã ã§äºæž¬ããåçã§å¹ççãªã©ã€ãã«ãªã³ã°ã«ã€ãªããå¯èœæ§ããããŸããããã¯ç¹ã«ãäžäžãšãŒããããèå°ã«ããåºå€§ãªãªãŒãã³ã¯ãŒã«ãRPGãªã©ãæ§ã ãªç §ææ¡ä»¶ãæã€å€§èŠæš¡ãªãªãŒãã³ã¯ãŒã«ããç¹åŸŽãšããã²ãŒã ã§æçã§ãããã
çµè«
ã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã¯ãå€ãã®åçã©ã€ããæã€WebGLã¢ããªã±ãŒã·ã§ã³ã«ãããŠãªã¢ã«ã¿ã€ã ã¬ã³ããªã³ã°ã®ããã©ãŒãã³ã¹ãåäžãããããã®åŒ·åãªæè¡ã§ããç¡é¢ä¿ãªã©ã€ããå¹ççã«ã«ãªã³ã°ããããšã§ãã·ã§ãŒãã£ã³ã°ãã¹ã®èšç®ãªãŒããŒããããåæžããããèŠèŠçã«è±ãã§ãªã¢ã«ãªã·ãŒã³ã®äœæãå¯èœã«ããŸããå®è£ ã¯è€éã«ãªãå¯èœæ§ããããŸãããããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ã®åäžã®å©ç¹ã¯ãã²ãŒã éçºè ãããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³å°éå®¶ããããŠãŠã§ãäžã§ã€ã³ã¿ã©ã¯ãã£ããª3Däœéšãäœæãããã¹ãŠã®äººã«ãšã£ãŠè²ŽéãªããŒã«ãšãªããŸããããŒããŠã§ã¢ãšãœãããŠã§ã¢ãé²åãç¶ããäžã§ãã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã¯ãä»åŸãé¢é£æ§ã®é«ãéèŠãªæè¡ã§ããç¶ããã§ãããã
ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã«æé©ãªæ§æãèŠã€ããããã«ãããŸããŸãªã¯ã©ã¹ã¿ãŒãµã€ãºãã©ã€ãå²ãåœãŠæè¡ãã·ã§ãŒãã£ã³ã°ã¢ãã«ã詊ããŠã¿ãŠãã ãããå®è£ ããã»ã¹ãç°¡çŽ åã§ããå©çšå¯èœãªWebGLæ¡åŒµæ©èœãã©ã€ãã©ãªã調ã¹ãŠã¿ãŸããããã¯ã©ã¹ã¿ãŒåãã©ã¯ãŒããã©ã¹ã¬ã³ããªã³ã°ã®ååããã¹ã¿ãŒããããšã§ããã©ãŠã¶ã§é©ãã»ã©é«æ§èœãª3Dã°ã©ãã£ãã¯ã¹ãäœæããå¯èœæ§ãè§£ãæŸã€ããšãã§ããŸãã