Files
VR-WuKong/Packages/PICO Unity Integration SDK-3.3.2-20251111/Runtime/Subsystem/PXR_ARCameraEffectManager.cs
2025-11-13 17:40:28 +08:00

123 lines
3.9 KiB
C#

using Unity.XR.PXR;
using UnityEngine;
using UnityEngine.UI;
public class PXR_ARCameraEffectManager : MonoBehaviour
{
public bool enableCameraEffect = false;
[HideInInspector]
public float colortempValue;
[HideInInspector]
public float brightnessValue;
[HideInInspector]
public float saturationValue;
[HideInInspector]
public float contrastValue;
[HideInInspector]
public Texture2D lutTex1;
[HideInInspector]
public Texture2D lutTex2;
[HideInInspector]
public Texture2D lutTex3;
[HideInInspector]
public Texture2D lutTex4;
[HideInInspector]
public Texture2D lutTex5;
private const string TAG = "PXR_ARCameraEffectManager";
// Start is called before the first frame update
void Start()
{
Camera camera = Camera.main;
camera.clearFlags = CameraClearFlags.SolidColor;
camera.backgroundColor = new Color(0, 0, 0, 0);
if (enableCameraEffect)
{
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Colortemp, colortempValue, 1);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Brightness, brightnessValue, 1);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Saturation, saturationValue, 1);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Contrast, contrastValue, 1);
}
}
// Update is called once per frame
void Update()
{
}
public void SetColortemp(float x)
{
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Colortemp, x, 1);
}
public void SetBrightness(float x)
{
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Brightness, x, 1);
}
public void SetSaturation(float x)
{
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Saturation, x, 1);
}
public void SetContrast(float x)
{
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Contrast, x, 1);
}
public void EnableLut(bool enable)
{
PLog.d(TAG, $"SetLutRow lutTex={lutTex1}, enable={enable} ");
PXR_MixedReality.EnableVideoSeeThroughEffect(enable);
if (lutTex1 && enable)
{
PLog.d(TAG, $"SetLutRow lutTex={lutTex1}");
PXR_MixedReality.SetVideoSeeThroughLut(lutTex1, 8, 8);
}
}
public void SetLut(int index)
{
PLog.d(TAG, $"SetLutRow index={index}");
switch (index)
{
case 0:
PXR_MixedReality.EnableVideoSeeThroughEffect(false);
break;
case 1:
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughLut(lutTex1, 8, 8);
break;
case 2:
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughLut(lutTex2, 8, 8);
break;
case 3:
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughLut(lutTex3, 8, 8);
break;
case 4:
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughLut(lutTex4, 8, 8);
break;
case 5:
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughLut(lutTex5, 8, 8);
break;
default:
break;
}
}
private void OnDisable()
{
PXR_MixedReality.EnableVideoSeeThroughEffect(false);
}
}