visualdesigncafe / nature-renderer

Nature Renderer is a plugin for the Unity game engine to efficiently render vegetation on your terrains.
https://visualdesigncafe.com/nature-renderer/
0 stars 0 forks source link

Occasional crash when modifying terrain patch bounds multiplier #30

Closed KyleBanks closed 1 month ago

KyleBanks commented 3 months ago

Describe the bug

It's common to modify the patchBoundsMultiplier on a terrain like so when using tessellation/displacement shaders to avoid unwanted patch culling:

Terrain t = this.GetComponent<Terrain>();
t.patchBoundsMultiplier = new Vector3(1.5f, 1.5f, 1.5f);

However, with Nature Renderer this is causes occasional crashes which look like so:

=================================================================
    Managed Stacktrace:
=================================================================
      at <unknown> <0xffffffff>
      at UnityEngine.TerrainData:ComputeDetailInstanceTransforms <0x000cd>
      at VisualDesignCafe.Rendering.Nature.TerrainGrassSpawner:Spawn <0x001a2>
      at VisualDesignCafe.Rendering.Nature.TerrainGrassStreamer:LoadCell <0x0024a>
      at VisualDesignCafe.Rendering.Nature.TerrainGrassStreamer:UpdateLoadCellsAsync <0x000d2>
      at VisualDesignCafe.Rendering.Nature.TerrainGrassStreamer:GetBuffersForCellsInRange <0x00152>
      at VisualDesignCafe.Rendering.Instancing.CameraRenderer:RenderObject <0x00bc3>
      at VisualDesignCafe.Rendering.Instancing.CameraRenderer:Render <0x00382>
      at VisualDesignCafe.Rendering.Instancing.FrameRenderer:OnBeginContextRendering <0x0013a>
      at System.Action`2:invoke_void_T1_T2 <0x000db>
      at UnityEngine.Rendering.RenderPipelineManager:BeginContextRendering <0x0005e>
      at UnityEngine.Rendering.RenderPipeline:BeginContextRendering <0x00042>
      at UnityEngine.Rendering.Universal.UniversalRenderPipeline:Render <0x0019a>
      at UnityEngine.Rendering.RenderPipeline:InternalRender <0x00058>
      at UnityEngine.Rendering.RenderPipelineManager:DoRenderLoop_Internal <0x001d2>
      at <Module>:runtime_invoke_void_object_intptr_object_AtomicSafetyHandle <0x000c7>
      at <unknown> <0xffffffff>
      at UnityEngine.Camera:Render <0x00090>
      at UnityEditor.SceneViewCameraOverlay:OnGUI <0x0183a>
      at UnityEditor.Overlays.IMGUIOverlay:OnPanelGUIHandler <0x00080>
      at UnityEngine.UIElements.IMGUIContainer:DoOnGUI <0x00a1e>
      at UnityEngine.UIElements.IMGUIContainer:HandleIMGUIEvent <0x0040a>
      at UnityEngine.UIElements.IMGUIContainer:DoIMGUIRepaint <0x0056a>
      at UnityEngine.UIElements.UIR.RenderChainCommand:ExecuteNonDrawMesh <0x00683>
      at UnityEngine.UIElements.UIR.UIRenderDevice:EvaluateChain <0x013a2>
      at UnityEngine.UIElements.UIR.RenderChain:Render <0x006e2>
      at UnityEngine.UIElements.UIRRepaintUpdater:Update <0x0025a>
      at UnityEngine.UIElements.VisualTreeUpdater:UpdateVisualTreePhase <0x000d5>
      at UnityEngine.UIElements.Panel:UpdateForRepaint <0x000aa>
      at UnityEngine.UIElements.Panel:Repaint <0x00272>
      at UnityEngine.UIElements.UIElementsUtility:DoDispatch <0x00186>
      at UnityEngine.UIElements.UIElementsUtility:UnityEngine.UIElements.IUIElementsUtility.ProcessEvent <0x000f2>
      at UnityEngine.UIElements.UIEventRegistration:ProcessEvent <0x0008e>
      at <>c:<.cctor>b__1_2 <0x0002a>
      at UnityEngine.GUIUtility:ProcessEvent <0x00124>
      at <Module>:runtime_invoke_void_int_intptr_intptr& <0x00095>
=================================================================
Received signal SIGSEGV
Obtained 68 stack frames
0x00007ff69daf93c0 (Unity) TerrainDataScriptingInterface::ComputeDetailInstanceTransforms
0x00007ff69c6a2bb7 (Unity) TerrainData_CUSTOM_ComputeDetailInstanceTransforms
0x0000024acbe31e1e (Mono JIT Code) (wrapper managed-to-native) UnityEngine.TerrainData:ComputeDetailInstanceTransforms (UnityEngine.TerrainData,int,int,int,single,UnityEngine.Bounds&)
0x0000024acbe30a93 (Mono JIT Code) VisualDesignCafe.Rendering.Nature.TerrainGrassSpawner:Spawn (int,int,int,single,double,VisualDesignCafe.Rendering.Instancing.InstanceMatrix[]&,single&,single&) (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Nature/TerrainGrassSpawner.cs:103)
0x0000024acbe3024b (Mono JIT Code) VisualDesignCafe.Rendering.Nature.TerrainGrassStreamer:LoadCell (int,VisualDesignCafe.Rendering.Instancing.InstanceStreamer/Cell&) (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Nature/TerrainGrassStreamer.cs:350)
0x0000024acbe1a693 (Mono JIT Code) VisualDesignCafe.Rendering.Nature.TerrainGrassStreamer:UpdateLoadCellsAsync (int&) (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Nature/TerrainGrassStreamer.cs:298)
0x0000024acbe1a273 (Mono JIT Code) VisualDesignCafe.Rendering.Nature.TerrainGrassStreamer:GetBuffersForCellsInRange (UnityEngine.Camera,int,double,VisualDesignCafe.Rendering.Instancing.CullingSettings,System.Collections.Generic.List`1<VisualDesignCafe.Rendering.Instancing.InstanceBuffer>) (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Nature/TerrainGrassStreamer.cs:221)
0x0000024acbe18304 (Mono JIT Code) VisualDesignCafe.Rendering.Instancing.CameraRenderer:RenderObject (VisualDesignCafe.Rendering.Instancing.CameraRenderer/ObjectRenderData,VisualDesignCafe.Rendering.Instancing.SceneRenderSettings&) (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Instancing/CameraRenderer.cs:345)
0x0000024acbe16d03 (Mono JIT Code) VisualDesignCafe.Rendering.Instancing.CameraRenderer:Render () (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Instancing/CameraRenderer.cs:268)
0x0000024ac6d4b0fb (Mono JIT Code) VisualDesignCafe.Rendering.Instancing.FrameRenderer:OnBeginContextRendering (UnityEngine.Rendering.ScriptableRenderContext,System.Collections.Generic.List`1<UnityEngine.Camera>) (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Instancing/FrameRenderer.cs:37)
0x0000024ac6d4b46c (Mono JIT Code) (wrapper delegate-invoke) System.Action`2<UnityEngine.Rendering.ScriptableRenderContext, System.Collections.Generic.List`1<UnityEngine.Camera>>:invoke_void_T1_T2 (UnityEngine.Rendering.ScriptableRenderContext,System.Collections.Generic.List`1<UnityEngine.Camera>)
0x0000024ac6d4af0f (Mono JIT Code) UnityEngine.Rendering.RenderPipelineManager:BeginContextRendering (UnityEngine.Rendering.ScriptableRenderContext,System.Collections.Generic.List`1<UnityEngine.Camera>)
0x0000024ac6d4ae63 (Mono JIT Code) UnityEngine.Rendering.RenderPipeline:BeginContextRendering (UnityEngine.Rendering.ScriptableRenderContext,System.Collections.Generic.List`1<UnityEngine.Camera>)
0x0000024ac6d4919b (Mono JIT Code) UnityEngine.Rendering.Universal.UniversalRenderPipeline:Render (UnityEngine.Rendering.ScriptableRenderContext,System.Collections.Generic.List`1<UnityEngine.Camera>) (at ./Library/PackageCache/com.unity.render-pipelines.universal@14.0.10/Runtime/UniversalRenderPipeline.cs:325)
0x0000024ac6d48899 (Mono JIT Code) UnityEngine.Rendering.RenderPipeline:InternalRender (UnityEngine.Rendering.ScriptableRenderContext,System.Collections.Generic.List`1<UnityEngine.Camera>)
0x0000024aa8e47f33 (Mono JIT Code) UnityEngine.Rendering.RenderPipelineManager:DoRenderLoop_Internal (UnityEngine.Rendering.RenderPipelineAsset,intptr,UnityEngine.Object,Unity.Collections.LowLevel.Unsafe.AtomicSafetyHandle)
0x0000024aa8e48168 (Mono JIT Code) (wrapper runtime-invoke) <Module>:runtime_invoke_void_object_intptr_object_AtomicSafetyHandle (object,intptr,intptr,intptr)
0x00007ffc19f24c1e (mono-2.0-bdwgc) mono_jit_runtime_invoke (at C:/build/output/Unity-Technologies/mono/mono/mini/mini-runtime.c:3445)
0x00007ffc19e5d254 (mono-2.0-bdwgc) do_runtime_invoke (at C:/build/output/Unity-Technologies/mono/mono/metadata/object.c:3068)
0x00007ffc19e5d3cc (mono-2.0-bdwgc) mono_runtime_invoke (at C:/build/output/Unity-Technologies/mono/mono/metadata/object.c:3115)
0x00007ff69d210c44 (Unity) scripting_method_invoke
0x00007ff69d1ee9b4 (Unity) ScriptingInvocation::Invoke
0x00007ff69cdf101f (Unity) ScriptableRenderContext::ExtractAndExecuteRenderPipeline
0x00007ff69cbf1ef6 (Unity) Camera::CustomRenderWithPipeline
0x00007ff69cc083a0 (Unity) Camera::StandaloneCustomRender
0x00007ff69cc0862b (Unity) Camera::StandaloneRender
0x00007ff69cbff0b9 (Unity) CameraScripting::Render
0x00007ff69c22475d (Unity) Camera_CUSTOM_Render
0x0000024bd6d84631 (Mono JIT Code) (wrapper managed-to-native) UnityEngine.Camera:Render (UnityEngine.Camera)
0x0000024bd6affc9b (Mono JIT Code) UnityEditor.SceneViewCameraOverlay:OnGUI ()
0x0000024aa8dc02e1 (Mono JIT Code) UnityEditor.Overlays.IMGUIOverlay:OnPanelGUIHandler ()
0x0000024aa661d8ff (Mono JIT Code) UnityEngine.UIElements.IMGUIContainer:DoOnGUI (UnityEngine.Event,UnityEngine.Matrix4x4,UnityEngine.Rect,bool,UnityEngine.Rect,System.Action,bool)
0x0000024aa7700f5b (Mono JIT Code) UnityEngine.UIElements.IMGUIContainer:HandleIMGUIEvent (UnityEngine.Event,UnityEngine.Matrix4x4,UnityEngine.Rect,System.Action,bool)
0x0000024aa76fe8cb (Mono JIT Code) UnityEngine.UIElements.IMGUIContainer:DoIMGUIRepaint ()
0x0000024aa76fce24 (Mono JIT Code) UnityEngine.UIElements.UIR.RenderChainCommand:ExecuteNonDrawMesh (UnityEngine.UIElements.UIR.DrawParams,single,System.Exception&)
0x0000024aa76fb653 (Mono JIT Code) UnityEngine.UIElements.UIR.UIRenderDevice:EvaluateChain (UnityEngine.UIElements.UIR.RenderChainCommand,UnityEngine.Material,UnityEngine.Material,UnityEngine.Texture,UnityEngine.Texture,single,Unity.Collections.NativeSlice`1<UnityEngine.UIElements.UIR.Transform3x4>,Unity.Collections.NativeSlice`1<UnityEngine.Vector4>,UnityEngine.MaterialPropertyBlock,bool,System.Exception&)
0x0000024aa76f84d3 (Mono JIT Code) UnityEngine.UIElements.UIR.RenderChain:Render ()
0x0000024aa663c5cb (Mono JIT Code) UnityEngine.UIElements.UIRRepaintUpdater:Update ()
0x0000024a5f0e8bf6 (Mono JIT Code) UnityEngine.UIElements.VisualTreeUpdater:UpdateVisualTreePhase (UnityEngine.UIElements.VisualTreeUpdatePhase)
0x0000024bda18ad2b (Mono JIT Code) UnityEngine.UIElements.Panel:UpdateForRepaint ()
0x0000024bda1894b3 (Mono JIT Code) UnityEngine.UIElements.Panel:Repaint (UnityEngine.Event)
0x0000024bda188647 (Mono JIT Code) UnityEngine.UIElements.UIElementsUtility:DoDispatch (UnityEngine.UIElements.BaseVisualElementPanel)
0x0000024bda188453 (Mono JIT Code) UnityEngine.UIElements.UIElementsUtility:UnityEngine.UIElements.IUIElementsUtility.ProcessEvent (int,intptr,bool&)
0x0000024bda18826f (Mono JIT Code) UnityEngine.UIElements.UIEventRegistration:ProcessEvent (int,intptr)
0x0000024bda18818b (Mono JIT Code) UnityEngine.UIElements.UIEventRegistration/<>c:<.cctor>b__1_2 (int,intptr)
0x0000024bda1873f5 (Mono JIT Code) UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
0x0000024bda187536 (Mono JIT Code) (wrapper runtime-invoke) <Module>:runtime_invoke_void_int_intptr_intptr& (object,intptr,intptr,intptr)
0x00007ffc19f24c1e (mono-2.0-bdwgc) mono_jit_runtime_invoke (at C:/build/output/Unity-Technologies/mono/mono/mini/mini-runtime.c:3445)
0x00007ffc19e5d254 (mono-2.0-bdwgc) do_runtime_invoke (at C:/build/output/Unity-Technologies/mono/mono/metadata/object.c:3068)
0x00007ffc19e5d3cc (mono-2.0-bdwgc) mono_runtime_invoke (at C:/build/output/Unity-Technologies/mono/mono/metadata/object.c:3115)
0x00007ff69d210c44 (Unity) scripting_method_invoke
0x00007ff69d1ee9b4 (Unity) ScriptingInvocation::Invoke
0x00007ff69d1e95c5 (Unity) ScriptingInvocation::Invoke<void>
0x00007ff69d341eba (Unity) Scripting::UnityEngine::GUIUtilityProxy::ProcessEvent
0x00007ff69dd3a098 (Unity) GUIView::ProcessRetainedMode
0x00007ff69e309da0 (Unity) GUIView::OnInputEvent
0x00007ff69dd39fe3 (Unity) GUIView::ProcessInputEventFromAPI
0x00007ff69dd39eb8 (Unity) GUIView::ProcessInputEvent
0x00007ff69e302fcc (Unity) GUIView::DoPaint
0x00007ff69e30bccc (Unity) GUIView::RepaintViews
0x00007ff69de58c8e (Unity) PlayerLoopController::InternalUpdateScene
0x00007ff69de6581d (Unity) PlayerLoopController::UpdateSceneIfNeededFromMainLoop
0x00007ff69de63b01 (Unity) Application::TickTimer
0x00007ff69e2de67a (Unity) MainMessageLoop
0x00007ff69e2e3550 (Unity) WinMain
0x00007ff69f6c594e (Unity) __scrt_common_main_seh
0x00007ffcbdae7344 (KERNEL32) BaseThreadInitThunk
0x00007ffcbf5e26b1 (ntdll) RtlUserThreadStart

