Mesh Validator
Use Tridi Viewer Mesh Validator to inspect transform and placement, geometry, topology, normals, tangents, UVs, skinning, and morph-target issues in 3D models.
Applies to Tridi Viewer 1.3.1 public beta. Release notes
What Mesh Validator does
Mesh Validator scans the current canonical scene for geometry, topology, attribute, deformation, transform, and scene-placement problems. Validation can run across the entire scene or only the selected objects and their descendants.
Checks are grouped into Transform & Placement, Geometry, Normals & Tangents, UV, Skinning, and Morph Targets. A separate Performance section reports scene metrics; it does not add validation issues.
Open and use Mesh Validator
- Open a supported 3D model.
- Open Mesh Validator from the Validation control in the status bar, or press F5.
- Open the settings button in the panel header to choose Entire Scene or Selected Objects and enable or disable individual checks. Selected Objects requires at least one selected object and also includes its descendants.
- The validator runs automatically when a report has not been created yet or when the existing report becomes stale. Changing the scope or enabled checks resets the report and triggers a fresh scan when validation can run.
- Use the panel header control to detach Mesh Validator into a movable panel or attach it back to the workspace dock.
How results are displayed
When import diagnostics are available, Mesh Validator shows those messages in a separate section above the validation report. The validation report then summarizes the current scan with separate Error, Warning, and Info counts.
- Validation issues are grouped by category, with the category header showing the number of reported issues.
- Expanding an issue shows its explanation and, when available, the related object and primitive.
- For geometry, topology, normal, tangent, UV, and skinning issues with addressable edge, face, or vertex samples, the Affected action can display the affected geometry as a wireframe highlight and frame it in the viewport. Large issue sets keep a sample of up to 128 affected elements for highlighting.
- Object-level Transform & Placement findings provide the related object so it can be focused. Scene-level placement findings provide a Frame Scene action instead of an affected-element wireframe.
- If the scene or selected-object scope changes after a report is created, the report becomes stale and a fresh validation scan is requested when possible.
Performance metrics
The Performance section reports object, mesh, mesh-instance, primitive, vertex, triangle, edge, material, UV-set, skin, morph-target, and estimated draw-call counts for the validated scope.
Available validation checks
Mesh Validator currently provides 35 checks. Default shows whether a check is enabled in a new default configuration.
| Check | Type | Severity | Default | What it detects | Short explanation |
|---|---|---|---|---|---|
| Scene not centered to world origin | Transform & Placement | Warning | On | The scene bounding box is horizontally offset from the world origin. | Entire Scene only. Checks the X/Z center of the complete scene bounds using a size-aware placement tolerance. |
| Scene floating above grid floor | Transform & Placement | Error | On | The lowest point of the scene is above the grid floor. | Entire Scene only. Flags a scene whose bounding-box minimum Y remains above the floor beyond the placement tolerance. |
| Scene below grid floor | Transform & Placement | Error | On | The scene extends below the grid floor. | Entire Scene only. Flags a scene whose bounding-box minimum Y is below the floor beyond the placement tolerance. |
| Scale not reset | Transform & Placement | Error | On | A renderable node does not use a reset scale of approximately (1, 1, 1). | Checks renderable nodes with geometry and ignores synthetic importer roots. |
| Negative scale | Transform & Placement | Error | On | A renderable node has a negative or mirrored scale. | Detects negative TRS scale components or a transform matrix with a negative determinant. |
| Non-uniform scale | Transform & Placement | Warning | On | A renderable node uses different scale magnitudes across its axes. | Flags transforms whose X, Y, and Z scale magnitudes are not approximately equal. |
| Sheared transform | Transform & Placement | Warning | On | A renderable node transform contains shear. | Detects matrix transforms whose normalized basis axes are not orthogonal, meaning the transform is not clean TRS. |
| Rotation not reset | Transform & Placement | Warning | Off | A renderable node rotation is not approximately identity. | Optional check for authored TRS rotations or clean matrix rotations that have not been reset. |
| Model dimension is 100 m or larger | Transform & Placement | Warning | On | At least one complete-scene dimension is 100 meters or larger. | Entire Scene only. Checks the maximum width, height, or depth of the scene bounds. |
| Invalid canonical scene | Geometry | Error | On | The canonical scene fails its core validation. | This is a global integrity check even when Selected Objects scope is active. |
| Empty mesh | Geometry | Error | On | An in-scope mesh contains no primitives. | Flags referenced meshes that have no renderable primitive data. |
| Empty primitive | Geometry | Error | On | A primitive has no positions or no triangle indices. | Detects primitives that do not contain the minimum geometry data needed for indexed triangles. |
| NaN / Inf position | Geometry | Error | On | A vertex position contains a non-finite component. | Finds position values containing NaN or infinity. |
| Attribute count mismatch | Geometry | Error | On | A non-empty vertex attribute stream has a different count from positions. | Checks normals, tangents, colors, UV0, UV1, joint indices, and joint weights against the primitive position count. |
| Invalid index | Geometry | Error | On | A triangle index is outside the vertex range, or the index count is not divisible by three. | Detects invalid indexed-triangle data. |
| Degenerate triangle | Geometry | Error | On | A triangle repeats a vertex or has near-zero area. | Finds collapsed or effectively zero-area triangles. |
| Loose vertex | Geometry | Warning | On | A render vertex is not referenced by any triangle. | Finds unused vertices in a primitive's indexed triangle data. |
| Boundaries | Geometry | Warning | On | An edge belongs to only one face. | Finds open boundary edges in canonical topology. |
| Multiple Faces | Geometry | Warning | On | An edge is shared by more than two faces. | Finds non-manifold edges with more than two adjacent faces. |
| Non Contiguous | Geometry | Warning | On | Two faces traverse a shared edge in the same direction. | Finds adjacent faces with inconsistent winding across their shared edge. |
| Missing normals | Normals & Tangents | Info | On | A primitive with positions has no authored normals. | Reports missing normal data without treating it as an error. |
| Invalid normals | Normals & Tangents | Error | On | A normal is non-finite or has zero length. | Detects normals that cannot provide a valid direction. |
| Non-normalized normals | Normals & Tangents | Warning | On | A normal is not approximately unit length. | Finds authored normals whose length differs from one beyond the validator tolerance. |
| Missing tangents | Normals & Tangents | Warning | On | A material uses tangent-space data but the primitive has no authored tangents. | Applies when normal, height, or clearcoat-normal texture data requires tangent-space information. |
| Invalid tangents | Normals & Tangents | Warning | On | A tangent is non-finite, zero-length, non-normalized, or has invalid handedness. | Checks the tangent direction and that its handedness component is approximately +1 or -1. |
| Missing UV | UV | Error | On | A material references UV0 or UV1 but that UV set is missing from the primitive. | Only reports a missing set when a texture binding actually requires it. |
| Invalid UV | UV | Error | On | A UV0 or UV1 coordinate contains NaN or infinity. | Detects non-finite UV coordinates in correctly sized UV streams. |
| UV outside 0-1 | UV | Info | On | A finite UV coordinate lies outside the 0-1 range. | Reports possible tiling coordinates as informational because values outside 0-1 can be intentional. |
| Incomplete skin streams | Skinning | Error | On | Joint indices and weights are missing one another or do not match the vertex count. | Requires aligned joint-index and joint-weight streams for skinned vertices. |
| Invalid joint index | Skinning | Error | On | A positive-weight influence references a joint outside the mesh instance's skin palette. | Also reports skin streams that exist without a mesh instance to provide a valid skin palette. |
| Negative skin weight | Skinning | Error | On | A skin weight is negative or non-finite. | Finds invalid weight values before normalization is considered. |
| Non-normalized skin weights | Skinning | Warning | On | A vertex's skin-weight sum differs from one. | Checks the four stored influences against the validator's weight-sum tolerance. |
| Duplicate joint influence | Skinning | Warning | On | The same joint appears more than once with a positive weight on one vertex. | Finds redundant positive influences that reference the same joint. |
| Inconsistent morph target count | Morph Targets | Error | On | Primitive morph-target counts disagree within a mesh, or default morph weights do not match the expected count. | Checks that a mesh uses a consistent number of morph targets and matching default weights. |
| Invalid morph target stream | Morph Targets | Error | On | A morph delta stream has the wrong count or contains a non-finite delta. | Checks non-empty position, normal, and tangent morph-delta streams against the primitive vertex count. |