1 using System.Collections;
2 using System.Collections.Generic;
3 using System.Collections.ObjectModel;
12 namespace AVR.Avatar {
20 [CreateAssetMenu(fileName =
"PoseNaturalizationFilter", menuName =
"arc-vr/avatar/PoseNaturalizationFilter", order = 1)]
26 public int reference_amount = 30;
31 public int take_k = 4;
36 public float smoothing_speed = 10.0f;
41 public float interp = 1.0f;
50 protected Vector3 outpos = Vector3.zero;
53 if(refpoints==null) _refpoints =
new List<Vector3>();
54 else _refpoints = refpoints.Take(Mathf.Min(refpoints.Count, reference_amount)).ToList();
60 Vector3 cpos = AVR.Core.AVR_PlayerRig.Instance.MainCamera.transform.InverseTransformPoint(wpos);
63 Vector3 closest = get_weighted_average_reference(cpos);
66 outpos = Vector3.Lerp(outpos, closest, Time.deltaTime * smoothing_speed);
69 return AVR.Core.AVR_PlayerRig.Instance.MainCamera.transform.TransformPoint(Vector3.Lerp(wpos, outpos, interp));
71 catch(System.Exception) {
72 AVR_DevConsole.cerror(
"PoseNaturalizationFilter failed! Is AVR_PlayerRig.Instance set correctly?",
"AVR_PoseNaturalizationFilter");
80 List<Vector3> kn = _refpoints.OrderBy(item => Vector3.Distance(item, p)).Take(Mathf.Min(take_k, _refpoints.Count)).ToList();
82 Vector3 sum = Vector3.zero;
86 float w = 1.0f / (0.0001f + Vector3.Distance(v, p));
Vector3 naturalize_point(Vector3 wpos)
Vector3 get_weighted_average_reference(Vector3 p)
A PoseNaturalizationFilter "naturalizes" a pose. For instance, when a player places the controllers o...
Sets the documentation html file inside of Packages/com.avr.core/Documentation/html of a given class...
List< Vector3 > refpoints
Pointcloud
List< Vector3 > _refpoints