public InputSIGGRAPHAsia(MotionEditor editor, float timestamp) { editor.LoadFrame(timestamp); Frame = editor.GetCurrentFrame(); Root = editor.GetActor().GetRoot().GetWorldMatrix(true); Posture = editor.GetActor().GetBoneTransformations(); Velocities = editor.GetActor().GetBoneVelocities(); TimeSeries = ((TimeSeriesModule)editor.GetData().GetModule(Module.ID.TimeSeries)).GetTimeSeries(Frame, editor.Mirror, 6, 6, 1f, 1f, 1, 1f / editor.TargetFramerate); RootSeries = (TimeSeries.Root)TimeSeries.GetSeries("Root"); StyleSeries = (TimeSeries.Style)TimeSeries.GetSeries("Style"); GoalSeries = (TimeSeries.Goal)TimeSeries.GetSeries("Goal"); ContactSeries = (TimeSeries.Contact)TimeSeries.GetSeries("Contact"); PhaseSeries = (TimeSeries.Phase)TimeSeries.GetSeries("Phase"); Environment = ((CylinderMapModule)editor.GetData().GetModule(Module.ID.CylinderMap)).GetCylinderMap(Frame, editor.Mirror); Interaction = ((GoalModule)editor.GetData().GetModule(Module.ID.Goal)).Target.GetInteractionGeometry(Frame, editor.Mirror, 1f / editor.TargetFramerate); }
public CylinderMap GetCylinderMap(Frame frame, bool mirrored) { CylinderMap sensor = new CylinderMap(Size, Resolution, Layers, Overlap); RootModule module = (RootModule)Data.GetModule(ID.Root); if (module != null) { Vector3 position = module.GetRootPosition(frame, mirrored); Quaternion rotation = module.GetRootRotation(frame, mirrored); sensor.Sense(Matrix4x4.TRS(position + new Vector3(0f, 0f, 0f), rotation, Vector3.one), Mask); } else { sensor.Sense(frame.GetBoneTransformation(0, mirrored), Mask); } Samples = sensor.Points.Length; return(sensor); }
protected override void Setup() { Controller = new Controller(); Controller.Signal idle = Controller.AddSignal("Idle"); idle.Default = true; idle.Velocity = 0f; idle.AddKey(KeyCode.W, false); idle.AddKey(KeyCode.A, false); idle.AddKey(KeyCode.S, false); idle.AddKey(KeyCode.D, false); idle.AddKey(KeyCode.Q, false); idle.AddKey(KeyCode.E, false); idle.AddKey(KeyCode.V, true); idle.UserControl = 0.25f; idle.NetworkControl = 0.1f; Controller.Signal walk = Controller.AddSignal("Walk"); walk.AddKey(KeyCode.W, true); walk.AddKey(KeyCode.A, true); walk.AddKey(KeyCode.S, true); walk.AddKey(KeyCode.D, true); walk.AddKey(KeyCode.Q, true); walk.AddKey(KeyCode.E, true); walk.AddKey(KeyCode.LeftShift, false); walk.AddKey(KeyCode.C, false); walk.Velocity = 1f; walk.UserControl = 0.25f; walk.NetworkControl = 0.25f; Controller.Signal run = Controller.AddSignal("Run"); run.AddKey(KeyCode.LeftShift, true); run.Velocity = 3f; run.UserControl = 0.25f; run.NetworkControl = 0.25f; Controller.Signal carry = Controller.AddSignal("Carry"); carry.AddKey(KeyCode.V, true); carry.Velocity = 0f; carry.UserControl = 0.1f; carry.NetworkControl = 0f; Controller.Signal open = Controller.AddSignal("Open"); open.AddKey(KeyCode.F, true); open.Velocity = 0f; open.UserControl = 0.1f; open.NetworkControl = 0f; Controller.Signal sit = Controller.AddSignal("Sit"); sit.AddKey(KeyCode.C, true); sit.Velocity = 0f; sit.UserControl = 0.25f; sit.NetworkControl = 0f; Environment = new CylinderMap(4f, 9, 9, true); Geometry = new CuboidMap(new Vector3Int(8, 8, 8)); TimeSeries = new TimeSeries(6, 6, 1f, 1f, 5); RootSeries = new TimeSeries.Root(TimeSeries); StyleSeries = new TimeSeries.Style(TimeSeries, "Idle", "Walk", "Run", "Carry", "Open", "Sit", "Climb"); GoalSeries = new TimeSeries.Goal(TimeSeries, Controller.GetSignalNames()); ContactSeries = new TimeSeries.Contact(TimeSeries, "Hips", "RightWrist", "LeftWrist", "RightAnkle", "LeftAnkle"); PhaseSeries = new TimeSeries.Phase(TimeSeries); for (int i = 0; i < TimeSeries.Samples.Length; i++) { RootSeries.Transformations[i] = transform.GetWorldMatrix(true); if (StyleSeries.Styles.Length > 0) { StyleSeries.Values[i][0] = 1f; } if (GoalSeries.Actions.Length > 0) { GoalSeries.Values[i][0] = 1f; } GoalSeries.Transformations[i] = transform.GetWorldMatrix(true); PhaseSeries.Values[i] = Mathf.Repeat((float)i / GetFramerate(), 1f); Geometry.Pivot = transform.GetWorldMatrix(true); Geometry.References[i] = transform.position; } PosePrediction = new Vector3[Actor.Bones.Length]; RootPrediction = new Matrix4x4[7]; GoalPrediction = new Matrix4x4[7]; RightFootIK = UltimateIK.BuildModel(Actor.FindTransform("RightHip"), Actor.GetBoneTransforms(ContactSeries.Bones[3])); LeftFootIK = UltimateIK.BuildModel(Actor.FindTransform("LeftHip"), Actor.GetBoneTransforms(ContactSeries.Bones[4])); }
protected override void DerivedDraw(MotionEditor editor) { CylinderMap sensor = GetCylinderMap(editor.GetCurrentFrame(), editor.Mirror); sensor.Draw(Color, DrawReferences, DrawDistribution); }