Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
cea4442
Accept int64 VtValue for TYPE_INT with checked narrowing
rolledhand May 11, 2026
77a673e
Houdini 20.5: Solaris build and testing integration
rolledhand May 31, 2026
d85ec55
subd/tess-translation
rolledhand May 31, 2026
24bac7e
hdMoonray: fix SceneVariables float conversion
rolledhand May 31, 2026
65e457b
hdMoonray: translate USD shaped lights to SpotLight
rolledhand Jun 1, 2026
4396439
hdMoonray: map USD RectLight shaping to spread
rolledhand Jun 1, 2026
27201a4
hdMoonray: checkpoint working SpotLight overrides
rolledhand Jun 1, 2026
f5331a8
hdMoonray: share light class swap cleanup
rolledhand Jun 1, 2026
8d1ded4
hdMoonray: document unit scale policy gaps
rolledhand Jun 1, 2026
2eb0808
hdMoonray: enable USD Render ROP beauty buffer support
rolledhand Jun 2, 2026
688868e
hdMoonray: document development workflow and stable feature patterns
rolledhand Jun 6, 2026
8d15dc0
hdMoonray: document native camera controls pattern
rolledhand Jun 6, 2026
636c69f
hdMoonray: light filter adaptation for exposure
rolledhand Jun 7, 2026
f3d66dc
hdMoonray: expand light filter ramp interpolation tokens
rolledhand Jun 7, 2026
2ec7848
hdMoonray: stabilize light filter lifecycle and links
rolledhand Jun 7, 2026
ad9442d
hdMoonray: harden light filter lifecycle cleanup
rolledhand Jun 13, 2026
e9499af
Docs: require evidence-gated Render Settings work
rolledhand Jun 13, 2026
2909d44
hdMoonray: repair default color output and document AOV limits
rolledhand Jun 13, 2026
c7bbd30
hdMoonray: add OCIO working-space conversion for authored colors
rolledhand Jun 14, 2026
4234f27
Repair native AOV production output on Apple Silicon
rolledhand Jun 14, 2026
f40147f
Stabilize MoonRay displacement and subdivision primvars
rolledhand Jun 20, 2026
34d2d7e
Align hdMoonray RenderSettings and OCIO translation
rolledhand Jun 22, 2026
f371e9a
Document H20.5 integration status
rolledhand Jun 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 35 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,46 @@ find_package(OpenGL REQUIRED)
find_package(JPEG REQUIRED)
find_package(OpenImageIO REQUIRED)

set(HDMOONRAY_HOUDINI_OCIO_TARGET "")
set(HDMOONRAY_HOUDINI_OCIO_INCLUDE_DIR "")
set(HDMOONRAY_HOUDINI_INSTALL_DIR "$ENV{HOUDINI_INSTALL_DIR}" CACHE PATH
"Houdini install root used to locate SideFX OpenColorIO for Houdini-facing hdMoonray")
if (APPLE AND HDMOONRAY_HOUDINI_INSTALL_DIR STREQUAL "")
set(HDMOONRAY_HOUDINI_INSTALL_DIR "/Applications/Houdini/Houdini20.5.584")
endif()

if (APPLE AND HDMOONRAY_HOUDINI_INSTALL_DIR)
set(_houdiniFrameworkRoot
"${HDMOONRAY_HOUDINI_INSTALL_DIR}/Frameworks/Houdini.framework/Versions/Current")
set(_houdiniOcioInclude
"${_houdiniFrameworkRoot}/Resources/toolkit/include")
set(_houdiniOcioLibrary
"${_houdiniFrameworkRoot}/Libraries/libOpenColorIO_sidefx.2.3.0.dylib")

if (EXISTS "${_houdiniOcioInclude}/OpenColorIO/OpenColorIO.h" AND
EXISTS "${_houdiniOcioLibrary}")
add_library(HdMoonrayHoudiniOpenColorIO SHARED IMPORTED GLOBAL)
set_target_properties(HdMoonrayHoudiniOpenColorIO PROPERTIES
IMPORTED_LOCATION "${_houdiniOcioLibrary}"
INTERFACE_INCLUDE_DIRECTORIES "${_houdiniOcioInclude}")
set(HDMOONRAY_HOUDINI_OCIO_TARGET HdMoonrayHoudiniOpenColorIO)
set(HDMOONRAY_HOUDINI_OCIO_INCLUDE_DIR "${_houdiniOcioInclude}")
message(STATUS "hdMoonray: using Houdini SideFX OpenColorIO: ${_houdiniOcioLibrary}")
endif()
endif()

