Esempio n. 1
0
        public override void BeginRecording(RecordingSession session)
        {
            int screenWidth  = Screen.width;
            int screenHeight = Screen.height;

#if UNITY_EDITOR
            switch (scSettings.m_OutputSize)
            {
            case EImageDimension.Window:
            {
                GameViewSize.GetGameRenderSize(out screenWidth, out screenHeight);
                outputWidth  = screenWidth;
                outputHeight = screenHeight;

                if (scSettings.m_ForceEvenSize)
                {
                    outputWidth  = (outputWidth + 1) & ~1;
                    outputHeight = (outputHeight + 1) & ~1;
                }
                break;
            }

            default:
            {
                outputHeight = (int)scSettings.m_OutputSize;
                outputWidth  = (int)(outputHeight * AspectRatioHelper.GetRealAR(scSettings.m_AspectRatio));

                if (scSettings.m_ForceEvenSize)
                {
                    outputWidth  = (outputWidth + 1) & ~1;
                    outputHeight = (outputHeight + 1) & ~1;
                }

                break;
            }
            }

            int w, h;
            GameViewSize.GetGameRenderSize(out w, out h);
            if (w != outputWidth || h != outputHeight)
            {
                var size = GameViewSize.SetCustomSize(outputWidth, outputHeight) ?? GameViewSize.AddSize(outputWidth, outputHeight);
                if (GameViewSize.m_ModifiedResolutionCount == 0)
                {
                    GameViewSize.BackupCurrentSize();
                }
                else
                {
                    if (size != GameViewSize.currentSize)
                    {
                        Debug.LogError("Requestion a resultion change while a recorder's input has already requested one! Undefined behaviour.");
                    }
                }
                GameViewSize.m_ModifiedResolutionCount++;
                m_ModifiedResolution = true;
                GameViewSize.SelectSize(size);
            }
#endif
        }
Esempio n. 2
0
        public override void BeginRecording(RecordingSession session)
        {
            superShader      = Shader.Find("Hidden/Volund/BS4SuperShader");
            accumulateShader = Shader.Find("Hidden/BeautyShot/Accumulate");
            normalizeShader  = Shader.Find("Hidden/BeautyShot/Normalize");

            if (rtsSettings.m_FlipFinalOutput)
            {
                m_VFlipper = new TextureFlipper();
            }

            // Below here is considered 'void StartVertice()', but we run it for directly "various reasons".
            if (rtsSettings.m_OutputSize > rtsSettings.m_RenderSize)
            {
                throw new UnityException("Upscaling is not supported! Output dimension must be smaller or equal to render dimension.");
            }

            // Calculate aspect and render/output sizes
            // Clamp size to 16K, which is the min always supported size in d3d11
            // Force output to divisible by two as x264 doesn't approve of odd image dimensions.
            var aspect = AspectRatioHelper.GetRealAR(rtsSettings.m_AspectRatio);

            m_renderHeight = (int)rtsSettings.m_RenderSize;
            m_renderWidth  = Mathf.Min(16 * 1024, Mathf.RoundToInt(m_renderHeight * aspect));
            outputHeight   = (int)rtsSettings.m_OutputSize;
            outputWidth    = Mathf.Min(16 * 1024, Mathf.RoundToInt(outputHeight * aspect));
            if (rtsSettings.m_ForceEvenSize)
            {
                outputWidth  = (outputWidth + 1) & ~1;
                outputHeight = (outputHeight + 1) & ~1;
            }

            m_superMaterial           = new Material(superShader);
            m_superMaterial.hideFlags = HideFlags.DontSave;

            m_accumulateMaterial           = new Material(accumulateShader);
            m_accumulateMaterial.hideFlags = HideFlags.DontSave;

            m_normalizeMaterial           = new Material(normalizeShader);
            m_normalizeMaterial.hideFlags = HideFlags.DontSave;

            m_renderRT          = new RenderTexture(m_renderWidth, m_renderHeight, 24, RenderTextureFormat.DefaultHDR, RenderTextureReadWrite.Linear);
            m_renderRT.wrapMode = TextureWrapMode.Clamp;
            for (int i = 0; i < 2; ++i)
            {
                m_accumulateRTs[i]          = new RenderTexture(m_renderWidth, m_renderHeight, 0, RenderTextureFormat.DefaultHDR, RenderTextureReadWrite.Linear);
                m_accumulateRTs[i].wrapMode = TextureWrapMode.Clamp;
                m_accumulateRTs[i].Create();
            }
            var rt = new RenderTexture(outputWidth, outputHeight, 0, RenderTextureFormat.DefaultHDR, RenderTextureReadWrite.Linear);

            rt.Create();
            outputRT  = rt;
            m_samples = new Vector2[(int)rtsSettings.m_SuperSampling];
            GenerateSamplesMSAA(m_samples, rtsSettings.m_SuperSampling);

            m_hookedCameras = new List <HookedCamera>();
        }
