Skip to content

sample_content: obs_workbench_tool_a01 worktop faces are inverted — fails its own culling_xz benchmark (27.8% vs 10% threshold) #26

Description

@NV-JBapst

Summary

The sample prop obs_workbench_tool_a01 has an inverted top surface. Under back-face culling the entire worktop disappears and the unlit interior of the cabinet shows through. It fails this repository's own culling_xz FET001 benchmark.

This is the reference asset shipped for the benchmark that detects the defect.

Reproduction

simready-validate ... --stamp-asset-validation sm_obs_workbench_tool_a01_01.usd
simready-benchmark --assets sm_obs_workbench_tool_a01_01.usd --max-concurrent 1

Asset: sample_content/common_assets/props_general/obs_workbench_tool_a01/isaacsim_usd/

Result:

FAIL  culling_xz   XZ-axis culling check failed at angle 0 deg:
                   27.8% object pixel diff (threshold 10%).

The other seven tests in the run pass (ground_drop, slope_drop, light_response, normals_xz, pivot, presence), so rendering and framing are working — this is not the "no frames captured" or "camera misframed" failure mode from the test doc.

Visually: with doubleSided = True the asset renders correctly in orange diagnostic material. With culling on, the worktop renders solid black while the drawer fronts, sides and edges remain correct. Happy to attach the captured frame pair if useful — culling_xz_worst_pair.mp4 is produced by the run.

Root cause

Offending prim:

/sm_obs_workbench_tool_a01_01/workbench_main_obj/workbench_main_trans/workbench_main_obj/workbench_main_mesh

Geometry lives in payloads/obs_workbench_tool_01_meshes.usd.

Checking face orientation on that mesh (stage upAxis = Z, mesh Z range -0.0010 .. 0.9134):

Surface normals UP normals DOWN
Top faces (z ≈ 0.9134) 0 35
Bottom faces (z ≈ -0.0010) 0 4

Every one of the 35 faces forming the worktop points downward, into the object. The bottom faces also point down, which is correct for a bottom surface — so the top surface is simply inverted relative to the rest of the model.

Worth noting: this is not inconsistent winding

The test documentation attributes a culling_xz failure to "incorrect (clockwise) winding order". That is not what is happening here. Comparing winding-derived normals against the authored normals attribute, every face of every mesh in the asset agrees — 496/496 on workbench_main_mesh, 403/403 on each of the ten drawers, 0 opposed, all faceVarying.

Winding and normals are consistent with each other; they are jointly inverted on the top surface. So the fix is not "flip the winding to match the normals" — both need flipping together (or normals recalculated outward after the flip). The culling_xz "How to Fix" guidance may be worth widening to cover this case, since following it literally would produce a mesh whose winding and normals disagree.

doubleSided is authored True on the mesh, which is why the defect is invisible in most DCC viewports and in any renderer that does not cull.

Scope not checked

Only the isaacsim_usd variant was tested. The asset also ships simready_usd and simready_physx_usd variants plus the original Blender source at dcc_source/working/model/blender/obs_workbench_tool_a01.blend — worth checking whether the inversion originates upstream of the USD conversion and affects the other variants too.

Environment

simready-benchmark 2026.6.5, simready-validate 2026.6.4, Isaac Sim 6.0.1, driver 596.86, RTX 6000 Ada, Windows 11, Python 3.12. Repo at 0ed0dfb.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions