Skip to content

Commit 334a36c

Browse files
committed
quality of life improvements
1 parent 7c0fdd2 commit 334a36c

22 files changed

Lines changed: 907 additions & 44 deletions

Basis/Assets/AddressableAssetsData/AssetGroups/Basis Foundation Assets.asset

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,11 @@ MonoBehaviour:
289289
m_ReadOnly: 0
290290
m_SerializedLabels: []
291291
FlaggedDuringContentUpdateRestriction: 0
292+
- m_GUID: df4c5b7b152475f48adb88ead5775eb0
293+
m_Address: Packages/com.basis.sdk/Textures/Runtime/microphone-solid.png
294+
m_ReadOnly: 0
295+
m_SerializedLabels: []
296+
FlaggedDuringContentUpdateRestriction: 0
292297
- m_GUID: eafa514b4dc421d4c8b01e7c6e3a627a
293298
m_Address: Packages/com.basisvr.openlipsync/OpenLipSync/config.json
294299
m_ReadOnly: 0
@@ -304,6 +309,11 @@ MonoBehaviour:
304309
m_ReadOnly: 0
305310
m_SerializedLabels: []
306311
FlaggedDuringContentUpdateRestriction: 0
312+
- m_GUID: f184b79ab72cc224e94720390fb038c2
313+
m_Address: Packages/com.basis.sdk/Textures/Runtime/microphone-mute-solid.png
314+
m_ReadOnly: 0
315+
m_SerializedLabels: []
316+
FlaggedDuringContentUpdateRestriction: 0
307317
- m_GUID: f3e0631a93d0ade4d8aa6c53111ddf5e
308318
m_Address: Packages/com.basis.sdk/Prefabs/Panel Elements/Platform Panel - Linux.prefab
309319
m_ReadOnly: 0

Basis/Packages/com.basis.examples/Scripts/BasisSDKMirror.cs

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using Basis.BasisUI;
12
using Basis.Scripts.BasisSdk.Helpers;
23
using Basis.Scripts.Device_Management;
34
using Basis.Scripts.Drivers;
@@ -135,6 +136,8 @@ private void OnEnable()
135136

136137
BasisDeviceManagement.OnBootModeChanged += BootModeChanged;
137138
BasisLocalCameraDriver.InstanceExists += Initialize;
139+
BasisSettingsDefaults.MirrorQuality.OnChanged += OnMirrorQualityChanged;
140+
BasisSettingsDefaults.UseMirrorQualityOverride.OnChanged += OnMirrorQualityOverrideChanged;
138141

139142
if (BasisLocalCameraDriver.HasInstance)
140143
Initialize();
@@ -150,10 +153,14 @@ private void OnDisable()
150153
private void OnDestroy()
151154
{
152155
BasisDeviceManagement.OnBootModeChanged -= BootModeChanged;
156+
BasisSettingsDefaults.MirrorQuality.OnChanged -= OnMirrorQualityChanged;
157+
BasisSettingsDefaults.UseMirrorQualityOverride.OnChanged -= OnMirrorQualityOverrideChanged;
153158
Application.onBeforeRender -= OnBeforeRender;
154159
}
155160

156161
private void BootModeChanged(string _) => StartCoroutine(ResetMirror());
162+
private void OnMirrorQualityChanged(string _) => StartCoroutine(ResetMirror());
163+
private void OnMirrorQualityOverrideChanged(bool _) => StartCoroutine(ResetMirror());
157164

158165
private IEnumerator ResetMirror()
159166
{
@@ -200,6 +207,21 @@ private void CleanUp()
200207
InsideRendering = false;
201208
}
202209

