public void AddLOSSourceCube(LOSSourceCube sourceCube) { Assert.Test(!m_LOSSourcesCube.Contains(sourceCube), "LOS Source Cube already in list, can't add"); m_LOSSourcesCube.Add(sourceCube); }
/// <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); }
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); }