public override void Create()
    {
        ForwardRendererData data = UniversalRenderPipeline.asset.m_RendererData as ForwardRendererData;
        var shader = data.shaders.samplingPS;

        m_SamplingMaterial = CoreUtils.CreateEngineMaterial(shader);
    }
Пример #2
0
    public override void Create()
    {
        ForwardRendererData data = null;

        if (UniversalRenderPipeline.asset.m_RendererDataList[0] != null)
        {
            data = UniversalRenderPipeline.asset.m_RendererDataList[0] as ForwardRendererData;
        }

        if (data == null)
        {
            return;
        }

        if (data.shaders == null)
        {
            return;
        }

        if (data.shaders.samplingPS == null)
        {
            return;
        }

        m_SamplingMaterial = CoreUtils.CreateEngineMaterial(data.shaders.samplingPS);
    }
 public BlendWeightedOITRenderer(ForwardRendererData data) : base(data)
 {
     m_BlendWeightedAccumulatePass = new BlendWeightedAccumulatePass(RenderPassEvent.BeforeRenderingTransparents, RenderQueueRange.transparent, data.transparentLayerMask);
     m_BlendWeightedRevealagePass  = new BlendWeightedRevealagePass(RenderPassEvent.BeforeRenderingTransparents, RenderQueueRange.transparent, data.transparentLayerMask);
     //m_BlendWeightedTestPass = new BlendWeightedTestPass(RenderPassEvent.BeforeRenderingTransparents, RenderQueueRange.transparent, data.transparentLayerMask);
     accumulateHandle.Init("_AccumTex");
     revealageHandle.Init("_RevealageTex");
 }
Пример #4
0
        public ForwardRenderer(ForwardRendererData data) : base(data)
        {
            Downsampling downsamplingMethod = LightweightRenderPipeline.asset.opaqueDownsampling;

            Material blitMaterial               = CoreUtils.CreateEngineMaterial(data.blitShader);
            Material copyDepthMaterial          = CoreUtils.CreateEngineMaterial(data.copyDepthShader);
            Material samplingMaterial           = CoreUtils.CreateEngineMaterial(data.samplingShader);
            Material screenspaceShadowsMaterial = CoreUtils.CreateEngineMaterial(data.screenSpaceShadowShader);
            Material ssDownSampleMaterial       = CoreUtils.CreateEngineMaterial("Hidden/Lightweight Render Pipeline/SSDownSample");

            // 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.all);
            m_ScreenSpaceShadowResolvePass = new ScreenSpaceShadowResolvePass(RenderPassEvent.BeforeRenderingPrepasses, screenspaceShadowsMaterial);
            m_SSSDownsamplePass            = new SSShadowDownSamplePass(RenderPassEvent.BeforeRenderingPrepasses, ssDownSampleMaterial);

            m_RenderOpaqueForwardPass = new RenderOpaqueForwardPass(RenderPassEvent.BeforeRenderingOpaques, RenderQueueRange.opaque, data.opaqueLayerMask);

            m_CopyDepthPass         = new CopyDepthPass(RenderPassEvent.BeforeRenderingOpaques, copyDepthMaterial);
            m_OpaquePostProcessPass = new PostProcessPass(RenderPassEvent.BeforeRenderingOpaques, true);
            m_DrawSkyboxPass        = new DrawSkyboxPass(RenderPassEvent.BeforeRenderingSkybox);
            m_CopyColorPass         = new CopyColorPass(RenderPassEvent.BeforeRenderingTransparents, samplingMaterial, downsamplingMethod);
            //m_RenderOpaqueDiscardAndBlendPass = new RenderOpaqueDiscardAndBlendPass(RenderPassEvent.BeforeRenderingTransparents , new RenderQueueRange(2350,2550), data.opaqueLayerMask);

            m_RenderTransparentForwardPass = new RenderTransparentForwardPass(RenderPassEvent.BeforeRenderingTransparents, RenderQueueRange.transparent, data.transparentLayerMask);

            //m_RenderObjectsPass = new RenderObjectsPass(RenderPassEvent.AfterRenderingTransparents, RenderQueueRange.all);

            m_PostProcessPass = new PostProcessPass(RenderPassEvent.BeforeRenderingPostProcessing);
            m_UICameraPass    = new UICameraPass(RenderPassEvent.AfterRendering, RenderQueueRange.transparent, data.transparentLayerMask);
            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_CameraNormalAttachment.Init("_CameraNormalAttachment");

            m_ForwardLights = new ForwardLights();
        }
Пример #5
0
        public static ForwardRendererData GetGrassBendRendererInProject()
        {
            string GUID      = "6646d2562bb9379498d38addaba2d66d";
            string assetPath = AssetDatabase.GUIDToAssetPath(GUID);

            if (assetPath == string.Empty)
            {
                Debug.LogError("The <i>" + DrawGrassBenders.AssetName + "</i> asset could not be found in the project. GUID should match " + GUID);
                return(null);
            }
            ForwardRendererData data = (ForwardRendererData)AssetDatabase.LoadAssetAtPath(assetPath, typeof(ForwardRendererData));

            return(data);
        }
