Exemplo n.º 1
0
        public ForwardRenderer(ForwardRendererData 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_VolumeBlendingPass               = new VolumeBlendingPass(RenderPassEvent.BeforeRendering);
            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.BeforeRenderingOpaques, data.postProcessData);
            m_RenderOpaqueForwardPass      = new DrawObjectsPass("Render Opaques", true, RenderPassEvent.BeforeRenderingOpaques, RenderQueueRange.opaque, data.opaqueLayerMask, m_DefaultStencilState, stencilData.stencilReference);
            m_CopyDepthPass  = new CopyDepthPass(RenderPassEvent.BeforeRenderingOpaques, copyDepthMaterial);
            m_DrawSkyboxPass = new DrawSkyboxPass(RenderPassEvent.BeforeRenderingSkybox);
            m_CopyColorPass  = new CopyColorPass(RenderPassEvent.BeforeRenderingTransparents, samplingMaterial);
            m_RenderTransparentForwardPass = new DrawObjectsPass("Render Transparents", false, RenderPassEvent.BeforeRenderingTransparents, RenderQueueRange.transparent, data.transparentLayerMask, m_DefaultStencilState, stencilData.stencilReference);
            m_PostProcessPass      = new PostProcessPass(RenderPassEvent.BeforeRenderingPostProcessing, data.postProcessData);
            m_FinalPostProcessPass = new PostProcessPass(RenderPassEvent.AfterRenderingPostProcessing, data.postProcessData);
            m_CapturePass          = new CapturePass(RenderPassEvent.AfterRendering);
            m_FinalBlitPass        = new FinalBlitPass(RenderPassEvent.AfterRendering, blitMaterial);

#if UNITY_EDITOR
            m_SceneViewDepthCopyPass = new SceneViewDepthCopyPass(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();
        }
Exemplo n.º 2
0
    public ShadowRenderer(ShadowRendererData 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, LayerMask.GetMask("AR", "Tridify", "Outline"));
        m_ScreenSpaceShadowResolvePass = new ScreenSpaceShadowResolvePass(RenderPassEvent.BeforeRenderingPrepasses, screenspaceShadowsMaterial);
        m_CopyDepthPass = new CopyDepthPass(RenderPassEvent.BeforeRenderingOpaques, copyDepthMaterial);
        m_CopyColorPass = new CopyColorPass(RenderPassEvent.BeforeRenderingTransparents, samplingMaterial);
        m_CapturePass   = new CapturePassCopy(RenderPassEvent.AfterRendering);
        m_FinalBlitPass = new FinalBlitPass(RenderPassEvent.AfterRendering, blitMaterial);

#if UNITY_EDITOR
        m_SceneViewDepthCopyPass = new SceneViewDepthCopyPassCopy(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_ForwardLights = new ForwardLights();
    }
Exemplo n.º 3
0
        protected override void Render(ScriptableRenderContext context, Camera[] cameras)
        {
            //base.Render(context,cameras);

            if (m_ShaderTagIdList == null)
            {
                m_ShaderTagIdList = new List <ShaderTagId>();
                m_ShaderTagIdList.Add(new ShaderTagId("SRPDefaultUnlit"));
            }

            if (stencilData == null)
            {
                stencilData = new StencilStateData();
            }

            for (int i = 0, UPPER = cameras.Length; i < UPPER; i++)
            {
                BeginCameraRendering(context, cameras[i]);
                RenderSingleCamera(context, cameras[i]);
                EndCameraRendering(context, cameras[i]);
            }
        }
    public override void Create()
    {
        //模板缓冲相关设置
        StencilStateData stencilData = new StencilStateData()
        {
            passOperation = StencilOp.Replace
        };                                                                                           // 默认与延迟渲染兼容

        //模板缓冲状态设置
        var 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);
        // Bits [5,6] are used for material types.
        StencilState forwardOnlyStencilState = OverwriteStencil(m_DefaultStencilState, 0b_0110_0000);

        forwardOnlyStencilState.enabled = false;
        int forwardOnlyStencilRef = stencilData.stencilReference | 0b_0000_0000;

        //能被识别的有这些Tag的ShaderPass
        ShaderTagId[] forwardOnlyShaderTagIds = new ShaderTagId[] {
            new ShaderTagId("SRPDefaultUnlit"), new ShaderTagId("UniversalForward"), new ShaderTagId("UniversalForwardOnly"), new ShaderTagId("LightweightForward")
        };

        //本示例只给出不透明和半透明两种队列选择
        var queueRange = m_Queue == RenderQueue.opaque ? RenderQueueRange.opaque : RenderQueueRange.transparent;

        m_Pass = new CustomRendererPass("RenderObjectTest", forwardOnlyShaderTagIds, m_Queue == RenderQueue.opaque, passEvent, queueRange, layerMask, forwardOnlyStencilState, forwardOnlyStencilRef);

        //将拷贝颜色和深度信息配置传到Pass里
        m_Pass.Init(m_Color, m_Depth, m_TexName, m_TexFormat);
    }