From 4b9bb506d189ae9d38e9d7eb6df92a74aa327213 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 11 May 2026 17:40:52 +0200 Subject: [PATCH 01/38] Update Houdini 21.0.680 paths and Boost 1.82 for macOS build Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- CMakeMacOSPresets.json | 4 ++-- building/macOS/CMakeLists.txt | 3 +-- building/macOS/pxr-houdini/pxrConfig.cmake | 4 ++-- building/macOS/pxr-houdini/pxrTargets-release.cmake | 6 +++--- building/macOS/pxr-houdini/pxrTargets.cmake | 6 +++--- scripts/macOS/setupHoudini.sh | 2 +- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/CMakeMacOSPresets.json b/CMakeMacOSPresets.json index f13d05ef..63af637e 100644 --- a/CMakeMacOSPresets.json +++ b/CMakeMacOSPresets.json @@ -34,11 +34,11 @@ "inherits": "macos-environment", "environment": { "PREFIX_PXR" : "${sourceParentDir}/building/macOS/pxr-houdini", - "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini20.0.751", + "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini21.0.680", "PXR_LIB_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries", "PXR_INCLUDE_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Resources/toolkit/include", "PXR_DEPS_PREFIX" : "$env{DEPS_ROOT}", - "PXR_BOOST_PYTHON_LIB" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries/libhboost_python39-mt-a64.dylib" + "PXR_BOOST_PYTHON_LIB" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries/libpxr_python.dylib" }, "cacheVariables": { "CMAKE_PREFIX_PATH": "$env{DEPS_ROOT};$env{PREFIX_PXR}", diff --git a/building/macOS/CMakeLists.txt b/building/macOS/CMakeLists.txt index 12ef7ce3..fca0f285 100644 --- a/building/macOS/CMakeLists.txt +++ b/building/macOS/CMakeLists.txt @@ -39,7 +39,7 @@ ExternalProject_Add(Blosc set(CHAIN Blosc) ExternalProject_Add(Boost - URL https://sourceforge.net/projects/boost/files/boost/1.78.0/boost_1_78_0.tar.gz + URL https://sourceforge.net/projects/boost/files/boost/1.82.0/boost_1_82_0.tar.gz UPDATE_COMMAND ./bootstrap.sh --prefix=${InstallRoot} --with-toolset=clang linkflags="-arch ${BOOST_ARCH}" CONFIGURE_COMMAND "" PATCH_COMMAND patch -p3 -N < ${THIS_DIR}/Boost.patch @@ -421,4 +421,3 @@ ExternalProject_Add(GLFW DEPENDS ${CHAIN} ) set(CHAIN GLFW) - diff --git a/building/macOS/pxr-houdini/pxrConfig.cmake b/building/macOS/pxr-houdini/pxrConfig.cmake index 28237a87..0384829a 100644 --- a/building/macOS/pxr-houdini/pxrConfig.cmake +++ b/building/macOS/pxr-houdini/pxrConfig.cmake @@ -17,9 +17,9 @@ get_filename_component(PXR_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) set(PXR_MAJOR_VERSION "0") -set(PXR_MINOR_VERSION "22") +set(PXR_MINOR_VERSION "25") set(PXR_PATCH_VERSION "5") -set(PXR_VERSION "2205") +set(PXR_VERSION "2505") include("${PXR_CMAKE_DIR}/pxrTargets.cmake") set(libs "arch;tf;gf;js;trace;work;plug;vt;ar;kind;sdf;ndr;sdr;pcp;usd;usdGeom;usdVol;usdMedia;usdShade;usdLux;usdRender;usdHydra;usdRi;usdSkel;usdUI;usdUtils;usdPhysics;garch;hf;hio;cameraUtil;pxOsd;glf;hgi;hgiGL;hgiInterop;hd;hdSt;hdx;usdImaging;usdImagingGL;usdRiImaging;usdSkelImaging;usdVolImaging;usdAppUtils;usdviewq") diff --git a/building/macOS/pxr-houdini/pxrTargets-release.cmake b/building/macOS/pxr-houdini/pxrTargets-release.cmake index ae3a89da..485bf292 100644 --- a/building/macOS/pxr-houdini/pxrTargets-release.cmake +++ b/building/macOS/pxr-houdini/pxrTargets-release.cmake @@ -421,12 +421,12 @@ list(APPEND _IMPORT_CHECK_FILES_FOR_usdImagingGL "${_LIB_PREFIX}/libpxr_usdImagi # Import target "usdRiImaging" for configuration "Release" set_property(TARGET usdRiImaging APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(usdRiImaging PROPERTIES - IMPORTED_LOCATION_RELEASE "${_LIB_PREFIX}/libpxr_usdRiImaging.dylib" - IMPORTED_SONAME_RELEASE "libpxr_usdRiImaging.dylib" + IMPORTED_LOCATION_RELEASE "${_LIB_PREFIX}/libpxr_usdRiPxrImaging.dylib" + IMPORTED_SONAME_RELEASE "libpxr_usdRiPxrImaging.dylib" ) list(APPEND _IMPORT_CHECK_TARGETS usdRiImaging ) -list(APPEND _IMPORT_CHECK_FILES_FOR_usdRiImaging "${_LIB_PREFIX}/libpxr_usdRiImaging.dylib" ) +list(APPEND _IMPORT_CHECK_FILES_FOR_usdRiImaging "${_LIB_PREFIX}/libpxr_usdRiPxrImaging.dylib" ) # Import target "usdSkelImaging" for configuration "Release" set_property(TARGET usdSkelImaging APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) diff --git a/building/macOS/pxr-houdini/pxrTargets.cmake b/building/macOS/pxr-houdini/pxrTargets.cmake index f3cd6feb..af4b3d45 100644 --- a/building/macOS/pxr-houdini/pxrTargets.cmake +++ b/building/macOS/pxr-houdini/pxrTargets.cmake @@ -3,7 +3,7 @@ # Modified to use the version of USD with headers in $env{PXR_INCLUDE_PREFIX} # and libs in $env{PXR_LIB_PREFIX}, with dependencies installed to $env{PXR_DEPS_PREFIX} # $env{PXR_BOOST_PYTHON_LIB} must be set to the location of the boost_python so used by USD -# (Houdini names it libhboost_python39...) +# (Houdini names it libhboost_python311...) if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6) message(FATAL_ERROR "CMake >= 2.6.0 required") @@ -17,8 +17,8 @@ cmake_policy(VERSION 2.6...3.21) # Commands may need to know the format version. set(CMAKE_IMPORT_FILE_VERSION 1) -SET(HPYTHONLIB $ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.9/lib/libpython3.9.dylib) -SET(HPYTHONINC $ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.9/include/python3.9) +SET(HPYTHONLIB $ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib) +SET(HPYTHONINC $ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/include/python3.11) # Protect against multiple inclusion, which would fail when already imported targets are added once more. set(_targetsDefined) diff --git a/scripts/macOS/setupHoudini.sh b/scripts/macOS/setupHoudini.sh index 68ac25fb..8f15cb9b 100644 --- a/scripts/macOS/setupHoudini.sh +++ b/scripts/macOS/setupHoudini.sh @@ -11,4 +11,4 @@ export MOONRAY_CLASS_PATH=${omr_install_dir}/shader_json export ARRAS_SESSION_PATH=${omr_install_dir}/sessions PXR_PLUGINPATH_NAME=${omr_install_dir}/plugin/pxr #export HOUDINI_DSO_ERROR=5 -export HOUDINI_PATH=/Applications/Houdini/Houdini20.0.751/Frameworks/Houdini.framework/Versions/Current/Resources/houdini:${omr_install_dir}/houdini/:${omr_install_dir}/plugin/houdini +export HOUDINI_PATH=/Applications/Houdini/Houdini21.0.680/Frameworks/Houdini.framework/Versions/Current/Resources/houdini:${omr_install_dir}/houdini/:${omr_install_dir}/plugin/houdini From e43cc0bc144f93e0f454356d3aea695c8607dfa6 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 11 May 2026 17:40:52 +0200 Subject: [PATCH 02/38] docs: add Houdini 21.0.680 macOS compatibility notes Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- docs/Houdini21_macOS_changes.md | 102 ++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 docs/Houdini21_macOS_changes.md diff --git a/docs/Houdini21_macOS_changes.md b/docs/Houdini21_macOS_changes.md new file mode 100644 index 00000000..deafbd01 --- /dev/null +++ b/docs/Houdini21_macOS_changes.md @@ -0,0 +1,102 @@ +# OpenMoonRay Houdini 21.0.680 macOS Compatibility Notes + +This document records the MoonRay macOS updates required for Houdini `21.0.680`. + +## Scope + +- Target platform: macOS +- Target DCC: Houdini `21.0.680` +- Goal: build MoonRay against Houdini-owned USD/PXR and Python 3.11 + +## Tested Environment + +- macOS: Tahoe (SDK observed during build: `MacOSX26.4.sdk`) +- Xcode: `26.0.1` (`/Applications/Xcode_26.0.1.app`) +- Houdini validated in this branch: `21.0.680` + +## Why These Changes Were Needed + +Houdini 21 moved to Python 3.11 and ships USD/PXR libraries inside the Houdini framework layout. MoonRay must consume those paths directly for include/library resolution and avoid building a separate local USD for the Houdini build path. + +## Required Compatibility Changes + +### 1) [`CMakeMacOSPresets.json`](../CMakeMacOSPresets.json) + +- `HOUDINI_INSTALL_DIR` set to: + - `/Applications/Houdini/Houdini21.0.680` +- `PXR_LIB_PREFIX` set to: + - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries` +- `PXR_INCLUDE_PREFIX` set to: + - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Resources/toolkit/include` +- `PXR_BOOST_PYTHON_LIB` set to: + - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries/libpxr_python.dylib` + +Important: in this tested setup, using `libhboost_python311-mt-a64.dylib` did not resolve all expected `pxr_boost::python` references during link, while `libpxr_python.dylib` did. + +### 2) [`scripts/macOS/setupHoudini.sh`](../scripts/macOS/setupHoudini.sh) + +- `HOUDINI_PATH` updated to Houdini 21.0.680 framework resources path. + +### 3) [`building/macOS/pxr-houdini/pxrTargets.cmake`](../building/macOS/pxr-houdini/pxrTargets.cmake) + +- `HPYTHONLIB` updated to: + - `$ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib` +- `HPYTHONINC` updated to: + - `$ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/include/python3.11` + +### 4) [`building/macOS/pxr-houdini/pxrConfig.cmake`](../building/macOS/pxr-houdini/pxrConfig.cmake) + +- PXR version metadata updated to: + - `PXR_MAJOR_VERSION "0"` + - `PXR_MINOR_VERSION "25"` + - `PXR_PATCH_VERSION "5"` + - `PXR_VERSION "2505"` + +### 5) [`building/macOS/CMakeLists.txt`](../building/macOS/CMakeLists.txt) + +- Boost source updated to `1.82.0` (`boost_1_82_0.tar.gz`) for Houdini 21 toolchain compatibility. + +### 6) [`building/macOS/pxr-houdini/pxrTargets-release.cmake`](../building/macOS/pxr-houdini/pxrTargets-release.cmake) + +- Houdini 21 library naming compatibility fix: + - `libpxr_usdRiImaging.dylib` -> `libpxr_usdRiPxrImaging.dylib` + +## Build Procedure Requirements (Houdini Path) + +- Build dependencies with Houdini USD mode enabled (skip local USD): + - `cmake -DNO_USD=1 ../building/macOS` + - `cmake --build .` +- If dependencies were previously built without `-DNO_USD=1`, clean `build-deps/` and `installs/` before rebuilding to avoid mixed USD linkage. + +## Environment-Specific Workarounds + +- In this macOS/Xcode environment, full `cmake --build --preset macos-houdini-release` required disabling Xcode code-signing attributes at configure time to avoid dynamic-library signing failures. +- This is an environment workaround, not a Houdini 21 compatibility requirement. + +## Validation Summary + +- Dependency build completed successfully with `-DNO_USD=1`. +- Main project configure/build completed successfully for Houdini preset. +- Install completed successfully. +- Moonray appears as a selectable renderer in the Solaris viewport. +- Houdini Solaris workflow is the intended runtime verification path. +- `moonray_gui` command-line test requires an active GUI display session; headless runs fail with `Cannot create window: no screens available`. + +## Houdini Sanity Reference + +- SideFX changelog reference (used as a sanity baseline when evaluating Houdini compatibility context): + - [SideFX changelog](https://www.sidefx.com/changelog/?categories=52&journal=17.5&show_versions=on) +- Note: this branch has not been tested against production Houdini `21.0.679`; validated test target remains Houdini `21.0.680`. +- Additional context: the Xcode compilation issue language in SideFX notes is generic; direct relevance to MoonRay-specific build/runtime behavior is currently uncertain. + +## Out of Scope + +- Any separate Houdini shader/HDA UX issues are not addressed by these changes. +- `cmake_modules` contains a local Boost macro adjustment: `cmake/MoonrayDso.cmake` updates `DWA_BOOST_VERSION` from `1073000` to `1082000`. This change is in the submodule working tree and is not part of the parent-repo commits in this branch. + +## Cross-Repo Linkage + +- Parent repo branch: + - [`Moonray-Houdini21-macOS`](https://github.com/rolledhand/openmoonray/tree/Moonray-Houdini21-macOS) +- Submodule repo branch: + - [`boost-1.82-macro-update`](https://github.com/rolledhand/cmake_modules/tree/boost-1.82-macro-update) From cc25a18b98c911195217c0a7be98a048baeb4264 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 11 May 2026 17:41:03 +0200 Subject: [PATCH 03/38] Houdini 21.0.671 setup + hdMoonray int64 conversion linkage (clean) Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- CMakeMacOSPresets.json | 2 +- docs/Houdini21_macOS_changes.md | 3 +++ moonray/hydra/hdMoonray | 2 +- scripts/macOS/setupHoudini.sh | 47 ++++++++++++++++++++++++++------- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/CMakeMacOSPresets.json b/CMakeMacOSPresets.json index 63af637e..f6e194ab 100644 --- a/CMakeMacOSPresets.json +++ b/CMakeMacOSPresets.json @@ -34,7 +34,7 @@ "inherits": "macos-environment", "environment": { "PREFIX_PXR" : "${sourceParentDir}/building/macOS/pxr-houdini", - "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini21.0.680", + "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini21.0.671", "PXR_LIB_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries", "PXR_INCLUDE_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Resources/toolkit/include", "PXR_DEPS_PREFIX" : "$env{DEPS_ROOT}", diff --git a/docs/Houdini21_macOS_changes.md b/docs/Houdini21_macOS_changes.md index deafbd01..d8219e83 100644 --- a/docs/Houdini21_macOS_changes.md +++ b/docs/Houdini21_macOS_changes.md @@ -100,3 +100,6 @@ Important: in this tested setup, using `libhboost_python311-mt-a64.dylib` did no - [`Moonray-Houdini21-macOS`](https://github.com/rolledhand/openmoonray/tree/Moonray-Houdini21-macOS) - Submodule repo branch: - [`boost-1.82-macro-update`](https://github.com/rolledhand/cmake_modules/tree/boost-1.82-macro-update) +- hdMoonray int64 conversion fix (Houdini 21.0.671 runtime): + - target branch: `houdini21-int64-fix` + - branch link: `https://github.com/rolledhand/hdMoonray/tree/houdini21-int64-fix` diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 6366b993..cea4442b 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 6366b993e276708ee4289e236fccef47f3b89d30 +Subproject commit cea4442baa390f94856f48225d23b1dde301c50a diff --git a/scripts/macOS/setupHoudini.sh b/scripts/macOS/setupHoudini.sh index 8f15cb9b..f78dd965 100644 --- a/scripts/macOS/setupHoudini.sh +++ b/scripts/macOS/setupHoudini.sh @@ -1,14 +1,43 @@ omr_install_dir=/Applications/MoonRay/installs/openmoonray +houdini_fallback=/Applications/Houdini/Houdini21.0.671/Frameworks/Houdini.framework/Versions/Current/Resources/houdini -# save/restore PYTHONPATH, since Houdini seems to reject python3.9 +# save/restore PYTHONPATH, since Houdini runtime can be sensitive to non-Houdini site-packages OLDPP=${PYTHONPATH} -source ${omr_install_dir}/scripts/setup.sh +source "${omr_install_dir}/scripts/setup.sh" export PYTHONPATH=${OLDPP} -export REL=${omr_install_dir} -export RDL2_DSO_PATH=${omr_install_dir}/rdl2dso.proxy:${omr_install_dir}/rdl2dso -export MOONRAY_CLASS_PATH=${omr_install_dir}/shader_json -export ARRAS_SESSION_PATH=${omr_install_dir}/sessions -PXR_PLUGINPATH_NAME=${omr_install_dir}/plugin/pxr -#export HOUDINI_DSO_ERROR=5 -export HOUDINI_PATH=/Applications/Houdini/Houdini21.0.680/Frameworks/Houdini.framework/Versions/Current/Resources/houdini:${omr_install_dir}/houdini/:${omr_install_dir}/plugin/houdini +export REL="${omr_install_dir}" +export RDL2_DSO_PATH="${omr_install_dir}/rdl2dso.proxy:${omr_install_dir}/rdl2dso" +export MOONRAY_CLASS_PATH="${omr_install_dir}/shader_json" +export ARRAS_SESSION_PATH="${omr_install_dir}/sessions" + +prepend_unique_path() { + local add_path="$1" + local current="${2:-}" + case ":${current}:" in + *":${add_path}:"*) echo "${current}" ;; + *) + if [ -n "${current}" ]; then + echo "${add_path}:${current}" + else + echo "${add_path}" + fi + ;; + esac +} + +# Preserve any existing USD plugin search path (set by Houdini or shell packages), +# while guaranteeing Moonray plugin location is present first. +export PXR_PLUGINPATH_NAME="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGINPATH_NAME}")" +export PXR_PLUGIN_PATH="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGIN_PATH}")" +export PXR_PLUGINPATH_NAME="${PXR_PLUGINPATH_NAME%:}" +export PXR_PLUGIN_PATH="${PXR_PLUGIN_PATH%:}" + +# Prefer layering Moonray onto an existing Houdini env (from houdini_setup). If that +# was not sourced yet, fall back to the known Houdini 21.0.671 resources path. +if [ -n "${HOUDINI_PATH}" ]; then + export HOUDINI_PATH="$(prepend_unique_path "${omr_install_dir}/plugin/houdini" "${HOUDINI_PATH}")" + export HOUDINI_PATH="$(prepend_unique_path "${omr_install_dir}/houdini" "${HOUDINI_PATH}")" +else + export HOUDINI_PATH="${omr_install_dir}/houdini:${omr_install_dir}/plugin/houdini:${houdini_fallback}:&" +fi From 1a299f5f15d2d0a7d886f1b6b6bd2ebf63afe742 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 11 May 2026 17:41:13 +0200 Subject: [PATCH 04/38] Document Houdini 21 macOS compatibility status Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- docs/Houdini21_macOS_PR_notes.md | 42 ++++++++ docs/Houdini21_macOS_changes.md | 175 +++++++++++++------------------ moonray/moonray_dcc_plugins | 2 +- 3 files changed, 117 insertions(+), 102 deletions(-) create mode 100644 docs/Houdini21_macOS_PR_notes.md diff --git a/docs/Houdini21_macOS_PR_notes.md b/docs/Houdini21_macOS_PR_notes.md new file mode 100644 index 00000000..cbd184f8 --- /dev/null +++ b/docs/Houdini21_macOS_PR_notes.md @@ -0,0 +1,42 @@ +# PR Notes: Houdini 21 macOS Compatibility + +## Reviewer Summary +Adds macOS/Houdini 21 compatibility updates required to build and install OpenMoonRay against Houdini 21 using Houdini-provided USD/PXR and Python 3.11. This includes Boost 1.82 alignment, dependency fetch/build fixes, Houdini USD library naming compatibility, and source-driven Houdini plugin payload installation. This branch validates build/install/selectability in Solaris, but does not resolve native DWA material authoring/render behavior in Houdini 21. + +## Scope +- Build/dependency/install compatibility for Houdini 21 on macOS. +- No intended look/scene/rendering behavior change claim. +- No claim that native DWA Solaris authoring is fixed. + +## Validated vs Not Resolved +| Area | Status | Notes | +|---|---|---| +| Dependency build | Validated | Build path completes with current compatibility adjustments. | +| Main configure/build | Validated | Houdini-target integration build path succeeds. | +| Install | Validated | Install path completes and plugin payload is install-driven. | +| Solaris renderer selectability | Validated | MoonRay selectable in Solaris viewport. | +| Native DWA material influence in Material Library / mtlx subnet | Not resolved | Native DWA nodes do not reliably drive visible render changes in simple test. | +| Light live-update behavior (`spread` example) | Not resolved | Manual IPR update required in observed tests. | +| Dome light with texture | Not resolved | Not working in current tested branch state. | + +## Temporary Dependency Note +This branch may temporarily depend on a `moonray_dcc_plugins` fork/branch for Houdini 21 Python 3.11 payload alignment. +Current local kickoff pointer: +- branch: `houdini21-py311-kickoff` +- base commit: `eda4e57` (before additional fork commits) + +Current intent for that fork is minimal: +- install-driven `python3.11libs` payload support +- required Houdini plugin payload continuity (`otls`, `soho`, `toolbar`, integration files) +- no broad OTL/authoring semantic rewrite + +This fork kickoff is not fully stable as a native DWA workflow fix. Native DWA material behavior remains unresolved. + +## Runtime Observation Captured During Simple DWA Test +- `{dispatcherExit} Message Dispatcher [libcomputation_progmcrt.dylib] : exiting : reason is 'socket was disconnected'` +- `{clientSocketError} SocketPeer::receive: Bad file descriptor` +- `signal ... 15` + +## Reviewer Guidance +- Evaluate this PR primarily as compatibility/build/install integration work. +- Treat native DWA Solaris authoring/runtime issues as follow-up work outside this PR closure. diff --git a/docs/Houdini21_macOS_changes.md b/docs/Houdini21_macOS_changes.md index d8219e83..2f3254f0 100644 --- a/docs/Houdini21_macOS_changes.md +++ b/docs/Houdini21_macOS_changes.md @@ -1,105 +1,78 @@ -# OpenMoonRay Houdini 21.0.680 macOS Compatibility Notes +# Houdini 21 macOS Compatibility Changes -This document records the MoonRay macOS updates required for Houdini `21.0.680`. +## Summary +Adds macOS/Houdini 21 compatibility updates required to build and install OpenMoonRay against Houdini 21 using Houdini-provided USD/PXR and Python 3.11. This includes Boost 1.82 alignment, dependency fetch/build fixes, Houdini USD library naming compatibility, and source-driven Houdini plugin payload installation. This branch validates build/install/selectability in Solaris, but does not resolve native DWA material authoring/render behavior in Houdini 21. -## Scope - -- Target platform: macOS -- Target DCC: Houdini `21.0.680` -- Goal: build MoonRay against Houdini-owned USD/PXR and Python 3.11 +Compatibility and integration improved in this branch. Native DWA authoring/runtime behavior in Solaris remains unresolved. ## Tested Environment - -- macOS: Tahoe (SDK observed during build: `MacOSX26.4.sdk`) -- Xcode: `26.0.1` (`/Applications/Xcode_26.0.1.app`) -- Houdini validated in this branch: `21.0.680` - -## Why These Changes Were Needed - -Houdini 21 moved to Python 3.11 and ships USD/PXR libraries inside the Houdini framework layout. MoonRay must consume those paths directly for include/library resolution and avoid building a separate local USD for the Houdini build path. - -## Required Compatibility Changes - -### 1) [`CMakeMacOSPresets.json`](../CMakeMacOSPresets.json) - -- `HOUDINI_INSTALL_DIR` set to: - - `/Applications/Houdini/Houdini21.0.680` -- `PXR_LIB_PREFIX` set to: - - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries` -- `PXR_INCLUDE_PREFIX` set to: - - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Resources/toolkit/include` -- `PXR_BOOST_PYTHON_LIB` set to: - - `$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries/libpxr_python.dylib` - -Important: in this tested setup, using `libhboost_python311-mt-a64.dylib` did not resolve all expected `pxr_boost::python` references during link, while `libpxr_python.dylib` did. - -### 2) [`scripts/macOS/setupHoudini.sh`](../scripts/macOS/setupHoudini.sh) - -- `HOUDINI_PATH` updated to Houdini 21.0.680 framework resources path. - -### 3) [`building/macOS/pxr-houdini/pxrTargets.cmake`](../building/macOS/pxr-houdini/pxrTargets.cmake) - -- `HPYTHONLIB` updated to: - - `$ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib` -- `HPYTHONINC` updated to: - - `$ENV{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/include/python3.11` - -### 4) [`building/macOS/pxr-houdini/pxrConfig.cmake`](../building/macOS/pxr-houdini/pxrConfig.cmake) - -- PXR version metadata updated to: - - `PXR_MAJOR_VERSION "0"` - - `PXR_MINOR_VERSION "25"` - - `PXR_PATCH_VERSION "5"` - - `PXR_VERSION "2505"` - -### 5) [`building/macOS/CMakeLists.txt`](../building/macOS/CMakeLists.txt) - -- Boost source updated to `1.82.0` (`boost_1_82_0.tar.gz`) for Houdini 21 toolchain compatibility. - -### 6) [`building/macOS/pxr-houdini/pxrTargets-release.cmake`](../building/macOS/pxr-houdini/pxrTargets-release.cmake) - -- Houdini 21 library naming compatibility fix: - - `libpxr_usdRiImaging.dylib` -> `libpxr_usdRiPxrImaging.dylib` - -## Build Procedure Requirements (Houdini Path) - -- Build dependencies with Houdini USD mode enabled (skip local USD): - - `cmake -DNO_USD=1 ../building/macOS` - - `cmake --build .` -- If dependencies were previously built without `-DNO_USD=1`, clean `build-deps/` and `installs/` before rebuilding to avoid mixed USD linkage. - -## Environment-Specific Workarounds - -- In this macOS/Xcode environment, full `cmake --build --preset macos-houdini-release` required disabling Xcode code-signing attributes at configure time to avoid dynamic-library signing failures. -- This is an environment workaround, not a Houdini 21 compatibility requirement. - -## Validation Summary - -- Dependency build completed successfully with `-DNO_USD=1`. -- Main project configure/build completed successfully for Houdini preset. -- Install completed successfully. -- Moonray appears as a selectable renderer in the Solaris viewport. -- Houdini Solaris workflow is the intended runtime verification path. -- `moonray_gui` command-line test requires an active GUI display session; headless runs fail with `Cannot create window: no screens available`. - -## Houdini Sanity Reference - -- SideFX changelog reference (used as a sanity baseline when evaluating Houdini compatibility context): - - [SideFX changelog](https://www.sidefx.com/changelog/?categories=52&journal=17.5&show_versions=on) -- Note: this branch has not been tested against production Houdini `21.0.679`; validated test target remains Houdini `21.0.680`. -- Additional context: the Xcode compilation issue language in SideFX notes is generic; direct relevance to MoonRay-specific build/runtime behavior is currently uncertain. - -## Out of Scope - -- Any separate Houdini shader/HDA UX issues are not addressed by these changes. -- `cmake_modules` contains a local Boost macro adjustment: `cmake/MoonrayDso.cmake` updates `DWA_BOOST_VERSION` from `1073000` to `1082000`. This change is in the submodule working tree and is not part of the parent-repo commits in this branch. - -## Cross-Repo Linkage - -- Parent repo branch: - - [`Moonray-Houdini21-macOS`](https://github.com/rolledhand/openmoonray/tree/Moonray-Houdini21-macOS) -- Submodule repo branch: - - [`boost-1.82-macro-update`](https://github.com/rolledhand/cmake_modules/tree/boost-1.82-macro-update) -- hdMoonray int64 conversion fix (Houdini 21.0.671 runtime): - - target branch: `houdini21-int64-fix` - - branch link: `https://github.com/rolledhand/hdMoonray/tree/houdini21-int64-fix` +- macOS Tahoe +- Xcode 26.0.1 class toolchain flow +- Houdini 21 series validation target: +- `21.0.680` (original PR target) +- `21.0.671` (current local validation path) + +## Build/Dependency Changes +- Boost dependency alignment moved to `1.82.0`. +- Boost patch command made tolerant of already-applied state (`patch ... || true`). +- `log4cplus` dependency fetch moved from git tag checkout to release tarball: +- `https://github.com/log4cplus/log4cplus/releases/download/REL_2_0_5/log4cplus-2.0.5.tar.xz` +- `log4cplus` reproducible build workaround added before configure: +- `touch Makefile.in` +- `touch aclocal.m4 configure config.h.in` + +These are build reproducibility fixes, not renderer/material behavior fixes. + +## Python 3.11 Alignment +- Houdini 21 Python 3.11 include/lib/executable alignment was applied for USD/PXR integration in this branch. +- `building/macOS/user-config.jam` was moved from Python 3.9 config to Python 3.11 config for this compatibility track. +- Current pathing is validated for local Houdini 21 installs and should be parameterized before upstream hardening. + +## Houdini USD/PXR Pathing +- Houdini USD integration uses Houdini-provided PXR paths and library resolution. +- Compatibility mapping included: +- `libpxr_usdRiImaging.dylib` -> `libpxr_usdRiPxrImaging.dylib` +- PXR metadata compatibility updates for Houdini 21 USD packaging were applied in `pxr-houdini` CMake metadata. + +## Install Payload Changes +Source-driven install path includes Houdini plugin payload required for this branch validation: +- `otls` +- `soho` +- `python3.11libs` +- `toolbar` (where present in plugin payload layout) +- integration files under Houdini plugin tree + +Manual post-install copying is not the intended validation path for this branch. + +## Validation Results +- Dependency build: pass +- Main configure/build: pass +- Install: pass +- MoonRay renderer selectable in Solaris viewport: pass + +## DWA Material Test Status +Status: unresolved in current build. + +Observed behavior in Solaris Material Library / mtlx subnet: +- Native DWA nodes are visible/creatable, but do not reliably drive visible render changes in the simple test. +- Control path through `mtlxstandard_surface` can influence render, but this is not a native DWA workflow fix. + +Observed runtime/disconnect signal during simple DWA tests: +- `{dispatcherExit} Message Dispatcher [libcomputation_progmcrt.dylib] : exiting : reason is 'socket was disconnected'` +- `{clientSocketError} SocketPeer::receive: Bad file descriptor` +- `signal ... 15` + +## Known Unresolved Issues +- Native DWA material authoring/render influence in Solaris remains unresolved for this branch. +- Some light parameter edits (for example `spread`) require manual IPR refresh and do not always live-update automatically. +- Dome light textured workflow is currently not working in this tested branch state. + +## Notes For Reviewers +- This branch should be reviewed as a Houdini 21 macOS build/install compatibility update. +- Do not treat native DWA node visibility/selectability as evidence that native DWA material workflow is fixed. +- No claim is made that MaterialX/native DWA Solaris authoring is production-ready in this branch. + +## Future Cleanup / Upstreaming Notes +- Parameterize local Houdini/Python paths before upstream merge hardening. +- Keep compatibility/build fixes separated from shader authoring/runtime behavior work. +- Track native DWA Solaris authoring/runtime closure as a follow-up effort. diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index eda4e578..0111d46b 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit eda4e578a2adee2cd7478035e927e4b69c4f91bd +Subproject commit 0111d46b1f9e9844a99d4a9e934eb555c69cbbf6 From 9ee53f2766d8159e1149b9b41b34378e2038b15d Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 11 May 2026 17:41:13 +0200 Subject: [PATCH 05/38] Houdini 21 macOS: apply build compatibility updates Adds remaining parent-repo build/setup compatibility changes for Houdini 21 macOS. Aligns Houdini mode preset/build config with Python 3.11 and Boost Python 3.11. Includes dependency/build reproducibility updates where staged. Includes Houdini USD/PXR compatibility mapping if staged. Does not claim native DWA material workflow is fixed. Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- CMakeMacOSPresets.json | 3 ++- building/macOS/CMakeLists.txt | 17 +++++++++-------- building/macOS/user-config.jam | 6 +++--- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- scripts/macOS/setupHoudini.sh | 7 +++---- 6 files changed, 19 insertions(+), 18 deletions(-) diff --git a/CMakeMacOSPresets.json b/CMakeMacOSPresets.json index f6e194ab..1e5b9f71 100644 --- a/CMakeMacOSPresets.json +++ b/CMakeMacOSPresets.json @@ -42,7 +42,8 @@ }, "cacheVariables": { "CMAKE_PREFIX_PATH": "$env{DEPS_ROOT};$env{PREFIX_PXR}", - "MOONRAY_USE_HOUDINI": "TRUE" + "MOONRAY_USE_HOUDINI": "TRUE", + "BOOST_PYTHON_COMPONENT_NAME": "python311" } }, { diff --git a/building/macOS/CMakeLists.txt b/building/macOS/CMakeLists.txt index fca0f285..e0b3c0b4 100644 --- a/building/macOS/CMakeLists.txt +++ b/building/macOS/CMakeLists.txt @@ -23,7 +23,7 @@ set(THIS_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # User configurable settings set(InstallRoot ${rootSrcDir}/../../../../installs CACHE FILEPATH "Install root for dependencies") -set(PythonVer 3.9.6 CACHE STRING "Python version (n.m), e.g. 3.6") +set(PythonVer 3.11 CACHE STRING "Python version (n.m), e.g. 3.6") set(PythonRoot /usr CACHE FILEPATH "Location of Python install") ExternalProject_Add(Blosc @@ -42,7 +42,7 @@ ExternalProject_Add(Boost URL https://sourceforge.net/projects/boost/files/boost/1.82.0/boost_1_82_0.tar.gz UPDATE_COMMAND ./bootstrap.sh --prefix=${InstallRoot} --with-toolset=clang linkflags="-arch ${BOOST_ARCH}" CONFIGURE_COMMAND "" - PATCH_COMMAND patch -p3 -N < ${THIS_DIR}/Boost.patch + PATCH_COMMAND patch -p3 -N < ${THIS_DIR}/Boost.patch || true BUILD_COMMAND ./b2 install ${JOBS_ARG} --user-config=${THIS_DIR}/user-config.jam --with_python variant=release link=shared threading=multi define=BOOST_UNORDERED_HAVE_PIECEWISE_CONSTRUCT=0 BUILD_IN_SOURCE 1 INSTALL_COMMAND "" @@ -146,9 +146,10 @@ ExternalProject_Add(OpenVDB set(CHAIN OpenVDB) ExternalProject_Add(Log4CPlus - GIT_REPOSITORY https://github.com/log4cplus/log4cplus - GIT_TAG REL_2_0_5 + URL https://github.com/log4cplus/log4cplus/releases/download/REL_2_0_5/log4cplus-2.0.5.tar.xz PATCH_COMMAND patch -p1 -N < ${THIS_DIR}/log4plus-limit-threads.patch || true + COMMAND find . -name "Makefile.in" -exec touch {} + + COMMAND touch aclocal.m4 configure config.h.in BUILD_IN_SOURCE 1 CONFIGURE_COMMAND ./configure --prefix ${InstallRoot} BUILD_COMMAND make @@ -332,11 +333,11 @@ if(NOT NO_USD) -DPXR_ENABLE_PYTHON_SUPPORT=ON -DPXR_USE_PYTHON_3=ON -DPXR_USE_DEBUG_PYTHON=OFF - -DPYTHON_EXECUTABLE=/usr/bin/python3 - -DPYTHON_LIBRARY=/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/libpython3.9.dylib - -DPYTHON_INCLUDE_DIR=/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/Headers + -DPYTHON_EXECUTABLE=/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/bin/python3.11 + -DPYTHON_LIBRARY=/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib + -DPYTHON_INCLUDE_DIR=/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/include/python3.11 -DPYTHON_VERSION_MAJOR=3 - -DPYTHON_VERSION_MINOR=9 + -DPYTHON_VERSION_MINOR=11 -DTBB_USE_DEBUG_BUILD=OFF -DPXR_BUILD_TESTS=OFF -DPXR_BUILD_EXAMPLES=OFF diff --git a/building/macOS/user-config.jam b/building/macOS/user-config.jam index f163655e..797ab8ce 100644 --- a/building/macOS/user-config.jam +++ b/building/macOS/user-config.jam @@ -1,6 +1,6 @@ -using python : 3.9 +using python : 3.11 : "/usr/bin/python3" - : "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/Headers" - : "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib" + : "/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/include/python3.11" + : "/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/lib" ; using clang : : : -"arch arm64" "-arch arm64" ; diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index cea4442b..cea44425 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit cea4442baa390f94856f48225d23b1dde301c50a +Subproject commit cea4442546df3a2538d8bbb641b9602734e6ffd0 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 0111d46b..0111d467 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 0111d46b1f9e9844a99d4a9e934eb555c69cbbf6 +Subproject commit 0111d46793435b8472a5b71c4660203c7251cbae diff --git a/scripts/macOS/setupHoudini.sh b/scripts/macOS/setupHoudini.sh index f78dd965..5539e317 100644 --- a/scripts/macOS/setupHoudini.sh +++ b/scripts/macOS/setupHoudini.sh @@ -26,15 +26,14 @@ prepend_unique_path() { esac } -# Preserve any existing USD plugin search path (set by Houdini or shell packages), -# while guaranteeing Moonray plugin location is present first. +# Preserve any existing USD plugin search path while guaranteeing MoonRay plugin location is present. export PXR_PLUGINPATH_NAME="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGINPATH_NAME}")" export PXR_PLUGIN_PATH="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGIN_PATH}")" export PXR_PLUGINPATH_NAME="${PXR_PLUGINPATH_NAME%:}" export PXR_PLUGIN_PATH="${PXR_PLUGIN_PATH%:}" -# Prefer layering Moonray onto an existing Houdini env (from houdini_setup). If that -# was not sourced yet, fall back to the known Houdini 21.0.671 resources path. +# Prefer layering MoonRay onto an existing Houdini env (from houdini_setup). +# If that wasn't sourced yet, fall back to the known Houdini 21.0.671 resources path. if [ -n "${HOUDINI_PATH}" ]; then export HOUDINI_PATH="$(prepend_unique_path "${omr_install_dir}/plugin/houdini" "${HOUDINI_PATH}")" export HOUDINI_PATH="$(prepend_unique_path "${omr_install_dir}/houdini" "${HOUDINI_PATH}")" From aefd23bad50a64882e0e2b7cfa8dfcadf10136a1 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sun, 31 May 2026 20:07:23 +0200 Subject: [PATCH 06/38] Houdini 20.5: wire macOS Solaris integration branches Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- CMakeMacOSPresets.json | 17 ++++++------- building/macOS/CMakeLists.txt | 17 +++++++++---- building/macOS/pxr-houdini/pxrConfig.cmake | 2 +- building/macOS/user-config.jam | 6 ++--- moonray/hydra/hdMoonray | 2 +- moonray/hydra/moonray_sdr_plugins | 2 +- moonray/moonray | 2 +- moonray/moonray_dcc_plugins | 2 +- moonray/moonshine_usd | 2 +- moonray/render_profile_viewer | 2 +- moonray/scene_rdl2 | 2 +- scripts/Rocky9/setupHoudini.sh | 2 +- scripts/macOS/setupHoudini.sh | 28 +++++++++++++++++----- scripts/setup.sh | 2 +- 14 files changed, 57 insertions(+), 31 deletions(-) diff --git a/CMakeMacOSPresets.json b/CMakeMacOSPresets.json index 1e5b9f71..384e9e41 100644 --- a/CMakeMacOSPresets.json +++ b/CMakeMacOSPresets.json @@ -5,9 +5,10 @@ "name": "macos-environment", "hidden": true, "environment": { - "DEPS_ROOT" : "${sourceParentDir}/installs", - "BUILD_DIR" : "${sourceParentDir}/build", + "DEPS_ROOT" : "/Applications/MoonRay/installs", + "BUILD_DIR" : "/Applications/MoonRay/build", "Boost_ROOT" : "$env{DEPS_ROOT}", + "TBB_ROOT": "$env{DEPS_ROOT}", "Libuuid_ROOT" : "$env{DEPS_ROOT}", "CppUnit_ROOT" : "$env{DEPS_ROOT}", "ISPC" : "$env{DEPS_ROOT}/bin/ispc", @@ -22,7 +23,7 @@ "PXR_INCLUDE_DIRS" : "$env{DEPS_ROOT}/include", "Random123_ROOT" : "$env{DEPS_ROOT}", "ZLIB_ROOT" : "$env{DEPS_ROOT}", - "OIIO_PYTHON" : "$env{DEPS_ROOT}/lib/python3.9/site-packages" + "OIIO_PYTHON" : "$env{DEPS_ROOT}/lib/python3.11/site-packages" }, "cacheVariables": { "CMAKE_PREFIX_PATH": "$env{DEPS_ROOT}" @@ -33,12 +34,12 @@ "hidden": true, "inherits": "macos-environment", "environment": { - "PREFIX_PXR" : "${sourceParentDir}/building/macOS/pxr-houdini", - "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini21.0.671", + "PREFIX_PXR" : "/Applications/MoonRay/building/macOS/pxr-houdini", + "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini20.5.684", "PXR_LIB_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries", "PXR_INCLUDE_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Resources/toolkit/include", "PXR_DEPS_PREFIX" : "$env{DEPS_ROOT}", - "PXR_BOOST_PYTHON_LIB" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries/libpxr_python.dylib" + "PXR_BOOST_PYTHON_LIB" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries/libhboost_python311.dylib" }, "cacheVariables": { "CMAKE_PREFIX_PATH": "$env{DEPS_ROOT};$env{PREFIX_PXR}", @@ -53,7 +54,7 @@ "binaryDir": "$env{BUILD_DIR}", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", - "CMAKE_INSTALL_PREFIX": "${sourceParentDir}/installs/openmoonray" + "CMAKE_INSTALL_PREFIX": "/Applications/MoonRay/installs/openmoonray" }, "generator": "Xcode" }, @@ -64,7 +65,7 @@ "binaryDir": "$env{BUILD_DIR}", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", - "CMAKE_INSTALL_PREFIX": "${sourceParentDir}/installs/openmoonray" + "CMAKE_INSTALL_PREFIX": "/Applications/MoonRay/installs/openmoonray" }, "generator": "Xcode" } diff --git a/building/macOS/CMakeLists.txt b/building/macOS/CMakeLists.txt index e0b3c0b4..bdeaf1e7 100644 --- a/building/macOS/CMakeLists.txt +++ b/building/macOS/CMakeLists.txt @@ -25,6 +25,15 @@ set(THIS_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(InstallRoot ${rootSrcDir}/../../../../installs CACHE FILEPATH "Install root for dependencies") set(PythonVer 3.11 CACHE STRING "Python version (n.m), e.g. 3.6") set(PythonRoot /usr CACHE FILEPATH "Location of Python install") +if(DEFINED ENV{HOUDINI_INSTALL_DIR}) + set(_defaultHoudiniInstallDir "$ENV{HOUDINI_INSTALL_DIR}") +elseif(DEFINED ENV{HFS}) + file(REAL_PATH "$ENV{HFS}/../../../../.." _defaultHoudiniInstallDir) +else() + set(_defaultHoudiniInstallDir "/Applications/Houdini/Houdini20.5.684") +endif() +set(HOUDINI_INSTALL_DIR "${_defaultHoudiniInstallDir}" CACHE PATH "Houdini install root") +set(HoudiniPythonRoot "${HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/${PythonVer}") ExternalProject_Add(Blosc GIT_REPOSITORY https://github.com/Blosc/c-blosc @@ -43,7 +52,7 @@ ExternalProject_Add(Boost UPDATE_COMMAND ./bootstrap.sh --prefix=${InstallRoot} --with-toolset=clang linkflags="-arch ${BOOST_ARCH}" CONFIGURE_COMMAND "" PATCH_COMMAND patch -p3 -N < ${THIS_DIR}/Boost.patch || true - BUILD_COMMAND ./b2 install ${JOBS_ARG} --user-config=${THIS_DIR}/user-config.jam --with_python variant=release link=shared threading=multi define=BOOST_UNORDERED_HAVE_PIECEWISE_CONSTRUCT=0 + BUILD_COMMAND ./b2 install ${JOBS_ARG} --user-config=${THIS_DIR}/user-config.jam --with-python python=${PythonVer} variant=release link=shared threading=multi architecture=arm address-model=64 define=BOOST_UNORDERED_HAVE_PIECEWISE_CONSTRUCT=0 BUILD_IN_SOURCE 1 INSTALL_COMMAND "" DEPENDS ${CHAIN} @@ -333,9 +342,9 @@ if(NOT NO_USD) -DPXR_ENABLE_PYTHON_SUPPORT=ON -DPXR_USE_PYTHON_3=ON -DPXR_USE_DEBUG_PYTHON=OFF - -DPYTHON_EXECUTABLE=/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/bin/python3.11 - -DPYTHON_LIBRARY=/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib - -DPYTHON_INCLUDE_DIR=/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/include/python3.11 + -DPYTHON_EXECUTABLE=${HoudiniPythonRoot}/bin/python${PythonVer} + -DPYTHON_LIBRARY=${HoudiniPythonRoot}/lib/libpython${PythonVer}.dylib + -DPYTHON_INCLUDE_DIR=${HoudiniPythonRoot}/include/python${PythonVer} -DPYTHON_VERSION_MAJOR=3 -DPYTHON_VERSION_MINOR=11 -DTBB_USE_DEBUG_BUILD=OFF diff --git a/building/macOS/pxr-houdini/pxrConfig.cmake b/building/macOS/pxr-houdini/pxrConfig.cmake index 0384829a..a639b2d7 100644 --- a/building/macOS/pxr-houdini/pxrConfig.cmake +++ b/building/macOS/pxr-houdini/pxrConfig.cmake @@ -2,7 +2,7 @@ # Modified to use the version of USD with headers in $env{PXR_INCLUDE_PREFIX} # and libs in $env{PXR_LIB_PREFIX}, with dependencies installed to $env{PXR_DEPS_PREFIX} # $env{PXR_BOOST_PYTHON_LIB} must be set to the location of the boost_python so used by USD -# (Houdini names it libhboost_python39...) +# (Houdini names it libhboost_python311...) # Defines the following variables: # PXR_MAJOR_VERSION - Major version number. diff --git a/building/macOS/user-config.jam b/building/macOS/user-config.jam index 797ab8ce..84ef0904 100644 --- a/building/macOS/user-config.jam +++ b/building/macOS/user-config.jam @@ -1,6 +1,6 @@ using python : 3.11 - : "/usr/bin/python3" - : "/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/include/python3.11" - : "/Applications/Houdini/Houdini21.0.671/Frameworks/Python.framework/Versions/3.11/lib" + : "/Applications/Houdini/Houdini20.5.684/Frameworks/Houdini.framework/Versions/Current/Resources/bin/hython" + : "/Applications/Houdini/Houdini20.5.684/Frameworks/Python.framework/Versions/3.11/include/python3.11" + : "/Applications/Houdini/Houdini20.5.684/Frameworks/Python.framework/Versions/3.11/lib" ; using clang : : : -"arch arm64" "-arch arm64" ; diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index cea44425..77a673e0 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit cea4442546df3a2538d8bbb641b9602734e6ffd0 +Subproject commit 77a673e0e0f2869ad883021485e88ba41af12245 diff --git a/moonray/hydra/moonray_sdr_plugins b/moonray/hydra/moonray_sdr_plugins index 77a0ed6d..643f962d 160000 --- a/moonray/hydra/moonray_sdr_plugins +++ b/moonray/hydra/moonray_sdr_plugins @@ -1 +1 @@ -Subproject commit 77a0ed6dd3ff9389d46d0ca9e3471a56335b875a +Subproject commit 643f962d8fcebbc44a7e47113e07c53d50c424ff diff --git a/moonray/moonray b/moonray/moonray index 2343dde0..263f4c48 160000 --- a/moonray/moonray +++ b/moonray/moonray @@ -1 +1 @@ -Subproject commit 2343dde0bae2f70141b1004371282405e2d82215 +Subproject commit 263f4c480c65b4ca5c120c44b81dd246be4464e5 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 0111d467..952eea3d 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 0111d46793435b8472a5b71c4660203c7251cbae +Subproject commit 952eea3dad7250028db579e9c4467e187a00e451 diff --git a/moonray/moonshine_usd b/moonray/moonshine_usd index d3452328..495000e6 160000 --- a/moonray/moonshine_usd +++ b/moonray/moonshine_usd @@ -1 +1 @@ -Subproject commit d3452328c52fa60d891b4d5d7fbd18a14d9ba632 +Subproject commit 495000e6fe8e90084c9eb622c7a054958ddf9be2 diff --git a/moonray/render_profile_viewer b/moonray/render_profile_viewer index 2e68fc1a..5b183d40 160000 --- a/moonray/render_profile_viewer +++ b/moonray/render_profile_viewer @@ -1 +1 @@ -Subproject commit 2e68fc1aa618b545646ac7efb091fff38f347e1f +Subproject commit 5b183d40e45ca111092398b65114a045ae26e3b7 diff --git a/moonray/scene_rdl2 b/moonray/scene_rdl2 index b1309584..729d8747 160000 --- a/moonray/scene_rdl2 +++ b/moonray/scene_rdl2 @@ -1 +1 @@ -Subproject commit b1309584b7340bc665fdbf0c2519e69b41b3a9f3 +Subproject commit 729d874703dfce04866afbe381d97a846b24fe48 diff --git a/scripts/Rocky9/setupHoudini.sh b/scripts/Rocky9/setupHoudini.sh index c5b09444..0e959bea 100644 --- a/scripts/Rocky9/setupHoudini.sh +++ b/scripts/Rocky9/setupHoudini.sh @@ -1,6 +1,6 @@ omr_install_dir=/opt/MoonRay/installs/openmoonray -# save/restore PYTHONPATH, since Houdini seems to reject python3.9 +# save/restore PYTHONPATH, since Houdini runtime can be sensitive to non-Houdini site-packages OLDPP=${PYTHONPATH} source ${omr_install_dir}/scripts/setup.sh export PYTHONPATH=${OLDPP} diff --git a/scripts/macOS/setupHoudini.sh b/scripts/macOS/setupHoudini.sh index 5539e317..58fba17b 100644 --- a/scripts/macOS/setupHoudini.sh +++ b/scripts/macOS/setupHoudini.sh @@ -1,9 +1,12 @@ omr_install_dir=/Applications/MoonRay/installs/openmoonray -houdini_fallback=/Applications/Houdini/Houdini21.0.671/Frameworks/Houdini.framework/Versions/Current/Resources/houdini +houdini_install_dir=${HOUDINI_INSTALL_DIR:-/Applications/Houdini/Houdini20.5.684} +houdini_fallback="${houdini_install_dir}/Frameworks/Houdini.framework/Versions/Current/Resources/houdini" # save/restore PYTHONPATH, since Houdini runtime can be sensitive to non-Houdini site-packages OLDPP=${PYTHONPATH} -source "${omr_install_dir}/scripts/setup.sh" +if [ -f "${omr_install_dir}/scripts/setup.sh" ]; then + source "${omr_install_dir}/scripts/setup.sh" +fi export PYTHONPATH=${OLDPP} export REL="${omr_install_dir}" @@ -26,17 +29,30 @@ prepend_unique_path() { esac } +prepend_existing_path() { + local add_path="$1" + local current="${2:-}" + if [ -d "${add_path}" ]; then + prepend_unique_path "${add_path}" "${current}" + else + echo "${current}" + fi +} + # Preserve any existing USD plugin search path while guaranteeing MoonRay plugin location is present. export PXR_PLUGINPATH_NAME="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGINPATH_NAME}")" export PXR_PLUGIN_PATH="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGIN_PATH}")" export PXR_PLUGINPATH_NAME="${PXR_PLUGINPATH_NAME%:}" export PXR_PLUGIN_PATH="${PXR_PLUGIN_PATH%:}" +export PYTHONPATH="$(prepend_existing_path "${omr_install_dir}/lib/python" "${PYTHONPATH}")" # Prefer layering MoonRay onto an existing Houdini env (from houdini_setup). -# If that wasn't sourced yet, fall back to the known Houdini 21.0.671 resources path. +# If that wasn't sourced yet, fall back to the configured Houdini resources path. if [ -n "${HOUDINI_PATH}" ]; then - export HOUDINI_PATH="$(prepend_unique_path "${omr_install_dir}/plugin/houdini" "${HOUDINI_PATH}")" - export HOUDINI_PATH="$(prepend_unique_path "${omr_install_dir}/houdini" "${HOUDINI_PATH}")" + export HOUDINI_PATH="$(prepend_existing_path "${omr_install_dir}/plugin/houdini" "${HOUDINI_PATH}")" + export HOUDINI_PATH="$(prepend_existing_path "${omr_install_dir}/houdini" "${HOUDINI_PATH}")" else - export HOUDINI_PATH="${omr_install_dir}/houdini:${omr_install_dir}/plugin/houdini:${houdini_fallback}:&" + export HOUDINI_PATH="${houdini_fallback}:&" + export HOUDINI_PATH="$(prepend_existing_path "${omr_install_dir}/plugin/houdini" "${HOUDINI_PATH}")" + export HOUDINI_PATH="$(prepend_existing_path "${omr_install_dir}/houdini" "${HOUDINI_PATH}")" fi diff --git a/scripts/setup.sh b/scripts/setup.sh index 999594db..2308a0a3 100644 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -20,7 +20,7 @@ echo "Setting up release in ${omr_root}" export PATH=${omr_root}/bin:${PATH} # need python modules for the USD interface and for the RATS tests -export PYTHONPATH=${install_root}/lib/python:/usr/local/lib/python:${install_root}/lib64/python3.9/site-packages/:${PYTHONPATH} +export PYTHONPATH=${install_root}/lib/python:/usr/local/lib/python:${install_root}/lib64/python3.11/site-packages/:${PYTHONPATH} # tell moonray where to find dsos From 0f44716cfa5fca0c3d79598bb0567da3a1f1deb7 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 1 Jun 2026 00:16:49 +0200 Subject: [PATCH 07/38] Update MoonRay Houdini/Solaris submodule pins Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 77a673e0..d85ec555 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 77a673e0e0f2869ad883021485e88ba41af12245 +Subproject commit d85ec5554999c1fd9a209a1e15d3b0ef70407553 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 952eea3d..78ca7572 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 952eea3dad7250028db579e9c4467e187a00e451 +Subproject commit 78ca7572646afa7ca469b17db38eb6612c7805d0 From 058689165cd976848460a664431dc025a67b1d12 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 1 Jun 2026 01:08:23 +0200 Subject: [PATCH 08/38] Update MoonRay geometry settings submodule pins Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index d85ec555..24bac7ea 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit d85ec5554999c1fd9a209a1e15d3b0ef70407553 +Subproject commit 24bac7ea740ceb8e694a5c19bc0f625e9b375ca9 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 78ca7572..6f167d8c 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 78ca7572646afa7ca469b17db38eb6612c7805d0 +Subproject commit 6f167d8c280c1760351c31286fd38e3b7622b78b From 9220cf67d1840f09976d276c7ec34c914578ce58 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:13:45 +0200 Subject: [PATCH 09/38] Update MoonRay light translation submodule pins Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 24bac7ea..65e457b2 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 24bac7ea740ceb8e694a5c19bc0f625e9b375ca9 +Subproject commit 65e457b20f8d7ad36a3c1c39990f0b305f312489 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 6f167d8c..dbf22fa1 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 6f167d8c280c1760351c31286fd38e3b7622b78b +Subproject commit dbf22fa104ea673ad5c23eca84f8ef28dd43319e From b5e6f9ea122b1f9b4eda6d90b00f07d058ef4bbd Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 1 Jun 2026 11:29:38 +0200 Subject: [PATCH 10/38] Update MoonRay light shaping submodule pins Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 65e457b2..43964391 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 65e457b20f8d7ad36a3c1c39990f0b305f312489 +Subproject commit 439643916acd3082ac9aefe349661360035c0a1a diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index dbf22fa1..b01d7e01 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit dbf22fa104ea673ad5c23eca84f8ef28dd43319e +Subproject commit b01d7e0143e80baa79a716ff5005c9948c67e25d From be43cbe6a77ec584ecea005101cdd78b0cd1e663 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 1 Jun 2026 18:07:27 +0200 Subject: [PATCH 11/38] Checkpoint working MoonRay SpotLight override pins Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 43964391..27201a47 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 439643916acd3082ac9aefe349661360035c0a1a +Subproject commit 27201a47dae82a7df1eb4588dafa2c4c046a6623 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index b01d7e01..9bf49458 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit b01d7e0143e80baa79a716ff5005c9948c67e25d +Subproject commit 9bf4945815b3e6c4a39a62702ef89be0453ecc28 From 35bcc3cc4ed7e2b1908728a0d84332f22d3208b4 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 1 Jun 2026 21:21:34 +0200 Subject: [PATCH 12/38] Update hdMoonray light lifecycle pin Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 27201a47..f5331a86 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 27201a47dae82a7df1eb4588dafa2c4c046a6623 +Subproject commit f5331a867994df5792557130892e14a744a3c00b From b7e4bba76818c4339004c44e3213e52183e33103 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 1 Jun 2026 22:11:48 +0200 Subject: [PATCH 13/38] Update hdMoonray unit scale notes pin Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index f5331a86..8d1ded41 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit f5331a867994df5792557130892e14a744a3c00b +Subproject commit 8d1ded419a12fd98a0ad4e8652bd74cda4c55910 From 5a4e897dc222f48724e9edd5f8228177eaeb8d4c Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Tue, 2 Jun 2026 11:48:14 +0200 Subject: [PATCH 14/38] Checkpoint MoonRay Render Settings LOP pin Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/moonray_dcc_plugins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 9bf49458..8c995f81 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 9bf4945815b3e6c4a39a62702ef89be0453ecc28 +Subproject commit 8c995f8153dc7fb57be2faa106bee5dcd6972f3e From 37b15c790b9de49cdad8eb7cb4775ce70a6f8db3 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Tue, 2 Jun 2026 13:23:35 +0200 Subject: [PATCH 15/38] Checkpoint MoonRay Render Settings LOP pin v2 Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/moonray_dcc_plugins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 8c995f81..5f96be98 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 8c995f8153dc7fb57be2faa106bee5dcd6972f3e +Subproject commit 5f96be986f525cd112d50a52786bcb6efe04b396 From bdcf90c233d5f8dd2998e1f704d90b2d7e23e30a Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Tue, 2 Jun 2026 16:05:56 +0200 Subject: [PATCH 16/38] Checkpoint MoonRay Render Settings LOP and USD Render ROP pin Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 8d1ded41..2eb08084 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 8d1ded419a12fd98a0ad4e8652bd74cda4c55910 +Subproject commit 2eb0808460a6fe429bae83c16fb4cd2b93bbe428 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 5f96be98..68d7bc59 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 5f96be986f525cd112d50a52786bcb6efe04b396 +Subproject commit 68d7bc59538839b76a3a31b8ccae712a79782eef From 0bd156a34076d9bc7f1b2f6211c1e36143ebdaab Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sat, 6 Jun 2026 10:50:19 +0200 Subject: [PATCH 17/38] Update MoonRay render settings LOP pin Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/moonray_dcc_plugins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 68d7bc59..6cd0361b 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 68d7bc59538839b76a3a31b8ccae712a79782eef +Subproject commit 6cd0361b1372349d8fa82daa11c0df15b30481d5 From 51be9cfd9ee1c7627ca6a195db63e44224d630d5 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sat, 6 Jun 2026 20:35:59 +0200 Subject: [PATCH 18/38] Update hdMoonray documentation workflow pin Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 2eb08084..688868eb 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 2eb0808460a6fe429bae83c16fb4cd2b93bbe428 +Subproject commit 688868eb16a63187273241ff09b328368e15dfc0 From 73b84c7094ba745bfc65824ecd5ea091118bff23 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sat, 6 Jun 2026 21:20:53 +0200 Subject: [PATCH 19/38] Update MoonRay camera controls pins Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 688868eb..8d15dc07 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 688868eb16a63187273241ff09b328368e15dfc0 +Subproject commit 8d15dc07f511ebebf8804bb79ab0312fb86719db diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 6cd0361b..b12bd044 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 6cd0361b1372349d8fa82daa11c0df15b30481d5 +Subproject commit b12bd04448f337fddfdad5fbd5269fa501921196 From 7d241b1387d807c8672b53da05980827aa3cb4d5 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sun, 7 Jun 2026 15:07:58 +0200 Subject: [PATCH 20/38] Add native MoonRay light filter support Pins hdMoonray and moonray_dcc_plugins to the native Solaris light filter integration work. The DCC update adds generated MoonRay light filter VOP HDAs for Houdini's Light Filter Library workflow. The hdMoonray update adds light filter ramp interpolation token expansion so editable Solaris ramp filters can render with authored ramp point counts. Validated in Houdini/Solaris with MoonRay light filters, including ColorRampLightFilter ramps with more than the default two points. Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 8d15dc07..f3d66dc0 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 8d15dc07f511ebebf8804bb79ab0312fb86719db +Subproject commit f3d66dc0fb1ec4d1f5176a9f2f3d89a9e2cdef7c diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index b12bd044..cff423db 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit b12bd04448f337fddfdad5fbd5269fa501921196 +Subproject commit cff423db8f8fddde8923b8123a6264a0a67f1834 From 68275f7cb33379b6de24eacfa6ee3f9722c0ac09 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sun, 7 Jun 2026 16:46:30 +0200 Subject: [PATCH 21/38] Pin hdMoonray light filter integration updates Updates the hdMoonray submodule to include the initial native MoonRay light filter integration work for Houdini/Solaris. The pinned hdMoonray changes cover editable ramp interpolation handling, delegate path remapping for linked scene objects, and lifecycle hardening for light filters. This is an integration checkpoint. Additional light filters are exposed for validation, but not all filter types should be considered fully production-stable yet. Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index f3d66dc0..2ec78486 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit f3d66dc0fb1ec4d1f5176a9f2f3d89a9e2cdef7c +Subproject commit 2ec784869483836affdddc24fa071d5ec7f23e8b From 390d425c94cf856cea51568bf0c43eb1c2d8c484 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sat, 13 Jun 2026 13:33:32 +0200 Subject: [PATCH 22/38] Pin hdMoonray light filter lifecycle cleanup Updates the hdMoonray submodule with lifecycle hardening for native MoonRay light filters in Houdini/Solaris. Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 2ec78486..ad9442dd 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 2ec784869483836affdddc24fa071d5ec7f23e8b +Subproject commit ad9442dd9d3c320f7023f0595aad3424d5051a8c From c87d39e3146cf8d75346484c2f46024cff78fb71 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sat, 13 Jun 2026 17:13:29 +0200 Subject: [PATCH 23/38] Pin Render Settings evidence-gated updates Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index ad9442dd..e9499af6 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit ad9442dd9d3c320f7023f0595aad3424d5051a8c +Subproject commit e9499af60cf4a1d6e5d5d463d5e63622b67f89e9 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index cff423db..6890b91f 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit cff423db8f8fddde8923b8123a6264a0a67f1834 +Subproject commit 6890b91fb24b3075e6c471bf9b3a96ced1029be9 From 63570f0f1fe0e7fe759367b92f394f4a8e4e9b15 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sun, 14 Jun 2026 01:16:09 +0200 Subject: [PATCH 24/38] macOS: repair Houdini MoonRay runtime setup Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- CMakeLists.txt | 27 ++++++++++++++++++++++++++- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- scripts/macOS/setupHoudini.sh | 2 +- scripts/setup.sh | 2 +- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a9b83bd7..7c718068 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,6 +82,32 @@ add_subdirectory(moonray) add_subdirectory(rats) add_subdirectory(scripts) +if(IsDarwinPlatform) + install(CODE [[ + set(_omr_codesign_root "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}") + execute_process( + COMMAND /bin/bash -c " + set -e + root=\"$1\" + command -v codesign >/dev/null 2>&1 || exit 0 + for dir in \"$root/bin\" \"$root/lib\" \"$root/plugin\"; do + [ -d \"$dir\" ] || continue + find \"$dir\" -type f \\( -perm -111 -o -name '*.dylib' -o -name '*.so' \\) -print0 + done | while IFS= read -r -d '' file; do + if /usr/bin/file \"$file\" | /usr/bin/grep -q 'Mach-O'; then + /usr/bin/codesign --force --sign - \"$file\" + fi + done + " + _ "${_omr_codesign_root}" + RESULT_VARIABLE _omr_codesign_result + ) + if(NOT _omr_codesign_result EQUAL 0) + message(FATAL_ERROR "macOS ad-hoc codesign of installed OpenMoonRay runtime failed") + endif() + ]]) +endif() + if(GLD STREQUAL "$ENV{STUDIO}") install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/SDKScript DESTINATION . @@ -90,4 +116,3 @@ if(GLD STREQUAL "$ENV{STUDIO}") GROUP_READ GROUP_WRITE WORLD_READ) endif() - diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index e9499af6..2909d443 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit e9499af60cf4a1d6e5d5d463d5e63622b67f89e9 +Subproject commit 2909d443016de2fa89bae1ec8af6c66c302da156 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 6890b91f..e919e168 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 6890b91fb24b3075e6c471bf9b3a96ced1029be9 +Subproject commit e919e168b679b52e1a024d3b7d33d58c844b32bc diff --git a/scripts/macOS/setupHoudini.sh b/scripts/macOS/setupHoudini.sh index 58fba17b..77526c02 100644 --- a/scripts/macOS/setupHoudini.sh +++ b/scripts/macOS/setupHoudini.sh @@ -1,5 +1,5 @@ omr_install_dir=/Applications/MoonRay/installs/openmoonray -houdini_install_dir=${HOUDINI_INSTALL_DIR:-/Applications/Houdini/Houdini20.5.684} +houdini_install_dir=${HOUDINI_INSTALL_DIR:-/Applications/Houdini/Houdini20.5.584} houdini_fallback="${houdini_install_dir}/Frameworks/Houdini.framework/Versions/Current/Resources/houdini" # save/restore PYTHONPATH, since Houdini runtime can be sensitive to non-Houdini site-packages diff --git a/scripts/setup.sh b/scripts/setup.sh index 2308a0a3..b16424ac 100644 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -20,7 +20,7 @@ echo "Setting up release in ${omr_root}" export PATH=${omr_root}/bin:${PATH} # need python modules for the USD interface and for the RATS tests -export PYTHONPATH=${install_root}/lib/python:/usr/local/lib/python:${install_root}/lib64/python3.11/site-packages/:${PYTHONPATH} +export PYTHONPATH=${omr_root}/lib/python:${install_root}/lib/python:/usr/local/lib/python:${install_root}/lib64/python3.11/site-packages/:${PYTHONPATH} # tell moonray where to find dsos From 2e0e09b3a21db6d901a9065ab7cd8b4767cbffa9 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sun, 14 Jun 2026 16:03:47 +0200 Subject: [PATCH 25/38] Pin hdMoonray OCIO working-space conversion Pin hdMoonray to c7bbd30109884fcaf4c2536c1849dd54208cb0c1, which adds OpenColorIO-backed renderer working-space conversion for authored typed colors. No DCC Render Settings LOP/ROP output-path changes are included. No AOV transport changes are included. No Arras runtime/signing changes are included beyond the validated hdMoonray submodule pin. Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 2909d443..c7bbd301 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 2909d443016de2fa89bae1ec8af6c66c302da156 +Subproject commit c7bbd30109884fcaf4c2536c1849dd54208cb0c1 From f374a653e0e1d3e6e08f37f78515f1007ab2ec66 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sun, 14 Jun 2026 17:06:33 +0200 Subject: [PATCH 26/38] Pin DCC USD Render ROP output path fix Pins moonray_dcc_plugins to the MoonRay USD Render ROP output-path wiring fix. No backend, OCIO, Arras, AOV transport, or renderer metadata changes included. Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/moonray_dcc_plugins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index e919e168..d0663882 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit e919e168b679b52e1a024d3b7d33d58c844b32bc +Subproject commit d0663882c12b0de97c18a0ab474ee86ca61506ee From 9b35b254298b8a06afe3c84d78f943e341a3aa75 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sun, 14 Jun 2026 18:49:36 +0200 Subject: [PATCH 27/38] Pin DCC sampling UI state fix Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/moonray_dcc_plugins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index d0663882..2a88d6ef 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit d0663882c12b0de97c18a0ab474ee86ca61506ee +Subproject commit 2a88d6ef9f64d9389e6ef3ab60bd278250c5a68e From 672329dbfa6e8e5a2a281872f32da3c2a3860c70 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sun, 14 Jun 2026 21:05:02 +0200 Subject: [PATCH 28/38] Pin native AOV Apple Silicon repair Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray | 2 +- moonray/scene_rdl2 | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index c7bbd301..4234f273 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit c7bbd30109884fcaf4c2536c1849dd54208cb0c1 +Subproject commit 4234f273fa5f3bb36cfd4a3fa5dff39da1cdd69d diff --git a/moonray/moonray b/moonray/moonray index 263f4c48..f030beaf 160000 --- a/moonray/moonray +++ b/moonray/moonray @@ -1 +1 @@ -Subproject commit 263f4c480c65b4ca5c120c44b81dd246be4464e5 +Subproject commit f030beafeeec87ec36f07e13a0050de183174326 diff --git a/moonray/scene_rdl2 b/moonray/scene_rdl2 index 729d8747..e8baaa6c 160000 --- a/moonray/scene_rdl2 +++ b/moonray/scene_rdl2 @@ -1 +1 @@ -Subproject commit 729d874703dfce04866afbe381d97a846b24fe48 +Subproject commit e8baaa6ccf89de5c22e85b7fa2d73f8fdbc7d137 From 0d8d2da55efbed49959939794532ab896bb87531 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sun, 14 Jun 2026 23:24:59 +0200 Subject: [PATCH 29/38] Update MoonRay DCC native AOV UI pin Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/moonray_dcc_plugins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 2a88d6ef..e1980e56 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 2a88d6ef9f64d9389e6ef3ab60bd278250c5a68e +Subproject commit e1980e564d2b440f7ea7dddfa03544b97859b19e From df238d381ac370e2c6faf7ab56a9a477afd85f8f Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sun, 14 Jun 2026 23:59:44 +0200 Subject: [PATCH 30/38] Update MoonRay DCC material AOV UI pin Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/moonray_dcc_plugins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index e1980e56..467fcff5 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit e1980e564d2b440f7ea7dddfa03544b97859b19e +Subproject commit 467fcff5fa60716c182845e6881a2580e9443d65 From d169571e144d42d7542bcfcc0d9a4f3fc61a119d Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 15 Jun 2026 12:23:04 +0200 Subject: [PATCH 31/38] Update MoonRay DCC time-dependency fixes Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/moonray_dcc_plugins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 467fcff5..bf2543c1 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 467fcff5fa60716c182845e6881a2580e9443d65 +Subproject commit bf2543c1273c3cb5ff84265a4c372e0289cfbb05 From 63298dcef62a8099092032a6896f37481e2447f0 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:34:52 +0200 Subject: [PATCH 32/38] Harden MoonRay setup Python path discovery Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- scripts/setup.sh | 52 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/scripts/setup.sh b/scripts/setup.sh index b16424ac..d1124efe 100644 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -8,10 +8,19 @@ omr_root="$(realpath ${sourcedir}/..)" # Walk up to find the top-level install dir where the dependencies are installed install_root=${omr_root} -while [ "$(basename ${install_root})" != "installs" ] +while [ "$(basename ${install_root})" != "installs" ] && [ "${install_root}" != "/" ] do install_root=$(dirname ${install_root}) done +if [ "$(basename ${install_root})" != "installs" ]; then + sibling_installs="$(dirname "$(dirname "${omr_root}")")/installs" + if [ -d "${sibling_installs}" ]; then + install_root="$(realpath "${sibling_installs}")" + else + echo "Warning: could not find parent installs directory for ${omr_root}; using ${omr_root}" + install_root=${omr_root} + fi +fi echo "Found install root at ${install_root}" echo "Setting up release in ${omr_root}" @@ -19,8 +28,35 @@ echo "Setting up release in ${omr_root}" # NB required for Arras to function (it needs to find execComp) export PATH=${omr_root}/bin:${PATH} -# need python modules for the USD interface and for the RATS tests -export PYTHONPATH=${omr_root}/lib/python:${install_root}/lib/python:/usr/local/lib/python:${install_root}/lib64/python3.11/site-packages/:${PYTHONPATH} +prepend_unique_path() { + add_path="$1" + current="${2:-}" + case ":${current}:" in + *":${add_path}:"*) echo "${current}" ;; + *) + if [ -n "${current}" ]; then + echo "${add_path}:${current}" + else + echo "${add_path}" + fi + ;; + esac +} + +prepend_existing_path() { + add_path="$1" + current="${2:-}" + if [ -d "${add_path}" ]; then + prepend_unique_path "${add_path}" "${current}" + else + echo "${current}" + fi +} + +# Need Python modules for the USD interface and for the RATS tests. Only add +# paths that exist so source-tree setup does not inject stale system locations. +export PYTHONPATH="$(prepend_existing_path "${omr_root}/lib/python" "${PYTHONPATH}")" +export PYTHONPATH="$(prepend_existing_path "${omr_root}/lib64/python3.11/site-packages" "${PYTHONPATH}")" # tell moonray where to find dsos @@ -43,7 +79,11 @@ export PXR_PLUGIN_PATH=${omr_root}/plugin/pxr:${PXR_PLUGIN_PATH} # for legacy DW # create shader descriptions if they don't exist if [ ! -d "${omr_root}/shader_json" ] then - echo "Building shader descriptions..." - ${omr_root}/bin/rdl2_json_exporter --out ${omr_root}/shader_json/ --sparse - echo "...done" + if [ -x "${omr_root}/bin/rdl2_json_exporter" ]; then + echo "Building shader descriptions..." + ${omr_root}/bin/rdl2_json_exporter --out ${omr_root}/shader_json/ --sparse + echo "...done" + else + echo "Warning: ${omr_root}/bin/rdl2_json_exporter not found; shader descriptions were not generated" + fi fi From 297217e166964e84b56fd1aa013cb6e76fbe9bff Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:35:13 +0200 Subject: [PATCH 33/38] Update MoonRay Houdini integration pins Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/hydra/moonray_sdr_plugins | 2 +- moonray/moonray_dcc_plugins | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 4234f273..f40147f9 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 4234f273fa5f3bb36cfd4a3fa5dff39da1cdd69d +Subproject commit f40147f96045386aa086940333d597e100942612 diff --git a/moonray/hydra/moonray_sdr_plugins b/moonray/hydra/moonray_sdr_plugins index 643f962d..3c7f9b65 160000 --- a/moonray/hydra/moonray_sdr_plugins +++ b/moonray/hydra/moonray_sdr_plugins @@ -1 +1 @@ -Subproject commit 643f962d8fcebbc44a7e47113e07c53d50c424ff +Subproject commit 3c7f9b65df9fb8f05f037e2a9cb2aa625e434113 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index bf2543c1..d95e4f63 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit bf2543c1273c3cb5ff84265a4c372e0289cfbb05 +Subproject commit d95e4f631fd20112660bf07fa96f6a28df2f2a0a From 55e5e6b37d9899b54e155df25a9519682feb6a8e Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 22 Jun 2026 16:11:14 +0200 Subject: [PATCH 34/38] Update MoonRay OCIO integration pins Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- building/Rocky9/CMakeLists.txt | 3 +- building/macOS/CMakeLists.txt | 2 +- moonray/hydra/hdMoonray | 2 +- moonray/moonray | 2 +- moonray/moonray_dcc_plugins | 2 +- moonray/moonshine | 2 +- moonray/scene_rdl2 | 2 +- scripts/macOS/setupHoudini.sh | 54 ++++++++++++++++++++++++++++++++++ 8 files changed, 61 insertions(+), 8 deletions(-) diff --git a/building/Rocky9/CMakeLists.txt b/building/Rocky9/CMakeLists.txt index ed551a42..ab8a52bc 100644 --- a/building/Rocky9/CMakeLists.txt +++ b/building/Rocky9/CMakeLists.txt @@ -92,7 +92,7 @@ set(CHAIN embree) ExternalProject_Add(OpenColorIO GIT_REPOSITORY https://github.com/AcademySoftwareFoundation/OpenColorIO - GIT_TAG d1ef24cbf8021f642e42f45f50c2cd4cc77141ce # v2.2.1 + GIT_TAG b35fb73b8674176098d3084deaa9da3d111d72d1 # v2.3.0 INSTALL_DIR ${InstallRoot} CMAKE_ARGS -DOCIO_BUILD_APPS=OFF @@ -205,4 +205,3 @@ ExternalProject_Add(OptiXHeaders DEPENDS ${CHAIN} ) set(CHAIN OptiXHeaders) - diff --git a/building/macOS/CMakeLists.txt b/building/macOS/CMakeLists.txt index bdeaf1e7..030063da 100644 --- a/building/macOS/CMakeLists.txt +++ b/building/macOS/CMakeLists.txt @@ -225,7 +225,7 @@ set(CHAIN embree) ExternalProject_Add(OpenColorIO GIT_REPOSITORY https://github.com/AcademySoftwareFoundation/OpenColorIO - GIT_TAG 056b7b0cb0d087961e9dba75104820e44faf52a1 # v2.0.2 + GIT_TAG b35fb73b8674176098d3084deaa9da3d111d72d1 # v2.3.0 BUILD_COMMAND make ${JOBS_ARG} CMAKE_ARGS -DCMAKE_PREFIX_PATH:PATH=${InstallRoot} diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index f40147f9..34d2d7eb 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit f40147f96045386aa086940333d597e100942612 +Subproject commit 34d2d7ebe96c12b4d899e6417245dc4837b97ee4 diff --git a/moonray/moonray b/moonray/moonray index f030beaf..e403e802 160000 --- a/moonray/moonray +++ b/moonray/moonray @@ -1 +1 @@ -Subproject commit f030beafeeec87ec36f07e13a0050de183174326 +Subproject commit e403e8021ca760580d09a9a648a1fd9731a27de2 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index d95e4f63..04bd9a8b 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit d95e4f631fd20112660bf07fa96f6a28df2f2a0a +Subproject commit 04bd9a8b8de71c11e0a283aa9bb514ca7f397cd2 diff --git a/moonray/moonshine b/moonray/moonshine index 32a6e649..5bec7a4b 160000 --- a/moonray/moonshine +++ b/moonray/moonshine @@ -1 +1 @@ -Subproject commit 32a6e64967677008bddf05ea2fc5fe5533c0f47b +Subproject commit 5bec7a4be722894ba70f22760d194c862eb67280 diff --git a/moonray/scene_rdl2 b/moonray/scene_rdl2 index e8baaa6c..b7aa377e 160000 --- a/moonray/scene_rdl2 +++ b/moonray/scene_rdl2 @@ -1 +1 @@ -Subproject commit e8baaa6ccf89de5c22e85b7fa2d73f8fdbc7d137 +Subproject commit b7aa377ee59b6743806f9d3ba88f4e93cd91f317 diff --git a/scripts/macOS/setupHoudini.sh b/scripts/macOS/setupHoudini.sh index 77526c02..8db1be0d 100644 --- a/scripts/macOS/setupHoudini.sh +++ b/scripts/macOS/setupHoudini.sh @@ -39,6 +39,60 @@ prepend_existing_path() { fi } +resolve_ocio_package_value() { + local raw_value="$1" + local value="${raw_value}" + + case "${value}" in + \${OCIO-*}) + value="${value#\$\{OCIO-}" + value="${value%\}}" + ;; + esac + + value="${value//\$HOME/${HOME}}" + case "${value}" in + "~/"*) value="${HOME}/${value#~/}" ;; + esac + echo "${value}" +} + +set_ocio_from_houdini_packages() { + if [ -n "${OCIO:-}" ]; then + return + fi + + local package_dirs="${HOUDINI_PACKAGE_DIR:-${HOME}/Library/Preferences/houdini/20.5/packages:${houdini_install_dir}/Frameworks/Houdini.framework/Versions/Current/Resources/packages}" + local package_dir + while IFS= read -r package_dir; do + if [ ! -d "${package_dir}" ]; then + continue + fi + local package_file + while IFS= read -r package_file; do + if [ ! -f "${package_file}" ] || ! grep -q '"OCIO"' "${package_file}"; then + continue + fi + local raw_value + raw_value="$(sed -nE 's/.*"OCIO"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/p' "${package_file}" | head -1)" + if [ -z "${raw_value}" ]; then + continue + fi + local candidate + candidate="$(resolve_ocio_package_value "${raw_value}")" + if [ -f "${candidate}" ]; then + export OCIO="$(realpath "${candidate}")" + return + fi + done < <(find "${package_dir}" -maxdepth 1 -type f -name '*.json' 2>/dev/null) + done < <(printf '%s\n' "${package_dirs}" | tr ':' '\n') +} + +# Houdini loads package files itself, but standalone MoonRay tools launched from +# this shell do not. Mirror a package-authored OCIO default without overriding an +# explicitly supplied OCIO so husk/hd_usd2rdl use the same color config as Houdini. +set_ocio_from_houdini_packages + # Preserve any existing USD plugin search path while guaranteeing MoonRay plugin location is present. export PXR_PLUGINPATH_NAME="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGINPATH_NAME}")" export PXR_PLUGIN_PATH="$(prepend_unique_path "${omr_install_dir}/plugin/pxr" "${PXR_PLUGIN_PATH}")" From 202fbaf38f89989f9832b360b20bc19c2f56a992 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Mon, 22 Jun 2026 18:28:04 +0200 Subject: [PATCH 35/38] Update H20.5 documentation pins Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray_dcc_plugins | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index 34d2d7eb..f371e9ad 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit 34d2d7ebe96c12b4d899e6417245dc4837b97ee4 +Subproject commit f371e9ad9d5cd2285438d54ae659e5c41a834c2f diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index 04bd9a8b..a8648253 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit 04bd9a8b8de71c11e0a283aa9bb514ca7f397cd2 +Subproject commit a86482535ddd6ba955462b1b0017bc2ed84e38c4 From 75eead4f454fe3547093f331752c37f43d164baa Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sat, 29 Aug 2026 13:52:57 +0200 Subject: [PATCH 36/38] Align macOS Houdini Python and Boost setup Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- CMakeMacOSPresets.json | 8 ++++++-- building/macOS/CMakeLists.txt | 4 ++-- building/macOS/user-config.jam | 6 +++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/CMakeMacOSPresets.json b/CMakeMacOSPresets.json index 384e9e41..1b91eb09 100644 --- a/CMakeMacOSPresets.json +++ b/CMakeMacOSPresets.json @@ -35,7 +35,7 @@ "inherits": "macos-environment", "environment": { "PREFIX_PXR" : "/Applications/MoonRay/building/macOS/pxr-houdini", - "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini20.5.684", + "HOUDINI_INSTALL_DIR" : "/Applications/Houdini/Houdini20.5.584", "PXR_LIB_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Libraries", "PXR_INCLUDE_PREFIX" : "$env{HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current/Resources/toolkit/include", "PXR_DEPS_PREFIX" : "$env{DEPS_ROOT}", @@ -44,7 +44,11 @@ "cacheVariables": { "CMAKE_PREFIX_PATH": "$env{DEPS_ROOT};$env{PREFIX_PXR}", "MOONRAY_USE_HOUDINI": "TRUE", - "BOOST_PYTHON_COMPONENT_NAME": "python311" + "BOOST_PYTHON_COMPONENT_NAME": "python311", + "Python_ROOT_DIR": "$env{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11", + "Python_EXECUTABLE": "$env{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/bin/python3.11", + "Python_LIBRARY": "$env{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib", + "Python_INCLUDE_DIR": "$env{HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/3.11/include/python3.11" } }, { diff --git a/building/macOS/CMakeLists.txt b/building/macOS/CMakeLists.txt index 030063da..0163c6e7 100644 --- a/building/macOS/CMakeLists.txt +++ b/building/macOS/CMakeLists.txt @@ -30,7 +30,7 @@ if(DEFINED ENV{HOUDINI_INSTALL_DIR}) elseif(DEFINED ENV{HFS}) file(REAL_PATH "$ENV{HFS}/../../../../.." _defaultHoudiniInstallDir) else() - set(_defaultHoudiniInstallDir "/Applications/Houdini/Houdini20.5.684") + set(_defaultHoudiniInstallDir "/Applications/Houdini/Houdini20.5.584") endif() set(HOUDINI_INSTALL_DIR "${_defaultHoudiniInstallDir}" CACHE PATH "Houdini install root") set(HoudiniPythonRoot "${HOUDINI_INSTALL_DIR}/Frameworks/Python.framework/Versions/${PythonVer}") @@ -52,7 +52,7 @@ ExternalProject_Add(Boost UPDATE_COMMAND ./bootstrap.sh --prefix=${InstallRoot} --with-toolset=clang linkflags="-arch ${BOOST_ARCH}" CONFIGURE_COMMAND "" PATCH_COMMAND patch -p3 -N < ${THIS_DIR}/Boost.patch || true - BUILD_COMMAND ./b2 install ${JOBS_ARG} --user-config=${THIS_DIR}/user-config.jam --with-python python=${PythonVer} variant=release link=shared threading=multi architecture=arm address-model=64 define=BOOST_UNORDERED_HAVE_PIECEWISE_CONSTRUCT=0 + BUILD_COMMAND ./b2 install ${JOBS_ARG} --user-config=${THIS_DIR}/user-config.jam --with-python --with-iostreams --with-filesystem --with-system --with-thread --with-chrono --with-date_time --with-atomic --with-program_options --with-regex python=${PythonVer} variant=release link=shared threading=multi architecture=arm address-model=64 define=BOOST_UNORDERED_HAVE_PIECEWISE_CONSTRUCT=0 BUILD_IN_SOURCE 1 INSTALL_COMMAND "" DEPENDS ${CHAIN} diff --git a/building/macOS/user-config.jam b/building/macOS/user-config.jam index 84ef0904..05edcf8e 100644 --- a/building/macOS/user-config.jam +++ b/building/macOS/user-config.jam @@ -1,6 +1,6 @@ using python : 3.11 - : "/Applications/Houdini/Houdini20.5.684/Frameworks/Houdini.framework/Versions/Current/Resources/bin/hython" - : "/Applications/Houdini/Houdini20.5.684/Frameworks/Python.framework/Versions/3.11/include/python3.11" - : "/Applications/Houdini/Houdini20.5.684/Frameworks/Python.framework/Versions/3.11/lib" + : "/Applications/Houdini/Houdini20.5.584/Frameworks/Houdini.framework/Versions/Current/Resources/bin/hython" + : "/Applications/Houdini/Houdini20.5.584/Frameworks/Python.framework/Versions/3.11/include/python3.11" + : "/Applications/Houdini/Houdini20.5.584/Frameworks/Python.framework/Versions/3.11/lib" ; using clang : : : -"arch arm64" "-arch arm64" ; From 9ee307078c3e082b569427ab050665f7cddb4713 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sat, 29 Aug 2026 13:52:57 +0200 Subject: [PATCH 37/38] Document DwaBase dielectric Fresnel audit Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- AUDIT_DWABASE_DIELECTRIC.md | 272 ++++++++++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 AUDIT_DWABASE_DIELECTRIC.md diff --git a/AUDIT_DWABASE_DIELECTRIC.md b/AUDIT_DWABASE_DIELECTRIC.md new file mode 100644 index 00000000..a86a99ea --- /dev/null +++ b/AUDIT_DWABASE_DIELECTRIC.md @@ -0,0 +1,272 @@ +# DwaBase native dielectric specular / IOR audit + +Audit date: 2026-07-16 + +Audited revisions: + +- `moonray`: `e403e8021ca760580d09a9a648a1fd9731a27de2` +- `moonshine`: `5bec7a4be722894ba70f22760d194c862eb67280` + +The worktrees contained pre-existing unrelated changes. This audit changed no production shader or renderer behavior. It added only focused renderer tests. + +## Executive finding + +No Fresnel/IOR defect, double Fresnel, double energy compensation, or additive diffuse/specular error was found in the native `DwaBaseMaterial` path for `metallic=0`, `specular=1`, and `transmission=0`. + +The normal-incidence dielectric response is exact: IOR 1.5 produces `F0=0.04`. The attribute is an absolute material IOR; MoonRay constructs the relative interface from the ray's current medium and correctly swaps incident/transmitted IOR on exit. The default isotropic lobe is Walter-style GGX with separable Smith masking-shadowing. Artist roughness is squared once inside the Cook-Torrance lobe, so `alpha=max(roughness^2, 0.001)` unless normal-map AA or ray roughness clamping increases the input first. + +MoonRay is using an intentional DWA model with two approximations that may differ from other renderers: + +1. a Kelemen/Kulla-Conty directional-albedo compensation lobe, enabled only when input roughness is greater than 0.5; and +2. an approximate, view-dependent `OneMinusRoughFresnel` attenuation for diffuse beneath rough specular, rather than attenuation by the actual integrated directional reflectance of the rough BRDF. + +Neither explains an IOR 1.5 to 1.3 appearance shift. Compensation is absent through roughness 0.5 and raises the normal-direction IOR 1.5 reflectance at roughness 0.8 only from 0.02284 to 0.02498 (9.3%). Changing IOR from 1.5 to 1.3 lowers `F0` and rough-lobe energy by about 57%, a much larger effect. + +## A. Native source path + +1. `moonshine/dso/material/DwaBase/DwaBaseMaterial.cc` + - `collectAttributeKeys()` binds native `specular`, `refractive_index`, `metallic`, metallic colors, `roughness`, anisotropy, transmission, diffuse, coat, normals, and normal-AA controls. + - `DwaBaseMaterial::shade()` calls `resolveParameters()` and then `createLobes()`. +2. `moonshine/lib/material/dwabase/DwaBase.cc` + - `DwaBase::update()` computes which parameter groups are required. + - `resolveSpecularParams()` saturates specular, roughness, and metallic to their documented ranges. + - `resolveParameters()` reads `refractive_index` directly and clamps only to positive epsilon. +3. `moonshine/lib/material/dwabase/DwaBaseLayerable.h` + - `computeMicrofacetRoughness()` normally returns the artist roughness unchanged. Toksvig normal AA may increase it before lobe creation. +4. `moonshine/lib/material/dwabase/DwaBaseLayerable.cc` + - `createLobes()` creates conductor, dielectric reflection/transmission, and diffuse lobes in physical layer order. + - Smooth dielectric uses `MirrorBSDF`; rough isotropic dielectric uses `MicrofacetIsotropicBSDF` with GGX by default and Smith geometry. +5. `moonray/lib/rendering/shading/BsdfBuilder.cc` + - `addComponent(const MicrofacetIsotropicBSDF&)` resolves interface IOR, constructs the native Cook-Torrance lobe, installs exact dielectric Fresnel once, and stages the underlayer attenuator. +6. `moonray/lib/rendering/shading/Ior.h` + - `ShaderIor` resolves incident and transmitted media for entering, exiting, and thin geometry. +7. `moonray/lib/rendering/shading/bsdf/Fresnel.h` + - `DielectricFresnel` implements exact unpolarized dielectric Fresnel. + - `OneMinusRoughFresnel` implements the approximate underlayer attenuation. +8. `moonray/lib/rendering/shading/bsdf/cook_torrance/BsdfCookTorrance.cc` + - Implements Beckmann and GGX Cook-Torrance reflection, Smith masking-shadowing, roughness squaring, sampling, and the compensation-lobe hook. +9. `moonray/lib/rendering/shading/bsdf/cook_torrance/energy_compensation/CookTorranceEnergyCompensation.cc` + - Implements the Kelemen/Kulla-Conty compensation term using tabulated directional albedo. + +The scalar C++ and vector ISPC implementations follow the same structure. The numerical audit exercised the C++ lobe directly. + +## B. Exact formulas and conventions + +### Parameters + +- `refractive_index`: absolute material IOR, default 1.5. It is not an F0 or relative-IOR input. +- `specular`: scalar weight in `[0,1]`, default 1. The documentation intends binary 0/1 use for physical plausibility. The value becomes the dielectric Fresnel weight. +- dielectric specular color: none. `metallic_color` and `metallic_edge_color` affect only the conductor branch. `transmission_color` tints transmission, not ordinary dielectric reflection. Iridescence is a separate optional modifier. +- `roughness`: perceptual roughness in `[0,1]`, default 0.5. +- `metallic`: default 0. At zero, no conductor lobe is created. At nonzero values DwaBase uses its own layered conductor/dielectric semantics; this is not Autodesk Standard Surface's documented linear statistical metalness mixture. That does not affect the audited `metallic=0` case. + +### Interface IOR and Fresnel + +For ordinary front-facing geometry in air: + +`eta_i = 1`, `eta_t = refractive_index`. + +On exit, MoonRay swaps these. Thin geometry is always treated as viewed from outside. The exact dielectric implementation applies Snell's law, total internal reflection, and the average of squared parallel/perpendicular polarization amplitudes. At normal incidence it reduces to: + +`F0 = ((eta_t - eta_i) / (eta_t + eta_i))^2`. + +Thus from air: + +`F0 = ((ior - 1) / (ior + 1))^2`. + +The specular weight is applied once inside the Fresnel object. There is no second IOR-level scale. + +### GGX microfacet BRDF + +For input roughness `r`: + +`alpha = max(r^2, 0.001)`. + +Normal-map Toksvig AA and the ray's minimum-roughness clamp can increase `r` before this conversion. There is no other ordinary parameter remap. The sampling distribution is widened slightly at grazing view angles to reduce variance; evaluation remains at the original alpha. + +The reflection lobe is: + +`f_r(wo, wi) = F(h.wi) D_GGX(h) G1(wo) G1(wi) / (4 |n.wo| |n.wi|)` + +with: + +`D_GGX = alpha^2 / [pi cos(theta_h)^4 (alpha^2 + tan(theta_h)^2)^2]` + +and separable Smith: + +`G1(mu) = 2 / [1 + sqrt(1 + alpha^2 (1-mu^2)/mu^2)]`. + +### Multiple-scattering compensation + +This is not a Heitz random-walk multiple-scattering BSDF. It is the Kelemen 2001 compensation lobe as presented by Kulla and Conty in 2017, using precomputed single-scatter directional albedo `E(mu,r)`: + +`f_ms = [(1-E_o)(1-E_i)/(1-E_avg)] * [F_avg^2 E_avg / (1-F_avg(1-E_avg))] / pi`. + +For entering dielectrics, MoonRay approximates: + +`F_avg = (eta-1) / (4.08567 + 1.00071 eta)`. + +The implementation computes a sampling mixture weight: + +`w_ms = max(0, r-0.5)`. + +It also uses `w_ms > 0` as the gate for evaluating the compensation term. Consequently compensation is exactly absent at roughness 0.1, 0.25, and 0.5, and active at 0.8 in the requested matrix. It is not applied twice. + +### Diffuse beneath specular + +All relevant lobes are added with `BSDFBUILDER_PHYSICAL`, meaning they receive attenuation from earlier layers and attenuate later layers. Diffuse is not simply added at full strength. + +For a rough dielectric over diffuse, the builder wraps diffuse with `OneMinusRoughFresnel`. With weighted Fresnel `F_w` and `mu_o=n.wo`: + +`t = 1 - (1-r^2)^3` + +`A(mu_o,r) = lerp(1-F_w(mu_o), 1-F_w(1), t)`. + +The diffuse lobe is multiplied by `A`. This accounts for Fresnel and specular weight, but it is only a view-direction approximation to rough directional albedo. It is not full layered transport and is not the exact `1-reflectance(rough_BRDF)` formula specified by Autodesk Standard Surface. The approximation can also break strict BSDF reciprocity for the combined underlayer, although the GGX specular lobe itself is reciprocal. + +## C. Smooth dielectric Fresnel results + +The new test calls the native exact `DielectricFresnel` directly at normal incidence, from air, with unit weight and no other lobe: + +| IOR | expected F0 | MoonRay result | +|---:|---:|---:| +| 1.0 | 0 | 0 | +| 1.1 | 0.0022676 | 0.0022676 | +| 1.3 | 0.0170132 | 0.0170132 | +| 1.5 | 0.0400000 | 0.0400000 | +| 2.0 | 0.1111111 | 0.1111111 | + +All RGB channels pass at absolute tolerance `1e-7`. + +## D. Rough dielectric numerical results + +Definitions: + +- `Rdir`: directional-hemispherical specular reflectance for `wo=n`. +- `Rhh`: cosine-weighted hemispherical average of directional specular reflectance. +- `peak`: peak normal-view BRDF value in `sr^-1`. +- `HWHM`: polar half-maximum angular radius of the normal-view lobe. +- `Tdir` and `Thh`: total specular plus a unit-albedo Lambert diffuse substrate using MoonRay's actual rough-Fresnel underlayer attenuation. This is a white-furnace stress case. + +The integrator uses the native GGX lobe and its native sampler with a deterministic low-discrepancy sequence. Values are raw linear. The last few digits are numerical estimates. + +| r | IOR | Rdir | Rhh | peak | HWHM deg | Tdir | Thh | +|---:|---:|---:|---:|---:|---:|---:|---:| +| 0.10 | 1.0 | 0 | 0 | 0 | 0 | 1.00000 | 1.00000 | +| 0.10 | 1.3 | 0.01701 | 0.06062 | 13.6035 | 0.735 | 1.00000 | 1.00079 | +| 0.10 | 1.5 | 0.04000 | 0.09125 | 31.9833 | 0.735 | 1.00000 | 1.00101 | +| 0.10 | 2.0 | 0.11110 | 0.16008 | 88.8425 | 0.735 | 0.99999 | 1.00095 | +| 0.25 | 1.0 | 0 | 0 | 0 | 0 | 1.00000 | 1.00000 | +| 0.25 | 1.3 | 0.01697 | 0.05375 | 0.34663 | 4.632 | 0.99995 | 1.00038 | +| 0.25 | 1.5 | 0.03987 | 0.08377 | 0.81497 | 4.632 | 0.99987 | 1.00110 | +| 0.25 | 2.0 | 0.11069 | 0.15232 | 2.26381 | 4.632 | 0.99957 | 1.00043 | +| 0.50 | 1.0 | 0 | 0 | 0 | 0 | 1.00000 | 1.00000 | +| 0.50 | 1.3 | 0.01584 | 0.03338 | 0.02166 | 20.136 | 0.99883 | 0.99775 | +| 0.50 | 1.5 | 0.03705 | 0.05846 | 0.05093 | 20.133 | 0.99705 | 0.99661 | +| 0.50 | 2.0 | 0.10225 | 0.12079 | 0.14147 | 20.129 | 0.99114 | 0.98881 | +| 0.80 | 1.0 | 0 | 0 | 0 | 0 | 1.00000 | 1.00000 | +| 0.80 | 1.3 | 0.01066 | 0.01658 | 0.00506 | >=90 | 0.99365 | 0.99751 | +| 0.80 | 1.5 | 0.02498 | 0.03324 | 0.01077 | >=90 | 0.98498 | 0.99083 | +| 0.80 | 2.0 | 0.06988 | 0.08023 | 0.02679 | >=90 | 0.95877 | 0.96681 | + +The tiny maximum `Thh` overshoot is 0.11%. It is within the scale of the numerical integration and MoonRay's documented approximate rough-Fresnel underlayer attenuation. There is no material energy excess remotely large enough to explain a 1.5-to-1.3 appearance shift. At medium/high roughness the approximation is mildly energy-losing rather than energy-adding. + +Compensation impact at roughness 0.8: + +| IOR | Rdir single | Rdir compensated | increase | Rhh single | Rhh compensated | increase | +|---:|---:|---:|---:|---:|---:|---:| +| 1.3 | 0.00985 | 0.01066 | 8.3% | 0.01583 | 0.01658 | 4.8% | +| 1.5 | 0.02284 | 0.02498 | 9.3% | 0.03124 | 0.03324 | 6.4% | +| 2.0 | 0.06244 | 0.06988 | 11.9% | 0.07321 | 0.08023 | 9.6% | + +## E. Why IOR 1.5 becomes silver-like faster than IOR 1.3 + +Within MoonRay itself, the effect is the expected Fresnel ratio, not an anomalous remap: + +- `F0(1.5) / F0(1.3) = 0.04 / 0.0170132 = 2.351`. +- At roughness 0.5, `Rdir(1.5) / Rdir(1.3) = 2.339`. +- At roughness 0.8, the same ratio is 2.342. + +Lowering IOR from 1.5 to 1.3 therefore removes about 57% of the specular energy at both smooth and rough settings. The visual match around 1.3 is consistent with another setup having a lower effective specular weight/F0, but MoonRay is not internally converting 1.5 to an excessive Fresnel value. + +Broad rough reflection can look pale because it carries achromatic environment illumination over a wider solid angle while the substrate is colored. The numerical data show that MoonRay broadens and lowers the peak as expected; it does not increase normal-direction integrated reflectance with roughness. At IOR 1.5, `Rdir` falls from 0.04000 at roughness 0.1 to 0.02498 at 0.8. + +The remaining cross-render difference must be isolated at closure level. Relevant non-equivalences include exact rough-BRDF implementation/compensation, diffuse attenuation strategy, base/specular weights and colors, normal AA, ray roughness clamping, and which incident radiance is visible to the specular lobe. “Same-looking” controls are not sufficient evidence of equal closures. + +## F. Mathematical validity + +The dielectric Fresnel, GGX NDF, and separable Smith masking-shadowing implementation are mathematically valid standard microfacet components. The compensation formula is a recognized physically motivated approximation to missing multiple scattering. + +The full Dwa layer stack is not an exact layered BSDF. Its view-only rough-Fresnel underlayer attenuation is an approximation and can deviate slightly from exact directional-albedo conservation and reciprocity. + +## G. Physical plausibility + +The audited ordinary dielectric is physically plausible. It has correct F0, correct medium-side handling, no meaningful white-furnace energy excess, and sensible roughness trends. The small total-energy deviations are characteristic of the approximate layer combination, not evidence of a grossly nonphysical silver boost. + +## H. Compatibility with Karma / Arnold / Standard Surface + +The current Dwa model is not specified to be numerically appearance-compatible with Karma or Arnold. + +DreamWorks' 2017 primary source describes the DWA Physical Materials as a DreamWorks parameter-blended uber-material. It says Refractive used anisotropic Cook-Torrance/Beckmann with a non-mappable IOR default of 1.5, and Solid Dielectric shared that specular model. Current public source defaults to GGX, showing that the internal DWA model evolved, not that it became Autodesk Standard Surface. + +Autodesk Standard Surface also specifies GGX and squared perceptual roughness, but its layer equation attenuates the substrate by `1 - specular * specular_color * reflectance(specular_brdf)`, where `reflectance` is the rough BRDF's directional albedo. DwaBase instead uses `OneMinusRoughFresnel`. Standard Surface also exposes dielectric `specular_color`, a separate base weight, and a documented statistical metalness mix that DwaBase does not share. + +MaterialX's PBS specification permits renderer-dependent microfacet implementations and says implementations are expected to preserve rough-surface energy, commonly using multiple-scattering compensation. That is not a numerical appearance guarantee. Arnold documentation identifies its Standard Surface implementation and Fresnel behavior, but Arnold's closure source is not available here for a direct numerical source comparison. + +Primary references: + +- [OpenMoonRay DWA family documentation](https://docs.openmoonray.org/user-reference/scene-objects/materials/dwa/) +- [Physically Based Shading at DreamWorks Animation, Xie and Lanz, 2017](https://blog.selfshadow.com/publications/s2017-shading-course/dreamworks/s2017_pbs_dreamworks_notes.pdf) +- [Autodesk Standard Surface specification](https://autodesk.github.io/standard-surface/) +- [MaterialX PBS specification](https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/documents/Specification/MaterialX.PBRSpec.md) +- [Arnold Standard Surface documentation](https://help.autodesk.com/cloudhelp/ENU/AR-Core/files/ac-shading/ac-surface-shaders/arnold_user_guide_ac_surface_shaders_ac_standard_surface_html.html) +- [Walter et al., Microfacet Models for Refraction through Rough Surfaces, 2007](https://diglib.eg.org/bitstream/handle/10.2312/EGWR.EGSR07.195-206/195-206.pdf?sequence=1) +- [Kulla and Conty, Revisiting Physically Based Shading at Imageworks, 2017](https://blog.selfshadow.com/publications/s2017-shading-course/imageworks/s2017_pbs_imageworks_slides.pdf) + +## I. Bug classification + +### Confirmed bug + +None in the requested native ordinary-dielectric path. + +### Likely bug + +None established by source trace or numerical tests. + +### Intentional model difference + +Confirmed: DWA's Kelemen/Kulla-Conty compensation gate and `OneMinusRoughFresnel` underlayer approximation differ from other possible GGX/layering implementations. + +### Parameter convention mismatch + +Rejected for IOR and isotropic roughness: DwaBase uses absolute IOR and `alpha=roughness^2`, matching the stated conventions of Autodesk Standard Surface for these two controls. A broader material-parameter mismatch remains possible because DwaBase does not have Standard Surface's exact base/specular-color/metalness semantics. + +### Inconclusive + +The exact source of the reported MoonRay-vs-Karma/Arnold image difference remains unproven until those renderers' isolated closures are sampled numerically under identical incident radiance. Their screenshots alone cannot distinguish closure response from material weights, lighting visibility, or integrator behavior. + +One unrelated edge-case code smell should receive a separate test: `BsdfBuilder.cc` constructs the diffuse underlayer attenuator using `component.getTransmissionRoughness()`. This equals reflection roughness in the audited default path, but may differ when independent transmission roughness is enabled even if transmission weight is zero. It cannot explain the reported default case and is not classified as a bug here. + +## J. Recommended next action + +Do not change production behavior, default IOR, or roughness mapping. + +1. Land or review the focused native numerical tests added by this audit. +2. Build a renderer-neutral closure probe that records `f(wo,wi)`, directional albedo, and white-furnace totals from MoonRay, Arnold, and Karma for the same GGX alpha and exact F0, bypassing their artist materials. +3. In the existing comparison scene, verify numerically rather than visually: + - raw base/diffuse weight and color; + - specular weight and color; + - actual alpha after every remap/normal-AA/min-roughness operation; + - direct and indirect incident radiance visible to the specular lobe; + - light-linking/specular visibility; + - front-face state and current medium IOR. +4. If the closure probe shows a MoonRay-only excess, isolate it by toggling only `mFavg` compensation and then substituting exact directional-albedo diffuse attenuation in a test harness. Do not alter production until one term reproduces the measured delta. +5. If a defect is demonstrated, patch only that term and add a legacy-render impact note. Any compensation or underlayer change will affect existing rough dielectric and conductor renders, especially roughness above 0.5. + +## Tests added + +- `moonray/tests/lib/rendering/shading/TestDielectricFresnel.h` +- `moonray/tests/lib/rendering/shading/TestDielectricFresnel.cc` +- registered in `moonray/tests/lib/rendering/shading/CMakeLists.txt` + +The test executable builds successfully and reports `OK (8)`. The new suite directly tests exact normal-incidence Fresnel and the requested roughness/IOR matrix, including compensated versus single-scatter energy, peak, width, and unit-diffuse totals. From 6878c2e60e35b37850be6570266d2213f185b877 Mon Sep 17 00:00:00 2001 From: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> Date: Sat, 29 Aug 2026 13:52:57 +0200 Subject: [PATCH 38/38] Update texture color management integration pins Signed-off-by: Jakub Svoboda <132791205+rolledhand@users.noreply.github.com> --- moonray/hydra/hdMoonray | 2 +- moonray/moonray | 2 +- moonray/moonray_dcc_plugins | 2 +- moonray/moonshine | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/moonray/hydra/hdMoonray b/moonray/hydra/hdMoonray index f371e9ad..deab1844 160000 --- a/moonray/hydra/hdMoonray +++ b/moonray/hydra/hdMoonray @@ -1 +1 @@ -Subproject commit f371e9ad9d5cd2285438d54ae659e5c41a834c2f +Subproject commit deab18442404369697a2a21e034dd5fb27add96d diff --git a/moonray/moonray b/moonray/moonray index e403e802..e58cc783 160000 --- a/moonray/moonray +++ b/moonray/moonray @@ -1 +1 @@ -Subproject commit e403e8021ca760580d09a9a648a1fd9731a27de2 +Subproject commit e58cc783616722d598f588f02670c4f31678b882 diff --git a/moonray/moonray_dcc_plugins b/moonray/moonray_dcc_plugins index a8648253..ece65c71 160000 --- a/moonray/moonray_dcc_plugins +++ b/moonray/moonray_dcc_plugins @@ -1 +1 @@ -Subproject commit a86482535ddd6ba955462b1b0017bc2ed84e38c4 +Subproject commit ece65c71e0a8dd1ba25fff05d977b66cc4f5fbe8 diff --git a/moonray/moonshine b/moonray/moonshine index 5bec7a4b..ee3c84c1 160000 --- a/moonray/moonshine +++ b/moonray/moonshine @@ -1 +1 @@ -Subproject commit 5bec7a4be722894ba70f22760d194c862eb67280 +Subproject commit ee3c84c1d1ca2ea8e3bb60309718bfba9a4ab5a7