Exemple #1
0
        public virtual void Awake()
        {
            activeGeneratorCoroutine = null;

            if (atlasResolution == 0)
            {
                atlasResolution = 256;
            }

            if (defaultOverlayAsset != null)
            {
                _defaultOverlayData = new OverlayData(defaultOverlayAsset);
            }

            if (!textureMerge)
            {
                if (Debug.isDebugBuild)
                {
                    Debug.LogError("No TextureMerge set!");
                }
            }

            //Garbage Collection hack
            var mb = (System.GC.GetTotalMemory(false) / (1024 * 1024));

            if (mb < 10)
            {
                byte[] data = new byte[10 * 1024 * 1024];
                data[0] = 0;
                data[10 * 1024 * 1024 - 1] = 0;
            }
        }
        public virtual void Awake()
        {
            activeGeneratorCoroutine = null;

            if (atlasResolution == 0)
            {
                atlasResolution = 256;
            }

            if (!textureMerge)
            {
                Transform tempTextureMerger = Instantiate(textureMergePrefab, Vector3.zero, Quaternion.identity) as Transform;
                textureMerge = tempTextureMerger.GetComponent("TextureMerge") as TextureMerge;
                textureMerge.transform.parent = transform;
                textureMerge.gameObject.SetActive(false);
            }

            //Garbage Collection hack
            var mb = (System.GC.GetTotalMemory(false) / (1024 * 1024));

            if (mb < 10)
            {
                byte[] data = new byte[10 * 1024 * 1024];
                data[0] = 0;
                data[10 * 1024 * 1024 - 1] = 0;
            }
        }
Exemple #3
0
        private void RebuildRenderTexture(UMAData data)
        {
            var rt = data.GetFirstRenderTexture();

            if (rt != null && !rt.IsCreated())
            {
                if (NoCoroutines)
                {
                    UMAGeneratorPro ugp = new UMAGeneratorPro();
                    ugp.ProcessTexture(this, umaData, true, InitialScaleFactor);
                    TextureChanged++;
                }
                else
                {
                    umaData = data;
                    TextureProcessBaseCoroutine textureProcessCoroutine;
                    textureProcessCoroutine = new TextureProcessPROCoroutine();
                    textureProcessCoroutine.Prepare(data, this);

                    activeGeneratorCoroutine = new UMAGeneratorCoroutine();
                    activeGeneratorCoroutine.Prepare(this, umaData, textureProcessCoroutine, true, InitialScaleFactor);

                    while (!activeGeneratorCoroutine.Work())
                    {
                        ;
                    }

                    activeGeneratorCoroutine = null;
                }

                TextureChanged++;
            }
        }
Exemple #4
0
        public virtual bool HandleDirtyUpdate(UMAData data)
        {
            umaData = data;
            if (umaData.isMeshDirty)
            {
                if (!umaData.isTextureDirty)
                {
                    UpdateUMAMesh(false);
                }
                umaData.isMeshDirty = false;
            }
            if (umaData.isTextureDirty)
            {
                if( activeGeneratorCoroutine == null )
                {
                    activeGeneratorCoroutine = umaGeneratorCoroutine;
                    TextureProcessBaseCoroutine textureProcessCoroutine;
                    if (usePRO)
                    {
                        textureProcessCoroutine = new TextureProcessPROCoroutine();
                        textureProcessCoroutine.Prepare(data, this);
                    }
                    else
                    {
                        textureProcessCoroutine = new TextureProcessIndieCoroutine();
                    }
                    activeGeneratorCoroutine.Prepare(this, umaData, textureProcessCoroutine);
                }

                if (umaGeneratorCoroutine.Work())
                {
                    activeGeneratorCoroutine = null;
                    UpdateUMAMesh(true);
                    umaData.isTextureDirty = false;
                }
                else
                {
                    return false;
                }
            }
            else if (umaData.isShapeDirty)
            {
                UpdateUMABody(umaData);
                umaData.isShapeDirty = false;

                UMAReady();
                return true;

            }
            else
            {
                UMAReady();
                return true;
            }
            return false;
        }
        private void Initialize(bool retry = true)
        {
            overlayViewer            = serializedObject.targetObject as OverlayViewer;
            TempUMAData              = overlayViewer.gameObject.GetComponent <UMAData>();
            ugb                      = overlayViewer.gameObject.GetComponent <UMAGeneratorStub>();
            TempSlot                 = new SlotData(overlayViewer.SlotDataAsset);
            rawImage                 = overlayViewer.ImageViewer;
            activeGeneratorCoroutine = new UMAGeneratorCoroutine();

            SetupGenerator();

            TempUMAData.Initialize(ugb);
            TempUMAData.SetSlot(0, TempSlot);

            baseOverlayProperty = serializedObject.FindProperty("BaseOverlay");
            overlaysProperty    = serializedObject.FindProperty("Overlays");
            texMergeProperty    = serializedObject.FindProperty("TextureMergePrefab");

            overlayDataList = new ReorderableList(serializedObject, overlaysProperty, true, true, false, false);
            overlayDataList.drawHeaderCallback = (Rect rect) =>
            {
                EditorGUI.LabelField(rect, "Overlays");
            };
            overlayDataList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
            {
                var element = overlayDataList.serializedProperty.GetArrayElementAtIndex(index);
                rect.y += 2;
                OverlayDataAsset o    = element.objectReferenceValue as OverlayDataAsset;
                string           name = "Not Set";
                if (o != null)
                {
                    name = o.overlayName;
                }
                EditorGUI.PropertyField(new Rect(rect.x + 10, rect.y, rect.width - 10, EditorGUIUtility.singleLineHeight), element);
            };


            overlayDataList.onSelectCallback = (ReorderableList list) =>
            {
                SelectNewOverlay(list.index);
            };


            overlayDataList.onChangedCallback = (ReorderableList list) =>
            {
                SelectNewOverlay(list.index);
                ProcessCurrentOverlays(retry);
            };
        }
#pragma warning disable 618
        private void RebuildAllRenderTextures()
        {
            var activeUmaData            = umaData;
            var storedGeneratorCoroutine = activeGeneratorCoroutine;


            var iteratorNode = cleanUmas.First;

            while (iteratorNode != null)
            {
                RebuildRenderTexture(iteratorNode.Value);
                iteratorNode = iteratorNode.Next;
            }

            umaData = activeUmaData;
            activeGeneratorCoroutine = storedGeneratorCoroutine;
        }
Exemple #7
0
		public virtual void Awake () {
			
			maxMeshUpdates = 1;
			if( atlasResolution == 0 ) atlasResolution = 256;
			umaGeneratorCoroutine = new UMAGeneratorCoroutine();
			
			if(!textureMerge){
				Transform tempTextureMerger = Instantiate(textureMergePrefab,Vector3.zero,Quaternion.identity) as Transform;
				textureMerge = tempTextureMerger.GetComponent("TextureMerge") as TextureMerge;
				textureMerge.transform.parent = transform;
				textureMerge.gameObject.SetActive(false);
			}
			
			//Garbage Collection hack
	        var mb = (System.GC.GetTotalMemory(false) / (1024 * 1024));
	        if (mb < 10)
	        {
	            byte[] data = new byte[10 * 1024 * 1024];
	            data[0] = 0;
	            data[10 * 1024 * 1024 - 1] = 0;
	        }
		}
Exemple #8
0
        public void Initialize()
        {
			umaGeneratorCoroutine = new UMAGeneratorCoroutine();
        }
        public virtual bool HandleDirtyUpdate(UMAData data)
        {
            if (data == null)
            {
                return(true);
            }

            if (umaData != data)
            {
                umaData = data;

                if (!umaData.Validate())
                {
                    return(true);
                }

                if (meshCombiner != null)
                {
                    meshCombiner.Preprocess(umaData);
                }
                umaData.FireCharacterBegunEvents();
            }

            if (umaData.isTextureDirty)
            {
                if (activeGeneratorCoroutine == null)
                {
                    TextureProcessBaseCoroutine textureProcessCoroutine;
                    textureProcessCoroutine = new TextureProcessPROCoroutine();
                    textureProcessCoroutine.Prepare(data, this);

                    activeGeneratorCoroutine = new UMAGeneratorCoroutine();
                    activeGeneratorCoroutine.Prepare(this, umaData, textureProcessCoroutine, !umaData.isMeshDirty);
                }

                bool workDone = activeGeneratorCoroutine.Work();
                if (workDone)
                {
                    activeGeneratorCoroutine = null;
                    umaData.isTextureDirty   = false;
                    umaData.isAtlasDirty     = true;
                }

                if (!workDone || !fastGeneration || umaData.isMeshDirty)
                {
                    return(false);
                }
            }

            if (umaData.isMeshDirty)
            {
                UpdateUMAMesh(umaData.isAtlasDirty);
                umaData.isAtlasDirty = false;
                umaData.isMeshDirty  = false;

                if (!fastGeneration)
                {
                    return(false);
                }
            }

            if (umaData.isShapeDirty)
            {
                UpdateUMABody(umaData);
                umaData.isShapeDirty = false;
            }
            UMAReady();
            return(true);
        }
 public virtual void OnEnable()
 {
     activeGeneratorCoroutine = null;
 }
