Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Help  [Obi Fluid 7] URP Fluid Renderer Feature causes UniversalRenderPipeline..ctor
#1
Hi, my English isn't very good, so I used AI to translate and summarize this article. Thanks for understanding!

My setup
- Obi Fluid 7.x, Unity 6000.3.24f1, URP, IL2CPP, arm64, Managed Stripping = Minimal, Development build.
- Device: Samsung Galaxy S23 (SM-S9180), Adreno 740, Android 14. Repro on both Vulkan 1.3 and OpenGL ES 3.2.
- In the Editor (desktop, Compute backend) everything works perfectly (~120 fps).

Problem
On device the screen is black. Logcat shows this NullReferenceException repeating every frame:
NullReferenceException: Object reference not set to an instance of an object.
  at UnityEngine.Rendering.Universal.UniversalRenderPipeline..ctor (UniversalRenderPipelineAsset asset)
  at UnityEngine.Rendering.Universal.UniversalRenderPipelineAsset.CreatePipeline ()
  at UnityEngine.Rendering.RenderPipelineAsset.InternalCreatePipeline ()
  at UnityEngine.Rendering.RenderPipelineManager.TryPrepareRenderPipeline (...) at UnityE
The whole URP pipeline fails to be created, so nothing renders.

Key finding — it is the Obi Fluid Renderer Feature
- With the Obi Fluid Renderer Feature ENABLED on the URP renderer → the NRE above → black screen.
- With the feature DISABLED → URP renders fine (I can see the scene and the raw fluid particles), no NRE.
- Reproduced with both Compute and Burst backends.
- Reproduced with both Vulkan and OpenGL ES 3.2.
- The stack trace contains no Obi frames or line numbers (IL2CPP), just URP internals.

The simulation itself runs on device
Obi's own warning appears in logcat: "Hashtable usage should be below 50% ... Increase max surface chunks in your ObiSolver" (from Obi...<Render>), so the solver + surface mesher are running — the crash is specifically in the URP renderer-feature / pipeline construction.

Separate issue I already worked around (maybe related)
With the Compute backend I first got:
ArgumentException: The total size of the graphics buffer (150994944 bytes) exceeds the maximum buffer size. Maximum supported buffer size: 134217728 bytes (mobile's 128 MB GPU buffer cap).
I traced this to the surface mesher buffers (maxVoxels = maxSurfaceChunks * chunkRes^3). Lowering ObiSolver.maxSurfaceChunks from the default 32768 to 16384 removed that ArgumentException. But the UniversalRenderPipeline..ctor NRE (above) still remains.

Question
Why does the Obi Fluid Renderer Feature make UniversalRenderPipeline..ctor throw a NullReferenceException on this Android device, and how can I get the URP fluid renderer to work on mobile? Is there a known fix / required setting / shader change for Adreno / Unity 6 / URP 17?

Thanks!
Reply