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; }
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); }; }
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); }
public void Initialize(IVRMLoadable vrmLoadable) { vrmLoadable.VrmLoaded += OnVrmLoaded; vrmLoadable.VrmDisposing += () => { if (_animator == null) { return; } _animator = null; _humanPoseHandler = null; _fingers = null; }; }
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; }; }
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; }; }
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) ); }; }
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; }; }
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; }; }
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); }; }
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; }; }
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; }; }
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); }
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; }; }