Exemple #11
0
        public virtual bool HandleDirtyUpdate(UMAData data)
        {
            if (data == null)
                return true;

            if (umaData != data)
            {
                umaData = data;

                if (!umaData.Validate())
                    return true;

                if (meshCombiner != null)
                {
                    meshCombiner.Preprocess(umaData);
                }
                umaData.FireCharacterBegunEvents();
            }

            if (umaData.isTextureDirty)
            {
                if (activeGeneratorCoroutine == null)
                {
                    activeGeneratorCoroutine = umaGeneratorCoroutine;
                    TextureProcessBaseCoroutine textureProcessCoroutine;
                    textureProcessCoroutine = new TextureProcessPROCoroutine();
                    textureProcessCoroutine.Prepare(data, this);
                    activeGeneratorCoroutine.Prepare(this, umaData, textureProcessCoroutine, !umaData.isMeshDirty);
                }

                bool workDone = umaGeneratorCoroutine.Work();
                if (workDone)
                {
                    activeGeneratorCoroutine = null;
                    umaData.isTextureDirty = false;
                    umaData.isAtlasDirty = true;
                }

                if (!workDone || !fastGeneration || umaData.isMeshDirty)
                    return false;
            }

            if (umaData.isMeshDirty)
            {
                UpdateUMAMesh(umaData.isAtlasDirty);
                umaData.isAtlasDirty = false;
                umaData.isMeshDirty = false;

                if (!fastGeneration)
                    return false;
            }

            if (umaData.isShapeDirty)
            {
                UpdateUMABody(umaData);
                umaData.isShapeDirty = false;
            }
            UMAReady();
            return true;
        }
Exemple #12
0
        public virtual bool HandleDirtyUpdate(UMAData data)
        {
            if (umaData != data)
            {
                umaData = data;
                if (!umaData.Validate())
                {
                    return(true);
                }
            }

            if (umaData.isMeshDirty)
            {
                if (!umaData.isTextureDirty)
                {
                    UpdateUMAMesh(false);
                }
                umaData.isMeshDirty = false;
            }
            if (umaData.isTextureDirty)
            {
                if (activeGeneratorCoroutine == null)
                {
                    activeGeneratorCoroutine = umaGeneratorCoroutine;
                    TextureProcessBaseCoroutine textureProcessCoroutine;
                    if (usePRO)
                    {
                        textureProcessCoroutine = new TextureProcessPROCoroutine();
                        textureProcessCoroutine.Prepare(data, this);
                    }
                    else
                    {
                        textureProcessCoroutine = new TextureProcessIndieCoroutine();
                    }
                    activeGeneratorCoroutine.Prepare(this, umaData, textureProcessCoroutine);
                }

                if (umaGeneratorCoroutine.Work())
                {
                    activeGeneratorCoroutine = null;
                    UpdateUMAMesh(true);
                    umaData.isTextureDirty = false;
                }
                else
                {
                    return(false);
                }
            }
            else if (umaData.isShapeDirty)
            {
                UpdateUMABody(umaData);
                umaData.isShapeDirty = false;

                UMAReady();
                return(true);
            }
            else
            {
                UMAReady();
                return(true);
            }
            return(false);
        }
Exemple #13
0
 public void Initialize()
 {
     umaGeneratorCoroutine = new UMAGeneratorCoroutine();
 }
