using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.Rendering;
public static class CameraCapturer
{
[MenuItem("Test/CaptureCamera")]
private static void CaptureCamera()
{
RenderPipelineAsset urpAsset = GraphicsSettings.renderPipelineAsset;
GraphicsSettings.renderPipelineAsset = null;
Camera camera = CreateCamera();
camera.targetTexture = CreateRenderTexture(512, 512);
ClearRenderTexture(camera.targetTexture);
var replaceShader = Shader.Find("Unlit/Replace");
camera.RenderWithShader(replaceShader, "RenderType");
SaveRenderTextureToAssset(camera.targetTexture, "Assets/Textures/result.png");
//release
camera.targetTexture.Release();
GameObject.DestroyImmediate(camera.gameObject);
GraphicsSettings.renderPipelineAsset = urpAsset;
}
private static Camera CreateCamera()
{
var camera = Camera.Instantiate(Camera.main);
camera.clearFlags = CameraClearFlags.Nothing;
camera.backgroundColor = Color.black;
camera.enabled = false;
return camera;
}
private static void ClearRenderTexture(RenderTexture renderTexture)
{
RenderTexture.active = renderTexture;
GL.Clear(true, true, Color.black, 1f);
RenderTexture.active = null;
}
private static void SaveRenderTextureToAssset(RenderTexture renderTexture, string assetPath)
{
string fullPath = assetPath.Replace("Assset", Application.dataPath);
Texture2D tex = new Texture2D(renderTexture.width, renderTexture.height, TextureFormat.ARGB32, false, false);
RenderTexture.active = renderTexture;
tex.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0, false);
tex.Apply();
RenderTexture.active = null;
var bytes = tex.EncodeToPNG();
System.IO.File.WriteAllBytes(fullPath, bytes);
AssetDatabase.ImportAsset(assetPath);
}
private static RenderTexture CreateRenderTexture(int width, int height)
{
RenderTexture rtex = new RenderTexture(width, height, 24, RenderTextureFormat.ARGB32);
return rtex;
}
}
CameraCapturer
最新推荐文章于 2024-07-24 15:23:17 发布