KhronosGroup / glTF

glTF – Runtime 3D Asset Delivery
Other
7.19k stars 1.14k forks source link

glTF-Generator-Registry #1297

Closed donmccurdy closed 6 years ago

donmccurdy commented 6 years ago

Had the crazy idea of creating an open, machine-readable registry of tools that write glTF, indexed by asset.generator ID globs. I'm thinking of using it so that when users drag a model into my viewer and validation fails, I can show a URL where they should report the bug. Someone using a wrapper around other tools (web version of COLLADA2GLTF, for example) may not know where to report the problem otherwise.

Since other tools (validator, VSCode extension, Facebook?) could potentially use this, thought I'd put this in a new repository and publish to NPM later:

https://github.com/donmccurdy/glTF-Generator-Registry

If there's interest in making it more official-ish, I'm also happy to transfer it over as KhronosGroup/glTF-Generator-Registry.

zellski commented 6 years ago

Love this! Thank you for the imitative. We’ll have a chat at FB about using such information.

CentaurMare commented 6 years ago

My current version of my Sketchup Exporter has generator as 'Sketchup glTF Exporter by Centaur' which would work for a registry.

Microsoft has a version number in theirs, 'Microsoft GLTF Exporter 2.2.8-b3', which might be problematic for your registry, but then you can't really report issues to Microsoft.

donmccurdy commented 6 years ago

Any PRs to my fledgling repo would be welcome. 😁

Microsoft has a version number in theirs, 'Microsoft GLTF Exporter 2.2.8-b3'...

The Kupoman Blender Exporter does the same. I was planning to use globs, like Microsoft GLTF Exporter *. We could also consider including an asset.generatorVersion field in the specification while we're looking at https://github.com/KhronosGroup/glTF/issues/839, and asking tool authors to change their IDs, but it's all the same to me.

CentaurMare commented 6 years ago

Since you are considering changing the asset field in the spec, why not add an asset.generatorIssues field so that the generator can include a url or email address?

donmccurdy commented 6 years ago

We could do that yes, but I like that the registry could even include a homepage, description, etc. without adding any weight to the asset. And I sort of doubt generatorVersion will happen either, since it assumes these tools are actually versioned (and do we require semver, or something?). So wildcards it is, heh. This also aligns nicely with proposed asset.license, which would use SPDX IDs that can be mapped to more information about the license.

Kupoman commented 6 years ago

If there is a better format to follow for generator string, I would be happy to change blendergltf to follow it. I would like to retain the version information some where in the asset data.

bghgary commented 6 years ago

Microsoft has a version number in theirs, 'Microsoft GLTF Exporter 2.2.8-b3', which might be problematic for your registry, but then you can't really report issues to Microsoft.

Users can report issues by using the feedback hub or the "Give feedback" buttons/links inside the apps.

donmccurdy commented 6 years ago

If there is a better format to follow for generator string, I would be happy to change blendergltf to follow it. I would like to retain the version information some where in the asset data.

I agree, I'm glad you're including version information and would like more exporters to do this. For the moment there is no better place to put the version string. I'll put a note in #839 but I don't think it's a pressing issue.

Users can report issues by using the feedback hub or the "Give feedback" buttons/links inside the apps.

Is it possible to link through to the feedback hub app? Or I can just include some kind of text instructions if not.

bghgary commented 6 years ago

Is it possible to link through to the feedback hub app?

I think it is possible through a URL, but I'm not sure how to do it yet. I think text instructions is fine for now. Use Apps Category and Paint 3D Subcategory in the Feedback Hub.

pjcozzi commented 6 years ago

Killer idea @donmccurdy, let's do it!

If you are OK with it, I think it would be great for this to live in the Khronos GitHub organization.

@outofcontrol can transfer the repo if you agree.

donmccurdy commented 6 years ago

Happy to transfer it over — @outofcontrol I don't have that permission on the GitHub organization but let me know if I should do anything here.

lexaknyazev commented 6 years ago

It'd be great if each software that alters glTF asset adds itself to generator (or some other field). E.g., a model has initially been generated by Unity exporter and then it has been optimized or compressed by some pipeline tool.

