You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
5.0 KiB
C#
174 lines
5.0 KiB
C#
/******************************************************************************/
|
|
/*
|
|
Project - MudBun
|
|
Publisher - Long Bunny Labs
|
|
http://LongBunnyLabs.com
|
|
Author - Ming-Lun "Allen" Chou
|
|
http://AllenChou.net
|
|
*/
|
|
/******************************************************************************/
|
|
|
|
using UnityEngine;
|
|
|
|
namespace MudBun
|
|
{
|
|
//[CreateAssetMenu(fileName = "MudBun Texture Packer", menuName = "MudBun/Texture Packer", order = 151)]
|
|
public class MudTexturePacker : ScriptableObject
|
|
{
|
|
public enum TextureType
|
|
{
|
|
White,
|
|
Gray,
|
|
Black,
|
|
FlatNormal,
|
|
Texutre,
|
|
}
|
|
|
|
public TextureType ColorType;
|
|
public Texture2D Color;
|
|
|
|
public TextureType EmissionType;
|
|
public Texture2D Emission;
|
|
|
|
public TextureType NormalType;
|
|
public Texture2D Normal;
|
|
|
|
public TextureType MetallicType;
|
|
public Texture2D Metallic;
|
|
|
|
public TextureType SmoothnessType;
|
|
public Texture2D Smoothness;
|
|
|
|
private Color [] GetPixels(TextureType type, int numPixels)
|
|
{
|
|
switch (type)
|
|
{
|
|
case TextureType.White:
|
|
Color white = new Color(255, 255, 255, 255);
|
|
Color[] aWhite = new Color[numPixels];
|
|
for (int i = 0; i < numPixels; ++i)
|
|
{
|
|
aWhite[i] = white;
|
|
}
|
|
return aWhite;
|
|
|
|
case TextureType.Gray:
|
|
Color gray = new Color(128, 128, 128, 255);
|
|
Color[] aGray = new Color[numPixels];
|
|
for (int i = 0; i < numPixels; ++i)
|
|
{
|
|
aGray[i] = gray;
|
|
}
|
|
return aGray;
|
|
|
|
case TextureType.Black:
|
|
Color black = new Color(0, 0, 0, 255);
|
|
Color[] aBlack = new Color[numPixels];
|
|
for (int i = 0; i < numPixels; ++i)
|
|
{
|
|
aBlack[i] = black;
|
|
}
|
|
return aBlack;
|
|
|
|
case TextureType.FlatNormal:
|
|
Color flatNormal = new Color(0, 0, 0, 255);
|
|
Color[] aFlatNormal = new Color[numPixels];
|
|
for (int i = 0; i < numPixels; ++i)
|
|
{
|
|
aFlatNormal[i] = flatNormal;
|
|
}
|
|
return aFlatNormal;
|
|
}
|
|
|
|
Assert.Warn("Invalid texture type: " + type);
|
|
return null;
|
|
}
|
|
|
|
public void Pack(string path)
|
|
{
|
|
int width = -1;
|
|
int height = -1;
|
|
|
|
if (Color != null)
|
|
{
|
|
width = Color.width;
|
|
height = Color.height;
|
|
}
|
|
|
|
if (Emission != null)
|
|
{
|
|
if ((width >= 0 && width != Emission.width)
|
|
|| (height >= 0 && height != Emission.height))
|
|
{
|
|
Debug.LogError($"MudBun Texture Packer: Emission texture doesn't match other textures dimsions (need {width} x {height} but got {Emission.width} x {Emission.height}).");
|
|
return;
|
|
}
|
|
|
|
width = Emission.width;
|
|
height = Emission.height;
|
|
}
|
|
|
|
if (Normal != null)
|
|
{
|
|
if ((width >= 0 && width != Normal.width)
|
|
|| (height >= 0 && height != Normal.height))
|
|
{
|
|
Debug.LogError($"MudBun Texture Packer: ENormal texture doesn't match other textures dimsions (need {width} x {height} but got {Normal.width} x {Normal.height}).");
|
|
return;
|
|
}
|
|
|
|
width = Normal.width;
|
|
height = Normal.height;
|
|
}
|
|
|
|
if (Metallic != null)
|
|
{
|
|
if ((width >= 0 && width != Metallic.width)
|
|
|| (height >= 0 && height != Metallic.height))
|
|
{
|
|
Debug.LogError($"MudBun Texture Packer: EMetallic texture doesn't match other textures dimsions (need {width} x {height} but got {Metallic.width} x {Metallic.height}).");
|
|
return;
|
|
}
|
|
|
|
width = Metallic.width;
|
|
height = Metallic.height;
|
|
}
|
|
|
|
if (Smoothness != null)
|
|
{
|
|
if ((width >= 0 && width != Smoothness.width)
|
|
|| (height >= 0 && height != Smoothness.height))
|
|
{
|
|
Debug.LogError($"MudBun Texture Packer: ESmoothness texture doesn't match other textures dimsions (need {width} x {height} but got {Smoothness.width} x {Smoothness.height}).");
|
|
return;
|
|
}
|
|
|
|
width = Smoothness.width;
|
|
height = Smoothness.height;
|
|
}
|
|
|
|
if (width <= 0 || height <= 0)
|
|
{
|
|
Debug.LogError("MudBun Texture Packer: EAt least one non-empty texture needs to be specified.");
|
|
return;
|
|
}
|
|
|
|
int numPixels = width * height;
|
|
|
|
Color [] aColor = (Color != null) ? Color.GetPixels() : GetPixels(ColorType, numPixels);
|
|
Color [] aEmission = (Emission != null) ? Emission.GetPixels() : GetPixels(EmissionType, numPixels);
|
|
Color [] aNormal = (Normal != null) ? Normal.GetPixels() : GetPixels(NormalType, numPixels);
|
|
Color [] aMetallic = (Metallic != null) ? Metallic.GetPixels() : GetPixels(MetallicType, numPixels);
|
|
Color [] aSmoothness = (Smoothness != null) ? Metallic.GetPixels() : GetPixels(SmoothnessType, numPixels);
|
|
for (int x = 0; x < width; ++x)
|
|
{
|
|
for (int y = 0; y < height; ++y)
|
|
{
|
|
// TODO: don't need this right now
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|