-
Notifications
You must be signed in to change notification settings - Fork 5
What Is Supported
The goal is to support everything pbrt has to offer in a somewhat extensible way so if a developer wants to add functionality they can do so in a easily with little to no modifications to the exporter it self.
With the exception of Shapes, Mediums and Transforms, everything has a node based interface through Houdini VOP nodes.
A base set of parameters can be found on the PBRT ROP which covers most of the scene wide options. If additional functionality is required that is not exposed then the corresponding VOP node can be plugged into. In these cases the ROPs values will be disabled and the VOP node's values will be used instead. This makes it easy to add new Integrators, Samplers, etc without having to modify the ROP and Python scripts.
Houdini | pbrt | Notes |
---|---|---|
Circle | disk | Texture coordinates will not match |
Sphere | sphere | |
Tube | cone or cylinder | if rad1 == rad2 a cylinder is used, else if rad1 == 0 a cone is used |
Poly | trianglemesh | Polys with more than 3 points are tesselated |
PolySoup | trianglemesh | Polys with more than 3 points are tesselated |
Mesh | trianglemesh | Tesselated to Polys |
NURBSMesh | nurbs | |
NURBCurve | not supported | Support for this coming. |
BezierCurve | curve | Order and basis restrictions apply, no auto-conversion done |
BezierMesh | trianglemesh | Tesselated to Polys |
MetaBall | trianglemesh | Tesselated to Polys with lod set to 1, if other settings are required, pre-convert MetaBalls |
Volume | medium | A trianglemesh will be created which bounds the volume along with a heterogeneous medium |
Heightfield | heightfield | technically Houdini uses Volumes for heightfields but these are auto-detected |
Tetrahedron | trianglemesh | Tesselated to Polys |
VDB | not supported | Recommend: Convert to Houdini Volumes |
Packed Prims | not supported |
Overriding of Material parameters is supported through Houdini's Material Overrides. This can easily be done via a Material SOP.
Houdini supports arbitrary attributes on the primitives, points and vertices. The exporter will not export all of these attributes to pbrt parms, only the ones that are supported by pbrt are currently exported.
The two default Houdini lights, Light and Environment Light, will automatically be converted to the appropriate pbrt light type at export. If direct control of the parameter values (or light type) is required then you can add the light_node property. This will allow you to hook up a pbrt light VOP and to the light. The light's transforms will still be wrangled but the parameters on the light will be ignored.
Houdini has an Instance Object that supports two different modes.
Fast point instancing uses PBRT's ObjectInstance API to share geometry. This allows for a fast export but does not support different materials between instances. See Exercise B.2 in the book. Good for instancing many copies of the same looking object. (Can be different sizes.) This can be considered "render time instancing".
Full point instancing does not use PBRT's ObjectInstance API. Instead when exporting the scene for PBRT a Houdini will create objects for each of the point representations. This allows for the creation of many objects without needing lots of actual Object nodes in Houdini. This can be considered "scene export instancing".
During full point instancing Houdini will evaluate the shop_materialpath if it exists. Normally a NamedMaterial is made at the start of the export and then referenced. Using a shop_materialpath on points when Full Point Instancing will allow for the full evaluation of the shading graph for each point. This is more expensive but allows the shading network to change per point.
When Houdini is evaluating Full Point Instancing, it keeps track of the current point being evaluated which you can access via the instancepoint() expression on parameters. Uses cases for this would be to change object settings per point, or instancing lights with different colors. Note the instancepoint() expression does not work on the various PBRT Materials or Textures, only Object nodes (including Lights).
It is recommended that if you are full point "instancing" a lot of large geometry to use the #include filename.pbrt
functionality but adding a pbrt_include
PBRT Render Property. This saves time on having to generate the same chunk of geometry for every instanced object.