-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Add GEO_LOD vendor extension for per-part LOD #2500
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Details:
More important: It is still not entirely clear to me what exactly can be described with this extension what can not be described with |
Thanks for the feedback. Once again thanks for your time and input (and sorry for my newbie errors!:-) |
Prefixes can be registered by companies or organizations that want a "namespace" for their extension. There is no strong need to change the name now (and no need to immediately register a prefix). In doubt, another prefix can be assigned later, when the exact contents and scope are sorted out. Related:
Sure, everybody can suggest an extension. The question is rather how widely it will be adopted. Implementing a new extension can be a considerable effort for people who develop glTF viewers and libraries. So there usually must be something "subtantially new" in that extension (or something "substantially better than others"). This does not mean that there is "nothing substantially new/better" here! But I'm not deeply familiar with I roughly understand the additional option of switching based on distance (in addition to the screen coverage). I could imagine that, roughly speaking, everything that can be achieved with the distance-based switching can also be achieved with a coverage-based switching. But that may be oversimplified. In a similar vein: You mentioned a "hard-wired node structure" and the proposed extension being "more free-form". Focussing on the geometry for now: The structural difference seems to be:
Roughly as in
vs
I could imagine that switching whole scene graphs for different LOD levels offers some interesting options. For example, one could completely omit some meshes in the "low" level. But beyond that (an attempt to understand the differences), I can probably not provide toooo much substantial feedback. Maybe others will chime in here as well. (This could be people who already have implemented |
The main difference is that this Lod extension can be on any (non-mesh) grouping node and all the children of the node (the subtree routed at the LOD node) are considered part of that Lod and will be active/visible when the parent Lod passes its switchinout values. for example: if you consider this more complex hierarchy... node "root" //root node with (4 children) if distance to lod center is 14 units then during traversal "high_lod" is active as is I'm not suggesting that this nesting is the best way to do this (the "ultra_detail" node does that help? :-) |
I think that I see the point - with the main aspect being that it's possble to switch in/out a whole node hierarchy. With In terms of CAD, hierarchy, and assemblies, I could imagine the example of the engine of a car (maybe consisting of hundreds of meshes, maybe even animated), and at some point, replacing that with a simple box. |
Thats it!! :-) |
FWIW, the intention of |
Thanks mate, |
When glancing over it, I actually misread the example from the README (but it is in fact described clearly - should have taken more time to read it thoroughly before chiming in here). Given that it is possible to switch out whole hierarchies for different LODs, I'm not sure what the remaining differences are to this proposal, except for the 'distance'-based switching criterion. |
MSFT_lod doesn't strictly specify what criterion is used to switch. We put the screen coverage values in |
I'm not sure I follow. The picture you showed can be represented in MSFT_lod as far as I can tell, but I'm probably not understanding what you mean. Another consideration is that if this extension is intended to be in |
In visual-simulation toolchains (e.g. OpenFlight/Aechelon/Geo STUDIO), it’s routine to define per-part LOD variants directly in the model hierarchy. You might have a tank’s chassis split into high/med/low meshes under one grouping node, its turret under another, its wheels under yet another—all within a single file. No “root-only” swapping, and no need to carve your model into separate glTFs for each LOD.
By contrast, glTF’s built-in LOD patterns (e.g. MSFT_lod) expect a single node that is the LOD switcher, listing mesh indices. That works, but it can’t express “here’s a chassis, with three mesh children,” or “here’s a turret behavior, with its own LOD children,” in one neat file.
Enter GEO_LOD—a small vendor extension that you attach to any grouping node (having no mesh of its own) whose children (the entire sub-tree parented by the LOD node) are considered the LOD variant for that part. Your loader/runtime software then simply activates that LOD node (and its children) based on it passing the distance or screen-coverage switchin & switchout criteria. Any dynamic transformation applied above the LOD in the hierarchy will automatically be applied to the active LOD.