Пример #6
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();
        }
Пример #7
0
        public static ForwardRendererData GetGrassBendRenderer()
        {
            string[] GUIDs = AssetDatabase.FindAssets(DrawGrassBenders.AssetName + " t:ForwardRendererData");

            if (GUIDs.Length == 0)
            {
                Debug.LogError("The <i>" + DrawGrassBenders.AssetName + "</i> asset could not be found in the project. Was it renamed or not imported?");
                return(null);
            }

            string assetPath = AssetDatabase.GUIDToAssetPath(GUIDs[0]);

            ForwardRendererData data = (ForwardRendererData)AssetDatabase.LoadAssetAtPath(assetPath, typeof(ForwardRendererData));

            return(data);
        }
        private void OnEnable()
        {
#if UNITY_EDITOR && RENDER_FEATURE
            //Ensure the renderer is serialized
            if (ForwardRendererData == null)
            {
                ForwardRendererData = UnityEditor.AssetDatabase.LoadAssetAtPath <ForwardRendererData>(
                    UnityEditor.AssetDatabase.GUIDToAssetPath(ForwardRendererDataGUID));
            }
#endif

            InitializeValues();

            Instances.Add(this);
            EnableReflections();
        }
        public static void SwitchProjectToURP()
        {
#if URP_PACKAGE_IS_INSTALLED
            // Create default URP render pipeline asset (if it doesn't already exist).
            //
            // The #if/#else is needed here because Unity renamed `ForwardRendererData`
            // to `UniversalRendererData` in Unity 2021.2.

#if UNITY_2021_2_OR_NEWER
            UniversalRendererData rendererData = null;

            if (!AssetPathUtil.Exists(URP_RENDERER_ASSET_PATH))
            {
                rendererData = ScriptableObject.CreateInstance <UniversalRendererData>();
                AssetDatabase.CreateAsset(rendererData, URP_RENDERER_ASSET_PATH);
                // reload asset so that object reference is "backed" by asset file
                rendererData = AssetDatabase.LoadAssetAtPath <UniversalRendererData>(URP_RENDERER_ASSET_PATH);
            }
#else
            ForwardRendererData rendererData = null;

            if (!AssetPathUtil.Exists(URP_RENDERER_ASSET_PATH))
            {
                rendererData = ScriptableObject.CreateInstance <ForwardRendererData>();
                AssetDatabase.CreateAsset(rendererData, URP_RENDERER_ASSET_PATH);
                // reload asset so that object reference is "backed" by asset file
                rendererData = AssetDatabase.LoadAssetAtPath <ForwardRendererData>(URP_RENDERER_ASSET_PATH);
            }
#endif

            RenderPipelineAsset renderPipeline = null;

            if (!AssetPathUtil.Exists(URP_PIPELINE_ASSET_PATH))
            {
                renderPipeline = UniversalRenderPipelineAsset.Create(rendererData);
                AssetDatabase.CreateAsset(renderPipeline, URP_PIPELINE_ASSET_PATH);
            }

            // reload asset so that object reference is "backed" by asset file
            renderPipeline = AssetDatabase.LoadAssetAtPath <RenderPipelineAsset>(URP_PIPELINE_ASSET_PATH);
            GraphicsSettings.renderPipelineAsset = renderPipeline;

            // Set color space to linear to match Unity's
            // default setting for new URP projects.
            PlayerSettings.colorSpace = ColorSpace.Linear;
#endif
        }
Пример #10
0
    public void CreatePipelineAssetWithoutErrors()
    {
        // Test without any render pipeline assigned to GraphicsSettings.
        var renderPipelineAsset = GraphicsSettings.renderPipelineAsset;

        GraphicsSettings.renderPipelineAsset = null;

        try
        {
            ForwardRendererData          data  = ScriptableObject.CreateInstance <ForwardRendererData>();
            UniversalRenderPipelineAsset asset = UniversalRenderPipelineAsset.Create(data);
            LogAssert.NoUnexpectedReceived();
            ScriptableObject.DestroyImmediate(asset);
            ScriptableObject.DestroyImmediate(data);
        }
        // Makes sure the render pipeline is restored in case of a NullReference exception.
        finally
        {
            GraphicsSettings.renderPipelineAsset = renderPipelineAsset;
        }
    }
