Submission


Compression: .usd versus .usdz


We recommend to use the file extension .usdz instead of .usd in Houdini.
These files are compressed any therefore smaller.




.usd export & render



The USD ROP does not contain any information about 

  • the frame name 
  • nor does it contain an information which renderer you want to use
  • nor any override for a rendersettings node (in case you want to switch between test and production render)

    Therefore:
     If you want to export .usd files to render frames with a second job, then you have to modify your USD ROP node.



Modify the usd ROP/LOP nodes interface


You have to add spare parameters to the USD ROP/LOP node.

  • Select your /stage/usd_rop... node.

  • Click on the gear at the top right 
    and choose "Edit parameter interface".

  • Renderer
    Required if you do not use Karma
    • Select "String" in the left column and drag'n'drop into the middle column. 
      Insert it after "Output File".
    • At the right, set name "renderer" and label "Renderer".
    • After saving the interface, enter the name of the renderer you want to use.
      Note: We offer different names for the same renderer. Just for convenience in case an artist does not remember.
      Note: If you have a usd_render ROP in your scene, then you can use an expression `chsop("../usdrender1/renderer")` to copy the name from the "Render Delegate" dropdown.

      RR recognizes these renderer names 
      (not case sensitive, "arnold" equals "ARnoLd" ):
      • Karma:
        •         (<= nothing, Karma is the default)
        • Karma
        • BRAY_HdKarma

      • Karma XPU
        • KarmaXPU
        • BRAY_HdKarmaXPU

      • Arnold via kick 
        (A bit faster, but does not support all features, might look different):
        • Arnold
        • HtoA
        • HdArnoldRendererPlugin

      • Arnold via husk 
        (A bit slower than kick, more memory usage, but supports all features):
        • Arnold-Husk

      • Arnold via sick
        not supported yet
         
      • Renderman (default, legacy)
        • prman
        • renderman
        • HdPrmanLoaderRendererPlugin

      • Renderman XPU:
        • prman-xpu
        • prman-xpuCpu
        • prman-xpuGpu
        • HdPrmanXpuLoaderRendererPlugin
        • HdPrmanXpuCpuLoaderRendererPlugin
        • HdPrmanXpuGpuLoaderRendererPlugin

      • Redshift:
        • rs
        • Redshift
        • HdRedshiftRendererPlugin

      • V-Ray:
        • vray
        • v-ray
        • HdVRayRendererPlugin


  • Output image
    There are two ways to specify the output image:
    • A)
      (Scripted Submission only)
      Add a renderproducts node to your Solaris tree and set the output name as render product.
      Note that some subnetworks like the Karma LOP includes the renderproducts.
    • B)
      (Scripted and External Submission)
      While editing the parameter interface:
      • Select "String" in the left list and drag'n'drop into the middle column.
        Insert it after "Output File".
      • At the right, set name "outputimage" and label "Output Image".

  • Rendersettings
    Required if you want to override the render settings at render time (not for Arnold kick! )
    • Select "String" in the left list and drag'n'drop into the middle column.
      Insert it after "Output File".
    • At the right, set name "rendersettings" and label "Render Settings".
    • At the right, switch tab to Menu.
    • Enable "Use Menu" and set the dropdown to "Replace".
    • Select sub-tab "Menu Script" and add this script:
      import loputils
      lop = kwargs['node'].node(kwargs['node'].evalParm('loppath'))
      stage = lop.stage() if lop else None
      return loputils.createRenderSettingsPrimMenu(stage)

  • Save the changes.





Note:
These settings do not change the exported .usd file in any way!
They are just informations for Royal Render.
Royal Render uses this information within the renderers commandline.




Nested Usd/Alembic files


If you are using other .usd or alembic files as a reference to your new .usd, then you might get some issues.

To add files by reference, simply add a reference node to your /stage.



Motion Blur

If you want to use Motion Blur, then you have to export a single alembic/usd file with all animation.
(and not a file per frame)
Note: You can use usdstichclips to create a single .usd file from a per-frame usd sequence.
(It does not copy the data into the new file, it creates reference links. See next section "FPS issues" as well.)



FPS issues

After importing an all-frame single .usd file, you might get the warning you might get a warning on a node saying 
"Time codes per second metadata is inconsistent across time dependent inputs. Composition may not be as expected."

Explanation:
Somtimes .usd files might miss the FPS information. 
And if this information is missing, the USD file is 24FPS by default.
Importing this into a 25FPS Houdini scene creates some issues.

Origin:
If you export single all-frame a .usd file, then it might contain a FPS information set by a render properties node in your scene.

But you often want to create a per-frame .usd sequence (because you wanted to use multiple machines to render it or because it saves space on fileserver cache nodes).
The disadvantage of this per-frame .usd sequence is that you cannot use Motion Blur.
So you need to use the usdstichclips rop node to create a single all-frame .usd file (with references to your per-frame usd sequence).

And this new .usd file it does not specify a framerate. 
So USD/lops assume it is in 24 FPS regardless of what the Houdini scene is set to. 
The only way to fix it is to export the stitched USD as a .usda file and ingest the 25 fps tag yourself.

Note: 
This will be fixed according to SideFX in the future.
Current release when this help section was written: 19.0.561