210+
private void GetEffectiveResolution(out int width, out int height)
211+
{
212+
if (BasisSettingsDefaults.UseMirrorQualityOverride.RawValue &&
213+
int.TryParse(BasisSettingsDefaults.MirrorQuality.RawValue, out int overrideRes) && overrideRes > 0)
214+
{
215+
width = overrideRes;
216+
height = overrideRes;
217+
}
218+
else
219+
{
220+
width = XSize;
221+
height = YSize;
222+
}
223+
}
224+
203225
private void Initialize()
204226
{
205227
xFlip = Matrix4x4.Scale(new Vector3(-1f, 1f, 1f));
@@ -331,8 +353,16 @@ private void RenderEye(Camera sourceCamera, MonoOrStereoscopicEye eye, Vector3 s
331353
portalCamera.cullingMatrix = portalCamera.projectionMatrix * portalCamera.worldToCameraMatrix;
332354

333355
// Clamp near/far
334-
portalCamera.nearClipPlane = Mathf.Max(nearClipLimit, portalCamera.nearClipPlane);
335-
portalCamera.farClipPlane = FarClipPlane;
356+
if (BasisSettingsDefaults.UseCameraClipOverride.RawValue)
357+
{
358+
portalCamera.nearClipPlane = Mathf.Max(0.001f, BasisSettingsDefaults.CameraClipNear.RawValue);
359+
portalCamera.farClipPlane = BasisSettingsDefaults.CameraClipFar.RawValue;
360+
}
361+
else
362+
{
363+
portalCamera.nearClipPlane = Mathf.Max(nearClipLimit, portalCamera.nearClipPlane);
364+
portalCamera.farClipPlane = FarClipPlane;
365+
}
336366

337367
SubmitRenderRequest(portalCamera, portalCamera.targetTexture);
338368
}
@@ -384,7 +414,8 @@ public static void CalculateObliqueMatrix(ref Matrix4x4 projection, float4 clipP
384414

385415
private void CreatePortalCamera(Camera sourceCamera, StereoscopicEye eye, ref Camera portalCamera, ref RenderTexture portalTexture)
386416
{
387-
var desc = new RenderTextureDescriptor(XSize, YSize, RenderTextureFormat.Default, depth)
417+
GetEffectiveResolution(out int effectiveWidth, out int effectiveHeight);
418+
var desc = new RenderTextureDescriptor(effectiveWidth, effectiveHeight, RenderTextureFormat.Default, depth)
388419
{
389420
msaaSamples = Mathf.Max(1, Antialiasing),
390421
sRGB = QualitySettings.activeColorSpace == ColorSpace.Linear,

Basis/Packages/com.basis.framework/Basis Framework.asmdef

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@
5757
"name": "com.basis.openxr",
5858
"expression": "",
5959
"define": "BASIS_HAS_OPENXR"
60+
},
61+
{
62+
"name": "com.basis.mediapipe",
63+
"expression": "",
64+
"define": "BASIS_HAS_MEDIAPIPE"
6065
}
6166
],
6267
"noEngineReferences": false

Basis/Packages/com.basis.framework/BasisUI/Addressables/AddressableAsset.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ public static class Sprites
3636
public static string Information = "Packages/com.basis.sdk/Textures/Runtime/information.png";
3737
public static string Admin = "Packages/com.basis.sdk/Textures/Runtime/admin.png";
3838

39+
public static string Microphone = "Packages/com.basis.sdk/Textures/Runtime/microphone-solid.png";
40+
public static string MicrophoneMute = "Packages/com.basis.sdk/Textures/Runtime/microphone-mute-solid.png";
41+
3942
// embedded items
4043
public static string Embedded = "Packages/com.basis.sdk/Textures/Runtime/embedded.png";
4144

Basis/Packages/com.basis.framework/BasisUI/BasisSettingsDefaults.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,21 @@ public static class BasisSettingsDefaults
128128
other = "64bit"
129129
});
130130

131+
// ---------------- ACCESSIBILITY ----------------
132+
/// <summary>
133+
/// When enabled, the bloom intensity override is applied via a high-priority global Volume.
134+
/// </summary>
135+
public static BasisSettingsBinding<bool> UseBloomOverride = new("usebloomoverride", new BasisPlatformDefault<bool>(false));
136+
137+
/// <summary>
138+
/// Bloom intensity override. 0 = bloom disabled, 1 = default scene bloom.
139+
/// Only applied when <see cref="UseBloomOverride"/> is enabled.
140+
/// </summary>
141+
public static BasisSettingsBinding<float> BloomIntensity = new("bloomintensity", new BasisPlatformDefault<float>(1f));
142+
143+
public const float BLOOM_INTENSITY_MIN = 0f;
144+
public const float BLOOM_INTENSITY_MAX = 5f;
145+
131146
public static BasisSettingsBinding<bool> MicrophoneDenoiser = new("voicedenoiser", new BasisPlatformDefault<bool>
132147
{
133148
windows = true,
@@ -163,6 +178,8 @@ public static class BasisSettingsDefaults
163178
other = "Dynamic"
164179
});
165180

