44 lines
1.6 KiB
C#
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)");
|
|
}
|
|
}
|
|
} |