public override void Execute(LightweightForwardRenderer renderer, ref ScriptableRenderContext context, ref CullResults cullResults, ref RenderingData renderingData) { Material material = renderingData.cameraData.isStereoEnabled ? null : renderer.GetMaterial(MaterialHandles.Blit); RenderTargetIdentifier sourceRT = colorAttachmentHandle.Identifier(); CommandBuffer cmd = CommandBufferPool.Get(k_FinalBlitTag); cmd.SetGlobalTexture("_BlitTex", sourceRT); // We need to handle viewport on a RT. We do it by rendering a fullscreen quad + viewport if (!renderingData.cameraData.isDefaultViewport) { SetRenderTarget( cmd, BuiltinRenderTextureType.CameraTarget, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.Store, ClearFlag.None, Color.black, descriptor.dimension); cmd.SetViewProjectionMatrices(Matrix4x4.identity, Matrix4x4.identity); cmd.SetViewport(renderingData.cameraData.camera.pixelRect); LightweightPipeline.DrawFullScreen(cmd, material); } else { cmd.Blit(colorAttachmentHandle.Identifier(), BuiltinRenderTextureType.CameraTarget, material); } context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); }
public ScreenSpaceShadowResolvePass(LightweightForwardRenderer renderer) : base(renderer) { m_ColorFormat = SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.R8) ? RenderTextureFormat.R8 : RenderTextureFormat.ARGB32; m_ScreenSpaceShadowsMaterial = renderer.GetMaterial(MaterialHandles.ScrenSpaceShadow); }
public ForwardLitPass(LightweightForwardRenderer renderer) : base(renderer) { RegisterShaderPassName("LightweightForward"); RegisterShaderPassName("SRPDefaultUnlit"); m_LegacyShaderPassNames = new List <ShaderPassName>(); m_LegacyShaderPassNames.Add(new ShaderPassName("Always")); m_LegacyShaderPassNames.Add(new ShaderPassName("ForwardBase")); m_LegacyShaderPassNames.Add(new ShaderPassName("PrepassBase")); m_LegacyShaderPassNames.Add(new ShaderPassName("Vertex")); m_LegacyShaderPassNames.Add(new ShaderPassName("VertexLMRGBM")); m_LegacyShaderPassNames.Add(new ShaderPassName("VertexLM")); PerCameraBuffer._MainLightPosition = Shader.PropertyToID("_MainLightPosition"); PerCameraBuffer._MainLightColor = Shader.PropertyToID("_MainLightColor"); PerCameraBuffer._MainLightCookie = Shader.PropertyToID("_MainLightCookie"); PerCameraBuffer._WorldToLight = Shader.PropertyToID("_WorldToLight"); PerCameraBuffer._AdditionalLightCount = Shader.PropertyToID("_AdditionalLightCount"); PerCameraBuffer._AdditionalLightPosition = Shader.PropertyToID("_AdditionalLightPosition"); PerCameraBuffer._AdditionalLightColor = Shader.PropertyToID("_AdditionalLightColor"); PerCameraBuffer._AdditionalLightDistanceAttenuation = Shader.PropertyToID("_AdditionalLightDistanceAttenuation"); PerCameraBuffer._AdditionalLightSpotDir = Shader.PropertyToID("_AdditionalLightSpotDir"); PerCameraBuffer._AdditionalLightSpotAttenuation = Shader.PropertyToID("_AdditionalLightSpotAttenuation"); PerCameraBuffer._LightIndexBuffer = Shader.PropertyToID("_LightIndexBuffer"); int maxVisibleLocalLights = renderer.maxVisibleLocalLights; m_LightPositions = new Vector4[maxVisibleLocalLights]; m_LightColors = new Vector4[maxVisibleLocalLights]; m_LightDistanceAttenuations = new Vector4[maxVisibleLocalLights]; m_LightSpotDirections = new Vector4[maxVisibleLocalLights]; m_LightSpotAttenuations = new Vector4[maxVisibleLocalLights]; m_ColorFormat = RenderTextureFormat.Default; m_BlitMaterial = renderer.GetMaterial(MaterialHandles.Blit); m_ErrorMaterial = renderer.GetMaterial(MaterialHandles.Error); // Copy Depth Pass m_DepthCopyMaterial = renderer.GetMaterial(MaterialHandles.DepthCopy); // Copy Opaque Color Pass m_SamplingMaterial = renderer.GetMaterial(MaterialHandles.Sampling); m_SampleOffsetShaderHandle = Shader.PropertyToID("_SampleOffset"); }
protected LightweightForwardPass(LightweightForwardRenderer renderer) : base(renderer) { m_ErrorMaterial = renderer.GetMaterial(MaterialHandles.Error); m_LegacyShaderPassNames = new List <ShaderPassName>(); m_LegacyShaderPassNames.Add(new ShaderPassName("Always")); m_LegacyShaderPassNames.Add(new ShaderPassName("ForwardBase")); m_LegacyShaderPassNames.Add(new ShaderPassName("PrepassBase")); m_LegacyShaderPassNames.Add(new ShaderPassName("Vertex")); m_LegacyShaderPassNames.Add(new ShaderPassName("VertexLMRGBM")); m_LegacyShaderPassNames.Add(new ShaderPassName("VertexLM")); RegisterShaderPassName("LightweightForward"); RegisterShaderPassName("SRPDefaultUnlit"); }
public override void Execute(LightweightForwardRenderer renderer, ref ScriptableRenderContext context, ref CullResults cullResults, ref RenderingData renderingData) { // Restore Render target for additional editor rendering. // Note: Scene view camera always perform depth prepass CommandBuffer cmd = CommandBufferPool.Get(k_CopyDepthToCameraTag); CoreUtils.SetRenderTarget(cmd, BuiltinRenderTextureType.CameraTarget); cmd.SetGlobalTexture("_CameraDepthAttachment", source.Identifier()); cmd.EnableShaderKeyword(LightweightKeywordStrings.DepthNoMsaa); cmd.DisableShaderKeyword(LightweightKeywordStrings.DepthMsaa2); cmd.DisableShaderKeyword(LightweightKeywordStrings.DepthMsaa4); cmd.Blit(source.Identifier(), BuiltinRenderTextureType.CameraTarget, renderer.GetMaterial(MaterialHandles.DepthCopy)); context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); }
protected void RenderObjectsWithError(LightweightForwardRenderer renderer, ref ScriptableRenderContext context, ref CullResults cullResults, Camera camera, FilterRenderersSettings filterSettings, SortFlags sortFlags) { Material errorMaterial = renderer.GetMaterial(MaterialHandles.Error); if (errorMaterial != null) { DrawRendererSettings errorSettings = new DrawRendererSettings(camera, m_LegacyShaderPassNames[0]); for (int i = 1; i < m_LegacyShaderPassNames.Count; ++i) { errorSettings.SetShaderPassName(i, m_LegacyShaderPassNames[i]); } errorSettings.sorting.flags = sortFlags; errorSettings.rendererConfiguration = RendererConfiguration.None; errorSettings.SetOverrideMaterial(errorMaterial, 0); context.DrawRenderers(cullResults.visibleRenderers, ref errorSettings, filterSettings); } }
public override void Execute(LightweightForwardRenderer renderer, ref ScriptableRenderContext context, ref CullResults cullResults, ref RenderingData renderingData) { CommandBuffer cmd = CommandBufferPool.Get(k_DepthCopyTag); RenderTargetIdentifier depthSurface = source.Identifier(); RenderTargetIdentifier copyDepthSurface = destination.Identifier(); Material depthCopyMaterial = renderer.GetMaterial(MaterialHandles.DepthCopy); RenderTextureDescriptor descriptor = LightweightForwardRenderer.CreateRTDesc(ref renderingData.cameraData); descriptor.colorFormat = RenderTextureFormat.Depth; descriptor.depthBufferBits = 32; //TODO: fix this ; descriptor.msaaSamples = 1; descriptor.bindMS = false; cmd.GetTemporaryRT(destination.id, descriptor, FilterMode.Point); if (renderingData.cameraData.msaaSamples > 1) { cmd.DisableShaderKeyword(LightweightKeywordStrings.DepthNoMsaa); if (renderingData.cameraData.msaaSamples == 4) { cmd.DisableShaderKeyword(LightweightKeywordStrings.DepthMsaa2); cmd.EnableShaderKeyword(LightweightKeywordStrings.DepthMsaa4); } else { cmd.EnableShaderKeyword(LightweightKeywordStrings.DepthMsaa2); cmd.DisableShaderKeyword(LightweightKeywordStrings.DepthMsaa4); } cmd.Blit(depthSurface, copyDepthSurface, depthCopyMaterial); } else { cmd.EnableShaderKeyword(LightweightKeywordStrings.DepthNoMsaa); cmd.DisableShaderKeyword(LightweightKeywordStrings.DepthMsaa2); cmd.DisableShaderKeyword(LightweightKeywordStrings.DepthMsaa4); LightweightPipeline.CopyTexture(cmd, depthSurface, copyDepthSurface, depthCopyMaterial); } context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); }
public override void Execute(LightweightForwardRenderer renderer, ref ScriptableRenderContext context, ref CullResults cullResults, ref RenderingData renderingData) { if (renderingData.shadowData.renderedDirectionalShadowQuality == LightShadows.None) { return; } CommandBuffer cmd = CommandBufferPool.Get("Collect Shadows"); cmd.GetTemporaryRT(colorAttachmentHandle.id, descriptor, FilterMode.Bilinear); SetShadowCollectPassKeywords(cmd, ref renderingData.shadowData); // Note: The source isn't actually 'used', but there's an engine peculiarity (bug) that // doesn't like null sources when trying to determine a stereo-ized blit. So for proper // stereo functionality, we use the screen-space shadow map as the source (until we have // a better solution). // An alternative would be DrawProcedural, but that would require further changes in the shader. RenderTargetIdentifier screenSpaceOcclusionTexture = colorAttachmentHandle.Identifier(); SetRenderTarget(cmd, screenSpaceOcclusionTexture, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.Store, ClearFlag.Color | ClearFlag.Depth, Color.white, descriptor.dimension); cmd.Blit(screenSpaceOcclusionTexture, screenSpaceOcclusionTexture, renderer.GetMaterial(MaterialHandles.ScrenSpaceShadow)); if (renderingData.cameraData.isStereoEnabled) { Camera camera = renderingData.cameraData.camera; context.StartMultiEye(camera); context.ExecuteCommandBuffer(cmd); context.StopMultiEye(camera); } else { context.ExecuteCommandBuffer(cmd); } CommandBufferPool.Release(cmd); }
public override void Execute(LightweightForwardRenderer renderer, ref ScriptableRenderContext context, ref CullResults cullResults, ref RenderingData renderingData) { CommandBuffer cmd = CommandBufferPool.Get("Copy Color"); Downsampling downsampling = renderingData.cameraData.opaqueTextureDownsampling; float opaqueScaler = m_OpaqueScalerValues[(int)downsampling]; RenderTextureDescriptor opaqueDesc = LightweightForwardRenderer.CreateRTDesc(ref renderingData.cameraData, opaqueScaler); RenderTargetIdentifier colorRT = source.Identifier(); RenderTargetIdentifier opaqueColorRT = destination.Identifier(); cmd.GetTemporaryRT(destination.id, opaqueDesc, renderingData.cameraData.opaqueTextureDownsampling == Downsampling.None ? FilterMode.Point : FilterMode.Bilinear); switch (downsampling) { case Downsampling.None: cmd.Blit(colorRT, opaqueColorRT); break; case Downsampling._2xBilinear: cmd.Blit(colorRT, opaqueColorRT); break; case Downsampling._4xBox: Material samplingMaterial = renderer.GetMaterial(MaterialHandles.Sampling); samplingMaterial.SetFloat(m_SampleOffsetShaderHandle, 2); cmd.Blit(colorRT, opaqueColorRT, samplingMaterial, 0); break; case Downsampling._4xBilinear: cmd.Blit(colorRT, opaqueColorRT); break; } context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); }
public FinalBlitPass(LightweightForwardRenderer renderer) : base(renderer) { m_BlitMaterial = renderer.GetMaterial(MaterialHandles.Blit); }
public CopyColorPass(LightweightForwardRenderer renderer) : base(renderer) { m_SamplingMaterial = renderer.GetMaterial(MaterialHandles.Sampling); m_SampleOffsetShaderHandle = Shader.PropertyToID("_SampleOffset"); }
public CopyDepthPass(LightweightForwardRenderer renderer) : base(renderer) { m_DepthCopyMaterial = renderer.GetMaterial(MaterialHandles.DepthCopy); }