public static void Write(this ByteBuffer buffer, int offsetInBytes, Vector4 value)
        {
            var floats = value.ToArray();
            var bytes = new byte[floats.Length * sizeof(float)];
            Buffer.BlockCopy(floats, 0, bytes, 0, bytes.Length);

            buffer.Write(offsetInBytes, bytes, 0, bytes.Length);
        }
        private void DumpParticles(BabylonScene babylonScene)
        {
            if (particleSystemsToExport.Count == 0)
                return;

            babylonScene.particleSystems = new BabylonParticleSystem[particleSystemsToExport.Count];

            var index = 0;
            foreach (var particleSystem in particleSystemsToExport)
            {
                babylonScene.particleSystems[index] = new BabylonParticleSystem
                    {
                        capacity = particleSystem.BufferSize,
                        emitterId = particleSystem.Emitter.ID.ToString(),
                        gravity = particleSystem.Gravity.ToArray(),
                        direction1 = Vector3.TransformNormal(particleSystem.Direction1, particleSystem.Emitter.LocalMatrix).ToArray(),
                        direction2 = Vector3.TransformNormal(particleSystem.Direction2, particleSystem.Emitter.LocalMatrix).ToArray(),
                        minEmitBox = particleSystem.MinEmitBox.ToArray(),
                        maxEmitBox = particleSystem.MaxEmitBox.ToArray(),
                        color1 = particleSystem.Color1.ToArray(),
                        color2 = particleSystem.Color2.ToArray(),
                        colorDead = new RGBAColor(particleSystem.ColorDead.Red, particleSystem.ColorDead.Green, particleSystem.ColorDead.Blue, particleSystem.DeadAlpha).ToArray(),
                        emitRate = particleSystem.EmitRate,
                        updateSpeed = particleSystem.UpdateSpeed,
                        targetStopFrame = particleSystem.TargetStopFrame,
                        minEmitPower = particleSystem.MinEmitPower,
                        maxEmitPower = particleSystem.MaxEmitPower,
                        minLifeTime = particleSystem.MinLifeTime,
                        maxLifeTime = particleSystem.MaxLifeTime,
                        minSize = particleSystem.MinSize,
                        maxSize = particleSystem.MaxSize,
                        minAngularSpeed = particleSystem.MinAngularSpeed,
                        maxAngularSpeed = particleSystem.MaxAngularSpeed,
                        textureName = CopyTexture(particleSystem.Texture, babylonScene),
                        blendMode = (int)particleSystem.BlendType,
                        linkToEmitter = particleSystem.LinkToEmitter
                    };

                Vector4 textureMask = Vector4.Zero;

                switch (particleSystem.TextureUsage)
                {
                    case NovaParticleSystem.ParticleTextureUsages.Alpha:
                        textureMask = new Vector4(0, 0, 0, 1);
                        break;
                    case NovaParticleSystem.ParticleTextureUsages.RGB:
                        textureMask = new Vector4(1, 1, 1, 0);
                        break;
                    case NovaParticleSystem.ParticleTextureUsages.ARGB:
                        textureMask = new Vector4(1, 1, 1, 1);
                        break;
                }

                babylonScene.particleSystems[index].textureMask = textureMask.ToArray();

                index++;
            }
        }