Editing Operator Properties
When you select an operator in the The Operator Stack or a node in the The Node Graph, its parameters appear in the Operator Properties panel. This is where you do the detailed work of tuning a groom: setting values, drawing curves, and assigning texture maps.
Kinds of parameters
Operators expose several kinds of controls:
- Numeric values and sliders for amounts, lengths, counts, and similar settings.
- Toggles and choices for switching behavior on or off, or picking a mode.
- Ramps and curves for values that vary along the length of a strand or across a surface, edited directly in a small curve editor.
- Texture maps for driving a parameter from an image, so the effect varies across the base surface.
- Expressions for computing a parameter from strand data, so the effect follows a formula rather than a painted map.
- File paths for operators that reference external files, such as a baked Alembic cache.
Driving parameters with maps, curves and expressions
Many parameters can be controlled by more than a single number. A ramp lets a value change smoothly from a strand's root to its tip; a texture map lets a value vary across the mesh, following an image you paint or supply; a strand channel lets it follow per-strand or per-vertex data; and an expression lets it follow a formula you write. These are the tools that turn a uniform effect into a natural, varied groom. For painting maps directly in the App, see Paint Texture Tool.
Such a parameter appears as a group named after it, for example Amount or Magnitude. Collapsed, the group shows the value beside small icons for its channel, map and expression, which say at a glance what drives the value; expanded, each of these has a row of its own, followed by the ramp.
Controllers and keys
A parameter holding a number or an on/off switch can also be driven by a controller, a node of its own that can change the value over time: a wave, noise, a step, a ramp, a constant shared by several parameters, or keyframes. Right-click the parameter to assign one. A parameter with a controller shows a button in front of its control which selects the controller; keyframed parameters are outlined, orange or red on a key, and their button adds or deletes the key at the current frame. See Parameter Controllers and Keyframe Animation.
Finding your way back from a texture
Clicking a connected map selects its texture node, so its own parameters appear in the panel; a texture can in turn have maps of its own, fed by further textures. The same holds for a controller selected from the parameter it drives. Whenever the selected node feeds the current operator stack through such connections rather than being part of it, a trail at the top of the panel shows how it is connected, for example Curl > Gradient Texture > Noise Texture. Click any name in the trail to select that node, or click the operator's name to return to it. The trail also appears for a material assigned to an object, starting at the object. It is not shown for the operators of the stack themselves.
Expressions
An expression is a short formula evaluated for every strand, or for every point of every strand when it reads point data, whose result multiplies the parameter's value together with the ramp, the map and the channel. It can read the strand's index, id, position on the surface, length, point index and width, any strand channel of the hair, and texture maps, and offers the usual arithmetic, comparisons, conditions and a library of functions for noise, randomness and ranges. An empty expression leaves the value alone. The language is the one the Generate Strand Data Operator uses to generate channels; see that page for what you can write.
For example, hash( $strandId ) >= 0.3 ? 1 : 0 turns the effect off on a random third of the strands, and $position[2] >= 0 ? 1 : 0.5 halves it on the strands rooted below the ground plane.
In the expanded group the expression has a row with three parts: the expression icon, a Compose button and the expression box. The box shows the text colored by meaning, offers completions for variable and function names as you type (Tab accepts the highlighted one) and reports any problem with the text underneath it as you write; the value is applied when you leave the box, and Escape abandons the edit. The box is one line high and grows with the lines you write, up to four, beyond which it scrolls. The Compose button hands the work to the Assistant: describe what the expression should do in your own words and the Assistant writes it, checking it against the channels the hair has.
When the group is collapsed, the expression icon is tinted while an expression is set and shows it when hovered. Clicking the icon opens a dialog with the same editor and more room, so an expression can be written without expanding the group; OK (also Ctrl+Enter) applies the text and Cancel (also Escape) discards it.
Embedding referenced files
Some operators point to external files on disk, such as a baked Alembic mesh or hair cache. For each such file path you can choose whether to keep it as an external reference or to embed the file inside your groom. An embedded file travels with the groom when you save it as a compressed .oxz archive, so the groom stays self-contained and can be shared without missing assets.
The Operator Properties panel marks an embedded file path with a distinct (green) tint, and hovering the field shows an Embedded tooltip with the file name. A button beside each file path embeds the file or releases it back to an external reference: embedding pulls a copy of the file into the groom, while releasing writes the file back out next to the groom on disk (so the groom must have been saved at least once). Parameters that hold several files, such as a baked mesh with multiple source files, can be embedded one entry at a time. For how external files are located when they are not embedded, see Managing External File Paths.
Presets
A preset is a saved set of values that you can re-apply to a tool, operator, or groom with a single click. The Tool Properties, Operator Properties, and groom properties panels each show a preset bar at the top, beside the tool, operator, or groom name and icon: a bookmark button which saves the current values as a preset, a drop-down listing the saved ones, and a Delete button. Selecting a preset applies its values immediately as a single undo step, so Ctrl+Z restores the previous values. While a properties panel is focused you can also step through its presets from the keyboard, with Ctrl+; for the next preset and Ctrl+' for the previous one.
The drop-down always offers a Default entry, which restores the values the tool, operator, or groom started out with, again as a single undo step. For a groom this means the defaults its parameters script declares; a parameter which declares none is left as it is.
A preset is identified by the values it holds rather than by its name, so the drop-down shows whichever preset the current values belong to without your having to pick it: change a value and the name clears, set it back and the preset is named again. Each set of values is therefore stored once. Saving values which are already saved under another name renames that preset instead of adding a second entry for them, and the save dialog tells you so before you confirm. The values the Default entry restores cannot be saved as a preset of their own, and neither can those of a target which exposes no values at all; in both cases the bookmark button is unavailable and its tooltip explains why.
Where a preset is stored depends on what it belongs to:
- Tool and operator presets are saved on your computer, one set per tool type and per operator type, and are shared across all of your grooms. A preset saved on, for example, a Frizz operator is then offered on every Frizz operator you later select.
- A groom's presets are stored inside the groom itself, so they travel with it when you save it as a
.oxzarchive and are available to anyone who opens that groom. The presets shown for a selected The Groom Operator are that groom's own, and are the same ones the groom properties panel offers: for a Groom operator which points at a groom file, they are the presets saved inside that file, exactly what you see while that groom is open, and every operator referencing the same groom offers them. Because they belong to that groom, they are offered for use but cannot be saved or deleted from a groom which merely references it; open that groom to change them. These are presets of a groom's parameter values, and are unrelated to the starting-point grooms described in Template Grooms.
Presets carry only the settings that are meaningful to reuse, such as numeric values, toggles, choices, colors, and ramp curves; they do not carry inputs like meshes, hair, or texture-map connections. A preset also stays usable as a groom evolves: if an operator or groom has since gained, lost, renamed, or changed the type of a parameter, the entries that no longer match are simply skipped and the rest are applied.
Groom properties
Settings that apply to the groom as a whole, rather than to a single operator, are presented in a separate groom properties panel, which also offers each parameter a menu for setting and resetting its default. See Editing Groom Properties, and The Ornatrix App Workspace for an overview of the panels.
Any operator parameter can be promoted to one of those groom properties from here: right-click the parameter's row anywhere left of its control, on the name or beside it, and pick Add to Groom Properties. The groom gains a property of the same name which drives this value, with the value, range and type the parameter has now, and the change is one undoable step. The menu is beside the control rather than on it because the controls use the right mouse button for their own purposes, such as a slider's reset. The same menu assigns controllers. The entry is disabled, with the reason in its tooltip, when the groom already exposes the parameter or when its type is one a groom property cannot take, such as a choice from a list or a texture map. It is an action like any menu command, so a keyboard shortcut can be assigned to it in Settings and Preferences; pressed that way it acts on the parameter row under the mouse, without opening the menu.


