Beispiel #1
0
 public void Initialize(IVRMLoadable vrmLoadable, IMessageReceiver receiver, IKTargetTransforms ikTargets)
 {
     _bodyIk = ikTargets.Body;
     vrmLoadable.VrmLoaded    += OnVrmLoaded;
     vrmLoadable.VrmDisposing += OnVrmDisposing;
     var _ = new BodyMotionManagerReceiver(receiver, this);
 }
 public void Initialize(HandTracker handTracker, IVRMLoadable vrmLoadable)
 {
     _handTracker               = handTracker;
     _vrmLoadable               = vrmLoadable;
     _vrmLoadable.VrmLoaded    += OnVrmLoaded;
     _vrmLoadable.VrmDisposing += OnVrmDisposing;
 }
Beispiel #3
0
 public void Initialize(IVRMLoadable vrmLoadable, FaceTracker faceTracker, FaceControlConfiguration config)
 {
     _config                   = config;
     _faceTracker              = faceTracker;
     vrmLoadable.VrmLoaded    += OnVrmLoaded;
     vrmLoadable.VrmDisposing += OnVrmDisposing;
 }
        public void Initialize(FaceTracker faceTracker, IVRMLoadable vrmLoadable)
        {
            _faceTracker = faceTracker;

            //鏡像姿勢をベースにしたいので反転(この値を適用するとユーザーから鏡に見えるハズ)
            faceTracker.FaceParts.Outline.HeadRollRad.Subscribe(
                v => SetHeadRollDeg(-v * Mathf.Rad2Deg * HeadRollRateApplyFactor)
                );

            //もとの値は角度ではなく[-1, 1]の無次元量であることに注意
            faceTracker.FaceParts.Outline.HeadYawRate.Subscribe(
                v => SetHeadYawDeg(v * HeadYawRateToDegFactor)
                );

            faceTracker.FaceParts.Nose.NoseBaseHeightValue.Subscribe(
                v => SetHeadPitchDeg(NoseBaseHeightToNeckPitchDeg(v))
                );

            vrmLoadable.VrmLoaded += info =>
            {
                var animator = info.animator;
                _neck     = animator.GetBoneTransform(HumanBodyBones.Neck);
                _head     = animator.GetBoneTransform(HumanBodyBones.Head);
                _hasNeck  = (_neck != null);
                _hasModel = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel = false;
                _hasNeck  = false;
                _neck     = null;
                _head     = null;
            };
        }
        public void Initialize(FaceTracker faceTracker, IVRMLoadable vrmLoadable, IMessageReceiver receiver)
        {
            _faceTracker = faceTracker;
            //_faceRotToEuler = new FaceRotToEulerByOpenCVPose(openCvFacePose);
            _faceRotToEuler = new FaceRotToEulerByFaceParts(_faceTracker.FaceParts);

            vrmLoadable.VrmLoaded += info =>
            {
                var animator = info.animator;
                _neck     = animator.GetBoneTransform(HumanBodyBones.Neck);
                _head     = animator.GetBoneTransform(HumanBodyBones.Head);
                _hasNeck  = (_neck != null);
                _hasModel = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel = false;
                _hasNeck  = false;
                _neck     = null;
                _head     = null;
            };

            receiver.AssignCommandHandler(
                VmmCommands.EnableWebCamHighPowerMode,
                message => _isHighPowerMode = message.ToBoolean()
                );
        }
        public void Initialize(
            IVRMLoadable vrmLoadable,
            Camera mainCam,
            IKTargetTransforms ikTargets,
            FaceControlConfiguration faceControlConfig)
        {
            _camera            = mainCam.transform;
            _lookAtTarget      = ikTargets.LookAt;
            _faceControlConfig = faceControlConfig;

            vrmLoadable.VrmLoaded += info =>
            {
                _head          = info.animator.GetBoneTransform(HumanBodyBones.Head);
                _lookAtIk      = info.vrmRoot.GetComponent <LookAtIK>();
                _vrmLookAtHead = info.vrmRoot.GetComponent <VRMLookAtHead>();
                _hasModel      = true;
            };
            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel      = false;
                _lookAtIk      = null;
                _vrmLookAtHead = null;
                _head          = null;
            };
        }
        public SettingAutoAdjuster(
            IVRMLoadable vrmLoadable,
            IMessageReceiver receiver,
            IMessageSender sender,
            IMessageDispatcher dispatcher,
            VRMBlendShapeStore blendShapeStore,
            Camera mainCam
            )
        {
            _mainCam         = mainCam.transform;
            _blendShapeStore = blendShapeStore;

            _sender     = sender;
            _dispatcher = dispatcher;

            receiver.AssignCommandHandler(
                VmmCommands.RequestAutoAdjust,
                _ => AutoAdjust()
                );
            receiver.AssignCommandHandler(
                VmmCommands.RequestAutoAdjustEyebrow,
                _ => AutoAdjustOnlyEyebrow()
                );


            vrmLoadable.PreVrmLoaded += info => _vrmRoot = info.vrmRoot;
            vrmLoadable.VrmDisposing += () => _vrmRoot = null;
        }
        public void Initialize(IVRMLoadable vrmLoadable, IMessageReceiver receiver, IKeyMouseEventSource keyboardEventSource)
        {
            receiver.AssignCommandHandler(
                VmmCommands.Chromakey,
                message =>
            {
                var argb = message.ToColorFloats();
                SetWindowTransparency(argb[0] == 0);
            });
            receiver.AssignCommandHandler(
                VmmCommands.WindowFrameVisibility,
                message => SetWindowFrameVisibility(message.ToBoolean())
                );
            receiver.AssignCommandHandler(
                VmmCommands.IgnoreMouse,
                message => SetIgnoreMouseInput(message.ToBoolean())
                );
            receiver.AssignCommandHandler(
                VmmCommands.TopMost,
                message => SetTopMost(message.ToBoolean())
                );
            receiver.AssignCommandHandler(
                VmmCommands.WindowDraggable,
                message => SetWindowDraggable(message.ToBoolean())
                );
            receiver.AssignCommandHandler(
                VmmCommands.MoveWindow,
                message =>
            {
                int[] xy = message.ToIntArray();
                MoveWindow(xy[0], xy[1]);
            });
            receiver.AssignCommandHandler(
                VmmCommands.ResetWindowSize,
                _ => ResetWindowSize()
                );
            receiver.AssignCommandHandler(
                VmmCommands.SetWholeWindowTransparencyLevel,
                message => SetTransparencyLevel(message.ToInt())
                );
            receiver.AssignCommandHandler(
                VmmCommands.SetAlphaValueOnTransparent,
                message => SetAlphaOnTransparent(message.ToInt())
                );

            _mouseObserve = keyboardEventSource.MouseButton.Subscribe(info =>
            {
                if (info == "LDown")
                {
                    ReserveHitTestJudgeOnNextFrame();
                }
            });

            vrmLoadable.PreVrmLoaded += info => _renderers = info.renderers;
            vrmLoadable.VrmDisposing += () => _renderers = new Renderer[0];
        }
        public void Initialize(IVRMLoadable vrmLoadable, IMessageReceiver receiver)
        {
            vrmLoadable.VrmLoaded    += OnVrmLoaded;
            vrmLoadable.VrmDisposing += OnVrmDisposing;

            receiver.AssignCommandHandler(
                VmmCommands.EnableShoulderMotionModify,
                command => EnableRotationModification = command.ToBoolean()
                );
        }
 public void Initialize(
     IVRMLoadable vrmLoadable,
     ExternalTrackerDataSource exTracker,
     FaceControlConfiguration config)
 {
     _config                   = config;
     _exTracker                = exTracker;
     vrmLoadable.VrmLoaded    += OnVrmLoaded;
     vrmLoadable.VrmDisposing += OnVrmDisposing;
 }
 public void Initialize(IVRMLoadable vrmLoadable)
 {
     vrmLoadable.VrmLoaded += info =>
     {
         BodyHorizontalOffsetSuggest = 0;
         float hipsHeight = info.animator.GetBoneTransform(HumanBodyBones.Hips).position.y;
         //あまり非常識な値が来たらもう適当に蹴ってしまう。別に蹴ってもそこまで危険でもないし。
         _hipsHeightRate = Mathf.Clamp(hipsHeight / ReferenceHipsHeight, 0.1f, 3f);
     };
 }
Beispiel #12
0
        public void Initialize(IVRMLoadable vrmLoadable, IMessageReceiver receiver, IMessageSender sender, FaceControlConfiguration config)
        {
            _config = config;
            vrmLoadable.VrmLoaded    += OnVrmLoaded;
            vrmLoadable.VrmDisposing += OnVrmDisposing;

            var _ = new FaceControlConfigurationReceiver(receiver, config);

            _messageIo = new FaceControlManagerMessageIo(receiver, sender, this);
        }
        public AlwaysDownHandIkGenerator(MonoBehaviour coroutineResponder, IVRMLoadable vrmLoadable)
            : base(coroutineResponder)
        {
            _leftHand.Rotation  = LeftRot;
            _rightHand.Rotation = RightRot;

            vrmLoadable.VrmLoaded += info =>
            {
                var animator = info.animator;

                _hips          = animator.GetBoneTransform(HumanBodyBones.Hips);
                _rightUpperArm = animator.GetBoneTransform(HumanBodyBones.RightUpperArm);
                _leftUpperArm  = animator.GetBoneTransform(HumanBodyBones.LeftUpperArm);

                var rightUpperArmPos = _rightUpperArm.position;
                var rightWristPos    = animator.GetBoneTransform(HumanBodyBones.RightHand).position;
                var leftUpperArmPos  = _leftUpperArm.position;
                var leftWristPos     = animator.GetBoneTransform(HumanBodyBones.LeftHand).position;
                var hipsPos          = _hips.position;

                _rightArmLength = Vector3.Distance(rightWristPos, rightUpperArmPos);
                float rArmLengthFactor = Mathf.Clamp(_rightArmLength / ReferenceArmLength, 0.1f, 5f);

                _rightPosHipsOffset =
                    rightUpperArmPos +
                    Quaternion.AngleAxis(-APoseArmDownAngleDeg, Vector3.forward) * (rightWristPos - rightUpperArmPos) -
                    hipsPos +
                    rArmLengthFactor * APoseHandPosOffsetBase;

                _leftArmLength = Vector3.Distance(leftWristPos, leftUpperArmPos);
                float lArmLengthFactor = Mathf.Clamp(_leftArmLength / ReferenceArmLength, 0.1f, 5f);

                _leftPosHipsOffset =
                    leftUpperArmPos +
                    Quaternion.AngleAxis(APoseArmDownAngleDeg, Vector3.forward) * (leftWristPos - leftUpperArmPos) -
                    hipsPos +
                    lArmLengthFactor * APoseHandPosOffsetBase;

                _leftHand.Position  = hipsPos + _leftPosHipsOffset;
                _rightHand.Position = hipsPos + _rightPosHipsOffset;
                _hasModel           = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel      = false;
                _hips          = null;
                _leftUpperArm  = null;
                _rightUpperArm = null;
            };

            StartCoroutine(SetHandPositionsIfHasModel());
        }
        public void Initialize(
            IVRMLoadable vrmLoadable,
            IMessageReceiver receiver,
            IMessageSender sender,
            FaceControlConfiguration config)
        {
            vrmLoadable.VrmLoaded    += OnVrmLoaded;
            vrmLoadable.VrmDisposing += OnVrmUnloaded;
            _sender = sender;
            _config = config;

            var _ = new ExternalTrackerSettingReceiver(receiver, this);
        }
Beispiel #15
0
 public void Initialize(IVRMLoadable vrmLoadable)
 {
     vrmLoadable.VrmLoaded    += OnVrmLoaded;
     vrmLoadable.VrmDisposing += () =>
     {
         if (_animator == null)
         {
             return;
         }
         _animator         = null;
         _humanPoseHandler = null;
         _fingers          = null;
     };
 }
Beispiel #16
0
 public void Initialize(IVRMLoadable vrmLoadable)
 {
     vrmLoadable.VrmLoaded += info =>
     {
         _leftEye  = info.animator.GetBoneTransform(HumanBodyBones.LeftEye);
         _rightEye = info.animator.GetBoneTransform(HumanBodyBones.RightEye);
         _hasEye   = (_leftEye != null && _rightEye != null);
     };
     vrmLoadable.VrmDisposing += () =>
     {
         _hasEye   = false;
         _leftEye  = null;
         _rightEye = null;
     };
 }
Beispiel #17
0
        public void Initialize(IVRMLoadable vrmLoadable, FaceControlConfiguration config)
        {
            _config = config;

            vrmLoadable.VrmLoaded += info =>
            {
                _blendShape = info.blendShape;
                _hasModel   = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel   = false;
                _blendShape = null;
            };
        }
        public void Initialize(IVRMLoadable vrmLoadable)
        {
            vrmLoadable.VrmLoaded += info =>
            {
                _proxy    = info.blendShape;
                _hasModel = true;
                //NOTE: ReloadClipsのなかで_hasModelによるガードがかかってるのを踏まえてこういう順番です
                ReloadClips();
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel = false;
                _proxy    = null;
            };
        }
        public ImageBaseHandIkGenerator(
            MonoBehaviour coroutineResponder, HandTracker handTracker, ImageBaseHandIkGeneratorSetting setting,
            IVRMLoadable vrmLoadable)
            : base(coroutineResponder)
        {
            _setting     = setting;
            _handTracker = handTracker;

            vrmLoadable.VrmLoaded += info =>
            {
                var animator = info.animator;

                _head = animator.GetBoneTransform(HumanBodyBones.Head);
                _hips = animator.GetBoneTransform(HumanBodyBones.Hips);
                var hipsPos = _hips.position;

                var rightUpperArmPos = animator.GetBoneTransform(HumanBodyBones.RightUpperArm).position;
                var rightWristPos    = animator.GetBoneTransform(HumanBodyBones.RightHand).position;

                _rightHandHipOffsetWhenNotTrack =
                    rightUpperArmPos
                    + Quaternion.AngleAxis(-aPoseArmDownAngleDeg, Vector3.forward) * (rightWristPos - rightUpperArmPos)
                    - hipsPos
                    + aPoseArmPositionOffset;

                var leftUpperArmPos = animator.GetBoneTransform(HumanBodyBones.LeftUpperArm).position;
                var leftWristPos    = animator.GetBoneTransform(HumanBodyBones.LeftHand).position;

                _leftHandHipOffsetWhenNotTrack =
                    leftUpperArmPos
                    + Quaternion.AngleAxis(aPoseArmDownAngleDeg, Vector3.forward) * (leftWristPos - leftUpperArmPos)
                    - hipsPos
                    + aPoseArmPositionOffset;

                _rightHandRotWhenNotTrack = Quaternion.Euler(0, 0, -aPoseArmDownAngleDeg);
                _leftHandRotWhenNotTrack  = Quaternion.Euler(0, 0, aPoseArmDownAngleDeg);

                _hasModel = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel = false;
                _head     = null;
                _hips     = null;
            };
        }
