00.04 stR =
050 stD =
02 X size =
030 Point size =
Hau kun's points WebGL test. See Twitter@Hau_kun. WebXR draft.
  x = tan(.2*r*cos(t + r + d))*d,     // tan(x) → x(1 + x2)
  y = sin(t - r + d)*d.
So it is a bunch of Lissajous figures (n=1, m=1 i.e. ellipses) deformed by tan.
12*300 point sprites are used. WebGL vertex shader below (see the page source for details).
const VSsPart = `#version 300 es
  uniform float t;
  uniform vec4 par; // R, D, S, point size
  out vec3 color;
void main(void) {
  float r = par.x*float(gl_VertexID % 300),
        d = par.y*float(gl_VertexID / 300);
  float P = pow(sin(r*d + t), 8.);
  color = vec3(P, 0., 1. - P);
  float x = r*cos(t + r + d)*d*.0012;
  gl_Position = vec4(x*(1. + x*x)*par.z, sin(t - r + d)*d*.003, 0., 1.);
  gl_PointSize = par.w*P*d*.003;
}`;

WebXR samples     updated 3 July 2020