Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

This error will occur when creating bvh using the geometry of a relatively large file. #663

Closed
Sea-DH1 opened this issue May 10, 2024 · 5 comments
Labels
question Further information is requested

Comments

@Sea-DH1
Copy link

Sea-DH1 commented May 10, 2024

Describe the bug

I have a large stl file, more than 1GB in total, and when using computeBoundsTree, I get this error
123

Here is the line of code in bvh that prompts the error
image

Can load files without using bvh. This is the file information.
image

@Sea-DH1 Sea-DH1 added the bug Something isn't working label May 10, 2024
@gkjohnson gkjohnson added question Further information is requested and removed bug Something isn't working labels May 10, 2024
@gkjohnson
Copy link
Owner

gkjohnson commented May 10, 2024

With over 260 million float elements for both the position and normal buffers you're model is over 2GB in memory - that's just about at the memory cap for most desktop browser tabs. There's not a lot this project can do if there's no browser memory left and it crashes on a buffer allocation.

Depending on your use case you can artificially increase the memory cap with command line flags and preprocess the model BVH to save to disk before loading it so it doesn't have to be generated on load.

@Sea-DH1
Copy link
Author

Sea-DH1 commented May 11, 2024

Hello, how to preprocess the model BVH?

@gkjohnson
Copy link
Owner

Hello, how to preprocess the model BVH?

There's no prebuilt tool for this so you'll have to implement the file storage and loading yourself. But the basic process would be:

  • Generate the BVH offline using something like Node or Puppeteer with a higher memory cap
  • Use the serialize to get a minimal, serialized version of the bvh and associated buffers.
  • Save the data and buffers in an optimal way (ie don't just JSON stringify because the typed arrays will be expanded to arrays)
  • Load the bvh file into the browser, read it into an object shaped the same as the originally serialized version.
  • Deserialize the BVH using the deserialize function.

@Sea-DH1
Copy link
Author

Sea-DH1 commented May 13, 2024

When using Serialization and Deserialization, an error will be reported when intersectsGeometry, indirect is true

This is a demo
demo

@gkjohnson
Copy link
Owner

Thanks for the easy repro. Just fixed the issue in #664 - it'll be available in the next release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants