Hi,
in Unity 2021.3, it was possible to simply create a custom RenderPipelineAsset by deriving from UniversalRenderPipelineAsset
[CreateAssetMenu(menuName = "Rendering/My URP Asset (Pipeline Asset)")]
public class MyURPAsset : UniversalRenderPipelineAsset {
protected override RenderPipeline CreatePipeline() {
RenderPipeline rp = base.CreatePipeline();
DoSomeStuff();
return rp;
}
}
With Unity 2022.2.18, there are multiple parts, where Unity tries to reference texture files with a “Reload”-Attribute. Those are always null and result into the NullReferenceException once they are accessed.
ScreenSpaceAmbientOcclusionSettings
[Reload("Textures/BlueNoise256/LDR_LLL1_{0}.png", 0, 7)]
public Texture2D[] m_BlueNoise256Textures;
UniversalRenderPipelineAsset
[Serializable, ReloadGroup]
public sealed class TextureResources
{
/// <summary>
/// Pre-baked blue noise textures.
/// </summary>
[Reload("Textures/BlueNoise64/L/LDR_LLL1_0.png")]
public Texture2D blueNoise64LTex;
/// <summary>
/// Bayer matrix texture.
/// </summary>
[Reload("Textures/BayerMatrix.png")]
public Texture2D bayerMatrixTex;
NullReferenceException: Object reference not set to an instance of an object
UnityEngine.Rendering.Universal.ScreenSpaceAmbientOcclusion.AddRenderPasses (UnityEngine.Rendering.Universal.ScriptableRenderer renderer, UnityEngine.Rendering.Universal.RenderingData& renderingData) (at ./Library/PackageCache/com.unity.render-pipelines.universal@14.0.7/Runtime/RendererFeatures/ScreenSpaceAmbientOcclusion.cs:130)
UnityEngine.Rendering.Universal.ScriptableRenderer.AddRenderPasses (UnityEngine.Rendering.Universal.RenderingData& renderingData) (at ./Library/PackageCache/com.unity.render-pipelines.universal@14.0.7/Runtime/ScriptableRenderer.cs:1362)
UnityEngine.Rendering.Universal.UniversalRenderPipeline.RenderSingleCamera (UnityEngine.Rendering.ScriptableRenderContext context, UnityEngine.Rendering.Universal.CameraData& cameraData, System.Boolean anyPostProcessingEnabled) (at ./Library/PackageCache/com.unity.render-pipelines.universal@14.0.7/Runtime/UniversalRenderPipeline.cs:638)
UnityEngine.Rendering.Universal.UniversalRenderPipeline.RenderCameraStack (UnityEngine.Rendering.ScriptableRenderContext context, UnityEngine.Camera baseCamera) (at ./Library/PackageCache/com.unity.render-pipelines.universal@14.0.7/Runtime/UniversalRenderPipeline.cs:817)
UnityEngine.Rendering.Universal.UniversalRenderPipeline.Render (UnityEngine.Rendering.ScriptableRenderContext renderContext, System.Collections.Generic.List1[T] cameras) (at ./Library/PackageCache/com.unity.render-pipelines.universal@14.0.7/Runtime/UniversalRenderPipeline.cs:362) UnityEngine.Rendering.RenderPipeline.InternalRender (UnityEngine.Rendering.ScriptableRenderContext context, System.Collections.Generic.List
1[T] cameras) (at :0)
UnityEngine.Rendering.RenderPipelineManager.DoRenderLoop_Internal (UnityEngine.Rendering.RenderPipelineAsset pipe, System.IntPtr loopPtr, UnityEngine.Object renderRequest, Unity.Collections.LowLevel.Unsafe.AtomicSafetyHandle safety) (at :0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&)
Is there any chance to fix the issue or point the reload attribute to the correct path of the original pipeline asset?