Skip to content

HYDRA-2460 : Add PRMan production render test coverage - #486

Open
lanierd-adsk wants to merge 5 commits into
devfrom
lanierd/HYDRA-2460
Open

HYDRA-2460 : Add PRMan production render test coverage#486
lanierd-adsk wants to merge 5 commits into
devfrom
lanierd/HYDRA-2460

Conversation

@lanierd-adsk

Copy link
Copy Markdown
Collaborator

Adds HdPrmanLoaderRendererPlugin as a third renderer variant (alongside Storm and Arnold) across the cmdLineRender production test suite — texturing, render settings, relative-path, and USD-proxy-shape tests all now run under PRMan on Windows via a new _mayaHydra_append_prman_production_render_env CMake helper that isolates the RenderMan config dir and drives the render pass through Hydra V2 render settings (HD_PRMAN_RENDER_SETTINGS_DRIVE_RENDER_PASS=1), except for one dedicated test that explicitly exercises the Hydra V1 render-settings path.

Reorganizes test/lib/cmdLineRender/scenes/{texturing,renderSettings,relativePathTest} into per-renderer subfolders (storm/, arnold/, prman/) so each renderer's scene + baseline images live together. Fixes output.py's setOutputFormat to guard on defaultArnoldDriver existing, since PRMan-only scenes don't have an Arnold driver node. Refactors the parallel renderer-variant lists in test/lib/cmdLineRender/CMakeLists.txt into small registration macros to reduce risk of the per-renderer columns drifting out of sync, and simplifies a redundant platform condition. No production (non-test) code changes; all changes are test infrastructure and CMake.

Adds HdPrmanLoaderRendererPlugin as a third renderer variant (alongside Storm and Arnold) across the cmdLineRender production test suite — texturing, render settings, relative-path, and USD-proxy-shape tests all now run under PRMan on Windows via a new _mayaHydra_append_prman_production_render_env CMake helper that isolates the RenderMan config dir and drives the render pass through Hydra V2 render settings (HD_PRMAN_RENDER_SETTINGS_DRIVE_RENDER_PASS=1), except for one dedicated test that explicitly exercises the Hydra V1 render-settings path.

Reorganizes test/lib/cmdLineRender/scenes/{texturing,renderSettings,relativePathTest} into per-renderer subfolders (storm/, arnold/, prman/) so each renderer's scene + baseline images live together.
Fixes output.py's setOutputFormat to guard on defaultArnoldDriver existing, since PRMan-only scenes don't have an Arnold driver node.
Refactors the parallel renderer-variant lists in test/lib/cmdLineRender/CMakeLists.txt into small registration macros to reduce risk of the per-renderer columns drifting out of sync, and simplifies a redundant platform condition.
No production (non-test) code changes; all changes are test infrastructure and CMake.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR expands the cmdLineRender production test suite to include a third renderer variant, PRMan (HdPrmanLoaderRendererPlugin), alongside existing Storm and Arnold coverage. It adds PRMan-specific test environment setup (isolated RenderMan config + Hydra V2 render-settings path by default) and reorganizes renderer-dependent scene/baseline assets to keep each renderer’s resources grouped.

Changes:

  • Add PRMan as a renderer variant across the production render tests (Windows-focused), with a new CMake helper to set PRMan-specific environment variables.
  • Reorganize/extend cmdLineRender scene assets into per-renderer subfolders and add PRMan-flavored USD RenderSettings scenes (e.g., Ci beauty AOV).
  • Align multi-image idiff comparisons with single-image behavior by setting -warn/-warnpercent to match -fail/-failpercent, and guard setOutputFormat() when Arnold nodes don’t exist.

Reviewed changes

Copilot reviewed 39 out of 195 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
cmake/test.cmake Adds PRMan-specific env setup helper and wires it into cmdLineRender test registration.
scripts/mayaHydra/renderSettings/output.py Avoids failing PRMan-only scenes by guarding Arnold driver attribute edits.
test/lib/cmdLineRender/renderSettingsMultiImageTest.py Adds idiff -warn/-warnpercent args to prevent warning-threshold-only failures.
test/lib/cmdLineRender/CMakeLists.txt Registers PRMan cmdLineRender tests and sets up PRMan-specific variants (incl. explicit Hydra V1 override in one test).
test/lib/cmdLineRender/scenes/basic/usdCamera.ma Updates embedded USD render settings for PRMan (e.g., Ci + ri: setting) used by related tests.
test/lib/cmdLineRender/scenes/texturing/storm/mayaSphereMaterialXStorm.mtlx Adds Storm MaterialX OpenPBR test material.
test/lib/cmdLineRender/scenes/texturing/arnold/mayaSphereMaterialXArnold.mtlx Adds Arnold MaterialX OpenPBR test material.
test/lib/cmdLineRender/scenes/texturing/prman/mayaSphereMaterialXPRMan.mtlx Adds PRMan MaterialX OpenPBR test material.
test/lib/cmdLineRender/scenes/renderSettings/storm/usdProxyShapeRenderSettings.usda Adds/updates Storm USD proxy-shape render settings scene for test coverage.
test/lib/cmdLineRender/scenes/renderSettings/storm/stormResolution.usda Updates Storm productName paths to match new per-renderer layout.
test/lib/cmdLineRender/scenes/renderSettings/storm/stormRenderDir.usda Updates Storm productName paths to match new per-renderer layout.
test/lib/cmdLineRender/scenes/renderSettings/storm/stormOutputFormat.usda Updates Storm output format to JPG and updates productName accordingly.
test/lib/cmdLineRender/scenes/renderSettings/storm/stormNoCrop.usda Updates Storm productName paths to match new per-renderer layout.
test/lib/cmdLineRender/scenes/renderSettings/storm/stormNoCrop.png Adds/updates Storm baseline image for no-crop case.
test/lib/cmdLineRender/scenes/renderSettings/storm/stormImageName.usda Updates Storm productName paths to match new per-renderer layout.
test/lib/cmdLineRender/scenes/renderSettings/storm/stormCropRegion1x1.usda Updates Storm productName paths to match new per-renderer layout.
test/lib/cmdLineRender/scenes/renderSettings/storm/stormCropRegion1x1.png Adds/updates Storm baseline image for 1x1 crop case.
test/lib/cmdLineRender/scenes/renderSettings/storm/stormCropRegion.usda Updates Storm productName paths to match new per-renderer layout.
test/lib/cmdLineRender/scenes/renderSettings/storm/stormCropRegion.png Adds/updates Storm baseline image for crop-region case.
test/lib/cmdLineRender/scenes/renderSettings/storm/images/mainCamFrame6.png Adds/updates Storm baseline frame image for multi-frame render-settings tests.
test/lib/cmdLineRender/scenes/renderSettings/storm/images/mainCamFrame2.png Adds/updates Storm baseline frame image for multi-frame render-settings tests.
test/lib/cmdLineRender/scenes/renderSettings/storm/images/frames5to9/mainCamFrame6.png Adds/updates Storm baseline frame image for subset frame-range testing.
test/lib/cmdLineRender/scenes/renderSettings/storm/AnimCubeRenderSettingsSingleCam.usda Adds Storm single-camera animated RenderSettings scene.
test/lib/cmdLineRender/scenes/renderSettings/storm/AnimCubeRenderSettings.usda Adds Storm multi-camera animated RenderSettings scene.
test/lib/cmdLineRender/scenes/renderSettings/storm/AnimCubeCustomMultipleRS.usda Adds Storm scene with custom multiple render settings / vars (contains some tab indentation).
test/lib/cmdLineRender/scenes/renderSettings/arnold/usdProxyShapeRenderSettings.usda Updates Arnold productName pathing to match new per-renderer layout.
test/lib/cmdLineRender/scenes/renderSettings/arnold/arnoldResolution.usda Updates Arnold productName paths to match new per-renderer layout.
test/lib/cmdLineRender/scenes/renderSettings/arnold/arnoldRenderDir.usda Updates Arnold productName paths to match new per-renderer layout.
test/lib/cmdLineRender/scenes/renderSettings/arnold/arnoldOutputFormat.usda Updates Arnold output format to JPG and updates productName accordingly.
test/lib/cmdLineRender/scenes/renderSettings/arnold/arnoldImageName.usda Updates Arnold productName paths to match new per-renderer layout.
test/lib/cmdLineRender/scenes/renderSettings/arnold/arnoldCropRegion.png Adds/updates Arnold baseline image for crop-region case.
test/lib/cmdLineRender/scenes/renderSettings/arnold/AnimCubeRenderSettingsSingleCam.usda Adds Arnold single-camera animated RenderSettings scene.
test/lib/cmdLineRender/scenes/renderSettings/arnold/AnimCubeRenderSettings.usda Adds Arnold multi-camera animated RenderSettings scene.
test/lib/cmdLineRender/scenes/renderSettings/arnold/AnimCubeCustomMultipleRS.usda Adds Arnold scene with custom multiple render settings / vars (contains some tab indentation).
test/lib/cmdLineRender/scenes/renderSettings/prman/usdProxyShapeRenderSettings.usda Adds PRMan USD proxy-shape RenderSettings scene using Ci beauty AOV.
test/lib/cmdLineRender/scenes/renderSettings/prman/AnimCubeRenderSettingsSingleCam.usda Adds PRMan single-camera animated RenderSettings scene (uses Ci).
test/lib/cmdLineRender/scenes/renderSettings/prman/AnimCubeRenderSettings.usda Adds PRMan multi-camera animated RenderSettings scene (uses Ci).
test/lib/cmdLineRender/scenes/renderSettings/prman/AnimCubeCustomMultipleRS.usda Adds PRMan scene with custom multiple render settings / vars (contains some tab indentation).
Suppressed comments (2)

