KhronosGroup / glTF

glTF – Runtime 3D Asset Delivery
Other
7.12k stars 1.13k forks source link

Comment period for Draco extension #1114

Open FrankGalligan opened 6 years ago

FrankGalligan commented 6 years ago

Hello everyone,

We have been working on adding Draco (geometry compression) to glTF 2.0 as an extension. The two major parts that need to be finalized are the glTF 2.0 Draco extension and the Draco bitstream specification. We would like to close the comments and finalize the extension for ratification by 10/22.

Please post any comments to this issue.

Thank you, Frank Galligan

FrankGalligan commented 6 years ago

From Alexey: The way how EdgeBreaker Connectivity section is laid out is optimized for encoders: "Split Data" section is located at the end because its contents isn't known until symbols are written. I'd argue that layout should be changed in favor of decoders (i.e. write "Split Data" first), because not every runtime environment has a notion of "file pointer" - e.g., on the web, random resource seek is not always an option so client will have to postpone decoding until "Split Data" arrival.

It reminds me the situation with "progressive MP4 streaming" ("moov" and "mdat" boxes): videos that start with "moov" could play almost instantly; otherwise client has to make several HTTP Range requests or download file entirely (not every server setup allows Range requests).

FrankGalligan commented 6 years ago

From Alexey: connectivity_method from "6.1 ParseSequentialConnectivityData()" seems to be unused in the spec. Yet, in the source code that parameter enables RANS indices compression.

lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
FrankGalligan commented 6 years ago

At this point I think we have addressed all open items. If anyone has any issues/comments/questions please post them here ASAP.

Thanks, Frank

lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago

Small question regarding f[n]:

When bit reading is finished it will always pad the read to the current byte.

lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
pjcozzi commented 6 years ago

Wow, thanks for all the feedback here!!! @FrankGalligan please close this when ready.

lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
zellski commented 6 years ago

Wow. I can't decide if I should fear or long for the day when @lexaknyazev does code review on anything I wrote. 🥇

FrankGalligan commented 6 years ago

The spec should not be using pointers. Removed.

lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
lexaknyazev commented 6 years ago
JeremieA commented 6 years ago

Hello, Great work on this extension and detailed format specification ! I know the comment deadline is long past, however while implementing an "inspector" to understand what the compression was doing, I came across 2 issues in the current specification :

I verified that both changes do match the c++ code.

It is possible to reproduce a test case for the second issue using the just-released online gltf tools:

  1. drag&drop the (uncompressed) Duck sample model
  2. Click Tools, then Draco Compressor
  3. select trace in the draco compressor sub-menu, then reclick on Draco Compressor (as the mesh is already compressed, it goes to an inspection mode, using the inspector linked above to extract info about the encoding)
  4. you should see on the console a trace of the decoding steps for the connectivity
  5. select currentSpec in the draco compressor sub-menu, then reclick on Draco Compressor
  6. Now it should fail with an exception in parseDraco

I hope this helps :)

pjcozzi commented 6 years ago

I know the comment deadline is long past...

@JeremieA thanks for the careful review. It is never too late to make "bug fixes" to the spec and bigger changes can always go into a future version. @FrankGalligan and company will know best where things should land.

pjcozzi commented 6 years ago

@FrankGalligan should I leave this open until all the checkboxes are checked? Do you want to move any tasks to new issues in the Draco GitHub repo?

pjcozzi commented 6 years ago

Bump @FrankGalligan

should I leave this open until all the checkboxes are checked? Do you want to move any tasks to new issues in the Draco GitHub repo?

lexaknyazev commented 6 years ago

@FrankGalligan

lexaknyazev commented 6 years ago

@FrankGalligan

lexaknyazev commented 6 years ago

@FrankGalligan

lexaknyazev commented 6 years ago

@FrankGalligan

lexaknyazev commented 6 years ago

@FrankGalligan

pjcozzi commented 6 years ago

@FrankGalligan any update on the above questions from @lexaknyazev?