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); }
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); }
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); }
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); }
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); } }
public void Write([NotNull] MvdMotion motion) { WriteMotion(motion); }
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); } }