test/lib/cmdLineRender/scenes/renderSettings/storm/AnimCubeCustomMultipleRS.usda:206

  • There are tab-indented lines in the RenderVar blocks (depth/normal). For readability and consistent formatting with the rest of the file, replace the tabs with spaces.
    test/lib/cmdLineRender/scenes/renderSettings/prman/AnimCubeCustomMultipleRS.usda:207
  • There are tab-indented lines in the RenderVar blocks (depth/normal). For readability and consistent formatting with the rest of the file, replace the tabs with spaces.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread test/lib/cmdLineRender/scenes/renderSettings/storm/AnimCubeCustomMultipleRS.usda Outdated
Comment thread test/lib/cmdLineRender/scenes/renderSettings/prman/AnimCubeCustomMultipleRS.usda Outdated
lanierd-adsk and others added 2 commits August 7, 2026 12:05
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@lanierd-adsk lanierd-adsk self-assigned this Aug 7, 2026
@lanierd-adsk
lanierd-adsk requested a review from ppt-adsk August 7, 2026 10:06
…age file. fixed a possible type for colorspace in PRMan
Comment thread build.py
return "RelWithDebInfo"
return "RelWithDebInfo"

def MergeCtestExcludeRegex(ctestArgs, filesToExclude):

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There was a bug in merging the exclusion of the tests from our maya hydra internal repo and the file tests-to-run.json from this repo. This is the fix for that

@ppt-adsk ppt-adsk left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The separation into renderer-specific directories is nice, but I fear it means that you need to add the same test in 3 places. In actual fact you do need to add the same test in 3 places, but I wonder if the renderer-specific directories would be subdirectories of the individual tests. We can discuss this, each organization has its pros and cons.

paramsInfo[res.first].colorSpace = p.second.Get<TfToken>();
if (p.second.IsHolding<TfToken>()) {
paramsInfo[res.first].colorSpace = p.second.Get<TfToken>();
} else if (p.second.IsHolding<std::string>()) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we compensating for a bug in translation earlier on? How did the Maya colorSpace: end up in the HdMaterialNode as a string in the first place, rather than as a token?

I understand this is forgiving and therefore useful, but my feeling is that this isn't addressing the root cause.

# Set the Maya render setting.
mel.eval('setMayaSoftwareImageFormat("' + of + '")')
cmds.setAttr('defaultArnoldDriver.aiTranslator', of, type='string')
if cmds.objExists('defaultArnoldDriver'):

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The danger with performing renderer-specific work in a general context. I guess this is still manageable for now, but if we keep on adding renderers from Autodesk or third parties we will need to re-evaluate.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't work for HdArnold, which requires a RenderVar named "color". As per
https://openusd.org/release/user_guides/schemas/usdRender/RenderVar.html
The name of the RenderVar prim drives the name of the data variable that the renderer will produce.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this change necessary?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this change necessary?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this change needed?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Directory change.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Directory change.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will need some help reviewing this.

Comment thread build.py
return "RelWithDebInfo"
return "RelWithDebInfo"

def MergeCtestExcludeRegex(ctestArgs, filesToExclude):

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does this happen? Why do we have two separate mechanisms to reconcile?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants