Skip to content

Conversation

@dknezevic
Copy link

@dknezevic dknezevic commented Aug 20, 2025

In order for data validation checks pass when using 3d-tiles-validator, it is required that the tile bytelength is packed to 8-byte boundary.
In order to do this, we must pad the potentially unbounded gltf file so that the validation check pass.
In the latest discussions it is clarified that padding should be added to the end of the .b3dm tile instead od padding the binary gltf file.

What the spec requires (so the validator stops complaining):

  • Tile byteLength: must be aligned to 8 bytes.
  • GLB inside b3dm: must start and end on an 8-byte boundary (relative to the start of the b3dm). This is in addition to glTF’s own 4-byte chunk rules.
  • JSON sections (Feature/Batch tables): the JSON must end on an 8-byte boundary and is padded with space bytes (0x20).
  • Binary sections (Feature/Batch tables): must start and end on an 8-byte boundary and are padded with 0x00.

What is done:

  • Because the b3dm header is 28 bytes (28 ≡ 4 mod 8), the usual trick is:
  1. Feature Table JSON length ≡ 4 mod 8 (e.g., "{}" + 2 spaces → 4 bytes), so that 28 + FTJSON ends on an 8-byte boundary.
  2. All following sections (FT binary, BT JSON, BT binary) end on 8-byte boundaries (pad with 0x00 for binaries, 0x20 for JSON).

That guarantees the GLB starts on an 8-byte boundary.
Additionally ensure the GLB length is a multiple of 8, or pad with 0x20 after the .glb data

this should fix #77 and #46

@dknezevic
Copy link
Author

The 'children' array should contain at least 1 element checkin:
According to this discussion, the children array should not be empty. Instead, it should not be defined.

Updated TilingStage to create it only if it exists in order to clear the warning in the validator.
Created separate commit so that you can cherry-pick if needed.

@dknezevic
Copy link
Author

Fixed BUFFER_VIEW_TARGET_MISSING warning:
bufferView.target should be set for vertex or index data.

(external) Obj2Gltf converter does not define bufferView.target property for UvAccessor and this creates a warning hint in the validator.
The only suspicious thing here is that the author of ObjConvert commented out this line so it could have some other repercussions.
Having in mind that this is not deal-breaker, and just a hint, i might be ok to skip this commit if you find it suspicious too.
I personally, did not find any issues with the tiles created using this fix

@HeDo88TH
Copy link
Collaborator

Good work 👍

@HeDo88TH HeDo88TH merged commit 96e9af2 into OpenDroneMap:master Aug 22, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Obj2Tiles-generated B3DM tiles fail 3D-Tiles content validation (exit code 2)

2 participants