Пример #1
0
        /// <summary>
        /// Texture settings for stereo video capture.
        /// </summary>
        protected void CreateStereoTextures()
        {
            if (captureSource == CaptureSource.CAMERA && stereoMode != StereoMode.NONE)
            {
                // Stereo camera settings.
                regularCamera.transform.Translate(new Vector3(-interpupillaryDistance / 2, 0, 0), Space.Self);
                stereoCamera.transform.Translate(new Vector3(interpupillaryDistance / 2, 0, 0), Space.Self);

                // Init stereo video material.
                stereoPackMaterial = Utils.CreateMaterial("VideoCapture/StereoPack", stereoPackMaterial);
                stereoPackMaterial.DisableKeyword("STEREOPACK_TOP");
                stereoPackMaterial.DisableKeyword("STEREOPACK_BOTTOM");
                stereoPackMaterial.DisableKeyword("STEREOPACK_LEFT");
                stereoPackMaterial.DisableKeyword("STEREOPACK_RIGHT");

                // Init the temporary stereo target texture.
                stereoTexture = Utils.CreateRenderTexture(outputFrameWidth, outputFrameHeight, 24, antiAliasingSetting, stereoTexture);
                // Set stereo camera
                //if (captureMode == CaptureMode.REGULAR)
                //  stereoCamera.targetTexture = stereoTexture;
                //else
                //  stereoCamera.targetTexture = null;
                stereoCamera.targetTexture = stereoTexture;

                // Init the final stereo texture.
                stereoOutputTexture = Utils.CreateRenderTexture(outputFrameWidth, outputFrameHeight, 24, antiAliasingSetting, stereoOutputTexture);
            }
        }