Пример #11
0
        /// <summary>
        /// Retrieves a ForwardRenderer asset in the project, based on name
        /// </summary>
        /// <param name="assetName"></param>
        /// <returns></returns>
        public static ForwardRendererData GetRenderer(string assetName)
        {
#if UNITY_EDITOR
            string[] GUIDs = AssetDatabase.FindAssets(assetName + " t:ForwardRendererData");

            if (GUIDs.Length == 0)
            {
                Debug.LogError("The <i>" + assetName + "</i> asset could not be found in the project. Was it renamed or not imported?");
                return(null);
            }

            string assetPath = AssetDatabase.GUIDToAssetPath(GUIDs[0]);

            ForwardRendererData data = (ForwardRendererData)AssetDatabase.LoadAssetAtPath(assetPath, typeof(ForwardRendererData));

            return(data);
#else
            Debug.LogError("StylizedGrass.PipelineUtilities.GetRenderer() cannot be called in a build, it requires AssetDatabase. References to renderers should be saved beforehand!");
            return(null);
#endif
        }
Пример #12
0
    public void ValidateNewAssetResources()
    {
        ForwardRendererData          data  = ScriptableObject.CreateInstance <ForwardRendererData>();
        UniversalRenderPipelineAsset asset = UniversalRenderPipelineAsset.Create(data);

        Assert.AreNotEqual(null, asset.defaultMaterial);
        Assert.AreNotEqual(null, asset.defaultParticleMaterial);
        Assert.AreNotEqual(null, asset.defaultLineMaterial);
        Assert.AreNotEqual(null, asset.defaultTerrainMaterial);
        Assert.AreNotEqual(null, asset.defaultShader);

        // LWRP doesn't override the following materials
        Assert.AreEqual(null, asset.defaultUIMaterial);
        Assert.AreEqual(null, asset.defaultUIOverdrawMaterial);
        Assert.AreEqual(null, asset.defaultUIETC1SupportedMaterial);
        Assert.AreEqual(null, asset.default2DMaterial);

        Assert.AreNotEqual(null, asset.m_EditorResourcesAsset, "Editor Resources should be initialized when creating a new pipeline.");
        Assert.AreNotEqual(null, asset.m_RendererDataList, "A default renderer data should be created when creating a new pipeline.");
        ScriptableObject.DestroyImmediate(asset);
        ScriptableObject.DestroyImmediate(data);
    }
Пример #13
0
    public void ValidateAssetSettings()
    {
        // Create a new asset and validate invalid settings
        ForwardRendererData          data  = ScriptableObject.CreateInstance <ForwardRendererData>();
        UniversalRenderPipelineAsset asset = UniversalRenderPipelineAsset.Create(data);

        if (asset != null)
        {
            asset.shadowDistance = -1.0f;
            Assert.GreaterOrEqual(asset.shadowDistance, 0.0f);

            asset.renderScale = -1.0f;
            Assert.GreaterOrEqual(asset.renderScale, UniversalRenderPipeline.minRenderScale);

            asset.renderScale = 32.0f;
            Assert.LessOrEqual(asset.renderScale, UniversalRenderPipeline.maxRenderScale);

            asset.shadowNormalBias = -1.0f;
            Assert.GreaterOrEqual(asset.shadowNormalBias, 0.0f);

            asset.shadowNormalBias = 32.0f;
            Assert.LessOrEqual(asset.shadowNormalBias, UniversalRenderPipeline.maxShadowBias);

            asset.shadowDepthBias = -1.0f;
            Assert.GreaterOrEqual(asset.shadowDepthBias, 0.0f);

            asset.shadowDepthBias = 32.0f;
            Assert.LessOrEqual(asset.shadowDepthBias, UniversalRenderPipeline.maxShadowBias);

            asset.maxAdditionalLightsCount = -1;
            Assert.GreaterOrEqual(asset.maxAdditionalLightsCount, 0);

            asset.maxAdditionalLightsCount = 32;
            Assert.LessOrEqual(asset.maxAdditionalLightsCount, UniversalRenderPipeline.maxPerObjectLights);
        }
        ScriptableObject.DestroyImmediate(asset);
        ScriptableObject.DestroyImmediate(data);
    }
Пример #14
0
        public static RenderPipelineAsset CreateAsset(ForwardRendererData data)
        {
#if UNITY_2019_3_OR_NEWER
            return(UniversalRenderPipelineAsset.Create(data));
#else
            var asset = LightweightRenderPipelineAsset.Create();

            using (var so = new SerializedObject(asset))
            {
                so.Update();

                var rendererProperty     = so.FindProperty("m_RendererData");
                var rendererTypeProperty = so.FindProperty("m_RendererType");
                rendererTypeProperty.enumValueIndex = (int)RendererType.Custom;

                rendererProperty.objectReferenceValue = data;

                so.ApplyModifiedProperties();
            }

            return(asset);
#endif
        }
 public ReflectionCameraRenderer(ForwardRendererData data) : base(data)
 {
 }
Пример #16
0
 public FeedBackCameraRender(ForwardRendererData data) : base(data)
 {
     m_feedbackPass = new FeedbackPass(RenderPassEvent.BeforeRenderingOpaques, RenderQueueRange.opaque, data.opaqueLayerMask);
 }
 public void SetCurrentForwardRendererData(ForwardRendererData forwardRendererData)
 {
     this.CurrentForwardRendererData = forwardRendererData;
     this.Init();
 }