Upgrading Houdini From USD 21.02 to 21.05

Recently, SideFX updated our development baseline to build against USD 21.05. What follows is a description of that process, from a developer perspective.

This was perhaps one of the easiest upgrades I've done. What is not described here, and which will involve more ongoing work, is taking advantage of a number of enhancements to USD and UsdImaging. In particular, the ability to extract unflattened primvars from HdRPrims in UsdImaging and the ability to get time sampled computed primvars will let us add new capabilities and improve performance and memory efficiency of our render delegates. We have yet to take advantage of auto-apply API schemas, or transition to Ar::2.0 (though I don't think this API is officially ready in this release).

Simple Renaming

  • The HdRPrim::_SetMaterialId method was renamed to HDRprim::SetMaterialId, and lost its first parameter.

  • The UsdImagingPrimAdapter::Get() method gained an additional parameter, but making use of it is optional, and was not appropriate to any of our custom prim adapters, so this just involved changing the signatures in our code

UsdLux

  • The Shaping and Shadow API schemas added the "inputs:" prefix to most (all?) attributes

  • Because of the prep work and infrastructure put in place with our last USD upgrade (Upgrading Houdini From USD 20.08 to 21.02), and because this work is still on an unreleased version of Houdini, these additional attribute changes were mostly busy-work of adding these new attributes to various lists and doing a quick search and replace.

Update - HdRenderDelegate::GetDefaultAovDescriptor

  • In this revision, the behavior of HdxTaskController::SetRenderOutputs was changed such that it throws away any requested AOVs if the render delegate returns an invalid descriptor for the AOV from HdRenderDelegate::GetDefaultAovDescriptor. Our render delegate implementation was returning an empty descriptor for most non-standard AOVs, causing most AOVs to be eliminated before the renderer was even asked to create them. We changed our implementation of this method to be like the HdPrman render delegate implementation which falls back to returning a valid AOV descriptor for any AOV name passed to it.

License: CC BY 4.0, Copyright Contributors to the ASWF USD working group.