using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEditor; [System.Serializable] public struct PackingLayout { [Tooltip("Which property will this texture be applied to")] public string PropertyName; [Header("Input textures")] [Header("Red Channel") ] public string RedInputProperty; public ChannelOptions RedOptions; [Header("Green Channel")] public string GreenInputProperty; public ChannelOptions GreenOptions; [Header("Blue Channel")] public string BlueInputProperty; public ChannelOptions BlueOptions; [Header("Alpha Channel")] public string AlphaInputProperty; public ChannelOptions AlphaOptions; public PackingOptions packingOptions; } [System.Serializable] public struct PackingOptions { [Header("Advanced Options")] [Tooltip("Overrides the texture in the target property slot on the material. New doesn't override anything")] public OverrideSlot OverrideTexture; [Tooltip("Is the outputted texture sRGB")] public bool sRGB; [Tooltip("Disable the alpha Channel if unused by shader. Halves the file size.")] public bool EnableAlphaChannel; [Tooltip("Uncompresses and unclamps the resolution of the source textures before transfering data")] public bool UncompressBeforeTask; [Tooltip("Adds suffix identifier data to the file name. Does nothing if Override Texture is turned on.")] public string Suffix; [Tooltip("Deletes source textures. Will keep the overrided texture if it's the same")] public bool DeleteSource; [Tooltip("Extension and encoding of the saved file. Overriding textures ignores this.")] public TextureFileExtension textureFileExtension; [Tooltip("Compression Level of saved texture")] public TextureImporterCompression textureCompression; } [System.Serializable] public struct ReassignLayout { [Tooltip("Which property will this texture be applied to")] public string PropertyName; [Tooltip("Orginal source")] public string InputPropertyName; } [System.Serializable] public enum OverrideSlot { New, Red, Green, Blue, Alpha } [System.Serializable] public enum DefaultColor { Black,White,Gray,LinearGray } [System.Serializable] public struct ChannelOptions { [Tooltip("Picks which channel pull from")] public RGBA InputChannel; [Tooltip("Inverts the input map")] public bool invert; [Tooltip("What's the default value if there's no map")] public DefaultColor defaultColor; } //Used to parse out textures [System.Serializable] public struct PackingTargetLayout { public string PropertyName; [Header("Red Channel")] public Texture2D RedInputTexture; public ChannelOptions RedOptions; [Header("Green Channel")] public Texture2D GreenInputTexture; public ChannelOptions GreenOptions; [Header("Blue Channel")] public Texture2D BlueInputTexture; public ChannelOptions BlueOptions; [Header("Alpha Channel")] public Texture2D AlphaInputTexture; public ChannelOptions AlphaOptions; public PackingOptions packingOptions; } [System.Serializable] public struct ReassignTargetLayout { [Tooltip("Which property will this texture be applied to")] public string PropertyName; [Tooltip("Orginal source")] public Texture2D InputTexture; } [CreateAssetMenu(fileName = "PackingTemplate", menuName = "Rendering/Texture Packing Template", order = 5)] public class TexturePackingTemplate : ScriptableObject { public Shader TargetShader; public PackingLayout[] Packing; public ReassignLayout[] Reassigning; }