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; } }
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++; } }
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; }
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; } }
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; }
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; }
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); }
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); }
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); }