On this page | |
Since | 18.0 |
How to ¶
Light Mixer has a custom Qt-based user interface that takes over the parameter editor when this node is selected. You can switch between the custom interface and the regular parameters by clicking the Show/hide parameters button in the Parameter editor’s toolbar.
-
A tree on the left shows all lights in the scene.
-
Drag one or more lights or collections from the tree on the left into the space on the right.
-
You can switch the right side between two views of the added lights:
Sliders
Build a custom mixer interface, showing the lights and collections as sliders, similar to a light board.
Sheet
Displays the attributes on the lights in a spreadsheet format.
-
If you drag in an individual light into the mixer, it appears as an individual set of sliders for controlling different attributes (intensity and exposure, by default, plus color).
In the spreadsheet view, individual lights appear as rows.
-
If you drag a light collection into the mixer, it first appears collapsed. Click the
Collapse button in the top right corner to expand the lights inside.
Each collection has its own “master sliders” for intensity, exposure, and a tint color, which are all multiplied with the attributes of the lights inside.
In the spreadsheet, collections appear as folders with light rows under them.
To... | Do this |
---|---|
Arrange items in the mixer |
Drag items in the mixer to rearrange them. |
Create a light collection |
Select lights in the tree on the left side, then click the |
Edit a value in the spreadsheet view |
Click the value. |
Tips and notes ¶
-
This node represents a first try at using custom Python-driven UI for a node. Future versions should be faster, more robust, and have many more features.
-
Currently collections are always created on
/collection
. -
Collections created here will not have
/
included by default and their expansion rule isexplicitOnly
. -
You can add the same light/collection multiple times.
Configuration file ¶
You can customize the Light Mixer user interface by creating a HOUDINIPATH/LightMixerConfig.json
file (for example, $HOUDINI_USER_PREF_DIR/LightMixerConfig.json
. If the node finds multiple LightMixerConfig.json
files on the path, it merges them such that files earlier in the path override later ones (the HOUDINIPATH is ordered from most specific to least specific, unlike many path variables in UNIX where later items override earlier ones).
The following example contains the defaults for the available settings:
{ "main.default_tab": 1, "mixer.show_attributes": ["inputs:intensity", "inputs:exposure"], "sheet.show_attributes": ["inputs:intensity", "inputs:exposure", "inputs:color", "inputs:colorTemperature", "$solo", "$mute", "$active"], "collections.search": ["/lights", "/collections"], "lights.search": ["/"], "attributes.config": { } }
In your configuration file you can omit default values (unless you need to override another configuration file higher up the path). For example, if you only want to make new Light Mixers open with the Attribute Spreadsheet tab active, you can use just the following:
{ "main.default_tab": 0 }
You can use the following configuration keys in the JSON file:
main.default_tab
(Integer) Which tab is active in a new Light Mixer. 0
sets the Sliders tab. 1
sets the Attributes tab. 2
sets the Transforms tab. Default is 1
.
mixer.show_attributes
(List of strings) The names of USD attributes to show sliders for in the Sliders tab. The default is ["inputs:intensity", "intputs:exposure"]
.
sheet.show_attributes
(List of strings) The names of USD attributes to show columns for in the Attributes tab. For example, "inputs:color"
. The strings can use the following special values:
-
You can use the special strings
$solo
,$mute
, and$active
to add columns for those controls. -
You can “extract” a component of a vector attribute using
‹attribute_name›$‹index›
, for exampleinputs:color$1
to get the second component (green) of the color. You can user
,g
, andb
as aliases for0
,1
, and2
, for exampleinputs:color$r
to get the red component of the color. -
You can also use the names of custom attributes defined in the
attributes.config
key (see below).
collections.search
(List of strings) The USD prim paths to check for collection attributes. The default is ["/lights", "/collections"]
.
lights.search
(List of strings) The list of paths at which to start (recursively) searching the scene tree for light prims. The default is ["/"]
, which will find all light prims in the scene.
attributes.config
(Object) This maps attribute name strings to configuration objects describing how to present the attribute in the Light Mixer user interface. The object can have the following keys:
type
(String) The USD name for the attribute’s data type, for example float
, color3f
, bool
.
default
The default value for the attribute. The value should be a JSON equivalent of the attributes type. For example, if the type
is color3f
, this should be a list of three numbers.
min
, max
The minimum and maximum realistic values for the attribute (for compound types, these apply to the components). The light mixer uses these to set the low and high ends of the slider.
label
(String) The human readable label for the attribute to display in the user interface.
component_labels
(List of strings) For compound types, individual labels for each component.
modify
(String) How to apply this attribute to a collection. If this key is not present, this attribute is not shown in the interface as applicable to a whole collection at once. The possible values are multiply
(multiply the attribute on each member by the collection value), add
(add the collection value to the attribute on each member), or set
(set the attribute on each member to the collection value).
identity
The value which, when applied to a collection, has no effect. This is like the default value when applied to a collection. For example, 1.0
for a scale, or 0.0
for an offset. The value should be a JSON equivalent of the attributes type. For example, if the type
is color3f
, this should be a list of three numbers.
precision
(Number) Indicates the number of decimal places the user interface should show for this value (if the attribute type is numeric). For example, 0.01
to show two decimal places.
For example:
{ "sheet.show_attributes": ["inputs:intensity", "mycustomvector"], "attributes.config": { "mycustomvector": { "type": "float2", "default": [1.0, 1.5], "identity": [1.0, 1.0], "min": 0.0, "max": 3.0, "label": "Size", "component_labels": ["Width", "Height"], "modify": "multiply", "precision": 0.1, } } }
Parameters ¶
Number of Collections
The number of USD collections that this node will create. For each collection, a separate set of parameters are used to define the collection’s name, USD prim and members.
Collection # Prim
The USD prim where the collection will be authored.
Collection # Name
The name of the new collection. Replaces any existing group of the same name on the same prim.
Collection # Includes
Space separated list of prim patterns that will be included in the collection.
Collection # Excludes
Space separated list of prim patterns that will be excluded from the include list.
Transform
How the transform parameters below apply to the primitive. (Because each USD prim can contain multiple transforms, and be affected by parent transforms, there are many different ways to apply new transforms.)
Append
Apply the parameters as a new, most local transform.
Prepend
Apply the parameters as a new, least local transform.
Overwrite or Append
If a local transform exists with the name xformOp:transform
, overwrite it with the parameters. Otherwise, apply it as a new, most local transform.
If this replaces an existing transform, that transform’s order in the local transform stack is not affected.
Overwrite or Prepend
Like Overwrite or Append, but least local.
Apply Transform in World Space
Apply the parameters as a new, most local transform. However, prior to applying the transform, it is updated so that the result of the transform appears as if the transform was being applied in world space, before any local or ancestor transformations were applied to the primitive.
Replace All Local Transforms
The transform specified in the remaining transform parameters is always applied as a new transform. Prior to applying this transform, all existing transform operations on the local transform stack are cleared so that only the supplied transform remains on the local transform stack (though ancestor transforms still have an effect).
Transform Order
The order in which Houdini applies translates, rotates, and scales, and the order in which it applies rotation.
Translate
Movement amount along XYZ axes.
Rotate
Degrees rotation around XYZ axes.
Scale
Non-uniform scaling along XYZ axes.
Shear
Amount of shearing. The three values represent shearing in the X direction on the XY plane, in the X direction on the XZ plane, and in the Y direction on the YZ plane, respectively.
Uniform Scale
Scales the object uniformly along all three axes.
See also |