 
                 context.beginPath()
                 context.arc centerX, centerY, radius, 0, 2*Math.PI, false
-                context.fillStyle = rgb_to_hex opts.material.color...
+                context.fillStyle = rgb_to_hex opts.material.color
                 context.fill()
 
                 texture = new THREE.Texture canvas
                 texture.needsUpdate = true
-                spriteMaterial = new THREE.SpriteMaterial map: texture
+                spriteMaterial = new THREE.SpriteMaterial
+                    map     : texture
+                    opacity : opts.material.opacity
                 particle = new THREE.Sprite spriteMaterial
 
                 position = @aspect_ratio_scale opts.loc...

    # client code should call this when done adding objects to the scene
    finalize: ->
        @set_frame()

        if @renderer_type isnt 'dynamic'
            # if we don't have the renderer, swap it in, make a static image, then give it back to whoever had it.
            owner = _scene_using_renderer
            @set_dynamic_renderer()
            @set_static_renderer()
            owner?.set_dynamic_renderer()

        # possibly show the canvas warning.
        if @opts.renderer is 'canvas'

            parent          : required
            width           : undefined
            height          : undefined
            renderer        : undefined # 'webgl' or 'canvas' or undefined to choose best
            background      : [1,1,1]
            spin            : false     # if true, image spins by itself when mouse is over it.
            camera_distance : 10
            aspect_ratio    : undefined # undefined does nothing or a triple [x,y,z] of length three, which scales the x,y,z coordinates of everything by the given values.
            stop_when_gone  : undefined # if given, animation, etc., stops when this html element (not jquery!) is no longer in the DOM
            frame           : undefined # frame options
            callback        : undefined # opts.callback(error, this object)

        @frameOpts = defaults @opts.frame,
            color           : undefined # defaults to the color-wise negation of the background
            thickness       : .4        # zero thickness disables the frame
            fontsize        : 14        # zero fontsize disables labels on the axes

        math3d.load_threejs (error) =>
            if error
