### Install Houdini and HQueue Client Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/hqueue/gettingstarted.txt Steps to unpack and run the Houdini installer on a client machine, focusing on installing only the HQueue Client component. ```bash tar zxf houdini-X.Y.ZZZ-linux_x86_64_gcc6.3.tar.gz cd houdini-X.Y.ZZZ-linux_x86_64_gcc6.3 ./houdini_install ``` -------------------------------- ### Install HQueue Client on Windows Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/hqueue/gettingstarted.txt Instructions for installing the HQueue Client on a Windows machine to connect it to the HQueue farm. This involves running the Houdini installer, selecting only the HQueue Client, and providing the server name or IP address. ```text 1. Run the Houdini installer on the machine that you want to add. 2. In the installer: - Uncheck all components except for `HQueue Client`. - Proceed with the installation and when prompted to enter the HQueue server information, set the `Name` field to the machine hosting the HQueue Server. For example, `serverMachine`. NOTE: If DNS is not configured for `serverMachine` then you can alternatively enter the server machine's IP address in the `Name` field. - Leave the rest of the HQueue Client options at their default values. 3. After installation completes the HQueue Client will be installed to `C:/HQueueClient` and a new `HQueueClient` service will exist in Windows Services. 4. Go to the Clients page in the HQueue web interface to confirm that the machine was successfully added to the farm. NOTE: Repeat these steps for each additional client machine you want to add to the farm. NOTE: The HQueue Client by default runs with a generic Windows network service account. The account has limited network access and may not have permission to access your network folder. It is recommended that the HQueue Client be changed so that is run with a real Windows user account to avoid possible file permission errors in jobs. To change the HQueue Client's user account, please follow this [FAQ|/hqueue/faqs#change_client_user_account_windows]. ``` -------------------------------- ### HQueue Client Configuration Parameters Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/hqueue/gettingstarted.txt Key parameters and values to configure during the HQueue Client installation process, including server URL and target Houdini installation path. ```APIDOC HQueue Client Installation: - HQueue Server URL: http://serverMachine:5000 or http://X.X.X.X:5000 - Target HFS (macOS): /Applications/Houdini/HoudiniX.Y.ZZZ/Frameworks/Houdini.framework/Versions/Current/Resources - Target HFS (Windows): C:/Program Files/Side Effects Software/Houdini X.Y.ZZZ - Target HFS (Linux): /opt/hfsX.Y.ZZZ ``` -------------------------------- ### Install HQueue Server on Windows Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/hqueue/gettingstarted.txt Steps to install the HQueue Server component on a Windows machine. This involves running the Houdini installer and selecting only the HQueue Server component. The server is typically installed at C:/HQueueServer and runs as a Windows service. ```text 1. Choose a machine, say `serverMachine`, to run the HQueue Server. 2. On the machine, download and run the Houdini installer. 3. In the installer: - Uncheck all components except for `HQueue Server`. - Proceed with the installation and when prompted leave all HQueue Server options at their default values. 4. After installation completes the server will be installed at `C:/HQueueServer` and a new `HQueueServer` service will exist in Windows Services. 5. You can open a web browser and navigate to `http://serverMachine:5000` to confirm that the HQueue server is running. NOTE: If DNS is not configured for `serverMachine` then you can connect to HQueue using the server machine's IP address. For example, `http://X.X.X.X:5000`. ``` -------------------------------- ### Houdini Cloth Setup Tools Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/cloth/gettingstarted.txt This section documents key Houdini shelf tools used for setting up cloth simulations. It covers creating basic cloth geometry, converting it into a cloth object, and applying constraints. ```APIDOC Grid Tool (SOP/grid): Description: Creates a piece of geometry, typically used as the base for cloth. Parameters: Size: Sets the dimensions of the grid (e.g., 1x1). Cloth Object Tool (DOP/clothobject): Description: Converts selected geometry into a cloth object within the DOP network. Purpose: Initializes the simulation properties for cloth. Cloth Follow Animation Tool (SHELF/cloth_follow_animation): Description: Constrains cloth to follow animation, often used to attach cloth to a character. Purpose: Prevents cloth from falling freely and anchors it to animated elements. ``` -------------------------------- ### Install HQueue Server on Linux Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/hqueue/gettingstarted.txt Steps to install the HQueue Server component on a Linux machine. This involves unpacking the Houdini installer tarball and running the installer script with root privileges. The server is typically installed at /opt/hqueue. ```bash 1. Choose a machine, say `serverMachine`, to run the HQueue Server. 2. On the machine, download the Houdini installer tarball, unpack it and run the Houdini installer with `sudo`. For example: ```bash tar zxf houdini-X.Y.ZZZ-linux_x86_64_gcc6.3.tar.gz cd houdini-X.Y.ZZZ-linux_x86_64_gcc6.3 sudo ./houdini_install ``` 3. In the installer: - Uncheck all components except for `HQueue Server`. - Proceed with the installation and when prompted leave all HQueue Server options at their default values. 4. After installation completes the server will be installed at `/opt/hqueue`. 5. You can open a web browser and navigate to `http://serverMachine:5000` to confirm that the HQueue server is running. NOTE: If DNS is not configured for `serverMachine` then you can connect to HQueue using the server machine's IP address. For example, `http://X.X.X.X:5000`. ``` -------------------------------- ### Save Houdini Scene to Network Folder Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/hqueue/gettingstarted.txt Instructions for saving a Houdini scene file (.hip) to the shared network folder, with platform-specific examples. ```text macOS: Save to /Volumes/myShare/test.hip Windows: Save to X:/test.hip Linux: Save to /mnt/myShare/test.hip ``` -------------------------------- ### Houdini opproperty Examples Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/commands/opproperty.txt Illustrative examples demonstrating how to use the 'opproperty' command for various tasks, including listing properties and installing them with specific folder and filtering configurations. ```hscript opproperty -l mantra* # Lists all properties associated with the top level mantra categories. ``` ```hscript opproperty -f -F Render /obj/model mantra* *shading* # Installs all parameters defined for 'mantra' that contain 'shading' in their name. # The -f option allows addition to geometry objects, and -F specifies installation in the 'Render' folder of the object's parameters. ``` ```hscript opproperty -f -C Lighting -F Render /obj/model mantra* *shading* # Installs parameters defined for 'mantra' containing 'shading' in their name. # Parameters are installed in the 'Render' folder within a sub-folder named 'Lighting'. ``` -------------------------------- ### Houdini Fur Workflow: Initial Guide Creation Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/fur/workflow.txt This section covers the initial steps of creating fur guides using Houdini's shelf tools. It explains how to use the 'Add Fur' tool for automatic setup or the 'Create Guides' tool for manual guide placement, which is crucial for localized grooming. ```houdini Tool: /shelf/groom_addfur Description: Automatically creates Guide Groom and Hair Generate objects for selected skin. Can also create Guide Deform for animated skins. Tool: /shelf/groom_guidegroom Description: Adds guides to your character. Useful for creating guides on specific regions and merging them. ``` -------------------------------- ### Toggle Startup Help Pane Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/ref/menus.txt Toggles the display of a window containing links to learning materials when Houdini starts up. This helps new users get started quickly. ```python #action: toggle_help_on_startup ``` -------------------------------- ### Load Example by Referencing Description Page Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/help/createexamples.txt Shows a simplified way to create a loader button by referencing the example's description page (`.txt` file) using the `#path:` property. The help system automatically populates the title, example file, and association from the referenced page. ```text :load_example: #path: /examples/nodes/sop/copy/CopyAttributes ``` -------------------------------- ### List Examples as Loaders Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/help/createexamples.txt Demonstrates the `:list_examples:` markup, which functions like a search list but displays results as interactive example loader buttons. It uses query parameters to filter examples and `groupedby` to organize the output. ```text :list_examples: #query: path:/examples/nodes/sop/* #groupedby: examplefor ``` -------------------------------- ### Houdini Expression Example: Using chops() Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/expressions/chops.txt An example demonstrating how to use the `chops()` expression function in Houdini to get the start index of a CHOP node. ```expression chops("/ch/ch1/wave1") ``` -------------------------------- ### Remove HQueue Directory on Installer Error Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/hqueue/gettingstarted.txt Removes the local 'hqueue' subdirectory if the Houdini installer encounters 'File exists' errors during unpacking. ```bash cd houdini-X.Y.ZZZ-linux_x86_64_gcc6.3 sudo rm -rf hqueue ``` -------------------------------- ### Initialize Guides Tool Usage Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/shelf/sop_groom_guideinit.txt Instructions on how to use the Initialize Guides tool within Houdini's grooming workflow. This involves selecting the tool and confirming groom objects. ```Houdini # Click the [Icon:FUR/initialize_guides][Initialize Guides|Node:sop/guideinit] tool on the __Grooming__ tab. # Select the groom objects you want to set the direction for and press ((Enter)) to confirm your selection. ``` -------------------------------- ### Specify Example File Path Property Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/help/createexamples.txt Shows how to use the `#examplefile` wiki property within a `.txt` description file. This property explicitly points to the associated `.hda` or `.otl` file, which is useful when the description file and the example file have different names. ```text #examplefile: example.hda ``` -------------------------------- ### Houdini vertexsmap Example Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/expressions/vertexsmap.txt An example demonstrating how to use the vertexsmap function in Houdini expressions to get the first unique string from a specified attribute ('foo') on a geometry node ('/obj/geo1/attribcreate1'). The index starts from 0. ```Houdini Expression vertexsmap("/obj/geo1/attribcreate1", "foo", 0) ``` -------------------------------- ### ImageMagick Executable Path Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/nodes/top/imagemagick.txt Allows specifying an exact path to the ImageMagick executable. This is useful for ensuring the correct version of ImageMagick is used, especially in environments with multiple installations or custom setups. Refer to the installation guide for details. ```APIDOC imagemagickbin: #id: imagemagickbin Description: Specify an exact path to the ImageMagick executable. See: [installation|#install] ``` -------------------------------- ### Pose Library Setup and Opening Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/pypanel/poselibrary.txt Instructions for creating a new pose library or opening an existing one. Covers file storage options and recent library access. ```Houdini Click the __New Pose Library__ button or use __File > New__ to create a new pose library. Select where to store the pose library and enter a name for the new library. NOTE: You can store the pose library in a directory or as part of a Houdini Digital Asset. Click __File > Open From__ and choose a menu option to select the pose library to open. Alternatively, you can open a recently opened pose library by selecting one of the __File > Open Recent Library__ menu options. ``` -------------------------------- ### Houdini Project SOP Example Steps Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/nodes/sop/project.txt Provides a step-by-step guide to using the Project SOP in conjunction with other SOPs like Circle, Tube, and Trim to create trimmed surfaces. It details the node connections and viewport setup required for the example. ```houdini # Place a [Circle SOP|Node:sop/circle], Type: NURBS, Radius 0.3, 0.3; then place a [Tube SOP|Node:sop/tube], Type: NURBS. # Connect them into a Project op: Circle to Input1; Tube to Input2. # Append a [Trim SOP|Node:sop/trim] to the Project node. It trims the surface according to the projection provided by the Project node. You need to append a Trim node to a Project node to get this trimming. # Turn on the template flags on the Circle and Tube nodes; make the Project op the display op. ``` -------------------------------- ### HScript Guessing Game Example Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/commands/_guide.txt An example HScript demonstrating basic scripting concepts, including setting variables, using system commands to get a date string, and manipulating strings to generate a random seed for a guessing game. This script illustrates how to initialize variables and prepare for game logic. ```HScript # Script for a guessing game (guess.cmd) # First, get a random seed set foo = `system(date)` set seed = `substr($foo, 14, 2)``substr($foo, 17, 2)` # Example of how to use the seed (not fully implemented game logic) # print("Generated seed: " + $seed + "\n") ``` -------------------------------- ### Fluid Solver Setup Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/nodes/dop/fluidsolver.txt Guidance on setting up a fluid network from scratch or adding necessary data to an existing DOP object. ```Houdini If you are setting up a fluid network from scratch, you can use the [Fluid Object node|Node:dop/fluidobject] to create a DOP object with the data required by the Fluid solver already attached. If you already have a DOP object, you can use the [Fluid Configure Object node|Node:dop/fluidconfigureobject] to add the necessary data to it. This solver makes use of various field subdata on the object. * The object should have a scalar field "surface" to track the surface of the fluid in space. * The object should have a vector field called "vel" to track the velocity of each point in space. ``` -------------------------------- ### Houdini HQueue Render ROP Configuration Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/hqueue/gettingstarted.txt Parameters for the HQueue Render ROP node within a Houdini scene file, specifying the HQueue server and target Houdini installation. ```APIDOC HQueue Render ROP Parameters: - Output Driver: Specifies the rendering node (e.g., Mantra ROP). - HQueue Server: The URL of the HQueue farm (e.g., http://serverMachine:5000 or http://X.X.X.X:5000). - Target HFS: - macOS: /Applications/Houdini/HoudiniX.Y.ZZZ/Frameworks/Houdini.framework/Versions/Current/Resources - Windows: C:/Program Files/Side Effects Software/Houdini X.Y.ZZZ - Linux: /opt/hfsX.Y.ZZZ ``` -------------------------------- ### Include Example Content in Loader Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/help/createexamples.txt Explains how to use the `#include: yes` property within a `:load_example:` block to automatically embed the content of the referenced example page into the loader button. This is equivalent to directly including the page content. ```text :load_example: #path: /examples/nodes/sop/copy/CopyAttributes #include: yes ``` -------------------------------- ### Guide Simulate Node Parameters Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/nodes/obj/guidesim.txt Documentation for the parameters of the Guide Simulate node, covering groom sourcing, dynamics, display, simulation settings, physical properties, forces, and constraints. ```APIDOC Guide Simulate Node: Description: Runs a physics simulation on the input guides. Extracts the required skin and guide curves from a groom object such as a [Guide Groom|Node:obj/guidegroom] or [Guide Deform|Node:obj/guidedeform]. These nodes can also write their groom data to files which can be imported by this node. Parameters: Groom Source: [Include:/nodes/sop/fur_common#sourcemode] [Include:/nodes/sop/fur_common#sourcegroomobject] [Include:/nodes/sop/fur_common#sourcegroomfile] Use Object Transform: #id: usetransform Take this object's transform into account when simulating curves. Dynamics: Enable Dynamics: #id: enabledynamics Enables dynamics simulation. [Include:dopnet#resimulate] [Include:dopnet#cacheenabled] Create External DOP Network: #id: createexternaldopnet Copy the internal DOP network to an external one for editing. Use External DOP Network: #id: useexternaldopnet Fetch the simulation from an external DOP network. Guide DOP Object: #id: guidesdopobject Get the simulation output from this DOP object. Use Freeze Frame: #id: usefreezeframe Freeze the simulation in time. Freeze Frame: #id: freezeframe Freeze the simulation at this frame. Display: Display As Subdivision Curves: #id: displayassubd Subdivide curves in the viewport for smoother display. Display Color: #id: displaycolor Display curves in this color in the viewport. Simulation: [Include:dopnet#startframe] [Include:dopnet#timescale] [Include:/nodes/dop/wiresolver#spatialscale] [Include:/nodes/dop/wiresolver#minsubsteps] [Include:/nodes/dop/wiresolver#tol] [Include:/nodes/dop/wiresolver#resolvemaxpasses] Physical: Physical Parameters: [Include:/nodes/dop/standard_wirephys_parms] Elasticity: [Include:/nodes/dop/standard_wireelasticity_parms] Reference Matching: #id: lengthmatch Values greater than zero cause all curves to behave more like curves that are as long as __Reference Length__. This causes hairs that are longer than the reference length to bend less and curves that are shorter to bend more. Reference Length: #id: lengthmatchref The reference length used by __Equal Length Behavior__. Plasticity: [Include:/nodes/dop/standard_wireplasticity_parms] Forces: Target: #id: enabletarget Enable a force which causes curves to stick more closely to their predefined shape. [Include:/nodes/dop/standard_wireobjecttabs#targetstiffness] [Include:/nodes/dop/standard_wireobjecttabs#targetdamping] Gravity: Gravity: #id: enablegravity Enable Gravity Force: #id: gravityforce The magnitude of gravity. Wind: Wind: #id: enablewind Enable the wind force. Velocity: #id: windvel The wind field's velocity. Strength: #id: windstrength The strength with which curves adjust to the wind's velocity. Noise: [Include:/nodes/dop/windforce#seed] [Include:/nodes/dop/windforce#fractaldepth] [Include:/nodes/dop/windforce#roughness] [Include:/nodes/dop/windforce#attenuation] [Include:/nodes/dop/windforce#frequency] [Include:/nodes/dop/windforce#minvalue] [Include:/nodes/dop/windforce#maxvalue] [Include:/nodes/dop/windforce#offsetx] Drag: [Include:/nodes/dop/standard_wireobjecttabs#normaldrag] [Include:/nodes/dop/standard_wireobjecttabs#tangentdrag] Constraints: Roots: Root Constraint: #id: rootconstraint Controls the way curve roots are constrained to the input groom. Position & Orientation: Match position and direction of roots to the input groom. This causes curves to stick out of the skin in the direction of the groom. This sets the `gluetoanimation` attribute of root points to `1`. Position: Match the position of roots to the input groom. Curves will drop & swing freely as the direction is not constrained at all. This sets the `pinttoanimation` attribute of root points to `1`. Clumping: Create Clump Constraints: #id: createclumpconstraints Create constraints between guides that belong to the same clump. TIP: You can create clumps using the [Clump|/shelf/sop_groom_hairclump] tool. This should be used on a Guide Groom, which can then be fed into this node. The [Clump|/shelf/sop_groom_hairclump] tool creates a `clumpid` attribute, which is used to identify clumps. Max Guides Per Clump: #id: clumpguidelimit Only create clump constraints for clumps that have at most this number of guides. All the unclumped guides in a groom belong to the same clumpid. Without this limit, these guides would be considered a clump and constraints would be created between them. Display Clump Constraints: #id: displayclumpconstraints Display clump constraints in the viewport. Collisions: (No parameters detailed in this section) ``` -------------------------------- ### Cursor State Example: Sphere Guide Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/hom/state_guides.txt An example of a Houdini state that displays a sphere guide under the mouse pointer. It handles mouse events, performs ray intersections with geometry or the construction plane, and applies the parent container's transform to position the cursor in world space. ```python from stateutils import ancestorObject class CursorState(object): def __init__(self, state_name, scene_viewer): self.state_name = state_name self.scene_viewer = scene_viewer self._cursor = hou.Drawable( scene_viewer, hou.drawablePrimitive.Sphere, state_name + "_cursor" ) self._cursor.enable(True) self._cursor.show(False) def onMouseEvent(self, kwargs): # Get the ray origin and direction ui_event = kwargs["ui_event"] ray_origin, ray_dir = ui_event.ray() # Intersect in local space! intersected = -1 if node.inputs() and node.inputs()[0]: # Grab the incoming geometry geometry = node.inputs()[0].geometry() intersected, pos, _, _ = sopGeometryIntersection(geometry, origin, direction) if intersected < 0: # Either there was no incoming geometry or the ray missed, so # try intersecting the construction plane position = cplaneIntersection(self.scene_viewer, origin, direction) # Find the container Geo... this is often just node.parent(), but we need to # handle the case where the node is inside one or more subnets parent = ancestorObject(kwargs["node"]) # Use the container's transform to display the cursor in world space parent_xform = parent.worldTransform() world_pos = position * parent_xform # Build a Matrix4 from the world space translate m = hou.hmath.buildTranslate(world_pos) self._cursor.setTransform(m) self._cursor.show(True) def onInterrupt(self, kwargs): # Don't show the cursor guide when the tool is paused self._cursor.show(False) ``` -------------------------------- ### Load Single Houdini Example Button Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/help/createexamples.txt Demonstrates creating a loader button for a single Houdini node example using the `:load_example:` markup. This includes specifying the example file path and the target node type for association. ```text :load_example: Copy Attributes example #examplefile: /examples/nodes/sop/copy/CopyAttributes.otl #examplefor: /nodes/sop/copy ``` -------------------------------- ### volumepostoindex Example Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/expressions/volumepostoindex.txt Example usage of the volumepostoindex function to get the X-axis voxel coordinate. ```expression volumepostoindex("/obj/geo1/isooffset1", 0, 3, 4, 5, 0) ``` -------------------------------- ### Houdini Example File Path Structure Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/help/createexamples.txt Demonstrates the required directory structure for placing custom example HDA and description files within the Houdini path. This structure allows the help server to automatically discover and serve examples for specific node types. ```text HOUDINIPATH/ Help/ examples/ nodes/ sop/ mysop/ MyNodeExample.hda MyNodeExample.txt ``` -------------------------------- ### Arithmetic Example Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/ref/panes/changraph.txt A simple example demonstrating arithmetic operations, specifically subtraction by adding a negative number. ```text + -0.5 ``` -------------------------------- ### Houdini: Create Reverse Foot Setup Source: https://github.com/ivantitov-zd/houdinihelpen/blob/master/character/drawbones.txt Step-by-step guide to creating a reverse foot setup in Houdini. This involves drawing an IK chain, parenting goal nulls, setting up control nulls, cleaning transforms, and locking parameters for desired foot articulation. ```houdini-instructional # Draw an IK bone chain that has a thigh bone, shin bone, ankle bone, and foot bone. # Turn on __Keep position when parenting__ on all the goal nulls. # [Parent|/basics/parent] the goal at the bottom of the ankle to the goal at the top of the ankle, and parent the toe goal to the ankle bottom goal. # [Create a new control Null|/model/nulls] and parent the ankle top goal to it. # Turn on the control Null's __Keep position when parenting__ parameter and parent it to the character root Null to put it in character space instead of world space. # Use the control Null to pose the foot. Translating and rotating the control Null drives the foot, ankle, and leg bones nicely. # Clean transforms on the toe goal and then lock the translate parameters and the Y and Z rotation parameters. Only leaving X rotations on the toe unlocked gives nice rotations with the reverse foot setup. # Repeat the previous step for the for the ankle top and ankle bottom goals. # [Change the appearance of the control null|/model/nulls] to reflect its function. For example, you can position it under the foot bone and make it look like a footprint. # You can optionally make the ankle top, ankle bottom, and toe goals [invisible and unselectable|/nodes/obj] . ```