HYDRA-2460 : Add PRMan production render test coverage - #486
HYDRA-2460 : Add PRMan production render test coverage#486lanierd-adsk wants to merge 5 commits into
Conversation
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.
There was a problem hiding this comment.
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
cmdLineRenderscene assets into per-renderer subfolders and add PRMan-flavored USD RenderSettings scenes (e.g.,Cibeauty AOV). - Align multi-image idiff comparisons with single-image behavior by setting
-warn/-warnpercentto match-fail/-failpercent, and guardsetOutputFormat()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.
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>
…age file. fixed a possible type for colorspace in PRMan
| return "RelWithDebInfo" | ||
| return "RelWithDebInfo" | ||
|
|
||
| def MergeCtestExcludeRegex(ctestArgs, filesToExclude): |
There was a problem hiding this comment.
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
left a comment
There was a problem hiding this comment.
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>()) { |
There was a problem hiding this comment.
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'): |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Why was this change necessary?
There was a problem hiding this comment.
Why was this change necessary?
There was a problem hiding this comment.
Why was this change needed?
There was a problem hiding this comment.
I will need some help reviewing this.
| return "RelWithDebInfo" | ||
| return "RelWithDebInfo" | ||
|
|
||
| def MergeCtestExcludeRegex(ctestArgs, filesToExclude): |
There was a problem hiding this comment.
Why does this happen? Why do we have two separate mechanisms to reconcile?
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.