VOXELFORMAT: add streaming OBJ export for large models - #805
Open
Tudi wants to merge 2 commits into
Open
Conversation
Collaborator
|
i would really prefer general solutions here and not per-format solutions were every other mesh based format could benefit from, too maybe a generic streaming interface for the MeshFormat (not sure how that would work, because it would need some pre-production to get position locality to stream the triangles in the appropriate order (like the vertex cache on the gpu) |
Contributor
Author
|
voxformat OGT library accepts full scenes as input. Just one example. I hated the patch so much I canceled the PR myself. Not sure how many formats can work with stream processing/writing. |
Collaborator
|
for ogt_vox we have an issue here: jpaver/opengametools#80 |
Adds a low-memory streaming OBJ export path that processes nodes one at a time with chunked surface extraction (256^3 chunks). Bypasses the merge-all-nodes path that can require massive memory allocations for large scenes. Enabled via voxformat_streamprocessobj cvar.
Tudi
force-pushed
the
improvement/streamobj
branch
from
April 1, 2026 09:37
55a5aa0 to
c9371d6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
sceneGraph.merge()) that allocates the full bounding box as a singleRawVolume- prohibitive for large scenes (e.g. 1800+ nodes, ~7GB loaded would require ~160GB merge allocation)voxformat_streamprocessobjcvar (default false, preserves existing behavior)SeekableWriteStream- no in-memory buffering of the full OBJTest plan
voxformat_streamprocessobj false(default) - verify identical output to current behaviorvoxformat_streamprocessobj true- verify correct OBJ output with all nodes properly positionedvoxformat_transform_mesh truecorrectly applies world transforms in streaming mode