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

196 lines
5.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using Unity.XR.PXR;
using UnityEngine;
#if PICO_OPENXR_SDK
using Unity.XR.OpenXR.Features.PICOSupport;
#endif
public class PXR_CameraEffectBlock : MonoBehaviour
{
public Texture2D lutTex;
private int row = 0;
private int col = 0;
private float brightness = 0;
private float contrast = 0;
private float saturation = 0;
private PassthroughStyle passthroughStyle = new()
{
enableColorMap = true,
enableEdgeColor = true,
TextureOpacityFactor = 1.0f
};
private float r = 0;
private float g = 0;
private float b = 0;
private float a = 0;
private Color[] values;
// Start is called before the first frame update
void Start()
{
#if PICO_OPENXR_SDK
PassthroughFeature.EnableVideoSeeThrough = true;
values = new Color[PassthroughFeature.XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB];
#else
PXR_Manager.EnableVideoSeeThrough = true;
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
#endif
}
// Update is called once per frame
void Update()
{
}
public void SetColortemp(float x)
{
#if PICO_OPENXR_SDK
#else
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Colortemp, x, 0);
#endif
}
public void SetBrightness(float x)
{
#if PICO_OPENXR_SDK
brightness = x;
PassthroughFeature.SetBrightnessContrastSaturation(ref passthroughStyle, brightness, contrast, saturation);
PassthroughFeature.SetPassthroughStyle(passthroughStyle);
#else
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Brightness, x, 0);
#endif
}
public void SetSaturation(float x)
{
#if PICO_OPENXR_SDK
saturation = x;
PassthroughFeature.SetBrightnessContrastSaturation(ref passthroughStyle, brightness, contrast, saturation);
PassthroughFeature.SetPassthroughStyle(passthroughStyle);
#else
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Saturation, x, 0);
#endif
}
public void SetContrast(float x)
{
#if PICO_OPENXR_SDK
contrast = x;
PassthroughFeature.SetBrightnessContrastSaturation(ref passthroughStyle, brightness, contrast, saturation);
PassthroughFeature.SetPassthroughStyle(passthroughStyle);
#else
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughEffect(PxrLayerEffect.Contrast, x, 0);
#endif
}
public void SetLut()
{
if (lutTex)
{
#if PICO_OPENXR_SDK
#else
PXR_MixedReality.EnableVideoSeeThroughEffect(true);
PXR_MixedReality.SetVideoSeeThroughLut(lutTex, 8, 8);
#endif
}
}
public void ClearAll()
{
#if PICO_OPENXR_SDK
passthroughStyle = new()
{
enableColorMap = true,
enableEdgeColor = true,
TextureOpacityFactor = 1.0f
};
PassthroughFeature.SetPassthroughStyle(passthroughStyle);
#else
PXR_MixedReality.EnableVideoSeeThroughEffect(false);
#endif
}
#if PICO_OPENXR_SDK
public void MonoToMono()
{
var monOvalues = new int[PassthroughFeature.XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB];
for (int i = 0; i < PassthroughFeature.XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB; ++i)
{
monOvalues[i] = i;
}
PassthroughFeature.SetColorMapbyMonoToMono(ref passthroughStyle, monOvalues);
PassthroughFeature.SetPassthroughStyle(passthroughStyle);
}
public void SetEdgeColorToR(float x)
{
r = x;
SetEdgeColorRGBA();
}
public void SetEdgeColorToG(float x)
{
g = x;
SetEdgeColorRGBA();
}
public void SetEdgeColorToB(float x)
{
b = x;
SetEdgeColorRGBA();
}
public void SetEdgeColorToA(float x)
{
a = x;
SetEdgeColorRGBA();
}
public void SetEdgeColorRGBA()
{
passthroughStyle.EdgeColor = new Color(r, g, b, a);
PassthroughFeature.SetPassthroughStyle(passthroughStyle);
}
public void SetColorMapR()
{
var values = new Color[PassthroughFeature.XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB];
for (int i = 0; i < PassthroughFeature.XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB; ++i)
{
float colorValue = i / 255.0f;
values[i] = new Color(colorValue, 0.0f, 0.0f, 1.0f);
}
PassthroughFeature.SetColorMapbyMonoToRgba(ref passthroughStyle, values);
PassthroughFeature.SetPassthroughStyle(passthroughStyle);
}
public void SetColorMapG()
{
var values = new Color[PassthroughFeature.XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB];
for (int i = 0; i < PassthroughFeature.XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB; ++i)
{
float colorValue = i / 255.0f;
values[i] = new Color(0.0f, colorValue, 0.0f, 1.0f);
}
PassthroughFeature.SetColorMapbyMonoToRgba(ref passthroughStyle, values);
PassthroughFeature.SetPassthroughStyle(passthroughStyle);
}
public void SetColorMapB()
{
var values = new Color[PassthroughFeature.XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB];
for (int i = 0; i < PassthroughFeature.XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB; ++i)
{
float colorValue = i / 255.0f;
values[i] = new Color(0.0f, 0.0f, colorValue, 1.0f);
}
PassthroughFeature.SetColorMapbyMonoToRgba(ref passthroughStyle, values);
PassthroughFeature.SetPassthroughStyle(passthroughStyle);
}
#endif
}