Parent epic: #397
Goal
Predict normal, roughness, and height maps from a single diffuse texture using a small ONNX model (DeepBump-style UNet, ~5–20 MB).
Why
Material authoring in QtMeshEditor currently leans on the slice-E PBR presets, but if a user provides only a diffuse (or generates one via SDManager), they still have to find or hand-author the supporting PBR maps. This task closes that loop.
Scope
- Land ONNX Runtime as a CMake dependency behind
ENABLE_ONNX (off by default, on for our release builds). This is the first ONNX consumer; the wrapper facade lives in AIAssistManager.
- Vendor a permissively-licensed small UNet (DeepBump or equivalent) and host it via the existing
ModelDownloader flow.
- CoreML execution provider on macOS, CPU EP elsewhere. CUDA EP can come later.
- GUI: in the Material Editor, a "Generate PBR maps from diffuse" button on each texture slot.
- CLI:
qtmesh material --texture diffuse.png --generate-pbr -o material.material writes normal/roughness/height alongside.
- MCP:
generate_pbr_maps tool.
- Cache outputs next to the source diffuse; re-run on demand.
Acceptance Criteria
Effort
~5–7 days, including landing the ONNX Runtime infrastructure.
Parent epic: #397
Goal
Predict normal, roughness, and height maps from a single diffuse texture using a small ONNX model (DeepBump-style UNet, ~5–20 MB).
Why
Material authoring in QtMeshEditor currently leans on the slice-E PBR presets, but if a user provides only a diffuse (or generates one via
SDManager), they still have to find or hand-author the supporting PBR maps. This task closes that loop.Scope
ENABLE_ONNX(off by default, on for our release builds). This is the first ONNX consumer; the wrapper facade lives inAIAssistManager.ModelDownloaderflow.qtmesh material --texture diffuse.png --generate-pbr -o material.materialwrites normal/roughness/height alongside.generate_pbr_mapstool.Acceptance Criteria
ai.assist.pbr_synthrecorded.Effort
~5–7 days, including landing the ONNX Runtime infrastructure.