if (NOT HDMOONRAY_HOUDINI_OCIO_TARGET)
find_package(OpenColorIO REQUIRED)
set(HDMOONRAY_HOUDINI_OCIO_TARGET OpenColorIO::OpenColorIO)
message(STATUS "hdMoonray: using bundled OpenColorIO target")
endif()

# Our USD config doesn't specify TBB or Boost dependencies,
# so we need to pull the in explicitly
find_package(TBB REQUIRED)

if (NOT DEFINED BOOST_PYTHON_COMPONENT_NAME)
# may need to be, e.g. python36, python39
# may need to be, e.g. python36, python311
set(BOOST_PYTHON_COMPONENT_NAME python)
endif()

Expand Down Expand Up @@ -137,4 +171,3 @@ install(
DESTINATION .
USE_SOURCE_PERMISSIONS
)

21 changes: 21 additions & 0 deletions cmd/hd_cmd/hd_render/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,18 @@ target_sources(${target}
SceneDelegate.cc
)

# Dirty compatibility workaround:
# Houdini 20.5 ships USD 24.03 headers that fail to compile under
# Xcode 26 / AppleClang 21 because pxr/usd/sdf/childrenProxy.h contains an
# invalid _ValueProxy::operator= path that calls SdfChildrenProxy::_Set(),
# which does not exist. This target directly compiles Houdini USD/UsdImaging
# headers, so keep the workaround target-local and remove it when the
# Houdini/USD/toolchain combination compiles normally.
target_include_directories(${target}
BEFORE PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../../../plugin/adapters/compat/houdini20_5_usd24_xcode26
)

if (NOT IsDarwinPlatform)
set(PlatformSpecificLibs atomic)
endif()
Expand All @@ -38,6 +50,15 @@ target_link_libraries(${target}
${MKL}
)

if (APPLE AND Python_ROOT_DIR)
target_include_directories(${target} SYSTEM PRIVATE
"${Python_ROOT_DIR}/include/python3.11")
set_property(TARGET ${target} APPEND PROPERTY
BUILD_RPATH "${Python_ROOT_DIR}")
set_property(TARGET ${target} APPEND PROPERTY
INSTALL_RPATH "${Python_ROOT_DIR}")
endif()

# Set standard compile/link options
HdMoonray_cxx_compile_definitions(${target})
HdMoonray_cxx_compile_features(${target})
Expand Down
10 changes: 9 additions & 1 deletion cmd/hd_cmd/hd_render/FreeCamera.cc
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,15 @@ FreeCamera::FreeCamera(const pxr::UsdStageRefPtr stage,
mCamera.SetTransform(xf);
}

FreeCamera::FreeCamera(const pxr::UsdGeomCamera &camera,
pxr::UsdTimeCode timeCode)
{
mCamera = camera.GetCamera(timeCode);
camera.GetShutterOpenAttr().Get(&mShutterOpen, timeCode);
camera.GetShutterCloseAttr().Get(&mShutterClose, timeCode);
camera.GetExposureAttr().Get(&mExposure, timeCode);
}

pxr::VtValue
FreeCamera::getParam(pxr::TfToken const& key) const
{
Expand Down Expand Up @@ -138,4 +147,3 @@ FreeCamera::getTransform() const
}

} // namespace hd_render

4 changes: 3 additions & 1 deletion cmd/hd_cmd/hd_render/FreeCamera.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <pxr/base/tf/token.h>
#include <pxr/usd/usd/stage.h>
#include <pxr/usd/usd/timeCode.h>
#include <pxr/usd/usdGeom/camera.h>

namespace hd_render {

Expand All @@ -20,6 +21,8 @@ class FreeCamera
float aspectRatio,
pxr::UsdTimeCode timeCode,
const pxr::TfTokenVector &includedPurposes);
FreeCamera(const pxr::UsdGeomCamera &camera,
pxr::UsdTimeCode timeCode);

