您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
70 行
2.0 KiB
70 行
2.0 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
[ExecuteInEditMode, RequireComponent(typeof(RawImage))]
|
|
public class ReflectionProbeToTexture : MonoBehaviour
|
|
{
|
|
[SerializeField] private ReflectionProbe targetProbe;
|
|
[SerializeField] private bool correctGamma = false;
|
|
|
|
private Material blitMat;
|
|
private Texture probeTexture;
|
|
private Texture2D texture;
|
|
|
|
private int renderID;
|
|
|
|
private void Start()
|
|
{
|
|
//Convert();
|
|
}
|
|
|
|
[ContextMenu("Refresh")]
|
|
public void Convert ()
|
|
{
|
|
if (targetProbe != null)
|
|
{
|
|
if (texture != null) DestroyImmediate(texture);
|
|
|
|
texture = new Texture2D(targetProbe.resolution * 4, targetProbe.resolution * 3) { wrapMode = TextureWrapMode.Clamp };
|
|
|
|
if (blitMat != null) DestroyImmediate(blitMat);
|
|
blitMat = new Material(Shader.Find("Hiddent/HDRP/Tests/TexCubeToTex2D"));
|
|
blitMat.SetFloat("_CorrectGamma", correctGamma ? 1 : 0);
|
|
|
|
RenderTexture dest = new RenderTexture(texture.width, texture.height, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Default);
|
|
|
|
while (!targetProbe.IsFinishedRendering(renderID)) { };
|
|
|
|
probeTexture = targetProbe.texture;
|
|
|
|
Graphics.Blit(probeTexture, dest, blitMat);
|
|
|
|
// Readback the rendered texture
|
|
var oldActive = RenderTexture.active;
|
|
RenderTexture.active = dest;
|
|
texture.ReadPixels(new Rect(0, 0, texture.width, texture.height), 0, 0);
|
|
RenderTexture.active = oldActive;
|
|
texture.Apply();
|
|
|
|
GetComponent<RawImage>().texture = texture;
|
|
}
|
|
}
|
|
|
|
[ContextMenu("RenderProbe")]
|
|
public void RenderProbe()
|
|
{
|
|
if (targetProbe != null)
|
|
{
|
|
renderID = targetProbe.RenderProbe();
|
|
StartCoroutine(WaitForRenderRoutine());
|
|
}
|
|
}
|
|
|
|
IEnumerator WaitForRenderRoutine()
|
|
{
|
|
while (!targetProbe.IsFinishedRendering(renderID)) yield return null;
|
|
Convert();
|
|
}
|
|
}
|