To Reproduce Steps to reproduce the behavior:

  1. Add a terrain with Nature Renderer (default settings are fine)
  2. Add the following script to the terrain game object:
    using UnityEngine;

    public class TerrainSettings : MonoBehaviour
    {

        public Vector3 PatchBoundsMultiplier  = new(1.5f, 1.5f, 1.5f);

        private void OnEnable()
        {
            this.GetComponent<Terrain>().patchBoundsMultiplier = this.PatchBoundsMultiplier ;
        }
   }
  1. Press play. I can't find any pattern to when it crashes but it does seem to crash more often when you're in the scene view.

Expected behavior

Patch bounds should be incorporated into the grass streaming calculations and not crash.

Screenshots If applicable, add screenshots to help explain your problem.

Project(please complete the following information):

System (please complete the following information):

Additional context

Up to Unity 2022.3.22 Nature Renderer would actually crash in both editor/standalone builds much more frequently (almost every time), but Unity seems to have addressed this somewhat in 2022.3.22. Unfortunately though it's still crashing from time to time.

https://issuetracker.unity3d.com/issues/crash-on-terraindatascriptinginterface-computedetailinstancetransforms-when-calling-computedetailinstancetransforms-with-incorrect-parameter-values

KyleBanks commented 3 months ago

Also seeing the following related exception thrown quite frequently:

