On this page |
Overview ¶
When you create a digital asset, you can put the help in one of two places:
-
In the Help tab of the asset’s Type Properties window.
-
In a file in the Houdini path.
See the general form of a node help page and the breakdown of the individual pieces below.
Tip
You can see the wiki source of any page in the server by appending .txt
to the end of the page URL.
File naming ¶
Usually pasting the help into an asset’s Help tab is the best and most convenient option. If that’s how you work with help, you can ignore this section.
However, if you want to keep the help in a file, you need to observe the correct naming convention so the help server can find it.
-
Create the file in:
HOUDINIPATH/help/nodes/‹dir›/
, where ‹dir› is a “short” version of the node type category (these directory names are dictated by age-old custom). For example:Category
Directory
Object
obj
SOP
sop
DOP
dop
COP
cop2
ROP
out
-
In the directory, the filename pattern for an unscoped node is:
[‹namespace›--]‹name›[-‹version›].txt
For example, the
bravo
SOP with no namespace and no version would go in:bravo.txt
If the
bravo
SOP is in thecom.corp
namespace, the filename would be:com.corp--bravo.txt
Version
2
of the node would go in:bravo--foo-2.txt
-
For a scoped node, the recursive filename pattern is:
[‹scope›@]‹filename›.txt
In building the recursive ‹scope› part, replace any slashes (for example, in
Object/alfa
) with underscores.For example, for the scoped, namespaced SOP node
com.corp::Object/alfa::2.0::com.corp::bravo::3.0
, the help would go in:/nodes/sop/com.corp--Object_alfa-2.0@com.corp--bravo-3.0.txt
This allows fully encoding any number of recursive scopes.
Note
This naming convention was changed in Houdini 16. Unfortunately the previous convention had major problems.
-
It required intermediate directories which were inconvenient to work with.
-
It used names starting with
-
and--
which were difficult to work with in the UNIX shell. -
It didn’t work with scoped nodes.
Storing help images in the asset ¶
You can use an opdef:
path in a link, and the help system translates it into the equivalent help path. If you have an image as an “extra file” (aka section) in an asset, in the help for that asset you can do this:
[Image:opdef:./test.png]
To access sections in other assets, you can use the full asset name (with category) instead of .
:
[Image:opdef:matt::Sop/example::1.0/test.png]
Alternatively, you could write a help system path directly instead of using opdef:
. Links are relative to the directory containing the help file (for example, /nodes/sop/
for a SOP asset). You can access extra files in the asset as if the asset help file was a directory with the extra files inside. So, for example, if you have an asset matt::example::1.0
with an extra file called test.png
, you can use in the asset’s help like this:
[Image:matt--example-1.0/test.png]
To access files in other installed assets, you just need to craft a path to that file inside the other asset, e.g. /nodes/dop/other_asset/other_file.png
or ../dop/other_asset/other_file.png
.
(Note, when you craft a a help system path, the help system uses mangled asset names that work better as a filenames. When you view the help for your asset, you can see the “mangled” name in the URL bar.)
General form ¶
See Houdini wiki markup for a general wiki markup reference.
= My Asset = #icon: path/to/icon """A quick summary of what the node does.""" == Overview == Explanation of the node's purpose and operation. @inputs Label: What the input is for. @parameters Label: #id: internalname Explanation of what the parameter does. Label: #id: internalname Explanation of what the parameter does. @related * [Node:sop/copy]
Breakdown ¶
Title ¶
= Title =
This is the node’s human-readable label. If you don’t include this, the server will use HOM to get the node’s label.
Properties ¶
#icon: path/to/icon.svg
#icon: ‹path›
The path to an icon image for this node. Icons can be pixel images or
-
You can use images from the
HOUDINIPATH/help
path. For example, if you have an image at:HOUDINIPATH/help/nodes/sop/common.svg
…you can refer to it in the
#icon
property like this:/nodes/sop/common.svg
-
You can use
opdef:.?‹name›
here to refer to an icon file in a section of the asset.For example, if you have an asset section called
Icon.svg
, you can refer to it in the help using:#icon: opdef:.?Icon.svg
-
If this is in the form
‹DIR›/‹name›
, it refers to one of Houdini’s internal icons. For example,SOP/copy
.
The following properties will be inferred automatically by Houdini from the path. You don’t need to include them, unless you want to for self-documentation purposes.
#type: node
Marks this page as documenting a node. If you don’t include this, the server will infer it from the page path.
#context: ‹ctx›
Indicates the node category: obj
, sop
, dop
, cop2
, chop
, or out
. If you don’t include this, the server will infer it from the page path.
#namespace: ‹ns›
Indicates the namespace this node is in. If you don’t include this, the server will infer it from the page path.
#internal: ‹name›
The internal name of this node. If you don’t include this, the server will infer it from the page path.
#version: ‹x.y›
The version string of this node. If you don’t include this, the server will infer it from the page path.
Summary ¶
"""Imports geometry from a file on disk."""
You can include a short summary paragraph in """triple quotes"""
after the title.
-
The server will use this as the tooltip for the node, and display it in some places in the help.
-
The summary should begin with a verb and describe what it accomplishes for the user.
-
Avoid verbiage like “This node allows the user to…”.
-
The summary should generally be one sentence, or at most two.
Body ¶
The text in the body of the page, between the title and the sections, should answer the following questions.
-
What does this operator do?
-
Why would I use the operator? How can it contribute to my scene?
-
Where does it fit into the network?
Inputs section ¶
@inputs Edges: Geometry containing the edges you want to extrude.
If a node has inputs, start the section documenting the inputs with @inputs
. For each input:
-
Write the input’s label followed by a colon (
:
). -
Under that, indent one or more paragraphs describing what the user should attach to the input, whether it’s optional, what the node will do with the input, and so on.
Parameters section ¶
@parameters Group: #id: group The group name or point numbers this node will extract. Distance: #id: dist How far to move the extracted points.
Start the section documenting the parameters with @parameters
.
-
Use headings to represent tabs in the interface. For example, if you have two parameters in a “Basics” tab and two parameters in an “Advanced” tab:
@parameters == Basics == Group: #id: group The group name or point numbers this node will extract. Distance: #id: dist How far to move the extracted points. == Advanced == Space: #id: xformspace The transform space in which the node measures distance. Compression: #id: compresslvl How much to compress the recorded data. Higher levels use less disk space but take longer to load.
Parameter tooltips ¶
Houdini automatically extracts the first paragraph of the parameter description to use as the parameter’s tooltip if you don’t explicitly set a tooltip in the parameter interface editor.
Important: If you don’t add an #id:
property with the parameter’s internal name (as shown above), Houdini will try to match parameters by their labels. However, it’s good practice to add an #id:
property to all parameters. This ensures the parameters are linked properly even if some of them have duplicate labels.
Related section ¶
Linking and sharing content ¶
-
See the wiki markup reference for how to make links and include images and other media.
-
The help server provides asset sections as sub-URLs of the node’s URL. For example, if your asset is at:
/nodes/sop/mynamespace--myextrude
…then you can access the sections inside the asset using:
/nodes/sop/mynamespace--myextrude/section_name
For example, if you have a image file in a section named
MainImage.jpg
, you can use it in the asset’s help:[Image:./MainImage.jpg]
Tip
Your section names should have extensions (for example
.jpg
) so the server can guess the file’s type. -
Alternatively, you can use Houdini’s
opdef:
syntax to refer to sections. For example:[Image:opdef:.?MainImage.jpg]
-
It’s often useful to “include” text from another node. For example, if two nodes have very similar interfaces, or the interface of one node contains parameters promoted from another.
As long as a parameter has an
#id:
property, you can include it in other pages. For example, if one asset has the parameters:@parameters Group: #id: group The group or point numbers to move. Distance: #id: dist How far to move the points.
You can include this parameter in another asset’s help like this:
@parameters :include otherasset#group: :include otherasset#dist:
-
Sometimes a parameter is duplicated or promoted, but with a different label or internal name. You can include just the content by adding a trailing slash after the
#‹id›
part in the include path:@parameters Point group: #id: ptgroup :include otherasset#group/:
Style tips ¶
Verbiage ¶
Don’t include extra verbiage at the beginning of parameter help:
Edge SOP
This parameter sets the path to the geometry node.
Instead, just declare what the value is:
Edge SOP
Path to the geometry node containing the edges.
Parameter help ¶
Avoid under-documenting parameters like this:
Rotation
Sets the rotation.
Order of rotation
Sets the order of rotations.
No matter how straightforward a parameter might seem to you, there is almost always a wealth of unspoken knowledge (for beginners) and/or obscure details (for experts) you can include, such as:
-
The range of acceptable values.
-
Why/when you would use this parameter.
-
What turning on/off/increasing/decresing/whatever the parameter accomplishes.
-
What this parameter does not do.
-
Edge conditions.
-
Defaults.
-
Units.
For example:
Rotation
The rotation, in degrees, of the texture. Positive numbers rotate clockwise (relative to the texture), negative numbers rotate counter-clockwise. Use with the position parameters to place the texture on the model. You can set rotation in radians using the rotateTexture command.
Order of rotation
Controls the order in which the object is rotated around the X, Y, and Z axes. Unlike moving and scaling, rotation can result in completely different orientations depending the order in which the axes are rotated. The conventional order is X, Y, then Z. In some animation situations, you will want to change the order to animate a rotation more easily.
-
Remember that you can use multiple paragraphs in a parameter description.
-
Keep in mind that the first paragraph is used as the tooltip for the parameter.
Active voice ¶
Don’t use passive voice or talk about the user in the third person:
The user should... When this parameter is set... The Force operation is used to create... This attribute will be set when...
Instead, use active voice and address the reader directly. The doer of the action should be clear:
You should... Set this parameter when you want to... The Force operation creates... The node sets this attribute when...
Avoid speaking in terms of the operator allowing something or making it possible.
This operator allows you to extrude... This makes it possible for you to extrude...
Instead, write in terms of performing concrete actions.
Extrudes a polygon...
POV ¶
Try not to document the node in terms of what it does to Houdini internally. Instead, describe what it accomplishes for the user in the scene.