HdCycles

It’s finally time to open source HdCycles! A lot of work has gone into this first release. A fair few features are supported, however there are still a number of performance and stability issues. We are actively working on these. This is an alpha build. Expect some bugs and crashes. We would love to hear your feedback! Feel free to reach out directly, or send through a GitHub Issue.

https://github.com/tangent-opensource/hdcycles

HdCycles will allow any Hydra enabled digital content creation tool to use the Cycles renderer to directly render USD data. Examples of such are: Houdini, USDView, Katana. The work released initially lays the foundations for the future of rendering a 1 to 1 copy of a Blender scene via USD data. The next steps will be our work on the usdCycles schema and adding support for this within the delegate.

It’s very exciting to get this out into the world and to keep on working on it. Stay tuned!

On a personal level, this has been an amazing project to work on. Here is a list of just some of the people that have made this launch possible:

For a full list of compatible features, see the readme.

If you’re loading it up for the first time, some things to note:

  • You cannot select objects interactively
  • Subdivision is disabled by default, we have noticed some crashes with attributes (HD_CYCLES_ENABLE_SUBDIVISION=1)
  • Motion blur is disabled by default, transform based motion blur should work. (HD_CYCLES_ENABLE_MOTION_BLUR=1)
  • Normals created in Houdini are not respected yet. Support for this should come soon. 
  • Varying levels of a usdCycles schema have been implemented. Work will be done to converge this to an Open Source standard
  • The Blender Exporter is not yet Open Source (We are working on this. Priority for this should happen soon after HdCycles release)
  • A “Transparent” render (render with no background) is support by setting HD_CYCLES_USE_TRANSPARENT_BACKGROUND=1
  • Tiled rendering is not supported
  • Filmic config.ocio is supported, you must set your OCIO environment variable
  • Max samples can be set via environment variable HD_CYCLES_MAX_SAMPLES=512
  • Houdini
    • Use at your own risk. Its a very first pass implementation
    • We will be fleshing these out in time
    • Point rendering is naively supported, resolution and style can be set via primvars (Similar to karma). In a LOPs attribute wrangle:
      i[]@cycles:object:point_style = {1}; //0 discs, 1: spheres
      i[]@cycles:object:point_resolution = {16};
    • Houdini Cycles nodes are provided in tools/hda/cycles_nodes.hda
    • When the usdCycles schema is created, we will create additional hdas to support a houdini workflow of setting render and object specific settings

Building it yourself is possible and recommended, however, if you are using Houdini 18.0.532 on windows, you can download and use this right now. The provided build is only built for CPU rendering, and is not guaranteed to be updated or compatible. It’s possible in the future that we will have more automated build scripts.

HdCycles – 0.7.0 (Windows + Houdini 18.0.532)

To install you will need to add the plugin/usd/hdCycles and plugin/usd/ndrCycles paths to your PXR_PLUGINPATH_NAME environment variable.

A full list of currently supported environment variables are listed below. Use at your own risk 😉

Environment Variable Default Description
/* ====== HdCycles Settings ====== */
HD_CYCLES_ENABLE_LOGGING FALSE Enable HdCycles Logging
HD_CYCLES_ENABLE_MOTION_BLUR FALSE Enable HdCycles motion blur support
HD_CYCLES_MOTION_STEPS 2 Number of frames to populate motion for
HD_CYCLES_ENABLE_DOF TRUE Enable hdCycles depth of field support
HD_CYCLES_ENABLE_SUBDIVISION FALSE Enable HdCycles subdiv support
HD_CYCLES_SUBDIVISION_DICING_RATE 0.1 Mesh subdivision dicing rate
HD_CYCLES_MAX_SUBDIVISION 12 Maximum levels of subdivision
HD_CYCLES_RENDER_WIDTH 1280 Width of a non interactive HdCycles render
HD_CYCLES_RENDER_HEIGHT 720 Width of a non interactive HdCycles render
HD_CYCLES_USE_OLD_CURVES FALSE If enabled, curves will be populated manually with meshes (You probably dont want this)
HD_CYCLES_USE_TRANSPARENT_BACKGROUND FALSE If enabled, the background will be transparent in renders
/* ======= Cycles Settings ======= */
HD_CYCLES_ENABLE_EXPERIMENTAL FALSE Experimental cycles support.
HD_CYCLES_SHADING_SYSTEM SVM Shading system cycles will use
HD_CYCLES_DEVICE_NAME CPU Device cycles will use to render
HD_CYCLES_DISPLAY_BUFFER_LINEAR TRUE Format of display buffer. False: byte. True: half.
HD_CYCLES_MAX_SAMPLES 256 Number of samples to render per pixel
HD_CYCLES_BVH_TYPE DYNAMIC DYNAMIC or STATIC
HD_CYCLES_NUM_THREADS 0 Number of threads to use
HD_CYCLES_PIXEL_SIZE 1 Size of pixel
HD_CYCLES_TILE_SIZE_X 64 Size of tile x
HD_CYCLES_TILE_SIZE_Y 64 Size of tile y
HD_CYCLES_START_RESOLUTION 4096 Maximum start Resolution of render
HD_CYCLES_EXPOSURE 1 Exposure of cycles film
HD_CYCLES_SHUTTER_MOTION_POSITION 1 Position of shutter motion position. (0: Start, 1: Center, 2: End)
/* ===== Curve Settings ===== */
HD_CYCLES_CURVE_RESOLUTION 3 Resolution of curve
HD_CYCLES_CURVE_SUBDIVISIONS 3 Curve subdvisions
HD_CYCLES_CURVE_USE_BACKFACES FALSE Should curve geometry have backfaces
HD_CYCLES_CURVE_USE_ENCASING TRUE Should curve be encased
HD_CYCLES_CURVE_SHAPE CURVE_THICK Shape of curves [CURVE_RIBBON, CURVE_THICK]
HD_CYCLES_CURVE_PRIMITIVE CURVE_SEGMENTS Curve primitive [CURVE_TRIANGLES, CURVE_LINE_SEGMENTS, CURVE_SEGMENTS, CURVE_RIBBONS]
/* ===== Integrator Settings ===== */
HD_CYCLES_INTEGRATOR_METHOD PATH Method of path tracing. [PATH, BRANCHED_PATH]
HD_CYCLES_DIFFUSE_SAMPLES 1 Number of diffuse samples for cycles integrator
HD_CYCLES_GLOSSY_SAMPLES 1 Number of glossy samples for cycles integrator
HD_CYCLES_TRANSMISSION_SAMPLES 1 Number of transmission samples for cycles integrator
HD_CYCLES_AO_SAMPLES 1 Number of ambient occlusion samples for cycles integrator
HD_CYCLES_MESH_LIGHT_SAMPLES 1 Number of mesh light samples for cycles integrator
HD_CYCLES_SUBSURFACE_SAMPLES 1 Number of subsurface samples for cycles integrator
HD_CYCLES_VOLUME_SAMPLES 1 Number of volume samples for cycles integrator