123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using System.Linq;
- using Controller.Bicycle;
- using SicknessReduction.Visual.Rendering;
- using UnityEditor.Recorder.Input;
- using UnityEngine;
- using UnityEngine.Rendering.Universal;
- namespace SicknessReduction.Visual.Vignetting
- {
- public class DynamicVignetting : DynamicReductionSource
- {
- //TODO: cite https://www.researchgate.net/publication/326760789_Assessing_vignetting_as_a_means_to_reduce_VR_sickness_during_amplified_head_rotations
- //TODO: there is a patent for this https://patents.google.com/patent/US9645395B2/en
- //TODO: check Fernandes & Feiner
- [Header("Unity Objects")] public ForwardRendererData forwardRenderer;
- public Transform hmd;
-
- [Range(0, 1)] public float distInnerOuterRadius = .05f;
- //TODO: figure out what angular velocity means in my context
- private MaterialBlitFeature blitFeature;
- private Material blitFeatureMaterial;
- private bool blitFeatureAvailable;
- protected override void Start()
- {
- blitFeature = (MaterialBlitFeature) forwardRenderer.rendererFeatures.FirstOrDefault(f =>
- f is MaterialBlitFeature && f.name.Equals("VignetteBlitFilter"));
- blitFeatureAvailable = blitFeature != null;
- if (!blitFeatureAvailable) return;
- // ReSharper disable once PossibleNullReferenceException
- blitFeatureMaterial = blitFeature.settings.MaterialToBlit;
- base.Start();
- }
- protected override void Update()
- {
- if (!blitFeatureAvailable) return;
- base.Update();
- var correctedRestriction = Mathf.Clamp(currentValue + change, 0, 1);
- if (correctedRestriction > 0f)
- {
- blitFeature.SetActive(true);
- UpdateMaterial(correctedRestriction);
- return;
- }
- blitFeature.SetActive(false);
- }
- private void UpdateMaterial(float restriction)
- {
- currentValue = restriction;
- var r = Mathf.Clamp(1 - restriction, 0, 1);
- blitFeatureMaterial.SetFloat("_OFOV", r);
- blitFeatureMaterial.SetFloat("_IFOV", Mathf.Clamp(r - distInnerOuterRadius, 0, 1));
- }
- private void OnDestroy()
- {
- if (!blitFeatureAvailable) return;
- blitFeature.SetActive(false);
- }
- }
- }
|