Exemple #1
0
        public MvdMotion CreateCameraMotion([CanBeNull] CharacterImasMotionAsset mainCamera, [NotNull] ScenarioObject baseScenario, [CanBeNull] CharacterImasMotionAsset cameraAppeal, AppealType appealType)
        {
            MvdCameraMotion[] cameraFrames;

            if (ProcessCameraFrames && mainCamera != null)
            {
                cameraFrames = CreateCameraMotions(mainCamera, baseScenario, cameraAppeal, appealType);
            }
            else
            {
                cameraFrames = Array.Empty <MvdCameraMotion>();
            }

            var mvd = new MvdMotion(cameraFrames);

            if (_conversionConfig.Transform60FpsTo30Fps)
            {
                mvd.Fps = FrameRate.Mmd;
            }
            else
            {
                mvd.Fps = FrameRate.Mltd;
            }

            return(mvd);
        }
Exemple #2
0
        public MvdMotion CreateFrom([CanBeNull] CharacterImasMotionAsset bodyMotion, [CanBeNull] Avatar avatar, [CanBeNull] PmxModel mltdPmxModel,
                                    [CanBeNull] CharacterImasMotionAsset cameraMotion,
                                    [CanBeNull] ScenarioObject scenarioObject, int songPosition)
        {
            IReadOnlyList <MvdCameraMotion> cameraFrames;

            if (ProcessCameraFrames && cameraMotion != null)
            {
                cameraFrames = CreateCameraMotions(cameraMotion);
            }
            else
            {
                cameraFrames = EmptyArray.Of <MvdCameraMotion>();
            }

            var mvd = new MvdMotion(cameraFrames);

            if (ConversionConfig.Current.Transform60FpsTo30Fps)
            {
                mvd.Fps = 30;
            }
            else
            {
                mvd.Fps = 60;
            }

            return(mvd);
        }
Exemple #3
0
        public MvdMotion CreateCameraMotion([CanBeNull] CharacterImasMotionAsset cameraMotion)
        {
            IReadOnlyList <MvdCameraMotion> cameraFrames;

            if (ProcessCameraFrames && cameraMotion != null)
            {
                cameraFrames = CreateCameraMotions(cameraMotion);
            }
            else
            {
                cameraFrames = Array.Empty <MvdCameraMotion>();
            }

            var mvd = new MvdMotion(cameraFrames);

            if (_conversionConfig.Transform60FpsTo30Fps)
            {
                mvd.Fps = FrameRate.Mmd;
            }
            else
            {
                mvd.Fps = FrameRate.Mltd;
            }

            return(mvd);
        }
Exemple #4
0
        private void WriteMotion([NotNull] MvdMotion motion)
        {
            WriteFixedLengthString(MvdHeaderString, Utf8WithoutBom, 30);

            _writer.Write(1.0f);
            _writer.Write((byte)1); // 0=unicode 1=utf-8

            // Now the main part.
            WriteMvdCameras(motion);
        }
Exemple #5
0
        private void WriteMvdCameras([NotNull] MvdMotion motion)
        {
            foreach (var m in motion.CameraMotions)
            {
                void WriteCameraMotion(MvdCameraMotion cameraMotion)
                {
                    WriteVariableLengthString(cameraMotion.DisplayName, Utf8WithoutBom, 30);
                    WriteVariableLengthString(cameraMotion.EnglishName, Utf8WithoutBom, 30);

                    _writer.Write(motion.Fps);

                    _writer.Write(0);
                    _writer.Write(false);
                    _writer.Write(false);
                    _writer.Write(0);
                    _writer.Write(0);

                    var startId    = 0;
                    var stageCount = 0;

                    _writer.Write((long)1); // because we only export 1 camera

                    startId     = WriteNameList(cameraMotion.Camera, startId, out var count);
                    stageCount += count;

                    startId = 0;

                    WriteCamera(cameraMotion, startId);
                    ++startId;
                    WriteCameraProperty(cameraMotion, startId);
                    ++startId;

                    // Write EOF
                    _writer.Write((byte)0xff);
                    _writer.Write((byte)0x00);
                }

                WriteCameraMotion(m);
            }
        }
Exemple #6
0
 public void Write([NotNull] MvdMotion motion)
 {
     WriteMotion(motion);
 }
Exemple #7
0
        private void WriteMvdCameras([NotNull] MvdMotion motion)
        {
            foreach (var m in motion.CameraMotions)
            {
                void WriteCameraMotion(MvdCameraMotion cameraMotion)
                {
                    WriteVariableLengthString(cameraMotion.DisplayName, Utf8WithoutBom, 30);
                    WriteVariableLengthString(cameraMotion.EnglishName, Utf8WithoutBom, 30);

                    _writer.Write(motion.Fps);

                    _writer.Write(0);
                    _writer.Write(false);
                    _writer.Write(false);
                    _writer.Write(0);
                    _writer.Write(0);

                    var startId    = 0;
                    var stageCount = 0;

                    _writer.Write((long)1); // because we only export 1 camera

                    startId     = WriteNameList(cameraMotion.Camera, startId, out var count);
                    stageCount += count;

                    startId = 0;

                    void WriteCamera(BinaryWriter writer, int id)
                    {
                        writer.Write((byte)96);
                        writer.Write((byte)3);
                        writer.Write(id);
                        writer.Write(64);

                        writer.Write(cameraMotion.CameraFrames.Count);

                        writer.Write(4);
                        // stream.Write(BitConverter.GetBytes(cameraSequence.motiondata[boneindex].Count), 0, 4);
                        // It seems the value is always 1 in our case...
                        writer.Write(1);

                        var i = 0;

                        foreach (var frame in cameraMotion.CameraFrames)
                        {
                            writer.Write(i); // layer index
                            writer.Write(frame.FrameNumber);

                            writer.Write(frame.Distance);
                            writer.Write(frame.Position);
                            writer.Write(frame.Rotation);
                            writer.Write(frame.FieldOfView);
                            writer.Write(frame.IsSpline);

                            WriteZeroBlocks(writer, 3);

                            writer.Write(frame.TranslationInterpolation);
                            writer.Write(frame.RotationInterpolation);
                            writer.Write(frame.DistanceInterpolation);
                            writer.Write(frame.FovInterpolation);
                        }

                        ++i;
                    }

                    void WriteCameraProperty(BinaryWriter writer, int id)
                    {
                        writer.Write((byte)104);
                        writer.Write((byte)2);
                        writer.Write(id);
                        writer.Write(32);

                        writer.Write(cameraMotion.CameraPropertyFrames.Count); // 1 frame
                        writer.Write(0);

                        foreach (var frame in cameraMotion.CameraPropertyFrames)
                        {
                            writer.Write(frame.FrameNumber);
                            writer.Write(frame.Enabled);
                            writer.Write(frame.IsPerspective);
                            writer.Write(frame.Alpha);
                            writer.Write(frame.EffectEnabled);
                            writer.Write(frame.DynamicFovEnabled);
                            writer.Write(frame.DynamicFovRate);
                            writer.Write(frame.DynamicFovCoefficient);
                            writer.Write(frame.RelatedModelId);
                            writer.Write(frame.RelatedBoneId);
                        }
                    }

                    WriteCamera(_writer, startId);
                    ++startId;
                    WriteCameraProperty(_writer, startId);
                    ++startId;

                    // Write EOF
                    _writer.Write((byte)0xff);
                    _writer.Write((byte)0x00);
                }

                WriteCameraMotion(m);
            }
        }