The 3D Tiles Validator is still actively maintained!
For the case that someone is curious about the “history” of the 3D Tiles Validator (this is only a very rough summary):
Once upon a time, there was a 3d-tiles-validator repository. This was later renamed to 3d-tiles-tools, combining the “validator” and general “tools”. Later, this was extended with the “Samples Generator” functionality (that us used for generating some of the CesiumJS spec data). Then the whole project was dormant for a while (this is what you might refer to with the “non-maintained status”).
But ~3 years ago, I picked up the the work here. I revived the core of the 3d-tiles-tools project, which was largely a rewrite of the existing functionality with more modern TypeScript. The validation part was essentially rewritten and put into the dedicated 3d-tiles-validator repo. (Yes, this repo already existed, before it was renamed to 3d-tiles-tools … some back and forth here
). The 3d-tiles-validator now uses the 3d-tiles-tools as a dependency.
(The “Samples Generator” was also extracted into a 3d-tiles-samples-generator repo, but this one is indeed unmaintained right now)
Back to the more specific points:
A bit of both, and more.
-
The validator itself is not tremendously large.
-
But: The validator depends on the 3d-tiles-tools, which is a bit larger, and could raise the question of which parts of this should ~“also be part of CesiumJS”. This may be obsolete due to the following points…
-
Both the validator and the tools are using TypeScript, so they can not directly be part of CesiumJS anyhow.
(I’ve been swearing quite a bit about that CommonJS/AMD/UMD/ESM/ES20XY stuff. They really messed that up)
-
Both the tools and the validator use some structures that are non-browser, but I tried to keep the scope of that narrow.
(There is some pragmatic ResourceResolver interface that is supposed to be an abstraction of either file or network resource access - so it is largely “prepared” for separating out the NodeJS/file-specific parts, but right now, the file-specific parts are still part of the package itself. There are some “legacy” parts, related to 3TZ validation, that are hard-wired to use files, but that could be carved out with reasonable effort - 3TZ is not relevant for CesiumJS after all)
-
Maybe the most important point: I think that the scope and goals are ~“too different”
The last point refers to what I consider the primary use-cases:
The validator will usually be used to fully validate some 10GB/10000files tileset that was generated by some tiler. The validator fully traverses the whole tileset(!), and calls the ‘glTF-Validator’ for each content(!). This is usually slow, and of course, should definitely not be done in CesiumJS ~“before loading a tileset”. The whole idea of 3D Tiles, aiming at streaming data, will confront a runtime engine with this challenge: I’m downloading something right now. It might contain errors. I have to deal with that.
This comes back to the specific issue of the error handling in CesiumJS:
The error handling does not seem to be very consistent. I started some local tests, and there are some observations for now:
- There are cases where an invalid GLB (one that is invalid according to the spec and the glTF-Validator!) is silently loaded and works. That’s … OK-ish, I guess. CesiumJS is trying to ~“make the best of it”, and succeeds (in this case)
- There are cases where an invalid GLB/B3DM causes and error, and that error causes the
tileFailed event to be triggered. That’s the right behavior. That’s what the tileFailed event is for.
- There are cases where a valid GLB causes an error. I tried this out with the exact example that sparked this thread, namely an invalid
sampler.wrapS mode. I recently opened Consider a fallback for invalid sampler wrap modes · Issue #12781 · CesiumGS/cesium · GitHub . This is an issue for itself
- Regardless of whether that GLB is valid or not: This is one example of an error that does not trigger the
tileFailed event. But it should trigger that. So that’s an independent issue.
Until now, my tests focussed on ~“invalid tile content”. One could probably come up with more test cases. And one could not only come up with them, I already did come up with them - for the validator specs
I usually did not try to load (all of) these files in CesiumJS. But it could be interesting to see how CesiumJS behaves in these cases (even though there certainly is an overlap to the CesiumJS specs).
In addition to “invalid content”, there are the “Rendering has stopped”-errors. Two years ago, I pointed that out, with a dummy example:

I think that it would be nice if that rendering error could be caught more defensively, and handled like this:
But… that may be difficult: When there is an actual WebGL error, then the WebGL context may be irrecoverably “broken”, so this may not be applicable in all cases.
(Such a “Toast-Popup” could, however, still be nice even for handling tileFailed errors. Right now, the default is that it prints the error to the console (in most cases), and even when establishing a tileFailed handler, it’s not easy to inform the user about the error)