Пример #2
0
        /// <summary>
        /// Create the RenderTexture for encoding texture
        /// </summary>
        protected void CreateRenderTextures()
        {
            outputFrameWidth  = frameWidth;
            outputFrameHeight = frameHeight;

            if (outputTexture != null &&
                (outputFrameWidth != outputTexture.width ||
                 outputFrameHeight != outputTexture.height))
            {
                ClearRenderTextures();
            }

            // Capture from user input render texture
            if (captureSource == CaptureSource.RENDERTEXTURE)
            {
                return;
            }

            // Create a RenderTexture with desired frame size for dedicated camera capture to store pixels in GPU.
            outputTexture = Utils.CreateRenderTexture(outputFrameWidth, outputFrameHeight, 24, antiAliasing, outputTexture);

            // Capture from screen
            if (captureSource == CaptureSource.SCREEN)
            {
                return;
            }

            // For capturing normal 2D video, use frameTexture(Texture2D) for intermediate cpu saving, frameRenderTexture(RenderTexture) store the pixels read by frameTexture.
            regularCamera.targetTexture = outputTexture;
            // For capture panorama video:
            // EQUIRECTANGULAR: use cubemapTexture(RenderTexture) for intermediate cpu saving.
            // CUBEMAP: use texture2D for intermediate cpu saving.
            if (captureMode == CaptureMode._360)
            {
                if (projectionType == ProjectionType.CUBEMAP)
                {
                    CreateCubemapTextures();
                }
                else
                {
                    // Create equirectangular textures and materials.
                    CreateEquirectTextures();
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Texture settings for cubemap capture.
        /// </summary>
        protected void CreateCubemapTextures()
        {
            // Create cubemap render target.
            cubemapRenderTarget = Utils.CreateRenderTexture(outputFrameWidth, outputFrameWidth, 0, antiAliasingSetting, cubemapRenderTarget);
            cubemapMaterial     = Utils.CreateMaterial("VideoCapture/CubemapDisplay", cubemapMaterial);

            // Create cubemap render texture
            if (cubemapTexture == null)
            {
                cubemapTexture           = new RenderTexture(cubemapSize, cubemapSize, 0);
                cubemapTexture.hideFlags = HideFlags.HideAndDontSave;
#if UNITY_5_4_OR_NEWER
                cubemapTexture.dimension = UnityEngine.Rendering.TextureDimension.Cube;
#else
                cubemapTexture.isCubemap = true;
#endif
            }
        }
Пример #4
0
        /// <summary>
        /// Texture settings for equirectangular capture.
        /// </summary>
        protected void CreateEquirectTextures()
        {
            if (captureMode == CaptureMode._360 && projectionType == ProjectionType.EQUIRECT)
            {
                // Create material for convert cubemap to equirectangular.
                equirectMaterial = Utils.CreateMaterial("VideoCapture/CubemapToEquirect", equirectMaterial);

                // Create equirectangular render texture.
                equirectTexture           = Utils.CreateRenderTexture(cubemapSize, cubemapSize, 24, antiAliasingSetting, equirectTexture, false);
                equirectTexture.dimension = UnityEngine.Rendering.TextureDimension.Cube;

                if (stereoMode != StereoMode.NONE)
                {
                    // Create stereo equirectangular render texture.
                    stereoEquirectTexture           = Utils.CreateRenderTexture(cubemapSize, cubemapSize, 24, antiAliasingSetting, stereoEquirectTexture, false);
                    stereoEquirectTexture.dimension = UnityEngine.Rendering.TextureDimension.Cube;
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Create the RenderTexture for encoding texture
        /// </summary>
        private void CreateRenderTextures()
        {
            outputFrameWidth  = inputTexture == null ? frameWidth : inputTexture.width;
            outputFrameHeight = inputTexture == null ? frameHeight : inputTexture.height;

            if (outputTexture != null &&
                (outputFrameWidth != outputTexture.width ||
                 outputFrameHeight != outputTexture.height))
            {
                if (outputTexture)
                {
                    Destroy(outputTexture);
                    outputTexture = null;
                }

                if (equirectTexture)
                {
                    Destroy(equirectTexture);
                    equirectTexture = null;
                }

                if (stereoEquirectTexture)
                {
                    Destroy(stereoEquirectTexture);
                    stereoEquirectTexture = null;
                }

                if (stereoTexture)
                {
                    Destroy(stereoTexture);
                    stereoTexture = null;
                }

                if (stereoOutputTexture)
                {
                    Destroy(stereoOutputTexture);
                    stereoOutputTexture = null;
                }

                if (texture2D)
                {
                    Destroy(texture2D);
                    texture2D = null;
                }
            }

            // Pixels stored in frameRenderTexture(RenderTexture) always read by frameTexture2D.
            texture2D = Utils.CreateTexture(outputFrameWidth, outputFrameHeight, texture2D);

            // Capture from user input texture
            if (inputTexture != null)
            {
                return;
            }

            // Create a RenderTexture with desired frame size for dedicated camera capture to store pixels in GPU.
            outputTexture = Utils.CreateRenderTexture(outputFrameWidth, outputFrameHeight, 24, antiAliasing, outputTexture);
            // For capturing normal 2D video, use frameTexture(Texture2D) for intermediate cpu saving, frameRenderTexture(RenderTexture) store the pixels read by frameTexture.
            if (captureMode == CaptureMode.REGULAR)
            {
                regularCamera.targetTexture = outputTexture;
            }
            // For capture panorama video:
            // EQUIRECTANGULAR: use cubemapTexture(RenderTexture) for intermediate cpu saving.
            // CUBEMAP: use texture2D for intermediate cpu saving.
            else if (captureMode == CaptureMode._360)
            {
                cubemapCamera.targetTexture = outputTexture;
                if (projectionType == ProjectionType.CUBEMAP)
                {
                    CreateCubemapTextures();
                }
                else
                {
                    // Create equirectangular textures and materials.
                    CreateEquirectTextures();
                }
            }
        }
Пример #6
0
        /// <summary>
        /// Create the RenderTexture for encoding texture
        /// </summary>
        private void CreateRenderTextures()
        {
            if (captureStarted)
            {
                Debug.LogWarningFormat(LOG_FORMAT, "Capture is already started. You can't resize texture and generate new texture");
                return;
            }

            if (outputFrameWidth != frameWidth || outputFrameHeight != frameHeight)
            {
                //Debug.LogFormat(LOG_FORMAT, "Texture size was changed. Need to create new render texture");

                if (outputTexture)
                {
                    Destroy(outputTexture);
                    outputTexture = null;
                }

                if (equirectTexture)
                {
                    Destroy(equirectTexture);
                    equirectTexture = null;
                }

                if (stereoEquirectTexture)
                {
                    Destroy(stereoEquirectTexture);
                    stereoEquirectTexture = null;
                }

                if (stereoTexture)
                {
                    Destroy(stereoTexture);
                    stereoTexture = null;
                }

                if (stereoOutputTexture)
                {
                    Destroy(stereoOutputTexture);
                    stereoOutputTexture = null;
                }
            }

            outputFrameWidth  = frameWidth;
            outputFrameHeight = frameHeight;

            // Capture from user input texture
            if (inputTexture != null)
            {
                return;
            }

            outputTexture = Utils.CreateRenderTexture(
                outputFrameWidth, outputFrameHeight, 24, antiAliasing, outputTexture);
            regularCamera.targetTexture = outputTexture;

            if (captureMode == CaptureMode._360)
            {
                if (projectionType == ProjectionType.EQUIRECT)
                {
                    // Create equirectangular textures and materials.
                    CreateEquirectTextures();
                }
                else if (projectionType == ProjectionType.CUBEMAP)
                {
                    CreateCubemapTextures();
                }
            }
        }