Example #1
0
        public void AddLOSSourceCube(LOSSourceCube sourceCube)
        {
            Assert.Test(!m_LOSSourcesCube.Contains(sourceCube), "LOS Source Cube already in list, can't add");

            m_LOSSourcesCube.Add(sourceCube);
        }
Example #2
0
        /// <summary>
        /// Updates mask for specific LOS cube source.
        /// </summary>
        private void RenderSourceCubeToMask(LOSSourceCube losSource, ref RenderTexture maskRenderTexture)
        {
            // Calculate cube map size.
            int cubeMapSize = CalculateRTSize(losSource.CubeMapResolution, m_QualityLevel);

            // Return if cube map size is to small.
            if (cubeMapSize <= 0) return;

            // Get temporary cube map render texture.
            RenderTexture sourceBufferCube = RenderTexture.GetTemporary(cubeMapSize, cubeMapSize, 16);
            sourceBufferCube.filterMode = FilterMode.Trilinear;
            sourceBufferCube.useMipMap = false;
            sourceBufferCube.isCubemap = true;

            // Get camera.
            Camera cubeCamera = losSource.SourceCamera;
            Materials.SkyBox.SetFloat(ShaderID.FarPlane, cubeCamera.farClipPlane);

            // Set replacement shader for rendering.
            cubeCamera.SetReplacementShader(Shaders.DepthRGBA, null);

            // Render encoded depth to cube map.
            cubeCamera.RenderToCubemap(sourceBufferCube);

            // Reset replamcent shader.
            cubeCamera.ResetReplacementShader();

            //Push LOS cube source specific parameters.
            Materials.Mask.SetTexture(ShaderID.SourceDepthCube, sourceBufferCube);
            Materials.Mask.SetVector(ShaderID.SourceInfo, losSource.SourceInfo);
            Materials.Mask.SetVector(ShaderID.Settings, new Vector4(losSource.DistanceFade, 0, losSource.MinVariance, losSource.MaskInvert ? 1.0f : 0.0f));
            Materials.Mask.SetColor(ShaderID.ColorMask, losSource.MaskColor * losSource.MaskIntensity);

            // Set Correct material pass.
            Materials.Mask.SetPass(m_Camera.orthographic ? 3 : 2);

            //Render mask with correct pass.
            IndexedGraphicsBlit(maskRenderTexture);

            // Release cubemap render texture.
            RenderTexture.ReleaseTemporary(sourceBufferCube);
        }
Example #3
0
        public void RemoveLOSSourceCube(LOSSourceCube sourceCube)
        {
            Assert.Test(m_LOSSourcesCube.Contains(sourceCube), "LOS Source Cube not found in list, can't remove");

            m_LOSSourcesCube.Remove(sourceCube);
        }