Files
YachtDice/Assets/Plugins/AllIn13DShader/Editor/Tools/RenderMaterialToImageTool.cs
T
2026-02-23 22:01:07 +07:00

44 lines
1.6 KiB
C#

using System.IO;
using UnityEditor;
using UnityEngine;
namespace AllIn13DShader
{
public class RenderMaterialToImageTool
{
public static void RenderAndSaveTexture(Material targetMaterial, Texture targetTexture, float scaleSlider, string folderPath, string fileName)
{
RenderTexture renderTarget = new RenderTexture((int)(targetTexture.width * scaleSlider),
(int)(targetTexture.height * scaleSlider), 0, RenderTextureFormat.ARGB32);
Graphics.Blit(targetTexture, renderTarget, targetMaterial);
Texture2D resultTex = new Texture2D(renderTarget.width, renderTarget.height, TextureFormat.ARGB32, false);
resultTex.ReadPixels(new Rect(0, 0, renderTarget.width, renderTarget.height), 0, 0);
resultTex.Apply();
if (!Directory.Exists(folderPath))
{
EditorUtility.DisplayDialog("The desired Material to Image Save Path doesn't exist",
"Go to Window -> AllIn1VfxWindow and set a valid folder", "Ok");
return;
}
string fullPath = Path.Combine(folderPath, fileName + ".png");
fullPath = AssetDatabase.GenerateUniqueAssetPath(fullPath);
string correctedFileName = fullPath.Replace(folderPath, string.Empty);
fullPath = EditorUtility.SaveFilePanel("Save Render Image", folderPath, fileName, "png");
byte[] bytes = resultTex.EncodeToPNG();
File.WriteAllBytes(fullPath, bytes);
AssetDatabase.ImportAsset(fullPath);
AssetDatabase.Refresh();
GameObject.DestroyImmediate(resultTex);
EditorUtils.PingPath(fullPath);
EditorUtils.ShowNotification("Render Image saved to: " + fullPath + " with scale: " + scaleSlider +
" (it can be changed in Tools -> AllIn1 -> 3DShaderWindow)");
}
}
}