[Add] All in one shader

This commit is contained in:
2026-02-23 22:01:07 +07:00
parent ec0aa86ac2
commit 4f942cd7c0
806 changed files with 401510 additions and 33 deletions
@@ -0,0 +1,150 @@
using System.IO;
using UnityEditor;
using UnityEngine;
namespace AllIn13DShader
{
public class GradientCreatorTool
{
public const int HEIGHT_GRADIENT = 16;
public Texture2D gradientTex;
public TextureSizes gradientSizes;
public FilterMode gradientFiltering;
public Gradient gradient;
public GradientCreatorTool()
{
gradientSizes = TextureSizes._128;
gradientFiltering = FilterMode.Bilinear;
gradient = new Gradient();
int size = (int)gradientSizes;
gradientTex = new Texture2D(size, size);
}
public Texture2D CreateGradientTexture(TextureSizes gradientSizes, FilterMode gradientFiltering, Gradient gradient)
{
this.gradientSizes = gradientSizes;
this.gradientFiltering = gradientFiltering;
this.gradient = gradient;
return CreateGradientTexture();
}
public Texture2D CreateGradientTexture(Gradient gradient)
{
this.gradientSizes = TextureSizes._256;
this.gradientFiltering = FilterMode.Bilinear;
this.gradient = gradient;
return CreateGradientTexture();
}
public Texture2D CreateGradientTexture()
{
int textureSize = (int)gradientSizes;
this.gradientTex = new Texture2D(textureSize, HEIGHT_GRADIENT, TextureFormat.RGBA32, false);
this.gradientTex.wrapMode = TextureWrapMode.Clamp;
for (int i = 0; i < textureSize; i++)
{
Color col = gradient.Evaluate((float)i / (float)textureSize);
for (int j = 0; j < HEIGHT_GRADIENT; j++)
{
gradientTex.SetPixel(i, j, gradient.Evaluate((float)i / (float)textureSize));
}
}
gradientTex.Apply();
return gradientTex;
}
public Texture SaveGradientTexture(GradientTexture gradientTextureAsset, bool createNewSO)
{
string texName = "RampTexture";
if(gradientTextureAsset != null)
{
texName = gradientTextureAsset.texture.name;
}
string directoryPath = GlobalConfiguration.instance.GradientSavePath;
if (gradientTextureAsset != null && AssetDatabase.IsMainAsset(gradientTextureAsset.texture) && !createNewSO)
{
string assetPath = AssetDatabase.GetAssetPath(gradientTextureAsset.texture);
directoryPath = Path.GetDirectoryName(assetPath);
}
Texture tex = EditorUtils.SaveTextureAsPNG(directoryPath, texName, "Ramp Texture", gradientTex,
FilterMode.Bilinear, TextureImporterType.Default, TextureWrapMode.Clamp, false, createNewSO);
if (createNewSO)
{
GradientTexture gradientTexture = ScriptableObject.CreateInstance<GradientTexture>();
gradientTexture.texture = tex;
gradientTexture.gradient = new Gradient();
CopyGradient(gradient, gradientTexture.gradient);
string gradientTextureAssetPath = Path.Combine(GlobalConfiguration.instance.GradientSavePath, $"GradientAsset_{tex.name}.asset");
gradientTextureAssetPath = AssetDatabase.GenerateUniqueAssetPath(gradientTextureAssetPath);
AssetDatabase.CreateAsset(gradientTexture, gradientTextureAssetPath);
AssetDatabase.Refresh();
}
else
{
gradientTextureAsset.texture = tex;
gradientTextureAsset.gradient = new Gradient();
CopyGradient(gradient, gradientTextureAsset.gradient);
EditorUtility.SetDirty(gradientTextureAsset);
}
return tex;
}
public static void CopyGradient(Gradient from, Gradient to)
{
GradientColorKey[] newColorKeys = new GradientColorKey[from.colorKeys.Length];
GradientAlphaKey[] newAlphaKeys = new GradientAlphaKey[from.alphaKeys.Length];
for (int i = 0; i < from.colorKeys.Length; i++)
{
newColorKeys[i] = from.colorKeys[i];
}
for (int i = 0; i < from.alphaKeys.Length; i++)
{
newAlphaKeys[i] = from.alphaKeys[i];
}
to.colorKeys = newColorKeys;
to.alphaKeys = newAlphaKeys;
to.mode = from.mode;
}
public static GradientTexture FindGradientTexureByTex(Texture selectedTex)
{
GradientTexture res = null;
string[] guids = AssetDatabase.FindAssets("t:GradientTexture");
for (int i = 0; i < guids.Length; i++)
{
string path = AssetDatabase.GUIDToAssetPath(guids[i]);
GradientTexture gradientTexture = AssetDatabase.LoadAssetAtPath<GradientTexture>(path);
if (gradientTexture.name.StartsWith("GradientAsset_"))
{
if (gradientTexture.texture == selectedTex)
{
res = gradientTexture;
break;
}
}
}
return res;
}
}
}