UsdLayerManager/openspec/changes/viewport-display-usd-data/proposal.md

29 lines
1.8 KiB
Markdown

## Why
The application currently renders a placeholder "3D viewport will be displayed here" text instead of showing actual USD scene geometry. Users cannot visually inspect their USD stages, making the tool incomplete for scene authoring workflows. A functional viewport is essential for any USD editing application — without it, users must switch to an external viewer (e.g., usdview) to see their changes.
## What Changes
- Add an OpenGL-based 3D viewport that renders USD stage geometry within the existing dockable "Viewport" panel
- Implement a camera system (orbit, pan, zoom) for navigating the 3D scene
- Add Hydra or direct UsdGeom-based rendering to traverse the stage and draw meshes, transforms, and materials
- Provide viewport controls (grid display, axis indicator, background color) via a toolbar or context menu
- Render a ground grid and axis gizmo for spatial orientation
## Capabilities
### New Capabilities
- `viewport-renderer`: OpenGL rendering pipeline that traverses USD prims and draws geometry, materials, and transforms into an FBO-backed ImGui image
- `viewport-camera`: Interactive camera controller supporting orbit, pan, and zoom with mouse input mapped through the ImGui viewport window
- `viewport-overlay`: Grid, axis gizmo, and viewport settings overlay rendered on top of the 3D scene
### Modified Capabilities
## Impact
- **src/ui/Application.h/cpp**: Replace placeholder viewport section with a ViewportPanel that owns the renderer and camera
- **New files**: ViewportPanel, UsdSceneRenderer, ViewportCamera classes
- **Dependencies**: OpenGL 3.3+ (already available via WGL context), OpenUSD UsdGeom/UsdShade APIs
- **Build system**: CMakeLists.txt must compile new source files and link OpenGL
- **Rendering path**: Initially UsdGeom traversal with OpenGL draw calls; Hydra integration deferred to a future change