diff --git a/README.md b/README.md index 4de496c..3c1f569 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ A C++17 / Windows desktop application providing a **Maya Render Layers-style** U - **Layer Stack Management** — Create, reorder, mute/unmute sublayers with full undo support - **Scene Hierarchy** — Browse prim tree with per-type SVG icons; create, delete, rename prims; add/replace references - **Property Editor** — Maya Channel Box-style attribute editing with type-aware drag inputs, color pickers, and undoable transforms -- **3D Viewport** — Hydra rendering via `UsdImagingGLEngine` into an offscreen FBO; switchable render delegates; grid overlay; selection bounding boxes; camera wireframes +- **3D Viewport** — Hydra rendering via `UsdImagingGLEngine` into an offscreen FBO; switchable render delegates (Storm, Embree, Arnold, Cycles); grid overlay; selection bounding boxes; camera wireframes - **Multi-Viewport** — Single, horizontal split, vertical split, and quad layouts; per-tile camera and render settings; Space to maximize/restore - **Camera Control** — Free orbital camera (tumble/truck/dolly) or drive from USD camera prims; auto near/far clipping; frame selection; correct camera prim orientation for Y-up and Z-up stages - **Transform Gizmo** — Pure ImDrawList-based manipulator (translate/rotate/scale) in object or world space @@ -25,6 +25,16 @@ A C++17 / Windows desktop application providing a **Maya Render Layers-style** U | [GLAD](https://glad.dav1d.de/) | — | OpenGL 3.3 core loader | | Python | 3.12 | Required by OpenUSD runtime (`python312.dll`) | +### Optional Render Delegates + +| Delegate | Variable | Notes | +|---|---|---| +| **hdEmbree** | `HDEMBREE_USD_ROOT` | USD build with `PXR_ENABLE_EMBREE_PLUGIN=ON`; set `EMBREE_LOCATION` if embree DLLs are not in `HDEMBREE_USD_ROOT/bin` | +| **hdArnold** | `HDARNOLD_ROOT`, `ARNOLD_LOCATION` | [arnold-usd](https://github.com/Autodesk/arnold-usd) install dir + MtoA root for `ai.dll` | +| **hdCycles** | `WITH_CYCLES=ON` | Built from source under `third_party/cycles` via ExternalProject; requires MSVC | + +All delegate paths are pre-configured in `CMakePresets.json`. + ## Build ### Prerequisites @@ -41,10 +51,16 @@ cmake --build build --config Release cmake --install build --config Release ``` -The installed `App.exe` lives in `install/bin/`. +The installed executable lives in `install/bin/`. **Presets** — `default` (Release + tests), `debug`, `release`, `no-tests`. +### Building with Cycles + +`WITH_CYCLES=ON` is set in the default preset. The first build compiles Blender Cycles from `third_party/cycles` via ExternalProject — expect a significantly longer initial build. Subsequent builds are incremental. + +Cycles runtime dependencies (`embree4.dll`, `openvdb.dll`, `OpenImageDenoise.dll`, `tbb12.dll`, etc.) are automatically deployed to the output directory by a post-build step. CRT DLLs bundled inside the Cycles install are excluded to avoid version conflicts with the app's own MSVC runtime. + ### Tests ```powershell @@ -123,6 +139,7 @@ Use Kilo's `openspec-*` skills to streamline this workflow. - **Python 3.12** — OpenUSD requires `python312.dll` at runtime. CMake copies it to the output directory via `POST_BUILD` commands. - **USD Plugin Path** — The app scans `/usd/` for `plugInfo.json` and registers plugins via `pxr::PlugRegistry`. +- **Render delegate DLLs** — hdEmbree, hdArnold, and hdCycles each bring their own runtime dependencies (Embree, Arnold SDK, Cycles libs). CMake `POST_BUILD` steps deploy all required DLLs next to the executable automatically. ## Contributing