Ejemplo n.º 1
0
        public static void UnserializeAndPasteElements(VFXViewController viewController, Vector2 center, string data, VFXView view = null, VFXGroupNodeController groupNode = null)
        {
            var copyData = JsonUtility.FromJson <Data>(data);

            ScriptableObject[] allSerializedObjects = VFXMemorySerializer.ExtractObjects(copyData.serializedObjects, true);

            copyData.contexts       = allSerializedObjects.OfType <VFXContext>().ToArray();
            copyData.slotContainers = allSerializedObjects.OfType <IVFXSlotContainer>().Cast <VFXModel>().Where(t => !(t is VFXContext)).ToArray();
            if (copyData.contexts.Length == 0 && copyData.slotContainers.Length == 0)
            {
                copyData.contexts       = null;
                copyData.slotContainers = null;
                copyData.blocks         = allSerializedObjects.OfType <VFXBlock>().ToArray();
            }

            PasteCopy(viewController, center, copyData, allSerializedObjects, view, groupNode);
        }
Ejemplo n.º 2
0
        static ScriptableObject[] PrepareSerializedObjects(Data copyData, VFXUI optionalUI)
        {
            var objects = new HashSet <ScriptableObject>();

            copyData.CollectDependencies(objects);

            if (optionalUI != null)
            {
                objects.Add(optionalUI);
            }

            ScriptableObject[] allSerializedObjects = objects.OfType <ScriptableObject>().ToArray();

            copyData.serializedObjects = VFXMemorySerializer.StoreObjects(allSerializedObjects);

            return(allSerializedObjects);
        }
Ejemplo n.º 3
0
        static VFXBlock DuplicateBlock(VFXBlock block)
        {
            var dependencies = new HashSet <ScriptableObject>();

            dependencies.Add(block);
            block.CollectDependencies(dependencies);

            var duplicated = VFXMemorySerializer.DuplicateObjects(dependencies.ToArray());

            VFXBlock result = duplicated.OfType <VFXBlock>().First();

            foreach (var slot in result.inputSlots)
            {
                slot.UnlinkAll(true, false);
            }
            foreach (var slot in result.outputSlots)
            {
                slot.UnlinkAll(true, false);
            }

            return(result);
        }
Ejemplo n.º 4
0
        //[Test]  //Not really a test but an helper to measure backup (for undo/redo) time for every existing asset
        public void MeasureBackupTime()
        {
            UnityEngine.Debug.unityLogger.logEnabled = false;
            var vfxAssets     = new List <VisualEffectAsset>();
            var vfxAssetsGuid = AssetDatabase.FindAssets("t:VisualEffectAsset");

            foreach (var guid in vfxAssetsGuid)
            {
                string assetPath = AssetDatabase.GUIDToAssetPath(guid);
                var    vfxAsset  = AssetDatabase.LoadAssetAtPath <VisualEffectAsset>(assetPath);
                if (vfxAsset != null)
                {
                    vfxAssets.Add(vfxAsset);
                }
            }

            //vfxAssets = vfxAssets.Take(1).ToList();

            var dependenciesPerAsset = new List <ScriptableObject[]>();

            foreach (var vfxAsset in vfxAssets)
            {
                AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(vfxAsset), ImportAssetOptions.ForceUpdate | ImportAssetOptions.ForceSynchronousImport);
                var graph   = vfxAsset.GetResource().GetOrCreateGraph();
                var hashset = new HashSet <ScriptableObject>();
                hashset.Add(graph);
                graph.CollectDependencies(hashset);
                dependenciesPerAsset.Add(hashset.Cast <ScriptableObject>().ToArray());
            }

            var report = new List <string>();
            var levels = new[] { (CompressionLevel)int.MaxValue, CompressionLevel.None, CompressionLevel.Fastest };

            foreach (var level in levels)
            {
                var data = new byte[vfxAssets.Count][];
                var elapsedTimeCompression   = new long[vfxAssets.Count];
                var elapsedTimeDecompression = new long[vfxAssets.Count];
                var watch = Enumerable.Repeat(0, vfxAssets.Count).Select(o => new Stopwatch()).ToArray();

                uint processCount = 8;
                for (int pass = 0; pass < processCount; ++pass)
                {
                    for (int i = 0; i < vfxAssets.Count; ++i)
                    {
                        var sw = watch[i];
                        if (level == (CompressionLevel)int.MaxValue)
                        {
                            sw.Start();
                            var currentData = VFXMemorySerializer.StoreObjects(dependenciesPerAsset[i]);
                            sw.Stop();
                            data[i] = System.Text.Encoding.UTF8.GetBytes(currentData);
                        }
                        else
                        {
                            sw.Start();
                            var currentData = VFXMemorySerializer.StoreObjectsToByteArray(dependenciesPerAsset[i], level);
                            sw.Stop();
                            data[i] = currentData;
                        }
                        elapsedTimeCompression[i] = sw.ElapsedMilliseconds;
                    }
                }

                watch = Enumerable.Repeat(0, vfxAssets.Count).Select(o => new Stopwatch()).ToArray();
                for (int pass = 0; pass < processCount; ++pass)
                {
                    for (int i = 0; i < vfxAssets.Count; ++i)
                    {
                        var sw = watch[i];
                        if (level == (CompressionLevel)int.MaxValue)
                        {
                            var currentData = System.Text.Encoding.UTF8.GetString(data[i]);
                            sw.Start();
                            VFXMemorySerializer.ExtractObjects(currentData, false);
                            sw.Stop();
                        }
                        else
                        {
                            sw.Start();
                            VFXMemorySerializer.ExtractObjects(data[i], false);
                            sw.Stop();
                        }

                        elapsedTimeDecompression[i] = sw.ElapsedMilliseconds;
                    }
                }

                report.Add(level == (CompressionLevel)int.MaxValue ? "original" : level.ToString());
                report.Add("asset;size;compression;decompression");
                for (int i = 0; i < vfxAssets.Count; ++i)
                {
                    var nameAsset = AssetDatabase.GetAssetPath(vfxAssets[i]);
                    report.Add(string.Format("{0};{1}kb;{2}ms;{3}ms", nameAsset, data[i].Length / (1024), elapsedTimeCompression[i] / processCount, elapsedTimeDecompression[i] / processCount));
                }
            }
            UnityEngine.Debug.unityLogger.logEnabled = true;
            foreach (var log in report)
            {
                UnityEngine.Debug.Log(log);
            }
        }