Exemple #14
0
        public virtual bool HandleDirtyUpdate(UMAData data)
        {
            if (data == null)
            {
                return(true);
            }

            if (umaData != data)
            {
                umaData = data;

                if (!umaData.Validate())
                {
                    return(true);
                }

                if (meshCombiner != null)
                {
                    meshCombiner.Preprocess(umaData);
                }
                umaData.FireCharacterBegunEvents();
            }

            PreApply(umaData);

            if (umaData.isTextureDirty)
            {
                bool meshWasDirty = umaData.isMeshDirty;
                if (activeGeneratorCoroutine == null)
                {
                    TextureProcessBaseCoroutine textureProcessCoroutine;
                    textureProcessCoroutine = new TextureProcessPROCoroutine();
                    textureProcessCoroutine.Prepare(data, this);

                    activeGeneratorCoroutine = new UMAGeneratorCoroutine();
                    activeGeneratorCoroutine.Prepare(this, umaData, textureProcessCoroutine, !umaData.isMeshDirty, InitialScaleFactor);
                }

                bool workDone = activeGeneratorCoroutine.Work();
                if (workDone)
                {
                    activeGeneratorCoroutine = null;
                    umaData.isTextureDirty   = false;
                    umaData.isAtlasDirty    |= umaData.isMeshDirty;
                    TextureChanged++;
                }

                //shouldn't this only cause another loop if this part MADE the mesh dirty?
                if (!workDone || !fastGeneration || (!meshWasDirty && umaData.isMeshDirty))
                {
                    //Debug.Log("workDone = " + workDone + " fastGeneration = " + fastGeneration + " umaData.isMeshDirty = " + umaData.isMeshDirty);
                    return(false);
                }
            }

            if (umaData.isMeshDirty)
            {
                UpdateUMAMesh(umaData.isAtlasDirty);
                umaData.isAtlasDirty = false;
                umaData.isMeshDirty  = false;
                SlotsChanged++;
                forceGarbageCollect++;

                if (!fastGeneration)
                {
                    return(false);
                }
            }

            if (umaData.isShapeDirty)
            {
                if (!umaData.skeleton.isUpdating)
                {
                    umaData.skeleton.BeginSkeletonUpdate();
                }
                UpdateUMABody(umaData);
                umaData.isShapeDirty = false;
                DnaChanged++;
            }
            else if (umaData.skeleton.isUpdating)
            {
                umaData.skeleton.EndSkeletonUpdate();
            }

            UMAReady();
            return(true);
        }
Exemple #15
0
        public virtual bool HandleDirtyUpdate(UMAData data)
        {
            if (data == null)
            {
                return(true);
            }

            if (umaData != data)
            {
                umaData = data;

                if (!umaData.Validate())
                {
                    return(true);
                }

                if (meshCombiner != null)
                {
                    meshCombiner.Preprocess(umaData);
                }
                umaData.FireCharacterBegunEvents();
            }

            if (umaData.isTextureDirty)
            {
                if (activeGeneratorCoroutine == null)
                {
                    TextureProcessBaseCoroutine textureProcessCoroutine;
                    textureProcessCoroutine = new TextureProcessPROCoroutine();
                    textureProcessCoroutine.Prepare(data, this);

                    activeGeneratorCoroutine = new UMAGeneratorCoroutine();
                    activeGeneratorCoroutine.Prepare(this, umaData, textureProcessCoroutine, !umaData.isMeshDirty, InitialScaleFactor);
                }

                bool workDone = activeGeneratorCoroutine.Work();
                if (workDone)
                {
                    activeGeneratorCoroutine = null;
                    umaData.isTextureDirty   = false;
                    umaData.isAtlasDirty    |= umaData.isMeshDirty;
                    TextureChanged++;
                }

                if (!workDone || !fastGeneration || umaData.isMeshDirty)
                {
                    return(false);
                }
            }

            if (umaData.isMeshDirty)
            {
                UpdateUMAMesh(umaData.isAtlasDirty);
                umaData.isAtlasDirty = false;
                umaData.isMeshDirty  = false;
                SlotsChanged++;
                forceGarbageCollect++;

                if (!fastGeneration)
                {
                    return(false);
                }
            }

            if (umaData.isShapeDirty)
            {
                if (!umaData.skeleton.isUpdating)
                {
                    umaData.skeleton.BeginSkeletonUpdate();
                }
                UpdateUMABody(umaData);
                umaData.isShapeDirty = false;
                DnaChanged++;
            }
            else if (umaData.skeleton.isUpdating)
            {
                umaData.skeleton.EndSkeletonUpdate();
            }

            UMAReady();
            return(true);
        }
 public virtual void OnEnable()
 {
     activeGeneratorCoroutine = null;
 }