Home

Awesome

HdBlackbird

License

A USD/Hydra RenderDelegate plugin that adds support for the Blackbird renderer (a fork of the Blender Foundation's Cycles renderer) to any client.

Its goal is to render a one-to-one representation of a USD scene with Blackbird.

This requires three components:

The first two of which are implemented in this repository.

Building

Requirements

Linux

Make sure to build cycles with -DCMAKE_POSITION_INDEPENDENT_CODE=ON

mkdir build
cd build

cmake -DUSD_ROOT=/path/to/usd/root               \
  -DCYCLES_ROOT=/path/to/cycles                  \
  -DCYCLES_LIBRARY_DIR=/path/to/cycles/build/lib \
  -DCYCLES_INCLUDE_DIRS=/path/to/cycles/src      \
  ..

Windows

mkdir build
cd build

cmake -DUSD_ROOT=C:/path/to/usd/root               \
  -DCYCLES_ROOT=C:/path/to/cycles                  \
  -DCYCLES_LIBRARY_DIR=C:/path/to/cycles/build/lib \
  -DCYCLES_INCLUDE_DIRS=C:/path/to/cycles/src      \
  ..

Installation

Both the hdCycles plugin and the ndrCycles plugin must be added to the PXR_PLUGINPATH_NAME environment variable.

For example:

PXR_PLUGINPATH_NAME = %HDCYCLES_INSTALL_DIR%/plugin/usd/ndrCycles/resources;%HDCYCLES_INSTALL_DIR%/plugin/usd/hdCycles/resources

Notes

usdCycles schema

To allow a full 1:1 representation of a Blender Cycles scene, we need to store Cycles specific settings in USD. To do this, we created usdCycles. More information can be found in that repo.

To prevent DCC's and tooling to not have to implement the full dependency chain of hdCycles, the usdCycles schema definition has been split into it's own repo (and rez package). Found Here!.

Building hdCycles without usdCycles is possible, but results in a very limited subsection of Cycles settings.

For full usdCycles schema support, please build with usdCycles.

Stability & Performance

The codebase is in active development and should be deemed as unstable.

The primary priority is feature-completness. Stability and performance will be addressed in the future.

Please file issues for any question or problem.

Materials

Currently Cycles materials are exported through custom additions to the Blender USD Exporter.

Of note, hdCycles expects a flattened Cycles Material graph, with no groups or reroute nodes. It also does not use the Material Output node. Instead it favours the USD/Hydra material binding inputs.

For now only BSDF nodes are registered in the ndr plugin.

Lights

Currently light node networks are unsupported via USD Lux. A proposal from Pixar plans to fix these limitations. It is planned to support proper world and light materials once the proposal is accepted.

Feature Set

Currently supported features:

hdCyclesFeatureStatusNotes
MeshesBasic Mesh
Geom Subsets
Subdivision SurfaceAbility to set at render time
Subdivision Surface (Adaptive)
Generic Primvars
UVs
Display Colors
Generic Primitives(Cube, sphere, cylinder)
Tangents
Point Instances
usdCycles Schema Support
Motion Blur (Transform)
Motion Blur (Deforming)
Motion Blur (Velocity)
Motion Blur (Instances)
MaterialsCycles Material GraphOngoing support
Displacement
Volumetric
OSL
USD Preview Surface
usdCycles Schema Support
VolumesVDB Support(Likely will go with foundations implementation)
CamerasBasic Support
Depth of Field
Motion Blur
usdCycles Schema Support
CurvesBasisCurves
NURBs
Point Instancing
Motion Blur (Transform)
Motion Blur (Deforming)Known slow down.
Motion Blur (Velocity)
Motion Blur (Instances)
usdCycles Schema Support
PointsPoints
usdCycles Schema Support
Motion Blur (Transform)
Motion Blur (Velocity)
LightsPoint
Directional
Spot
Area
DomeLimited to only one at a time
TemperatureWe manually create a blackbody shader for now...
Light MaterialsPending support for new USD Light network shaders
usdCycles Schema Support
Render SettingsBasic Render Settings
usdCycles Schema SupportRender Settings, Render Products, etc.
RenderingCombined AOV
Tiled Rendering
Full AOV Support
Cryptomatte
OCIO Support
CUDA/GPU SupportShould just require adjustments to build scripts

License

This project is licensed under the Apache 2 license.

For a full list of third-party licenses see: LICENSE-THIRDPARTY

Attribution

This could not have been made without the help and reference of the following open source projects: