private HDCachedShadowManager() { punctualShadowAtlas = new HDCachedShadowAtlas(ShadowMapType.PunctualAtlas); if (ShaderConfig.s_AreaLights == 1) { areaShadowAtlas = new HDCachedShadowAtlas(ShadowMapType.AreaLightAtlas); } }
internal ShadowBlitParameters PrepareShadowBlitParameters(HDCachedShadowAtlas cachedAtlas, Material blitMaterial, MaterialPropertyBlock blitMpb) { ShadowBlitParameters parameters = new ShadowBlitParameters(); parameters.requestsWaitingBlits = m_MixedRequestsPendingBlits; parameters.blitMaterial = blitMaterial; parameters.blitMaterialPropertyBlock = blitMpb; parameters.cachedShadowAtlasSize = new Vector2Int(cachedAtlas.width, cachedAtlas.height); return(parameters); }
public void BlitCachedIntoAtlas(RenderGraph renderGraph, HDCachedShadowAtlas cachedAtlas, Material blitMaterial, string passName, HDProfileId profileID) { if (m_MixedRequestsPendingBlits.Count > 0) { using (var builder = renderGraph.AddRenderPass <BlitCachedShadowPassData>(passName, out var passData, ProfilingSampler.Get(profileID))) { passData.requestsWaitingBlits = m_MixedRequestsPendingBlits; passData.blitMaterial = blitMaterial; passData.cachedShadowAtlasSize = new Vector2Int(cachedAtlas.width, cachedAtlas.height); passData.sourceCachedAtlas = builder.ReadTexture(cachedAtlas.GetOutputTexture(renderGraph)); passData.atlasTexture = builder.WriteTexture(GetOutputTexture(renderGraph)); builder.SetRenderFunc( (BlitCachedShadowPassData data, RenderGraphContext ctx) => { foreach (var request in data.requestsWaitingBlits) { var mpb = ctx.renderGraphPool.GetTempMaterialPropertyBlock(); ctx.cmd.SetRenderTarget(data.atlasTexture); ctx.cmd.SetViewport(request.dynamicAtlasViewport); Vector4 sourceScaleBias = new Vector4(request.cachedAtlasViewport.width / data.cachedShadowAtlasSize.x, request.cachedAtlasViewport.height / data.cachedShadowAtlasSize.y, request.cachedAtlasViewport.x / data.cachedShadowAtlasSize.x, request.cachedAtlasViewport.y / data.cachedShadowAtlasSize.y); mpb.SetTexture(HDShaderIDs._CachedShadowmapAtlas, data.sourceCachedAtlas); mpb.SetVector(HDShaderIDs._BlitScaleBias, sourceScaleBias); CoreUtils.DrawFullScreen(ctx.cmd, data.blitMaterial, mpb, 0); } data.requestsWaitingBlits.Clear(); }); } } }