181+
public static BasisSettingsBinding<bool> AvatarPreview = new("avatarpreview", new BasisPlatformDefault<bool>(false));
182+
166183
public static BasisSettingsBinding<string> MicrophoneIcon = new("microphoneicon", new BasisPlatformDefault<string>("alwaysvisible"));
167184

168185
public static BasisSettingsBinding<float> MicrophoneIconOffsetX = new("microphoneiconoffsetx", new BasisPlatformDefault<float>(0f));
@@ -622,6 +639,15 @@ public static class BasisSettingsDefaults
622639
public static BasisSettingsBinding<string> UIPaletteDanger = new("ui_palette_danger", new BasisPlatformDefault<string>(""));
623640
public static BasisSettingsBinding<string> UIPaletteScrollbar = new("ui_palette_scrollbar", new BasisPlatformDefault<string>(""));
624641

642+
// ---------------- MIRROR ----------------
643+
public static BasisSettingsBinding<bool> UseMirrorQualityOverride = new("usemirrorqualityoverride", new BasisPlatformDefault<bool>(false));
644+
public static BasisSettingsBinding<string> MirrorQuality = new("mirrorquality", new BasisPlatformDefault<string>("2048"));
645+
646+
// ---------------- CAMERA CLIP OVERRIDE ----------------
647+
public static BasisSettingsBinding<bool> UseCameraClipOverride = new("usecameraclipoverride", new BasisPlatformDefault<bool>(false));
648+
public static BasisSettingsBinding<float> CameraClipNear = new("cameraclipnear", new BasisPlatformDefault<float>(0.01f));
649+
public static BasisSettingsBinding<float> CameraClipFar = new("cameraclipfar", new BasisPlatformDefault<float>(1000f));
650+
625651
// Noise Gate
626652
public static BasisSettingsBinding<bool> UseNoiseGate = new("usenoisegate", new BasisPlatformDefault<bool>(false));
627653
public static BasisSettingsBinding<float> NoiseGateThreshold = new("noisegatethreshold", new BasisPlatformDefault<float>(0.01f)); // RMS threshold
@@ -703,6 +729,15 @@ public static void LoadAll()
703729
VSync.LoadBindingValue();
704730
VSyncCapFps.LoadBindingValue();
705731

732+
// Mirror
733+
UseMirrorQualityOverride.LoadBindingValue();
734+
MirrorQuality.LoadBindingValue();
735+
736+
// Camera Clip Override
737+
UseCameraClipOverride.LoadBindingValue();
738+
CameraClipNear.LoadBindingValue();
739+
CameraClipFar.LoadBindingValue();
740+
706741
// LOD / Download limits
707742
AvatarDownloadSize.LoadBindingValue();
708743
CacheMaxSizeGB.LoadBindingValue();
@@ -723,6 +758,7 @@ public static void LoadAll()
723758
LeaveNotifications.LoadBindingValue();
724759