Beispiel #20
0
        public void Initialize(IVRMLoadable vrmLoadable, IMessageSender sender)
        {
            vrmLoadable.VrmLoaded += info =>
            {
                string names = string.Join(",",
                                           info.blendShape
                                           .BlendShapeAvatar
                                           .Clips
                                           .Select(c => c.BlendShapeName)
                                           .Where(n => !BasicNames.Contains(n))
                                           );

                sender.SendCommand(
                    MessageFactory.Instance.ExtraBlendShapeClipNames(names)
                    );
            };
        }
Beispiel #21
0
        public void Initialize(IVRMLoadable vrmLoadable, ExternalTrackerDataSource externalTracker)
        {
            _tracker = externalTracker;

            vrmLoadable.VrmLoaded += info =>
            {
                _rightEye        = info.animator.GetBoneTransform(HumanBodyBones.RightEye);
                _leftEye         = info.animator.GetBoneTransform(HumanBodyBones.LeftEye);
                _hasValidEyeBone = (_rightEye != null && _leftEye != null);
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasValidEyeBone = false;
                _rightEye        = null;
                _leftEye         = null;
            };
        }
Beispiel #22
0
        public void Initialize(IVRMLoadable vrmLoadable)
        {
            vrmLoadable.VrmLoaded += info =>
            {
                _humanPoseHandler = new HumanPoseHandler(info.animator.avatar, info.vrmRoot);
                _vrmRoot          = info.vrmRoot;
                _hips             = info.animator.GetBoneTransform(HumanBodyBones.Hips);
                _originHipsPos    = _hips.localPosition;
                _originHipsRot    = _hips.localRotation;
                _hasModel         = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel         = false;
                _humanPoseHandler = null;
            };
        }
