Fix Draco decoding for vertex colors that are normalized UNSIGNED_BYTE
or UNSIGNED_SHORT
#12417
+204
−15
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.
Description
The draco decoder incorrectly decodes vertex colors that are normalized
UNSIGNED_BYTE
orUNSIGNED_SHORT
.The fix is to not hardcode
attributesToSkip
indecodeDraco
. If vertex colors were originally normalizedUNSIGNED_BYTE
orUNSIGNED_SHORT
and the attribute transform is skipped they will be read as an unnormalizedINT
instead of normalizedUNSIGNED_BYTE
orUNSIGNED_SHORT
. So the fix is to only skip the attribute transform if the vertex colors were quantized fromFLOAT
.Most of the other changes are passing
primitive
toGltfDracoDecoder
.Issue number and link
Testing plan
See this sandcastle that loads two tilesets, one with normalized
UNSIGNED_BYTE
vertex colors, and another withFLOAT
vertex colors. The first tileset looks incorrect inmain
and correct on this branch. The second tileset looks correct on both.I spot checked a few other sandcastle that have Draco compressed models like Google 3D Tiles and the Montreal Point Cloud and those still seem fine.
Author checklist
CONTRIBUTORS.md
CHANGES.md
with a short summary of my change