zellski commented 6 years ago

@lexaknyazev I was just wondering about that. Facebook will shortly tear apart and reassemble all uploaded glTF for internal distribution. Right now I replace the generator entirely, but adding makes some sense.

zellski commented 6 years ago

Additionally, should we advocate some common pattern for <identifier> vs <version>? Perhaps:

"asset": {
  "generator": "Facebook Internal glTF Transmutator (0.99.3); Microsoft GLTF Exporter (2.2.8-b3)"
  ...
}

Alternately we can wait for 2.1 and do:

"asset" {
  "generators": [{
     "id": "Facebook Internal glTF Transmutator",
      "version": "0.99.3"
    }, {
     "id": "Microsoft GLTF Exporter",
      "version": "2.2.8-b3"
    }]
}
SamuelTallet commented 6 years ago

I used a comma as generator separator in my plugin since it performs after another plugin. "asset":{"generator":"Sketchup glTF Exporter by Centaur, PBR extension for SketchUp"}

lexaknyazev commented 6 years ago

@zellski The second option (with array) may work better for debugging purposes. It could have more fields like:

"asset" {
  "generators": [{
      "id": "Facebook Internal glTF Transmutator",
      "version": "0.99.3",
      "cmdline": "--option_a 24 --use_flag_b"
    }, {
      "id": "Microsoft GLTF Exporter",
      "version": "2.2.8-b3",
      "arch": "arm64"
    }]
}

Imo, comma-separated string is a fine start for now.

Marlamin commented 6 years ago

Could something like this also be used/adapted for importers/apps that can open glTF? I'm working on a new site for my exporter and it would be neat to show an automated up-to-date list of apps on my site that can import glTF models exported with my exporter. I often get the question of "but in what can I use these files" and something like this (but the other way around) could be the answer.

donmccurdy commented 6 years ago

I'm not crazy about the idea of comma-separated generators in existing field, to me that seems similar to other requests in #839 that can be handled with asset.extras.generators = [...] for now and addressed in a future spec update or extension later.

@Marlamin what kinds of importers/apps do you have in mind? The README of this repo lists many tools, varying from optimizers, validators, engines, to end-user applications. The current/easy option would be to link to any sections there that seem appropriate.

Not sure how helpful a flat JSON list of all of those tools would be, without metadata to filter it down somehow? Depends on your use case I guess but I imagine you want to list a few good examples rather than an exhaustive list of things that read glTF.

Marlamin commented 6 years ago

@donmccurdy Mostly 3D applications (some of which hopefully getting official support at one point) such as Blender, 3DS Max, Cinema 4D, Paint 3D etc. Stuff end-users/non-devs can use to manipulate/use models in. I guess you're right in saying that'll vary per use case (even within my userbase) and it'll be tough to make a good list for everyone without having a ton of filters/metadata. Linking to the readme should be fine as an initial solution but a lot of it is stuff meant for devs, not users. I'll think about this some more and maybe get something going myself as I'll need such a list at one point anyways (when glTF adoption grows beyond the list in readme, which I feel it might soon). Great idea, can't wait to get my exporter to a state where it's usable enough to be added to this list. :)

donmccurdy commented 6 years ago

Moved to KhronosGroup/glTF-Generator-Registry (thanks @outofcontrol!), and open for pull requests. Will likely publish this to NPM when the schema is stable.

when glTF adoption grows beyond the list in readme, which I feel it might soon...

Yeah, keeping the README up to date with posts from https://github.com/KhronosGroup/glTF/issues/1058 is already pretty challenging. Making a useful and well-organized list of tools beyond generators is a harder problem. 😅

donmccurdy commented 6 years ago

Registry is up and useable, and I'm using it to provide links to docs and bugs in https://gltf-viewer.donmccurdy.com/ now. The list is not exhaustive, but covers everything I could find quickly. I think this bug can be closed, but PRs and suggestions are still welcome.

screen shot 2018-07-11 at 8 15 28 pm screen shot 2018-07-11 at 8 15 30 pm
pjcozzi commented 6 years ago

@donmccurdy can you please add a link to the new repo from the main glTF README.md?