[Add] All in one shader
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AllIn13DShader
|
||||
{
|
||||
public class RGBAPackerDrawer
|
||||
{
|
||||
private const float LABEL_WIDTH = 70f;
|
||||
private const float TEXTURE_FIELD_WIDTH = 200f;
|
||||
private const float SPACING_BETWEEN_FIELDS = 20f;
|
||||
private const float BOOLEAN_LABEL_WIDTH = 100f;
|
||||
private const float SETTINGS_FIELD_WIDTH = 200f;
|
||||
|
||||
private RGBAPackerTool rgbaPackerTool;
|
||||
|
||||
public RGBAPackerValues ToolValues => rgbaPackerTool.values;
|
||||
|
||||
private CommonStyles commonStyles;
|
||||
|
||||
public RGBAPackerDrawer(RGBAPackerTool rgbaPackerTool, CommonStyles commonStyles)
|
||||
{
|
||||
this.rgbaPackerTool = rgbaPackerTool;
|
||||
this.commonStyles = commonStyles;
|
||||
}
|
||||
|
||||
public void Draw()
|
||||
{
|
||||
GUILayout.Label("RGBA Channel Packer", commonStyles.bigLabel);
|
||||
GUILayout.Space(20);
|
||||
GUILayout.Label("Pack red channels from 4 textures into RGBA channels", EditorStyles.boldLabel);
|
||||
GUILayout.Space(10);
|
||||
|
||||
// Channel texture slots
|
||||
EditorGUILayout.BeginVertical();
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
GUILayout.Label("R Channel", GUILayout.Width(LABEL_WIDTH));
|
||||
ToolValues.rChannelTexture = (Texture2D)EditorGUILayout.ObjectField(ToolValues.rChannelTexture, typeof(Texture2D), false, GUILayout.Width(TEXTURE_FIELD_WIDTH));
|
||||
GUILayout.Space(SPACING_BETWEEN_FIELDS);
|
||||
GUILayout.Label("Default Is White?", GUILayout.Width(BOOLEAN_LABEL_WIDTH));
|
||||
ToolValues.rChannelDefaultWhite = EditorGUILayout.Toggle(ToolValues.rChannelDefaultWhite);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
GUILayout.Label("G Channel", GUILayout.Width(LABEL_WIDTH));
|
||||
ToolValues.gChannelTexture = (Texture2D)EditorGUILayout.ObjectField(ToolValues.gChannelTexture, typeof(Texture2D), false, GUILayout.Width(TEXTURE_FIELD_WIDTH));
|
||||
GUILayout.Space(SPACING_BETWEEN_FIELDS);
|
||||
GUILayout.Label("Default Is White?", GUILayout.Width(BOOLEAN_LABEL_WIDTH));
|
||||
ToolValues.gChannelDefaultWhite = EditorGUILayout.Toggle(ToolValues.gChannelDefaultWhite);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
GUILayout.Label("B Channel", GUILayout.Width(LABEL_WIDTH));
|
||||
ToolValues.bChannelTexture = (Texture2D)EditorGUILayout.ObjectField(ToolValues.bChannelTexture, typeof(Texture2D), false, GUILayout.Width(TEXTURE_FIELD_WIDTH));
|
||||
GUILayout.Space(SPACING_BETWEEN_FIELDS);
|
||||
GUILayout.Label("Default Is White?", GUILayout.Width(BOOLEAN_LABEL_WIDTH));
|
||||
ToolValues.bChannelDefaultWhite = EditorGUILayout.Toggle(ToolValues.bChannelDefaultWhite);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
GUILayout.Label("A Channel", GUILayout.Width(LABEL_WIDTH));
|
||||
ToolValues.aChannelTexture = (Texture2D)EditorGUILayout.ObjectField(ToolValues.aChannelTexture, typeof(Texture2D), false, GUILayout.Width(TEXTURE_FIELD_WIDTH));
|
||||
GUILayout.Space(SPACING_BETWEEN_FIELDS);
|
||||
GUILayout.Label("Default Is White?", GUILayout.Width(BOOLEAN_LABEL_WIDTH));
|
||||
ToolValues.aChannelDefaultWhite = EditorGUILayout.Toggle(ToolValues.aChannelDefaultWhite);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
GUILayout.Space(15);
|
||||
|
||||
// Texture settings
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
GUILayout.Label("Texture Size:", GUILayout.MaxWidth(100));
|
||||
ToolValues.textureSizes = (TextureSizes)EditorGUILayout.EnumPopup(ToolValues.textureSizes, GUILayout.MaxWidth(SETTINGS_FIELD_WIDTH));
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
GUILayout.Label("Filtering:", GUILayout.MaxWidth(100));
|
||||
ToolValues.filtering = (FilterMode)EditorGUILayout.EnumPopup(ToolValues.filtering, GUILayout.MaxWidth(SETTINGS_FIELD_WIDTH));
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
GUILayout.Space(10);
|
||||
|
||||
// Info about input channels
|
||||
int channelCount = 0;
|
||||
if(ToolValues.rChannelTexture != null) channelCount++;
|
||||
if(ToolValues.gChannelTexture != null) channelCount++;
|
||||
if(ToolValues.bChannelTexture != null) channelCount++;
|
||||
if(ToolValues.aChannelTexture != null) channelCount++;
|
||||
|
||||
int textureSize = (int)ToolValues.textureSizes;
|
||||
GUILayout.Label($"Output will be a {textureSize}x{textureSize} RGBA texture with {channelCount}/4 channels assigned", EditorStyles.boldLabel);
|
||||
|
||||
if(channelCount == 0)
|
||||
{
|
||||
GUILayout.Label("*No input textures assigned - output will use default values", EditorStyles.boldLabel);
|
||||
}
|
||||
else if(channelCount < 4)
|
||||
{
|
||||
GUILayout.Label($"*{4 - channelCount} channels will use default values (black or white based on toggles)", EditorStyles.boldLabel);
|
||||
}
|
||||
|
||||
GUILayout.Space(20);
|
||||
GUILayout.Label("Select the folder where RGBA textures will be saved", EditorStyles.boldLabel);
|
||||
GlobalConfiguration.instance.AtlasesSavePath = EditorUtils.DrawSelectorFolder(GlobalConfiguration.instance.AtlasesSavePath, "RGBA");
|
||||
|
||||
if(Directory.Exists(GlobalConfiguration.instance.AtlasesSavePath))
|
||||
{
|
||||
if(GUILayout.Button("Create And Save RGBA Texture", GUILayout.MaxWidth(CommonStyles.BUTTON_WIDTH)))
|
||||
{
|
||||
rgbaPackerTool.CreateRGBATexture();
|
||||
EditorUtils.SaveTextureAsPNG(GlobalConfiguration.instance.AtlasesSavePath, "RGBA_Packed", "RGBA Channel Packed Texture", ToolValues.createdRGBATexture, ToolValues.filtering, TextureImporterType.Default, TextureWrapMode.Clamp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user