Patch indices out of bounds, patchX:1 patchY:18 patches size:256
UnityEngine.StackTraceUtility:ExtractStackTrace ()
VisualDesignCafe.Rendering.Nature.TerrainGrassSpawner:Spawn (int,int,int,single,double,VisualDesignCafe.Rendering.Instancing.InstanceMatrix[]&,single&,single&) (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Nature/TerrainGrassSpawner.cs:103)
VisualDesignCafe.Rendering.Nature.TerrainGrassStreamer:LoadCell (int,VisualDesignCafe.Rendering.Instancing.InstanceStreamer/Cell&) (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Nature/TerrainGrassStreamer.cs:350)
VisualDesignCafe.Rendering.Nature.TerrainGrassStreamer:UpdateLoadCellsAsync (int&) (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Nature/TerrainGrassStreamer.cs:296)
VisualDesignCafe.Rendering.Nature.TerrainGrassStreamer:GetBuffersForCellsInRange (UnityEngine.Camera,int,double,VisualDesignCafe.Rendering.Instancing.CullingSettings,System.Collections.Generic.List`1<VisualDesignCafe.Rendering.Instancing.InstanceBuffer>) (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Nature/TerrainGrassStreamer.cs:218)
VisualDesignCafe.Rendering.Instancing.CameraRenderer:RenderObject (VisualDesignCafe.Rendering.Instancing.CameraRenderer/ObjectRenderData,VisualDesignCafe.Rendering.Instancing.SceneRenderSettings&) (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/VisualDesignCafe.Rendering.Instancing/CameraRenderer.cs:346)
VisualDesignCafe.Rendering.Instancing.CameraRenderer:Render () (at C:/Visual Design Cafe/Projects/Nature Renderer/Unity/Nature Renderer 2022/Assets/Visual Design Cafe/Nature Renderer/Plugins/Runtime/V
maxplooi commented 1 month ago

Thank you for reporting this. I looked into it and it should now be fixed in the latest version (2022.0.4) which I just published. You can go to Help > Nature Renderer > Check for Updates to download the latest version. Please give it a try and let me know if you have any further issues.