示例#1
0
    protected override void DerivedDraw(MotionEditor editor)
    {
        CuboidMap sensor = GetCuboidMap(editor.GetCurrentFrame(), editor.Mirror);

        sensor.Draw(Color);
        if (DrawReferences)
        {
            sensor.DrawReferences();
        }
        if (DrawDistribution)
        {
            sensor.DrawDistribution(Color, Rect);
        }
    }
示例#2
0
    public CuboidMap GetCuboidMap(Frame frame, bool mirrored)
    {
        CuboidMap  sensor = new CuboidMap(Resolution);
        RootModule module = Data.GetModule <RootModule>();

        if (module != null)
        {
            Vector3    position = module.GetRootPosition(frame.Timestamp, mirrored);
            Quaternion rotation = module.GetRootRotation(frame.Timestamp, mirrored);
            sensor.Sense(Matrix4x4.TRS(position + new Vector3(0f, 0.5f * Size.y, 0f), rotation, Vector3.one), Mask, Size);
        }
        else
        {
            sensor.Sense(frame.GetBoneTransformation(0, mirrored), Mask, Size);
        }
        return(sensor);
    }
示例#3
0
        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);
        }
    protected override void DerivedDraw(MotionEditor editor)
    {
        if (Target.DrawGeometry || Target.DrawReferences || Target.DrawDistribution)
        {
            //DistanceMap sensor = Target.GetInteractionGeometry(editor.GetCurrentFrame(), editor.Mirror, 1f/editor.TargetFramerate);
            CuboidMap sensor = Target.GetInteractionGeometry(editor.GetCurrentFrame(), editor.Mirror, 1f / editor.TargetFramerate);

            /*
             * Interaction interaction = Target.FindInteraction(editor.GetCurrentFrame());
             * CuboidMap sensor;
             * if(interaction == null) {
             *      RootModule module = Data.GetModule(ID.Root) == null ? null : (RootModule)Data.GetModule(ID.Root);
             *      sensor = new CuboidMap(new Vector3Int(Target.PropResolution, Target.PropResolution, Target.PropResolution));
             *      sensor.Sense(module == null ? Matrix4x4.identity : module.GetRootTransformation(editor.GetCurrentFrame(), editor.Mirror), interaction.gameObject.layer, Vector3.zero);
             * } else {
             *      sensor = new CuboidMap(new Vector3Int(Target.PropResolution, Target.PropResolution, Target.PropResolution));
             *      sensor.Sense(interaction.GetCenter(), LayerMask.GetMask("Interaction"), interaction.GetExtents());
             *      Transformation transformation = interaction.GetComponent<Transformation>();
             *      if(transformation != null) {
             *              sensor.Retransform(interaction.GetCenter(transformation.GetTransformation(Target.GetTargetFrame(editor.GetCurrentFrame(), 1f/editor.TargetFramerate), editor.Mirror)));
             *      }
             * }
             */

            if (Target.DrawGeometry)
            {
                sensor.Draw(UltiDraw.Cyan.Transparent(0.75f));
            }
            if (Target.DrawReferences)
            {
                sensor.DrawReferences();
            }
            if (Target.DrawDistribution)
            {
                sensor.DrawDistribution(UltiDraw.Black, new UltiDraw.GUIRect(0.5f, 0.1f, 0.9f, 0.1f));
            }
        }
    }
        public CuboidMap GetInteractionGeometry(Frame frame, bool mirrored, float delta)
        {
            Interaction interaction = FindInteraction(frame);

            if (interaction == null)
            {
                RootModule module = Module.Data.GetModule(ID.Root) == null ? null : (RootModule)Module.Data.GetModule(ID.Root);
                CuboidMap  sensor = new CuboidMap(new Vector3Int(PropResolution, PropResolution, PropResolution));
                sensor.Sense(module == null ? Matrix4x4.identity : module.GetRootTransformation(frame, mirrored), LayerMask.GetMask("Interaction"), Vector3.zero);
                return(sensor);
            }
            else
            {
                CuboidMap sensor = new CuboidMap(new Vector3Int(PropResolution, PropResolution, PropResolution));
                sensor.Sense(interaction.GetCenter(), LayerMask.GetMask("Interaction"), interaction.GetExtents());
                Transformation transformation = interaction.GetComponent <Transformation>();
                if (transformation != null)
                {
                    sensor.Retransform(interaction.GetCenter(transformation.GetTransformation(GetTargetFrame(frame, delta), mirrored)));
                }
                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]));
    }