Example #1
0
        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;
                    }
                }
            }
        }
Example #2
0
        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);
        }