public State(MotionExporter exporter, MotionEditor editor, float t) { Root = editor.GetCurrentFrame().GetRootTransformation(editor.Mirror); Posture = editor.GetCurrentFrame().GetBoneTransformations(editor.Mirror); Velocities = editor.GetCurrentFrame().GetBoneVelocities(editor.Mirror); Trajectory = editor.GetCurrentFrame().GetTrajectory(editor.Mirror); }
public State(MotionExporter exporter, MotionEditor editor) { Timestamp = editor.GetCurrentFrame().Timestamp; Root = editor.GetCurrentFrame().GetRootTransformation(editor.Mirror); Posture = editor.GetCurrentFrame().GetBoneTransformations(editor.Mirror); Velocities = editor.GetCurrentFrame().GetBoneVelocities(editor.Mirror); Trajectory = ((TrajectoryModule)editor.GetCurrentFile().Data.GetModule(Module.TYPE.Trajectory)).GetTrajectory(editor.GetCurrentFrame(), editor.Mirror); }
public static void Export(MotionExporter exporter, Data X, Data Y, float tCurrent, float tNext) { Container current = new Container(exporter.Editor, tCurrent); Container next = new Container(exporter.Editor, tNext); if (current.Frame.Index == next.Frame.Index) { Debug.LogError("Same frames for input output pairs selected!"); } string[] styles = new string[] { "Stand", "Move", "Dribble", "Hold", "Shoot" }; //Input //Control for (int k = 0; k < current.TimeSeries.Samples.Length; k++) { X.FeedXZ(next.RootSeries.GetPosition(k).GetRelativePositionTo(current.Root), "TrajectoryPosition" + (k + 1)); X.FeedXZ(next.RootSeries.GetDirection(k).GetRelativeDirectionTo(current.Root), "TrajectoryDirection" + (k + 1)); X.FeedXZ(next.RootSeries.GetVelocity(k).GetRelativeDirectionTo(current.Root), "TrajectoryVelocity" + (k + 1)); X.Feed(next.DribbleSeries.Pivots[k].GetDirectionFromTo(next.RootSeries.Transformations[k], current.RootSeries.Transformations[k]), "DribblePivot" + (k + 1)); X.Feed(next.DribbleSeries.Momentums[k].GetDirectionFromTo(next.RootSeries.Transformations[k], current.RootSeries.Transformations[k]), "DribbleMomentum" + (k + 1)); X.Feed(next.StyleSeries.GetStyles(k, styles), "Style" + (k + 1) + "-"); } //Auto-Regressive Posture for (int k = 0; k < current.ActorPosture.Length; k++) { X.Feed(current.ActorPosture[k].GetPosition().GetRelativePositionTo(current.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Position"); X.Feed(current.ActorPosture[k].GetForward().GetRelativeDirectionTo(current.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Forward"); X.Feed(current.ActorPosture[k].GetUp().GetRelativeDirectionTo(current.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Up"); X.Feed(current.ActorVelocities[k].GetRelativeDirectionTo(current.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Velocity"); } //Ball for (int k = 0; k <= current.TimeSeries.Pivot; k++) { X.Feed(current.DribbleSeries.GetControlWeight(k, current.RootSeries.Transformations[k].GetPosition()), "BallWeight" + (k + 1)); X.Feed(current.DribbleSeries.GetWeightedBallPosition(k, current.RootSeries.Transformations[k].GetPosition()).GetRelativePositionTo(current.Root), "WeightedBallPosition" + (k + 1)); X.Feed(current.DribbleSeries.GetWeightedBallVelocity(k, current.RootSeries.Transformations[k].GetPosition()).GetRelativeDirectionTo(current.Root), "WeightedBallVelocity" + (k + 1)); } //Contacts for (int k = 0; k <= current.TimeSeries.Pivot; k++) { X.Feed(current.ContactSeries.GetContacts(k), "Contacts" + (k + 1) + "-"); } //Rival for (int k = 0; k < current.TimeSeries.Samples.Length; k++) { X.Feed(current.DribbleSeries.GetInteractorWeight(k), "InteractorWeight" + (k + 1)); } for (int k = 0; k < current.TimeSeries.Samples.Length; k++) { X.FeedXZ(current.DribbleSeries.GetInteractorGradient(k), "InteractorRootGradient" + (k + 1)); X.FeedXZ(current.DribbleSeries.GetInteractorDirection(k), "InteractorRootDirection" + (k + 1)); X.FeedXZ(current.DribbleSeries.GetInteractorVelocity(k), "InteractorRootVelocity" + (k + 1)); } X.Feed(current.RivalBoneDistances, "InteractorBoneDistances"); //Gating Variables { int index = 0; for (int k = 0; k < current.TimeSeries.Samples.Length; k++) { for (int b = 0; b < current.PhaseSeries.Bones.Length; b++) { Vector2 phase = Utility.PhaseVector(current.PhaseSeries.Phases[k][b], current.PhaseSeries.Amplitudes[k][b]); index += 1; X.Feed(phase.x, "Gating" + index + "-Key" + (k + 1) + "-Bone" + current.PhaseSeries.Bones[b]); index += 1; X.Feed(phase.y, "Gating" + index + "-Key" + (k + 1) + "-Bone" + current.PhaseSeries.Bones[b]); } } } //Output //Root Update Matrix4x4 delta = next.Root.GetRelativeTransformationTo(current.Root); Y.Feed(new Vector3(delta.GetPosition().x, Vector3.SignedAngle(Vector3.forward, delta.GetForward(), Vector3.up), delta.GetPosition().z), "RootUpdate"); Y.FeedXZ(next.RootSeries.Velocities[next.TimeSeries.Pivot].GetRelativeDirectionTo(next.Root), "RootVelocity"); Y.Feed(next.DribbleSeries.Pivots[next.TimeSeries.Pivot], "RootDribblePivot"); Y.Feed(next.DribbleSeries.Momentums[next.TimeSeries.Pivot], "RootDribbleMomentum"); Y.Feed(next.StyleSeries.GetStyles(next.TimeSeries.Pivot, styles), "RootStyle"); //Control for (int k = next.TimeSeries.Pivot + 1; k < next.TimeSeries.Samples.Length; k++) { Y.FeedXZ(next.RootSeries.GetPosition(k).GetRelativePositionTo(next.Root), "TrajectoryPosition" + (k + 1)); Y.FeedXZ(next.RootSeries.GetDirection(k).GetRelativeDirectionTo(next.Root), "TrajectoryDirection" + (k + 1)); Y.FeedXZ(next.RootSeries.GetVelocity(k).GetRelativeDirectionTo(next.Root), "TrajectoryVelocity" + (k + 1)); Y.Feed(next.DribbleSeries.Pivots[k], "DribblePivot" + (k + 1)); Y.Feed(next.DribbleSeries.Momentums[k], "DribbleMomentum" + (k + 1)); Y.Feed(next.StyleSeries.GetStyles(k, styles), "Style" + (k + 1) + "-"); } //Auto-Regressive Posture for (int k = 0; k < next.ActorPosture.Length; k++) { Y.Feed(next.ActorPosture[k].GetPosition().GetRelativePositionTo(next.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Position"); Y.Feed(next.ActorPosture[k].GetForward().GetRelativeDirectionTo(next.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Forward"); Y.Feed(next.ActorPosture[k].GetUp().GetRelativeDirectionTo(next.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Up"); Y.Feed(next.ActorVelocities[k].GetRelativeDirectionTo(next.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Velocity"); } //Ball Y.Feed(next.DribbleSeries.GetControlWeight(next.TimeSeries.Pivot, next.Root.GetPosition()), "BallWeight"); Y.Feed(next.DribbleSeries.GetWeightedBallPosition(next.TimeSeries.Pivot, next.Root.GetPosition()).GetRelativePositionTo(next.Root), "BallPosition"); Y.Feed(next.DribbleSeries.GetWeightedBallVelocity(next.TimeSeries.Pivot, next.Root.GetPosition()).GetRelativeDirectionTo(next.Root), "BallVelocity"); Quaternion rotationDelta = next.DribbleSeries.BallTransformations[next.TimeSeries.Pivot].GetRotation().GetRelativeRotationTo(current.DribbleSeries.BallTransformations[current.TimeSeries.Pivot]); Y.Feed(next.DribbleSeries.GetControlWeight(next.TimeSeries.Pivot, next.Root.GetPosition()) * rotationDelta.GetForward(), "BallForwardDelta"); Y.Feed(next.DribbleSeries.GetControlWeight(next.TimeSeries.Pivot, next.Root.GetPosition()) * rotationDelta.GetUp(), "BallUpDelta"); //Contacts for (int k = next.TimeSeries.Pivot; k <= next.TimeSeries.Pivot; k++) { Y.Feed(next.ContactSeries.GetContacts(k), "Contacts-"); } //Phase Update for (int k = next.TimeSeries.Pivot; k < next.TimeSeries.Samples.Length; k++) { for (int b = 0; b < next.PhaseSeries.Bones.Length; b++) { Y.Feed(Utility.PhaseVector(Utility.SignedPhaseUpdate(current.PhaseSeries.Phases[k][b], next.PhaseSeries.Phases[k][b]), next.PhaseSeries.Amplitudes[k][b]), "PhaseUpdate-" + (k + 1) + "-" + (b + 1)); Y.Feed(Utility.PhaseVector(next.PhaseSeries.Phases[k][b], next.PhaseSeries.Amplitudes[k][b]), "PhaseState-" + (k + 1) + "-" + (b + 1)); } } }
public static void Export(MotionExporter exporter, Data X, Data Y, float tCurrent, float tNext) { Container current = new Container(exporter.Editor, tCurrent); Container next = new Container(exporter.Editor, tNext); if (current.Frame.Index == next.Frame.Index) { Debug.LogError("Same frames for input output pairs selected!"); } string[] styles = new string[] { "Idle", "Move", "Speed" }; string[] contacts = new string[] { "LeftHandSite", "RightHandSite", "LeftFootSite", "RightFootSite" }; string[] alignment = new string[] { "LeftHandSite", "RightHandSite", "LeftFootSite", "RightFootSite" }; //Input //Control for (int k = 0; k < current.TimeSeries.Samples.Length; k++) { X.FeedXZ(next.RootSeries.GetPosition(k).GetRelativePositionTo(current.Root), "TrajectoryPosition" + (k + 1)); X.FeedXZ(next.RootSeries.GetDirection(k).GetRelativeDirectionTo(current.Root), "TrajectoryDirection" + (k + 1)); X.FeedXZ(next.RootSeries.GetVelocity(k).GetRelativeDirectionTo(current.Root), "TrajectoryVelocity" + (k + 1)); X.Feed(next.StyleSeries.GetStyles(k, styles), "Action" + (k + 1) + "-"); } //Auto-Regressive Posture for (int k = 0; k < current.ActorPosture.Length; k++) { X.Feed(current.ActorPosture[k].GetPosition().GetRelativePositionTo(current.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Position"); X.Feed(current.ActorPosture[k].GetForward().GetRelativeDirectionTo(current.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Forward"); X.Feed(current.ActorPosture[k].GetUp().GetRelativeDirectionTo(current.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Up"); X.Feed(current.ActorVelocities[k].GetRelativeDirectionTo(current.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Velocity"); } //Contacts for (int k = 0; k <= current.TimeSeries.Pivot; k++) { X.Feed(current.ContactSeries.GetContacts(k, contacts), "Contacts" + (k + 1) + "-"); } //Gating Variables { int index = 0; for (int k = 0; k < current.TimeSeries.Samples.Length; k++) { for (int b = 0; b < current.PhaseSeries.Bones.Length; b++) { if (alignment.Contains(current.PhaseSeries.Bones[b])) { Vector2 phase = Utility.PhaseVector(current.PhaseSeries.Phases[k][b], current.PhaseSeries.Amplitudes[k][b]); index += 1; X.Feed(phase.x, "Gating" + index + "-Key" + (k + 1) + "-Bone" + current.PhaseSeries.Bones[b]); index += 1; X.Feed(phase.y, "Gating" + index + "-Key" + (k + 1) + "-Bone" + current.PhaseSeries.Bones[b]); } } } } //Output //Root Update Matrix4x4 delta = next.Root.GetRelativeTransformationTo(current.Root); Y.Feed(new Vector3(delta.GetPosition().x, Vector3.SignedAngle(Vector3.forward, delta.GetForward(), Vector3.up), delta.GetPosition().z), "RootUpdate"); Y.FeedXZ(next.RootSeries.Velocities[next.TimeSeries.Pivot].GetRelativeDirectionTo(next.Root), "RootVelocity"); Y.Feed(next.StyleSeries.GetStyles(next.TimeSeries.Pivot, styles), "RootAction"); //Control for (int k = next.TimeSeries.Pivot + 1; k < next.TimeSeries.Samples.Length; k++) { Y.FeedXZ(next.RootSeries.GetPosition(k).GetRelativePositionTo(next.Root), "TrajectoryPosition" + (k + 1)); Y.FeedXZ(next.RootSeries.GetDirection(k).GetRelativeDirectionTo(next.Root), "TrajectoryDirection" + (k + 1)); Y.FeedXZ(next.RootSeries.GetVelocity(k).GetRelativeDirectionTo(next.Root), "TrajectoryVelocity" + (k + 1)); Y.Feed(next.StyleSeries.GetStyles(k, styles), "Action" + (k + 1) + "-"); } //Auto-Regressive Posture for (int k = 0; k < next.ActorPosture.Length; k++) { Y.Feed(next.ActorPosture[k].GetPosition().GetRelativePositionTo(next.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Position"); Y.Feed(next.ActorPosture[k].GetForward().GetRelativeDirectionTo(next.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Forward"); Y.Feed(next.ActorPosture[k].GetUp().GetRelativeDirectionTo(next.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Up"); Y.Feed(next.ActorVelocities[k].GetRelativeDirectionTo(next.Root), "Bone" + (k + 1) + exporter.Editor.GetActor().Bones[k].GetName() + "Velocity"); } //Contacts for (int k = next.TimeSeries.Pivot; k <= next.TimeSeries.Pivot; k++) { Y.Feed(next.ContactSeries.GetContacts(k, contacts), "Contacts-"); } //Phase Update for (int k = next.TimeSeries.Pivot; k < next.TimeSeries.Samples.Length; k++) { for (int b = 0; b < next.PhaseSeries.Bones.Length; b++) { if (alignment.Contains(current.PhaseSeries.Bones[b])) { Y.Feed(Utility.PhaseVector(Utility.SignedPhaseUpdate(current.PhaseSeries.Phases[k][b], next.PhaseSeries.Phases[k][b]), next.PhaseSeries.Amplitudes[k][b]), "PhaseUpdate-" + (k + 1) + "-" + (b + 1)); Y.Feed(Utility.PhaseVector(next.PhaseSeries.Phases[k][b], next.PhaseSeries.Amplitudes[k][b]), "PhaseState-" + (k + 1) + "-" + (b + 1)); } } } }
private void Awake() { Target = (MotionExporter)target; }