void OnEnable() { #if UNITY_EDITOR if (m_captureAudio && m_frameRateMode == FrameRateMode.Constant) { Debug.LogWarning("MP4OffscreenRecorder: capture audio with Constant frame rate mode will cause desync"); } #endif m_outputDir.CreateDirectory(); m_quad = FrameCapturerUtils.CreateFullscreenQuad(); m_mat_copy = new Material(m_shCopy); }
void OnEnable() { #if UNITY_EDITOR if (m_captureAudio && m_frameRateMode == FrameRateMode.Constant) { Debug.LogWarning("MP4Recorder: capture audio with Constant frame rate mode will cause desync"); } #endif m_outputDir.CreateDirectory(); m_quad = FrameCapturerUtils.CreateFullscreenQuad(); m_mat_copy = new Material(m_shCopy); if (GetComponent <Camera>().targetTexture != null) { m_mat_copy.EnableKeyword("OFFSCREEN"); } }
void OnEnable() { m_outputDir.CreateDirectory(); m_quad = FrameCapturerUtils.CreateFullscreenQuad(); m_mat_copy = new Material(m_shCopy); var cam = GetComponent <Camera>(); if (cam.targetTexture != null) { m_mat_copy.EnableKeyword("OFFSCREEN"); } #if UNITY_EDITOR if (m_captureGBuffer && !FrameCapturerUtils.IsRenderingPathDeferred(cam)) { Debug.LogWarning("PngRecorder: Rendering Path must be deferred to use Capture GBuffer mode."); m_captureGBuffer = false; } #endif // UNITY_EDITOR // initialize png context fcAPI.fcPngConfig conf = fcAPI.fcPngConfig.default_value; m_ctx = fcAPI.fcPngCreateContext(ref conf); // initialize render targets { m_frame_buffer = new RenderTexture(cam.pixelWidth, cam.pixelHeight, 0, RenderTextureFormat.ARGBHalf); m_frame_buffer.wrapMode = TextureWrapMode.Repeat; m_frame_buffer.Create(); var formats = new RenderTextureFormat[7] { RenderTextureFormat.ARGBHalf, // albedo (RGB) RenderTextureFormat.RHalf, // occlusion (R) RenderTextureFormat.ARGBHalf, // specular (RGB) RenderTextureFormat.RHalf, // smoothness (R) RenderTextureFormat.ARGBHalf, // normal (RGB) RenderTextureFormat.ARGBHalf, // emission (RGB) RenderTextureFormat.RHalf, // depth (R) }; m_gbuffer = new RenderTexture[7]; for (int i = 0; i < m_gbuffer.Length; ++i) { // last one is depth (1 channel) m_gbuffer[i] = new RenderTexture(cam.pixelWidth, cam.pixelHeight, 0, formats[i]); m_gbuffer[i].filterMode = FilterMode.Point; m_gbuffer[i].Create(); } } // initialize command buffers { int tid = Shader.PropertyToID("_TmpFrameBuffer"); m_cb_copy_fb = new CommandBuffer(); m_cb_copy_fb.name = "PngRecorder: Copy FrameBuffer"; m_cb_copy_fb.GetTemporaryRT(tid, -1, -1, 0, FilterMode.Point); m_cb_copy_fb.Blit(BuiltinRenderTextureType.CurrentActive, tid); m_cb_copy_fb.SetRenderTarget(m_frame_buffer); m_cb_copy_fb.DrawMesh(m_quad, Matrix4x4.identity, m_mat_copy, 0, 0); m_cb_copy_fb.ReleaseTemporaryRT(tid); m_cb_copy_gb = new CommandBuffer(); m_cb_copy_gb.name = "PngRecorder: Copy G-Buffer"; m_cb_copy_gb.SetRenderTarget( new RenderTargetIdentifier[] { m_gbuffer[0], m_gbuffer[1], m_gbuffer[2], m_gbuffer[3] }, m_gbuffer[0]); m_cb_copy_gb.DrawMesh(m_quad, Matrix4x4.identity, m_mat_copy, 0, 4); m_cb_copy_gb.SetRenderTarget( new RenderTargetIdentifier[] { m_gbuffer[4], m_gbuffer[5], m_gbuffer[6], m_gbuffer[3] }, m_gbuffer[0]); m_cb_copy_gb.DrawMesh(m_quad, Matrix4x4.identity, m_mat_copy, 0, 5); } }