void RenderCubemapGGXConvolution(SkyUpdateContext skyContext) { using (new ProfilingSample(m_BuiltinParameters.commandBuffer, "Update Env: GGX Convolution")) { if (skyContext.skySettings.useMIS && m_SupportsMIS) { m_IBLFilterGGX.FilterCubemapMIS(m_BuiltinParameters.commandBuffer, m_SkyboxCubemapRT, m_SkyboxGGXCubemapRT, m_SkyboxConditionalCdfRT, m_SkyboxMarginalRowCdfRT); } else { m_IBLFilterGGX.FilterCubemap(m_BuiltinParameters.commandBuffer, m_SkyboxCubemapRT, m_SkyboxGGXCubemapRT); } } }
void RenderCubemapGGXConvolution(CommandBuffer cmd, Texture input, RenderTexture target) { using (new ProfilingSample(cmd, "Update Env: GGX Convolution")) { if (m_useMIS && m_iblFilterGgx.supportMis) { m_iblFilterGgx.FilterCubemapMIS(cmd, input, target, m_SkyboxConditionalCdfRT, m_SkyboxMarginalRowCdfRT); } else { m_iblFilterGgx.FilterCubemap(cmd, input, target); } } }
private void RenderCubemapGGXConvolution(CommandBuffer cmd, BuiltinSkyParameters builtinParams, SkySettings skyParams, Texture input, RenderTexture target) { using (new Utilities.ProfilingSample("Update Env: GGX Convolution", cmd)) { int mipCount = 1 + (int)Mathf.Log(input.width, 2.0f); if (mipCount < ((int)EnvConstants.SpecCubeLodStep + 1)) { Debug.LogWarning("RenderCubemapGGXConvolution: Cubemap size is too small for GGX convolution, needs at least " + ((int)EnvConstants.SpecCubeLodStep + 1) + " mip levels"); return; } if (!m_iblFilterGgx.IsInitialized()) { m_iblFilterGgx.Initialize(cmd); } // Copy the first mip using (new Utilities.ProfilingSample("Copy Original Mip", cmd)) { for (int f = 0; f < 6; f++) { cmd.CopyTexture(input, f, 0, target, f, 0); } } using (new Utilities.ProfilingSample("GGX Convolution", cmd)) { if (m_useMIS && m_iblFilterGgx.SupportMIS) { m_iblFilterGgx.FilterCubemapMIS(cmd, input, target, mipCount, m_SkyboxConditionalCdfRT, m_SkyboxMarginalRowCdfRT, m_CubemapFaceMesh); } else { m_iblFilterGgx.FilterCubemap(cmd, input, target, mipCount, m_CubemapFaceMesh); } } } }
private void RenderCubemapGGXConvolution(ScriptableRenderContext renderContext, BuiltinSkyParameters builtinParams, SkyParameters skyParams, Texture input, RenderTexture target) { using (new Utilities.ProfilingSample("Sky Pass: GGX Convolution", renderContext)) { int mipCount = 1 + (int)Mathf.Log(input.width, 2.0f); if (mipCount < ((int)EnvConstants.SpecCubeLodStep + 1)) { Debug.LogWarning("RenderCubemapGGXConvolution: Cubemap size is too small for GGX convolution, needs at least " + ((int)EnvConstants.SpecCubeLodStep + 1) + " mip levels"); return; } if (!m_iblFilterGgx.IsInitialized()) { m_iblFilterGgx.Initialize(renderContext); } // Copy the first mip var cmd = new CommandBuffer { name = "" }; for (int f = 0; f < 6; f++) { cmd.CopyTexture(input, f, 0, target, f, 0); } renderContext.ExecuteCommandBuffer(cmd); cmd.Dispose(); if (m_useMIS) { m_iblFilterGgx.FilterCubemapMIS(renderContext, input, target, mipCount, m_SkyboxConditionalCdfRT, m_SkyboxMarginalRowCdfRT, m_CubemapFaceMesh); } else { m_iblFilterGgx.FilterCubemap(renderContext, input, target, mipCount, m_CubemapFaceMesh); } } }