private void OrderMaterialDefinition() { //Ordering List based on textureSize, for atlas calculation for (int i = 0; i < orderedMaterialDefinition.Length; i++) { int LargestIndex = i; for (int i2 = i; i2 < orderedMaterialDefinition.Length; i2++) { if (orderedMaterialDefinition[LargestIndex].baseTexture[0].width * orderedMaterialDefinition[LargestIndex].baseTexture[0].height < orderedMaterialDefinition[i2].baseTexture[0].width * orderedMaterialDefinition[i2].baseTexture[0].height) { LargestIndex = i2; } if (i2 == orderedMaterialDefinition.Length - 1) { UMAData.MaterialDefinition tempMaterialDefinition = orderedMaterialDefinition[i]; orderedMaterialDefinition[i] = orderedMaterialDefinition[LargestIndex]; orderedMaterialDefinition[LargestIndex] = tempMaterialDefinition; } } } }
protected override void Start() { backUpTexture = umaData.backUpTextures(); umaData.cleanTextures(); materialDefinitionList = new List <UMAData.MaterialDefinition>(); //Update atlas area can be handled here UMAData.MaterialDefinition tempMaterialDefinition = new UMAData.MaterialDefinition(); SlotData[] slots = umaData.umaRecipe.slotDataList; for (int i = 0; i < slots.Length; i++) { if (slots[i] == null) { continue; } if (slots[i].textureNameList.Length == 1 && string.IsNullOrEmpty(slots[i].textureNameList[0])) { continue; } if (slots[i].GetOverlay(0) != null) { tempMaterialDefinition = new UMAData.MaterialDefinition(); tempMaterialDefinition.baseTexture = slots[i].GetOverlay(0).textureList; tempMaterialDefinition.baseColor = slots[i].GetOverlay(0).color; tempMaterialDefinition.materialSample = slots[i].materialSample; int overlays = 0; for (int overlayCounter = 0; overlayCounter < slots[i].OverlayCount; overlayCounter++) { var overlay = slots[i].GetOverlay(overlayCounter); if (overlay != null) { overlays++; if (overlay.useAdvancedMasks) { overlay.EnsureChannels(slots[i].textureNameList.Length); } } } tempMaterialDefinition.overlays = new UMAData.textureData[overlays - 1]; tempMaterialDefinition.overlayColors = new Color32[tempMaterialDefinition.overlays.Length]; tempMaterialDefinition.rects = new Rect[tempMaterialDefinition.overlays.Length]; tempMaterialDefinition.channelMask = new Color32[tempMaterialDefinition.overlays.Length + 1][]; tempMaterialDefinition.channelAdditiveMask = new Color32[tempMaterialDefinition.overlays.Length + 1][]; tempMaterialDefinition.channelMask[0] = slots[i].GetOverlay(0).channelMask; tempMaterialDefinition.channelAdditiveMask[0] = slots[i].GetOverlay(0).channelAdditiveMask; tempMaterialDefinition.slotData = slots[i]; int overlayID = 0; for (int overlayCounter = 0; overlayCounter < slots[i].OverlayCount - 1; overlayCounter++) { var overlay = slots[i].GetOverlay(overlayCounter + 1); if (overlay == null) { continue; } tempMaterialDefinition.overlays[overlayID] = new UMAData.textureData(); tempMaterialDefinition.rects[overlayID] = overlay.rect; tempMaterialDefinition.overlays[overlayID].textureList = overlay.textureList; tempMaterialDefinition.overlayColors[overlayID] = overlay.color; tempMaterialDefinition.channelMask[overlayID + 1] = overlay.channelMask; tempMaterialDefinition.channelAdditiveMask[overlayID + 1] = overlay.channelAdditiveMask; overlayID++; } materialDefinitionList.Add(tempMaterialDefinition); } } packTexture = new MaxRectsBinPack(umaGenerator.atlasResolution, umaGenerator.atlasResolution, false); }