24-09-2026, 07:47 PM
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!
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!
