static public Transform AdvanceAndDeserializeUsd() { #if USD_SUPPORTED if (m_UsdPathSerializer != null) { m_UsdPathSerializer.Time += Time.deltaTime; m_UsdPathSerializer.Deserialize(); return(m_UsdPathSerializer.transform); } #endif return(null); }
public void BeginRender() { IsRendering = true; // Turn off shadows, until depth disparity can be fixed. // See http://b/68952256 for details UnityEngine.QualitySettings.shadows = ShadowQuality.Disable; for (int i = 0; i < App.Scene.GetNumLights(); i++) { App.Scene.GetLight(i).shadows = LightShadows.None; } for (int i = 0; ; ++i) { string o = string.Format("{0}_{1:00}", m_outputBasename, i); string outVid = Path.Combine(m_outputFolder, o + ".mp4"); string outDir = Path.Combine(m_outputFolder, o + "/"); if (!File.Exists(outVid) && !File.Exists(outDir)) { m_videoPath = outVid; m_imagesPath = outDir + m_outputBasename; m_odsCamera.outputFolder = outDir; m_odsCamera.basename = m_outputBasename; // Touch the destination folder. Directory.CreateDirectory(outDir); // Touch the destination file. FileStream fs = File.Open(m_videoPath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite); fs.Close(); fs.Dispose(); File.SetLastWriteTimeUtc(m_videoPath, System.DateTime.UtcNow); break; } } if (!string.IsNullOrEmpty(CameraPath) && File.Exists(CameraPath)) { #if USD_SUPPORTED m_PathSerializer = gameObject.AddComponent <UsdPathSerializer>(); if (m_PathSerializer.Load(CameraPath)) { m_PathSerializer.StartPlayback("/Sketch", "/VideoCamera"); FramesToCapture = Mathf.FloorToInt((float)(m_PathSerializer.Duration) * m_fps); m_PathSerializer.Time = 0; m_PathSerializer.Deserialize(); } else { Destroy(m_PathSerializer); m_PathSerializer = null; } #else throw new System.NotImplementedException("CameraPath requires USD support"); #endif } Debug.LogFormat("ODS Output Video: {0}" + System.Environment.NewLine + "ODS Output Path: {1}" + System.Environment.NewLine + "ODS Basename: {2}" , m_videoPath, m_odsCamera.outputFolder, m_odsCamera.basename); Shader.SetGlobalFloat("ODS_PoleCollapseAmount", App.UserConfig.Video.OdsPoleCollapsing); gameObject.SetActive(true); App.Instance.FrameCountDisplay.gameObject.SetActive(true); }
void Update() { if (m_odsCamera.FrameCount >= m_framesToCapture) { if (m_framesToCapture > 0) { // We rendered everything. if ((Application.platform == RuntimePlatform.WindowsPlayer) || (Application.platform == RuntimePlatform.WindowsEditor)) { System.Diagnostics.Process.Start("explorer.exe", "/open," + m_outputFolder); } System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = Path.GetFullPath(TiltBrush.FfmpegPipe.GetFfmpegExe()); proc.StartInfo.Arguments = System.String.Format( @"-y -framerate {0} -f image2 -i ""{1}_%06d.png"" " + @"-c:v " + FfmpegPipe.GetVideoEncoder() + @" -r {0} -pix_fmt yuv420p ""{2}""", m_fps, m_imagesPath, m_videoPath); Debug.LogFormat("{0} {1}", proc.StartInfo.FileName, proc.StartInfo.Arguments); proc.StartInfo.CreateNoWindow = false; proc.StartInfo.ErrorDialog = true; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardError = true; proc.Start(); UnityEngine.Debug.Log(proc.StandardError.ReadToEnd()); #if USD_SUPPORTED if (m_PathSerializer != null) { m_PathSerializer.Stop(); } #endif proc.Close(); Application.Quit(); Debug.Break(); } return; } if (m_odsCamera.IsRendering) { return; } if (m_frameTick) { if (m_frameTimer.ElapsedMilliseconds < 1000.0f / m_fps) { return; } m_frameTimer.Stop(); } if (m_renderTimer.IsRunning) { m_renderTimer.Stop(); Debug.LogFormat("ODS Frame Time: {0}", m_renderTimer.ElapsedMilliseconds / 1000.0f); } m_frameTick = !m_frameTick; if (m_frameTick) { Time.timeScale = 1.0f; m_frameTimer.Reset(); m_frameTimer.Start(); return; } Time.timeScale = 0.0f; if (!HaveCameraPath) { float progress = m_odsCamera.FrameCount / (float)m_framesToCapture; App.Scene.Pose = GetScenePose(progress); if (m_turnTableRotation > 0) { TiltBrush.TrTransform sc = App.Scene.Pose; sc.rotation = Quaternion.AngleAxis(progress * m_turnTableRotation, Vector3.up); App.Scene.Pose = sc; } } else { #if USD_SUPPORTED m_PathSerializer.Time = m_odsCamera.FrameCount / m_fps; m_PathSerializer.Deserialize(); #endif } Camera cam = OdsCamera.GetComponent <Camera>(); Camera parentCam = TiltBrush.App.VrSdk.GetVrCamera(); cam.clearFlags = parentCam.clearFlags; cam.backgroundColor = parentCam.backgroundColor; // Copy back the culling mask so the preview window looks like the final render. parentCam.cullingMask = cam.cullingMask; if (m_odsCamera.FrameCount == 0 && m_framesToCapture > 0) { if (QualitySettings.GetQualityLevel() != 3) { QualitySettings.SetQualityLevel(3); } } App.Instance.FrameCountDisplay.SetCurrentFrame(m_odsCamera.FrameCount); // Move the viewer camera, so the user can see what's going on. Transform viewerXform = App.VrSdk.GetVrCamera().transform; viewerXform.position = transform.position; viewerXform.rotation = transform.rotation; viewerXform.localScale = transform.localScale; m_renderTimer.Reset(); m_renderTimer.Start(); StartCoroutine(m_odsCamera.Render(transform)); }