public override void Create() { ForwardRendererData data = UniversalRenderPipeline.asset.m_RendererData as ForwardRendererData; var shader = data.shaders.samplingPS; m_SamplingMaterial = CoreUtils.CreateEngineMaterial(shader); }
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"); }
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(); }
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); }
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(); }
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 }
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; } }
/// <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 }
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); }
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); }
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) { }
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(); }