public void read(JMEImporter e) throws IOException {
    detachAllChildren();
    super.read(e);
    InputCapsule capsule = e.getCapsule(this);
    emitType = capsule.readEnum("emitType", EmitType.class, EmitType.Point);
    particleType = capsule.readEnum("particleType", ParticleType.class, ParticleType.Quad);
    psLine = (Line) capsule.readSavable("psLine", null);
    psRect = (Rectangle) capsule.readSavable("psRect", null);
    psRing = (Ring) capsule.readSavable("psRing", null);
    psGeom = (Geometry) capsule.readSavable("psGeom", null);
    startSize = capsule.readFloat("startSize", DEFAULT_START_SIZE);
    endSize = capsule.readFloat("endSize", DEFAULT_END_SIZE);
    startColor = (ColorRGBA) capsule.readSavable("startColor", DEFAULT_START_COLOR.clone());
    endColor = (ColorRGBA) capsule.readSavable("endColor", DEFAULT_END_COLOR.clone());
    startSpin = capsule.readFloat("startSpin", 0);
    endSpin = capsule.readFloat("endSpin", 0);
    startMass = capsule.readFloat("startMass", 0);
    endMass = capsule.readFloat("endMass", 0);
    startTexIndex = capsule.readInt("startTexIndex", 0);
    texQuantity = capsule.readInt("texQuantity", 1);
    initialVelocity = capsule.readFloat("initialVelocity", 1);
    minimumLifeTime = capsule.readFloat("minimumLifeTime", DEFAULT_MIN_LIFE);
    maximumLifeTime = capsule.readFloat("maximumLifeTime", DEFAULT_MAX_LIFE);
    minimumAngle = capsule.readFloat("minimumAngle", 0);
    maximumAngle = capsule.readFloat("maximumAngle", DEFAULT_MAX_ANGLE);
    emissionDirection =
        (Vector3f) capsule.readSavable("emissionDirection", Vector3f.UNIT_Y.clone());
    worldEmit = (Vector3f) capsule.readSavable("worldEmit", Vector3f.ZERO.clone());
    upVector = (Vector3f) capsule.readSavable("upVector", Vector3f.UNIT_Y.clone());
    leftVector = (Vector3f) capsule.readSavable("leftVector", new Vector3f(-1, 0, 0));
    numParticles = capsule.readInt("numParticles", 0);
    rotateWithScene = capsule.readBoolean("rotateWithScene", false);
    geometryCoordinates = capsule.readFloatBuffer("geometryCoordinates", null);
    appearanceColors = capsule.readFloatBuffer("appearanceColors", null);

    releaseRate = capsule.readInt("releaseRate", numParticles);
    particleOrientation = capsule.readFloat("particleOrientation", 0);
    originCenter = (Vector3f) capsule.readSavable("originCenter", new Vector3f());
    originOffset = (Vector3f) capsule.readSavable("originOffset", new Vector3f());
    controller = (ParticleController) capsule.readSavable("controller", null);
    cameraFacing = capsule.readBoolean("cameraFacing", true);
    velocityAligned = capsule.readBoolean("velocityAligned", false);
    particlesInWorldCoords = capsule.readBoolean("particlesInWorldCoords", true);
    ramp = (ParticleAppearanceRamp) capsule.readSavable("ramp", new ParticleAppearanceRamp());
    texAnimation = (TexAnimation) capsule.readSavable("texAnimation", new TexAnimation());

    invScale = new Vector3f();
    upXemit = new Vector3f();
    absUpVector = new Vector3f();
    abUpMinUp = new Vector3f();
    rotMatrix = new Matrix3f();
    initializeParticles(numParticles);
  }