Beispiel #23
0
        public void Initialize(IVRMLoadable vrmLoadable)
        {
            vrmLoadable.VrmLoaded += info =>
            {
                _proxy = info.blendShape;
                _keys  = CreateKeys(
                    _proxy.BlendShapeAvatar
                    .Clips
                    .Select(c => c.BlendShapeName)
                    );
                _hasModel = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel = false;
                _proxy    = null;
            };
        }
        public void Initialize(IVRMLoadable vrmLoadable)
        {
            vrmLoadable.VrmLoaded += info =>
            {
                SetZeroTarget();
                _head     = info.animator.GetBoneTransform(HumanBodyBones.Head);
                _neck     = info.animator.GetBoneTransform(HumanBodyBones.Neck);
                _hasNeck  = _neck != null;
                _hasModel = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel = false;
                _hasNeck  = false;
                _head     = null;
                _neck     = null;
                SetZeroTarget();
            };
        }
        public GamepadHandIKGenerator(
            MonoBehaviour coroutineResponder,
            IVRMLoadable vrmLoadable,
            WaitingBodyMotion waitingBodyMotion,
            GamepadProvider gamepadProvider,
            GamepadHandIkGeneratorSetting setting) : base(coroutineResponder)
        {
            _gamePad     = gamepadProvider;
            _setting     = setting;
            _waitingBody = waitingBodyMotion;

            //モデルロード時、身長を参照することで「コントローラの移動オフセットはこんくらいだよね」を初期化
            vrmLoadable.VrmLoaded += info =>
            {
                var   h      = info.animator.GetBoneTransform(HumanBodyBones.Head);
                var   f      = info.animator.GetBoneTransform(HumanBodyBones.LeftFoot);
                float height = h.position.y - f.position.y;
                _posOffsetScale = Mathf.Clamp(height / ReferenceHeight, 0.1f, 5f);
            };
        }
Beispiel #26
0
        public void Initialize(IVRMLoadable vrmLoadable, ExternalTrackerDataSource externalTracker)
        {
            _externalTracker = externalTracker;

            vrmLoadable.VrmLoaded += info =>
            {
                var animator = info.animator;
                _neck     = animator.GetBoneTransform(HumanBodyBones.Neck);
                _head     = animator.GetBoneTransform(HumanBodyBones.Head);
                _hasNeck  = _neck != null;
                _hasModel = true;
            };
            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel = false;
                _hasNeck  = false;
                _neck     = null;
                _head     = null;
            };
        }
