69 lines
1.9 KiB
C#
69 lines
1.9 KiB
C#
using UnityEngine;
|
|
|
|
namespace Beautify.Universal {
|
|
|
|
[ExecuteInEditMode]
|
|
public class LUTBlending : MonoBehaviour {
|
|
|
|
public Texture2D LUT1, LUT2;
|
|
|
|
[Range(0, 1)]
|
|
public float LUT1Intensity = 1f;
|
|
|
|
[Range(0, 1)]
|
|
public float LUT2Intensity = 1f;
|
|
|
|
[Range(0, 1)]
|
|
public float phase;
|
|
public Shader lerpShader;
|
|
|
|
float oldPhase = -1;
|
|
RenderTexture rt;
|
|
Material lerpMat;
|
|
|
|
static class ShaderParams {
|
|
public static int LUT2 = Shader.PropertyToID("_LUT2");
|
|
public static int Phase = Shader.PropertyToID("_Phase");
|
|
}
|
|
|
|
void OnEnable() {
|
|
UpdateBeautifyLUT();
|
|
}
|
|
|
|
void OnValidate() {
|
|
oldPhase = -1;
|
|
UpdateBeautifyLUT();
|
|
}
|
|
|
|
private void OnDestroy() {
|
|
if (rt != null) {
|
|
rt.Release();
|
|
}
|
|
}
|
|
|
|
void LateUpdate() {
|
|
UpdateBeautifyLUT();
|
|
}
|
|
|
|
void UpdateBeautifyLUT() {
|
|
if (oldPhase == phase || LUT1 == null || LUT2 == null || lerpShader == null) return;
|
|
oldPhase = phase;
|
|
|
|
if (rt == null) {
|
|
rt = new RenderTexture(LUT1.width, LUT1.height, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear);
|
|
rt.filterMode = FilterMode.Point;
|
|
}
|
|
if (lerpMat == null) {
|
|
lerpMat = new Material(lerpShader);
|
|
}
|
|
lerpMat.SetTexture(ShaderParams.LUT2, LUT2);
|
|
lerpMat.SetFloat(ShaderParams.Phase, phase);
|
|
Graphics.Blit(LUT1, rt, lerpMat);
|
|
BeautifySettings.settings.lut.Override(true);
|
|
float intensity = Mathf.Lerp(LUT1Intensity, LUT2Intensity, phase);
|
|
BeautifySettings.settings.lutIntensity.Override(intensity);
|
|
BeautifySettings.settings.lutTexture.Override(rt);
|
|
}
|
|
}
|
|
}
|