Esempio n. 3
0
        public override void BeginRecording(RecordingSession session)
        {
            m_quad = CreateFullscreenQuad();
            switch (cbSettings.source)
            {
            case EImageSource.GameDisplay:
            case EImageSource.MainCamera:
            {
                int screenWidth  = Screen.width;
                int screenHeight = Screen.height;
#if UNITY_EDITOR
                switch (cbSettings.m_RenderSize)
                {
                case EImageDimension.Window:
                {
                    GameViewSize.GetGameRenderSize(out screenWidth, out screenHeight);
                    outputWidth  = screenWidth;
                    outputHeight = screenHeight;

                    if (cbSettings.m_PadSize)
                    {
                        outputWidth  = (outputWidth + 1) & ~1;
                        outputHeight = (outputHeight + 1) & ~1;
                    }

                    break;
                }

                default:
                {
                    outputHeight = (int)cbSettings.m_RenderSize;
                    outputWidth  = (int)(outputHeight * AspectRatioHelper.GetRealAR(cbSettings.m_RenderAspect));

                    if (cbSettings.m_PadSize)
                    {
                        outputWidth  = (outputWidth + 1) & ~1;
                        outputHeight = (outputHeight + 1) & ~1;
                    }

                    var size = GameViewSize.FindSize(outputWidth, outputHeight);
                    if (size == null)
                    {
                        size = GameViewSize.AddSize(outputWidth, outputHeight);
                    }

                    GameViewSize.SelectSize(size);
                    break;
                }
                }
#endif
                break;
            }

            case EImageSource.TaggedCamera:
            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Esempio n. 4
0
        public override void BeginRecording(RecordingSession session)
        {
            if (cbSettings.m_FlipFinalOutput)
            {
                m_VFlipper = new TextureFlipper();
            }

            m_quad = CreateFullscreenQuad();
            switch (cbSettings.source)
            {
            case EImageSource.ActiveCameras:
            case EImageSource.MainCamera:
            case EImageSource.TaggedCamera:
            {
                int screenWidth  = Screen.width;
                int screenHeight = Screen.height;
#if UNITY_EDITOR
                switch (cbSettings.m_OutputSize)
                {
                case EImageDimension.Window:
                {
                    GameViewSize.GetGameRenderSize(out screenWidth, out screenHeight);
                    outputWidth  = screenWidth;
                    outputHeight = screenHeight;

                    if (cbSettings.m_ForceEvenSize)
                    {
                        outputWidth  = (outputWidth + 1) & ~1;
                        outputHeight = (outputHeight + 1) & ~1;
                    }

                    break;
                }

                default:
                {
                    outputHeight = (int)cbSettings.m_OutputSize;
                    outputWidth  = (int)(outputHeight * AspectRatioHelper.GetRealAR(cbSettings.m_AspectRatio));

                    if (cbSettings.m_ForceEvenSize)
                    {
                        outputWidth  = (outputWidth + 1) & ~1;
                        outputHeight = (outputHeight + 1) & ~1;
                    }

                    var size = GameViewSize.SetCustomSize(outputWidth, outputHeight);
                    if (size == null)
                    {
                        size = GameViewSize.AddSize(outputWidth, outputHeight);
                    }

                    if (GameViewSize.m_ModifiedResolutionCount == 0)
                    {
                        GameViewSize.BackupCurrentSize();
                    }
                    else
                    {
                        if (size != GameViewSize.currentSize)
                        {
                            Debug.LogError("Requestion a resultion change while a recorder's input has already requested one! Undefined behaviour.");
                        }
                    }
                    GameViewSize.m_ModifiedResolutionCount++;
                    m_ModifiedResolution = true;
                    GameViewSize.SelectSize(size);
                    break;
                }
                }
#endif
                break;
            }

            default:
                throw new ArgumentOutOfRangeException();
            }

            if (cbSettings.m_CaptureUI)
            {
                var uiGO = new GameObject();
                uiGO.name             = "UICamera";
                uiGO.transform.parent = session.m_RecorderGO.transform;

                m_UICamera               = uiGO.AddComponent <Camera>();
                m_UICamera.cullingMask   = 1 << 5;
                m_UICamera.clearFlags    = CameraClearFlags.Depth;
                m_UICamera.renderingPath = RenderingPath.DeferredShading;
                m_UICamera.targetTexture = outputRT;
                m_UICamera.enabled       = false;
            }
        }
Esempio n. 5
0
        public override void BeginRecording(RecordingSession session)
        {
            m_quad = CreateFullscreenQuad();
            switch (cbSettings.source)
            {
            case EImageSource.GameDisplay:
            case EImageSource.MainCamera:
            {
                int screenWidth  = Screen.width;
                int screenHeight = Screen.height;
#if UNITY_EDITOR
                switch (cbSettings.m_RenderSize)
                {
                case EImageDimension.Window:
                {
                    GameViewSize.GetGameRenderSize(out screenWidth, out screenHeight);
                    outputWidth  = screenWidth;
                    outputHeight = screenHeight;

                    if (cbSettings.m_ForceEvenSize)
                    {
                        outputWidth  = (outputWidth + 1) & ~1;
                        outputHeight = (outputHeight + 1) & ~1;
                    }

                    break;
                }

                default:
                {
                    outputHeight = (int)cbSettings.m_RenderSize;
                    outputWidth  = (int)(outputHeight * AspectRatioHelper.GetRealAR(cbSettings.m_RenderAspect));

                    if (cbSettings.m_ForceEvenSize)
                    {
                        outputWidth  = (outputWidth + 1) & ~1;
                        outputHeight = (outputHeight + 1) & ~1;
                    }

                    var size = GameViewSize.SetCustomSize(outputWidth, outputHeight);
                    if (size == null)
                    {
                        size = GameViewSize.AddSize(outputWidth, outputHeight);
                    }

                    if (m_ModifiedResolutionCount == 0)
                    {
                        GameViewSize.BackupCurrentSize();
                    }
                    else
                    {
                        if (size != GameViewSize.currentSize)
                        {
                            Debug.LogError("Requestion a resultion change while a recorder's input has already requested one! Undefined behaviour.");
                        }
                    }
                    m_ModifiedResolutionCount++;
                    m_ModifiedResulution = true;
                    GameViewSize.SelectSize(size);
                    break;
                }
                }
#endif
                break;
            }

            case EImageSource.TaggedCamera:
            default:
                throw new ArgumentOutOfRangeException();
            }
        }