Procesando una gran cantidad de partículas de color utilizando three.js y el renderizador de lienzo

Estoy tratando de usar la biblioteca Three.js para mostrar una gran cantidad de puntos de colores en la pantalla (por ejemplo, de medio millón a millón). Estoy tratando de usar el renderizador Canvas en lugar del renderizador WebGL si es posible (las páginas web también se mostrarían en las burbujas del Cliente Google Earth, que parece funcionar con el renderizador Canvas pero no con el renderizador WebGL).

Si bien tengo el problema resuelto para un pequeño número de puntos (decenas de miles) modificando el código deaquí, Estoy teniendo problemas para escalar más allá de eso.

Pero en el siguiente código que utiliza WebGL y el sistema de partículas, puedo generar medio millón de puntos al azar, pero sin colores.

  ...
var particles = new THREE.Geometry();
var pMaterial = new THREE.ParticleBasicMaterial({
                    color: 0xFFFFFF,
                    size: 1,
                    sizeAttenuation : false
                    });

// now create the individual particles
for (var p = 0; p < particleCount; p++) {
     // create a particle with randon position values,
     // -250 -> 250
     var pX = Math.random() * POSITION_RANGE - (POSITION_RANGE / 2),
     pY = Math.random() * POSITION_RANGE - (POSITION_RANGE / 2),
     pZ = Math.random() * POSITION_RANGE - (POSITION_RANGE / 2),
     particle = new THREE.Vertex(
                        new THREE.Vector3(pX, pY, pZ)
                        );

     // add it to the geometry
     particles.vertices.push(particle);
    }

    var particleSystem = new THREE.ParticleSystem(
                            particles, pMaterial);
    scene.add(particleSystem);
  ...

¿La razón para el mejor rendimiento del código anterior se debe al sistema de partículas? Por lo que he leído en la documentación, parece que el sistema de partículas solo puede ser utilizado por el procesador de WebGL.

Así que mi (s) pregunta (s) son

a) ¿Puedo representar un número tan grande de partículas con el renderizador de Canvas o siempre va a ser más lento que la versión WebGL / ParticleSystem? Si es así, ¿cómo hago para hacer eso? ¿Qué objetos o trucos utilizo para mejorar el rendimiento?

b) ¿Hay algún compromiso que pueda alcanzar si renuncio a algunas funciones? En otras palabras, ¿puedo seguir utilizando el renderizador de lienzo para el gran conjunto de datos si renuncio a la necesidad de colorear los puntos individuales?

c) Si tengo que abandonar el Canvas y usar la versión WebGL, ¿es posible cambiar los colores de los puntos individuales? Parece que el color es establecido por el material pasado a ParticleSystem y que establece el color para todos los puntos.

Respuestas a la pregunta(1)

Su respuesta a la pregunta