pxr::VtValue getParam(pxr::TfToken const& key) const;
pxr::GfMatrix4d getTransform() const;
Expand All @@ -34,4 +37,3 @@ class FreeCamera


} // namespace hd_render

20 changes: 17 additions & 3 deletions cmd/hd_cmd/hd_render/RenderOptions.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ const char * const RenderOptions::sInputSceneFile = "scene.usd";
const char * const RenderOptions::sOutputExrFile = "scene.exr";

const char * const RenderOptions::sCamera = "";
const char * const RenderOptions::sRenderSettingsPath = "";

const char * const RenderOptions::sSamplingCamera = "";

Expand Down Expand Up @@ -51,8 +52,10 @@ RenderOptions::RenderOptions(int argc, char *argv[]):
mInputSceneFile(sInputSceneFile),
mOutputExrFile(sOutputExrFile),
mCamera(sCamera),
mRenderSettingsPath(sRenderSettingsPath),
mWidth(sWidth),
mHeight(sHeight),
mSizeSpecified(false),
mRes(sRes),
mRefineLevel(sRefineLevel),
mTimeType(sTimeType),
Expand Down Expand Up @@ -97,6 +100,11 @@ RenderOptions::RenderOptions(int argc, char *argv[]):
mCamera = values[0];
}

validFlags.push_back("-settings");
if (args.getFlagValues("-settings", 1, values) >= 0) {
mRenderSettingsPath = values[0];
}

validFlags.push_back("-delta_in");
if (args.getFlagValues("-delta_in", 1, values) >= 0) {
mDeltaInputSceneFile = values[0];
Expand Down Expand Up @@ -182,6 +190,7 @@ RenderOptions::RenderOptions(int argc, char *argv[]):
if (args.getFlagValues("-size", 2, values) >= 0) {
mWidth = atoi(values[0].c_str());
mHeight = atoi(values[1].c_str());
mSizeSpecified = true;
}

validFlags.push_back("-trace");
Expand Down Expand Up @@ -233,8 +242,14 @@ RenderOptions::usage(const char *argv0) const
" Name or aov (color, depth, normal, etc...)\n"
"\n"
"-camera <CAMERA_NAME>\n"
" Name of the rendering camera. If not specified, a default\n"
" camera is created that frames the scene geometry.\n"
" Name or USD path of the rendering camera. If not specified,\n"
" the selected RenderSettings camera is used when available;\n"
" otherwise a default camera frames the scene geometry.\n"
"\n"
"-settings <RENDER_SETTINGS_PATH>\n"
" USD RenderSettings prim to use for camera and resolution defaults.\n"
" If not specified, /Render/rendersettings or the first RenderSettings\n"
" prim on the stage is used when available.\n"
"\n"
"-sampling_camera <CAMERA_NAME>\n"
" Use this camera's shutter:open and shutter:close to\n"
Expand Down Expand Up @@ -302,4 +317,3 @@ RenderOptions::usage(const char *argv0) const
}

} // namespace hd_render

6 changes: 5 additions & 1 deletion cmd/hd_cmd/hd_render/RenderOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,12 @@ class RenderOptions
const std::string getOutputExrFile() const { return mOutputExrFile; }

const std::string getCamera() const { return mCamera; }
const std::string &getRenderSettingsPath() const { return mRenderSettingsPath; }


unsigned int getWidth() const { return mWidth; }
unsigned int getHeight() const { return mHeight; }
bool isSizeSpecified() const { return mSizeSpecified; }
float getRes() const { return mRes; }

unsigned int getRefineLevel() const { return mRefineLevel; }
Expand Down Expand Up @@ -91,6 +93,7 @@ class RenderOptions
static const char * const sOutputExrFile;

static const char * const sCamera;
static const char * const sRenderSettingsPath;

static const char * const sSamplingCamera;

Expand Down Expand Up @@ -124,9 +127,11 @@ class RenderOptions
std::string mOutputExrFile;

std::string mCamera;
std::string mRenderSettingsPath;

unsigned int mWidth;
unsigned int mHeight;
bool mSizeSpecified;
float mRes;
unsigned int mRefineLevel;

Expand Down Expand Up @@ -156,4 +161,3 @@ class RenderOptions
};

} // namespace hd_render

Loading