725760
// UI
761+
AvatarPreview.LoadBindingValue();
726762
MicrophoneIcon.LoadBindingValue();
727763
MicrophoneIconOffsetX.LoadBindingValue();
728764
MicrophoneIconOffsetY.LoadBindingValue();
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using UnityEngine;
5+
6+
namespace Basis.BasisUI
7+
{
8+
public static class BasisTrustedVideoUrls
9+
{
10+
private const string FileName = "trustedVideoUrls.json";
11+
private static readonly string FilePath = Path.Combine(Application.persistentDataPath, FileName);
12+
13+
private static HashSet<string> _cachedUrls;
14+
15+
public static event Action OnListChanged;
16+
17+
[Serializable]
18+
private class TrustedUrlData
19+
{
20+
public List<string> urls = new List<string>();
21+
}
22+
23+
private static void EnsureCache()
24+
{
25+
if (_cachedUrls != null) return;
26+
_cachedUrls = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
27+
if (!File.Exists(FilePath)) return;
28+
try
29+
{
30+
string json = File.ReadAllText(FilePath);
31+
TrustedUrlData data = JsonUtility.FromJson<TrustedUrlData>(json);
32+
if (data?.urls != null)
33+
{
34+
for (int i = 0; i < data.urls.Count; i++)
35+
{
36+
if (!string.IsNullOrEmpty(data.urls[i]))
37+
_cachedUrls.Add(data.urls[i]);
38+
}
39+
}
40+
}
41+
catch (Exception e)
42+
{
43+
BasisDebug.LogError($"[BasisTrustedVideoUrls] Failed to load {FilePath}: {e}");
44+
}
45+
}
46+
47+
private static void Save()
48+
{
49+
try
50+
{
51+
TrustedUrlData data = new TrustedUrlData();
52+
data.urls.AddRange(_cachedUrls);
53+
string json = JsonUtility.ToJson(data, true);
54+
File.WriteAllText(FilePath, json);
55+
}
56+
catch (Exception e)
57+
{
58+
BasisDebug.LogError($"[BasisTrustedVideoUrls] Failed to save {FilePath}: {e}");
59+
}
60+
OnListChanged?.Invoke();
61+
}
62+
63+
public static bool IsTrusted(string url)
64+
{
65+
if (string.IsNullOrEmpty(url)) return false;
66+
EnsureCache();
67+
return _cachedUrls.Contains(url);
68+
}
69+
70+
public static void Add(string url)
71+
{
72+
if (string.IsNullOrEmpty(url)) return;
73+
EnsureCache();
74+
if (_cachedUrls.Add(url))
75+
Save();
76+
}
77+
78+
public static void Remove(string url)
79+
{
80+
if (string.IsNullOrEmpty(url)) return;
81+
EnsureCache();
82+
if (_cachedUrls.Remove(url))
83+
Save();
84+
}
85+
86+
public static List<string> GetAll()
87+
{
88+
EnsureCache();
89+
return new List<string>(_cachedUrls);
90+
}
91+
92+
public static void ClearAll()
93+
{
94+
if (_cachedUrls == null)
95+
_cachedUrls = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
96+
else
97+
_cachedUrls.Clear();
98+
Save();
99+
}
100+
101+
public static void InvalidateCache()
102+
{
103+
_cachedUrls = null;
104+
}
105+
}
106+
}

Basis/Packages/com.basis.framework/BasisUI/BasisTrustedVideoUrls.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Basis/Packages/com.basis.framework/BasisUI/Menus/BasisMainMenu.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Basis.BTween;
2+
using Basis.Scripts.Drivers;
23
using UnityEngine;
34

45
namespace Basis.BasisUI
@@ -64,6 +65,7 @@ public static void Open()
6465

6566
Instance = new BasisMainMenu();
6667
BasisCursorManagement.UnlockCursor(nameof(BasisMainMenu));
68+
SetMicrophoneIconHudVisible(false);
6769
}
6870
public static void OpenWithProvider(string ProviderTitle)
6971
{
@@ -102,6 +104,17 @@ public static void Close()
102104
Instance.Release();
103105
Instance = null;
104106
BasisCursorManagement.LockCursor(nameof(BasisMainMenu));
107+
SetMicrophoneIconHudVisible(true);
108+
}
109+
110+
private static void SetMicrophoneIconHudVisible(bool visible)
111+
{
112+
#if !BASIS_DISABLE_MICROPHONE
113+
if (BasisLocalCameraDriver.Instance != null)
114+
{
115+
BasisLocalCameraDriver.Instance.microphoneIconDriver.HardEnableVisuals(visible);
116+
}
117+
#endif
105118
}
106119

107120
public static BasisMenuPanel CreateActiveMenu(BasisMenuPanel.PanelData data, string style, BasisMenuActionProvider<BasisMainMenu> provider = null)

0 commit comments

Comments
 (0)