Exemple #1
0
    public CustomForwardRenderer(CustomForwardRendererData data) : base(data)
    {
        Material blitMaterial               = CoreUtils.CreateEngineMaterial(data.shaders.blitPS);
        Material copyDepthMaterial          = CoreUtils.CreateEngineMaterial(data.shaders.copyDepthPS);
        Material samplingMaterial           = CoreUtils.CreateEngineMaterial(data.shaders.samplingPS);
        Material screenspaceShadowsMaterial = CoreUtils.CreateEngineMaterial(data.shaders.screenSpaceShadowPS);

        StencilStateData stencilData = data.defaultStencilState;

        m_DefaultStencilState         = StencilState.defaultValue;
        m_DefaultStencilState.enabled = stencilData.overrideStencilState;
        m_DefaultStencilState.SetCompareFunction(stencilData.stencilCompareFunction);
        m_DefaultStencilState.SetPassOperation(stencilData.passOperation);
        m_DefaultStencilState.SetFailOperation(stencilData.failOperation);
        m_DefaultStencilState.SetZFailOperation(stencilData.zFailOperation);

        // Note: Since all custom render passes inject first and we have stable sort,
        // we inject the builtin passes in the before events.
        m_MainLightShadowCasterPass        = new MainLightShadowCasterPass(RenderPassEvent.BeforeRenderingShadows);
        m_AdditionalLightsShadowCasterPass =
            new AdditionalLightsShadowCasterPass(RenderPassEvent.BeforeRenderingShadows);
        m_DepthPrepass = new DepthOnlyPass(RenderPassEvent.BeforeRenderingPrepasses, RenderQueueRange.opaque,
                                           data.opaqueLayerMask);
        m_ScreenSpaceShadowResolvePass =
            new ScreenSpaceShadowResolvePass(RenderPassEvent.BeforeRenderingPrepasses, screenspaceShadowsMaterial);
        m_ColorGradingLutPass     = new ColorGradingLutPass(RenderPassEvent.BeforeRenderingPrepasses, data.postProcessData);
        m_RenderOpaqueForwardPass = new DrawObjectsPass("Render Opaques", true, RenderPassEvent.BeforeRenderingOpaques,
                                                        RenderQueueRange.opaque, data.opaqueLayerMask, m_DefaultStencilState, stencilData.stencilReference);
        m_CopyDepthPass           = new CopyDepthPass(RenderPassEvent.AfterRenderingSkybox, copyDepthMaterial);
        m_DrawSkyboxPass          = new DrawSkyboxPass(RenderPassEvent.BeforeRenderingSkybox);
        m_CopyColorPass           = new CopyColorPass(RenderPassEvent.BeforeRenderingTransparents, samplingMaterial);
        m_TransparentSettingsPass =
            new CustomTransparentSettingsPass(RenderPassEvent.BeforeRenderingTransparents, data.shadowTransparentReceive);
        m_RenderTransparentForwardPass = new DrawObjectsPass("Render Transparents", false,
                                                             RenderPassEvent.BeforeRenderingTransparents, RenderQueueRange.transparent, data.transparentLayerMask,
                                                             m_DefaultStencilState, stencilData.stencilReference);
        m_OnRenderObjectCallbackPass =
            new CustomInvokeOnRenderObjectCallbackPass(RenderPassEvent.BeforeRenderingPostProcessing);
        m_PostProcessPass = new PostProcessPass(RenderPassEvent.BeforeRenderingPostProcessing, data.postProcessData,
                                                blitMaterial);
        m_FinalPostProcessPass =
            new PostProcessPass(RenderPassEvent.AfterRendering + 1, data.postProcessData, blitMaterial);
        m_CapturePass   = new CustomCapturePass(RenderPassEvent.AfterRendering);
        m_FinalBlitPass = new FinalBlitPass(RenderPassEvent.AfterRendering + 1, blitMaterial);

#if POST_PROCESSING_STACK_2_0_0_OR_NEWER
        m_OpaquePostProcessPassCompat = new PostProcessPassCompat(RenderPassEvent.BeforeRenderingOpaques, true);
        m_PostProcessPassCompat       = new PostProcessPassCompat(RenderPassEvent.BeforeRenderingPostProcessing);
#endif

#if UNITY_EDITOR
        m_SceneViewDepthCopyPass = new CustomSceneViewDepthCopyPass(RenderPassEvent.AfterRendering + 9, copyDepthMaterial);
#endif

        // RenderTexture format depends on camera and pipeline (HDR, non HDR, etc)
        // Samples (MSAA) depend on camera and pipeline
        m_CameraColorAttachment.Init("_CameraColorTexture");
        m_CameraDepthAttachment.Init("_CameraDepthAttachment");
        m_DepthTexture.Init("_CameraDepthTexture");
        m_OpaqueColor.Init("_CameraOpaqueTexture");
        m_AfterPostProcessColor.Init("_AfterPostProcessTexture");
        m_ColorGradingLut.Init("_InternalGradingLut");
        m_ForwardLights = new ForwardLights();

        supportedRenderingFeatures = new RenderingFeatures()
        {
            cameraStacking = true,
        };
    }