Skip to content
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

Invalid fields in sample models #556

Closed
lexaknyazev opened this issue Mar 21, 2016 · 16 comments · Fixed by #579
Closed

Invalid fields in sample models #556

lexaknyazev opened this issue Mar 21, 2016 · 16 comments · Fixed by #579

Comments

@lexaknyazev
Copy link
Member

I've found some invalid data in sampleModels/duck/glTF/duck.gltf while testing my glTF loader.

  1. asset.version is int instead of string L72
  2. aspectRatio is spelled as aspect_ratio L99
@pjcozzi
Copy link
Member

pjcozzi commented Mar 21, 2016

Good catch, thanks @lexaknyazev!

@tfili I noticed this in several sample models, including some from Cesium (but not all). Do you think these were converted with an old version of COLLADA2GLTF or is this still a bug in COLLADA2GLTF? In either case, can you update the models, including the glb versions?

@lexaknyazev - btw, what glTF loader are you working on?

@lexaknyazev
Copy link
Member Author

Just tested other samples (except MaterialsCommon and Binary) for validity. Found two more issues:

  1. node.camera in boxAnimated/glTF/glTF.gltf is an empty string (according to schema it must be undefined or at least 1 char length).
  2. techniques.technique2.states.functions.depthMask in vc/glTF/vc.gltf is boolean instead of boolean[1]

Here is validator's output:

Loading 2_cylinder_engine/glTF/2_cylinder_engine.gltf...
[WARNING] glTF: cameras.default-camera.perspective: Unexpected property aspect_ratio

Loading boxAnimated/glTF/glTF.gltf...
[SEVERE] glTF: nodes.Camera-camera002Node.camera: Invalid argument(s): camera can't be an empty string

Loading boxAnimated/glTF-Embedded/boxAnimated.gltf...
[SEVERE] glTF: nodes.Camera-camera002Node.camera: Invalid argument(s): camera can't be an empty string

Loading buggy/glTF/buggy.gltf...
[WARNING] glTF: cameras.default-camera.perspective: Unexpected property aspect_ratio

Loading duck/glTF/duck.gltf...
[WARNING] glTF: cameras.cameraShape1.perspective: Unexpected property aspect_ratio

Loading duck/glTF-Embedded/duck.gltf...
[WARNING] glTF: cameras.cameraShape1.perspective: Unexpected property aspect_ratio

Loading gearbox_assy/glTF/gearbox_assy.gltf...
[WARNING] glTF: cameras.default-camera.perspective: Unexpected property aspect_ratio

Loading Reciprocating_Saw/glTF/Reciprocating_Saw.gltf...
[WARNING] glTF: cameras.default-camera.perspective: Unexpected property aspect_ratio

Loading vc/glTF/vc.gltf...
[SEVERE] glTF: techniques.technique2.states.functions.depthMask: Invalid argument (depthMask): false
[SEVERE] glTF: techniques.technique3.states.functions.depthMask: Invalid argument (depthMask): false
[SEVERE] glTF: techniques.technique5.states.functions.depthMask: Invalid argument (depthMask): false
[SEVERE] glTF: techniques.technique6.states.functions.depthMask: Invalid argument (depthMask): false

Loading vc/glTF-Embedded/vc.gltf...
[SEVERE] glTF: techniques.technique2.states.functions.depthMask: Invalid argument (depthMask): false
[SEVERE] glTF: techniques.technique3.states.functions.depthMask: Invalid argument (depthMask): false
[SEVERE] glTF: techniques.technique5.states.functions.depthMask: Invalid argument (depthMask): false
[SEVERE] glTF: techniques.technique6.states.functions.depthMask: Invalid argument (depthMask): false

@lexaknyazev lexaknyazev changed the title Invalid fields in duck example Invalid fields in sample models Mar 29, 2016
@lexaknyazev
Copy link
Member Author

While implementing KHR_binary_glTF found similar issues in *Binary samples.
Btw, binary version of vc sample differs from plain-text one (number's precision, techniques, etc...).

Loading 2_cylinder_engine/glTF-Binary/2_cylinder_engine.glb...
[WARNING] glTF: cameras/default-camera/perspective: Unexpected property aspect_ratio

Loading boxAnimated/glTF-Binary/boxAnimated.glb...
[SEVERE] glTF: nodes/Camera-camera002Node/camera: Invalid argument(s): camera can't be an empty string

Loading buggy/glTF-Binary/buggy.glb...
[WARNING] glTF: cameras/default-camera/perspective: Unexpected property aspect_ratio

Loading duck/glTF-Binary/duck.glb...
[WARNING] glTF: cameras/cameraShape1/perspective: Unexpected property aspect_ratio

Loading gearbox_assy/glTF-Binary/gearbox_assy.glb...
[WARNING] glTF: cameras/default-camera/perspective: Unexpected property aspect_ratio

Loading Reciprocating_Saw/glTF-Binary/Reciprocating_Saw.glb...
[WARNING] glTF: cameras/default-camera/perspective: Unexpected property aspect_ratio

Loading vc/glTF-Binary/vc.glb...
[SEVERE] glTF: techniques/technique2/states/functions/depthMask: Invalid argument (depthMask): false
[SEVERE] glTF: techniques/technique3/states/functions/depthMask: Invalid argument (depthMask): false
[SEVERE] glTF: techniques/technique5/states/functions/depthMask: Invalid argument (depthMask): false

@pjcozzi
Copy link
Member

pjcozzi commented Mar 30, 2016

Thanks for the reports, @lexaknyazev! We'll update everything (give us some time though please). Continue to update this issue if you find anything else.

@lexaknyazev
Copy link
Member Author

Couple more:

  1. FLOAT_MAT4 instead of FLOAT_MAT3 for MODELINVERSETRANSPOSE and MODELVIEWINVERSETRANSPOSE semantics in boxSemantics/glTF/boxSemantics.gltf.
  2. (Suggestion) technique.parameters.[parameter_id].value should have more accurate type,e.g, 0.0 instead of 0 for FLOAT* types.

Only new issues listed below.

Loading 2_cylinder_engine/glTF/2_cylinder_engine.gltf...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3

Loading boxAnimated/glTF/glTF.gltf...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 0 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 0 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 0 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3

Loading boxAnimated/glTF-Embedded/boxAnimated.gltf...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 0 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 0 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 0 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3

Loading boxSemantics/glTF/boxSemantics.gltf...
[WARNING] glTF: techniques/technique0/parameters/modelInverseTransposeMatrix: Unexpected type FLOAT_MAT4 for semantic MODELINVERSETRANSPOSE
[WARNING] glTF: techniques/technique0/parameters/nodeModelInverseTransposeMatrix: Unexpected type FLOAT_MAT4 for semantic MODELINVERSETRANSPOSE
[WARNING] glTF: techniques/technique0/parameters/nodeModelViewInverseTransposeMatrix: Unexpected type FLOAT_MAT4 for semantic MODELVIEWINVERSETRANSPOSE

Loading buggy/glTF/buggy.gltf...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3

Loading duck/glTF/duck.gltf...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3

Loading duck/glTF-Embedded/duck.gltf...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3

Loading gearbox_assy/glTF/gearbox_assy.gltf...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3

Loading Reciprocating_Saw/glTF/Reciprocating_Saw.gltf...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3

Loading vc/glTF/vc.gltf...
[SEVERE] glTF: techniques/technique0/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT

Loading vc/glTF-Embedded/vc.gltf...
[SEVERE] glTF: techniques/technique0/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT

Loading 2_cylinder_engine/glTF-Binary/2_cylinder_engine.glb...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3

Loading boxAnimated/glTF-Binary/boxAnimated.glb...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 0 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 0 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 0 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3

Loading buggy/glTF-Binary/buggy.glb...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3

Loading duck/glTF-Binary/duck.glb...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3

Loading gearbox_assy/glTF-Binary/gearbox_assy.glb...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3

Loading Reciprocating_Saw/glTF-Binary/Reciprocating_Saw.glb...
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light0Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light1Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3
[SEVERE] glTF: techniques/technique0/parameters/light2Color/value: Wrong value 1 for FLOAT_VEC3

Loading vc/glTF-Binary/vc.glb...
[SEVERE] glTF: techniques/technique0/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique0/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique1/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique2/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique3/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique4/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique5/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique6/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light1ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light1LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light1QuadraticAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light2ConstantAttenuation/value: Wrong value 1 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light2LinearAttenuation/value: Wrong value 0 for FLOAT
[SEVERE] glTF: techniques/technique7/parameters/light2QuadraticAttenuation/value: Wrong value 0 for FLOAT

@pjcozzi
Copy link
Member

pjcozzi commented Apr 5, 2016

Thanks for these!

@lexaknyazev
Copy link
Member Author

technique.parameters.[parameter_id].value should have more accurate type,e.g, 0.0 instead of 0 for FLOAT* types

There's the same issue with lots of materials.[id].values declared as FLOAT* in corresponding technique while being stored as integer.
I believe spec needs some clarification on this, because programming languages usually can implicitly convert int to float for Uniform{1234}f functions.

@lexaknyazev
Copy link
Member Author

FLOAT_MAT4 instead of FLOAT_MAT3 for MODELINVERSETRANSPOSE and MODELVIEWINVERSETRANSPOSE semantics in boxSemantics/glTF/boxSemantics.gltf.

There's some ambiguity behind it:
MODELVIEWINVERSETRANSPOSE and MODELINVERSETRANSPOSE semantics declared in spec as FLOAT_MAT3, while presence of node field requires parameter to be FLOAT_MAT4. Spec is silent on this case.

@lexaknyazev
Copy link
Member Author

In many samples, primitive attributes reference TEXCOORD_0 semantic, while there is no such parameter in the corresponding technique.

Loading box/glTF/box.gltf...
[WARNING] glTF: meshes/Geometry-mesh002/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading box/glTF-Embedded/box.gltf...
[WARNING] glTF: meshes/Geometry-mesh002/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading boxAnimated/glTF/glTF.gltf...
[WARNING] glTF: meshes/Geometry-mesh019/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Geometry-mesh020/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading boxAnimated/glTF-Embedded/boxAnimated.gltf...
[WARNING] glTF: meshes/Geometry-mesh019/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Geometry-mesh020/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading brainsteam/glTF/brainsteam.gltf...
[WARNING] glTF: meshes/Figure_2_geometry-mesh/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
...
[WARNING] glTF: meshes/Figure_2_geometry-mesh/primitives/23/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_0/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
...
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_0/primitives/11/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_1/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
...
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_1/primitives/24/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading brainsteam/glTF-Embedded/brainsteam.gltf...
[WARNING] glTF: meshes/Figure_2_geometry-mesh/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
...
[WARNING] glTF: meshes/Figure_2_geometry-mesh/primitives/23/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_0/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
...
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_0/primitives/11/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_1/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
...
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_1/primitives/24/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading CesiumMilkTruck/glTF/CesiumMilkTruck.gltf...
[WARNING] glTF: meshes/Geometry-mesh002/primitives/1/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Geometry-mesh002/primitives/2/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading CesiumMilkTruck/glTF-Embedded/CesiumMilkTruck.gltf...
[WARNING] glTF: meshes/Geometry-mesh002/primitives/1/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Geometry-mesh002/primitives/2/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading RiggedFigure/glTF/rigged-figure.gltf...
[WARNING] glTF: meshes/Proxy-mesh/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading RiggedFigure/glTF-Embedded/rigged-figure.gltf...
[WARNING] glTF: meshes/Proxy-mesh/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading vc/glTF/vc.gltf...
[WARNING] glTF: meshes/geom-FF01/primitives/3/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique5" technique
[WARNING] glTF: meshes/geom-Heli-scout-04/primitives/3/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique5" technique
[WARNING] glTF: meshes/geom-Object01/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique7" technique

Loading vc/glTF-Embedded/vc.gltf...
[WARNING] glTF: meshes/geom-FF01/primitives/3/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique5" technique
[WARNING] glTF: meshes/geom-Heli-scout-04/primitives/3/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique5" technique
[WARNING] glTF: meshes/geom-Object01/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique7" technique

Loading box/glTF-Binary/box.glb...
[WARNING] glTF: meshes/Geometry-mesh002/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading boxAnimated/glTF-Binary/boxAnimated.glb...
[WARNING] glTF: meshes/Geometry-mesh019/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Geometry-mesh020/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading brainsteam/glTF-Binary/brainsteam.glb...
[WARNING] glTF: meshes/Figure_2_geometry-mesh/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
...
[WARNING] glTF: meshes/Figure_2_geometry-mesh/primitives/23/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_0/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
...
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_0/primitives/11/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_1/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
...
[WARNING] glTF: meshes/Figure_2_geometry-meshsplit_1/primitives/24/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading CesiumMilkTruck/glTF-Binary/CesiumMilkTruck.glb...
[WARNING] glTF: meshes/Geometry-mesh002/primitives/1/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique
[WARNING] glTF: meshes/Geometry-mesh002/primitives/2/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading RiggedFigure/glTF-Binary/rigged-figure.glb...
[WARNING] glTF: meshes/Proxy-mesh/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique0" technique

Loading vc/glTF-Binary/vc.glb...
[WARNING] glTF: meshes/geom-FF01/primitives/3/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique5" technique
[WARNING] glTF: meshes/geom-Heli-scout-04/primitives/3/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique5" technique
[WARNING] glTF: meshes/geom-Object01/primitives/0/attributes: Unknown attribute semantic "TEXCOORD_0" for "technique7" technique

@pjcozzi
Copy link
Member

pjcozzi commented Apr 7, 2016

Thanks again @lexaknyazev! Have you built a glTF validator? If so, do you plan to make it open source? Khronos is interested in a tool like this, see #557.

@lexaknyazev
Copy link
Member Author

@pjcozzi
I've started writing glTF loader when I was evaluating glTF for my WebGL project.
The main idea was to perform as many checks as possible at assets' load time to have almost zero checks later.

Eventually loader became a some sort of validation tool.
It checks all schema-declared members, checks if some required properties missing, types mismatch, arrays' length, min/max values, all internal references (id, semantic), buffer/bufferView/accessor lengths and offsets (including embedded buffers).

Supports all extensions from the registry (KHR_binary_glTF, KHR_materials_common, CESIUM_RTC, WEB3D_quantized_attributes).

At the moment it's just a command line tool. However, I've made a simple client-side web wrapper:
http://lexaknyazev.github.io/gltf-demo/

It can crash on some edge cases since I haven't achieved full code coverage yet. There are also several spec issues which need some attention to make validation more robust.

@pjcozzi
Copy link
Member

pjcozzi commented Apr 12, 2016

Wow, sounds great @lexaknyazev!

There are also several spec issues which need some attention to make validation more robust.

Can you please submit a separate issue for these? We are very interested in tightening up the spec to support validation. This could, for example, be glTF 1.0.1.

Also, would you be interested in discussing the possibility of making your validator the official glTF validator? Khronos has an RFQ out to fund this effort (#557). Email me if you want to learn more, pjcozzi@gmail.com

@lexaknyazev
Copy link
Member Author

Can you please submit a separate issue for these? We are very interested in tightening up the spec to support validation. This could, for example, be glTF 1.0.1.

#563

@pjcozzi
Copy link
Member

pjcozzi commented Apr 26, 2016

@lexaknyazev the sample model fixes are in #579 thanks to @lasalvavida. Please feel free to review and comment in that PR if you have the time. Thanks again for all your feedback here!

@pjcozzi
Copy link
Member

pjcozzi commented Apr 26, 2016

@lexaknyazev closed this via #579. Let us know if you run into any other issues with the sample models.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants