public void LoadVmd(Uri uri, Single scale = 1.58f / 20.0f) { var bytes = File.ReadAllBytes(uri.LocalPath); var vmd = MMIO.Mmd.VmdParse.Execute(bytes); var motion = new Motion(Path.GetFileName(uri.LocalPath), 30); motion.AddRange( vmd.BoneFrames .ToLookup(x => x.BoneName) .Select(x => new Curve(x.Key, x.ToDictionary( y => y.Frame , y => VmdBoneFrameToKeyFrame(y, scale) )))); motion.LastFrame = FrameToTimeSpan(vmd.BoneFrames.Max(x => x.Frame), 30); RootMotion.Children.Add(new Node<Motion>(motion)); }