Beispiel #27
0
        public void Initialize(
            IVRMLoadable vrmLoadable,
            FaceControlConfiguration config,
            ExternalTrackerDataSource externalTracker,
            EyeBonePostProcess eyeBoneResetter
            )
        {
            _config          = config;
            _externalTracker = externalTracker;
            _eyeBoneResetter = eyeBoneResetter;

            vrmLoadable.VrmLoaded += info =>
            {
                _hasModel = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel = false;
            };
        }
Beispiel #28
0
        public void Initialize(IVRMLoadable vrmLoadable, IMessageReceiver receiver)
        {
            vrmLoadable.VrmLoaded += vrm =>
            {
                _head               = vrm.animator.GetBoneTransform(HumanBodyBones.Head);
                _prevHeadRotation   = _head.rotation;
                _headRotationDegree = 0;

                _leftEye     = vrm.animator.GetBoneTransform(HumanBodyBones.LeftEye);
                _rightEye    = vrm.animator.GetBoneTransform(HumanBodyBones.RightEye);
                _hasValidEye = (_leftEye != null) && (_rightEye != null);
                if (_hasValidEye)
                {
                    //NOTE: 首から下を考慮しない、眼球運動の平均によって得られる視線方向ベクトル
                    _prevEyeLookOrientation = 0.5f * (
                        _leftEye.localRotation * Vector3.forward +
                        _rightEye.localRotation * Vector3.forward
                        );
                    _prev2EyeLookOrientation = _prevEyeLookOrientation;
                    _prevEyeRotSpeed         = 0f;
                }

                _isVrmLoaded = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _isVrmLoaded        = false;
                _headRotationDegree = 0;
                _head = null;

                _hasValidEye     = false;
                _prevEyeRotSpeed = 0;
                _leftEye         = null;
                _rightEye        = null;
            };

            var _ = new BehaviorBasedBlinkReceiver(receiver, this);
        }
Beispiel #29
0
        public PresentationHandIKGenerator(MonoBehaviour coroutineResponder, IVRMLoadable vrmLoadable, Camera cam)
            : base(coroutineResponder)
        {
            _camera = cam;
            vrmLoadable.VrmLoaded += info =>
            {
                //NOTE: Shoulderが必須ボーンでは無い事に注意
                var bones = new List <Transform>()
                {
                    info.animator.GetBoneTransform(HumanBodyBones.RightShoulder),
                    info.animator.GetBoneTransform(HumanBodyBones.RightUpperArm),
                    info.animator.GetBoneTransform(HumanBodyBones.RightLowerArm),
                    info.animator.GetBoneTransform(HumanBodyBones.RightHand),
                }
                .Where(t => t != null)
                .ToArray();

                float sum = 0;
                for (int i = 0; i < bones.Length - 1; i++)
                {
                    sum += Vector3.Distance(bones[i].position, bones[i + 1].position);
                }
                _lengthFromShoulderToWrist = sum;

                _head = info.animator.GetBoneTransform(HumanBodyBones.Head);
                //NOTE: ここも肩ボーンはオプションなことに注意
                _rightShoulder = info.animator.GetBoneTransform(HumanBodyBones.RightShoulder) ??
                                 info.animator.GetBoneTransform(HumanBodyBones.RightUpperArm);

                _hasModel = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel      = false;
                _head          = null;
                _rightShoulder = null;
            };
        }
        public void Initialize(
            IVRMLoadable vrmLoadable,
            ExternalTrackerDataSource exTracker,
            BlendShapeInitializer initializer,
            WordToMotionBlendShape wtmBlendShape
            )
        {
            _exTracker     = exTracker;
            _initializer   = initializer;
            _wtmBlendShape = wtmBlendShape;

            vrmLoadable.VrmLoaded += info =>
            {
                _blendShape = info.blendShape;
                _hasModel   = true;
            };

            vrmLoadable.VrmDisposing += () =>
            {
                _hasModel   = false;
                _blendShape = null;
            };
        }