This toolset was originally a personal endeavor into the Houdini Python API. Since then, I have begun expanding to Nuke and will continue to develop for other packages in the future. The tools are developed with other Visual Effects students in mind - in hopes that I can enhance their workflows.
The bulk of my tools are driven by feature requests from my peers, along with any other features that I find useful to my workflow inside Houdini/Nuke.
The biggest difference about this toolset compared to most is its self-installation system. Currently only implemented for Houdini, the system checks for new releases using the Github API, and prompts the user for newer versions. The version is automatically downloaded, unzipped, and installed in place.
Prompts the user to automatically convert any referenced texture in the scene to .rat (similar to Arnold's TX Manager). The user can select from the shown list which textures to convert.
User is prompted for new versions - with release description and data pulled from Github
"Global Scale" defines a scaling factor for the generated .rat files. "Max Output Resolution" allows the user to select from a preset list or enter a custom value which represents the maximum size in either dimension of the generated .rat files. This is useful for downscaling unnecessarily large textures to, for example, 2K resolution.
After the textures have been converted, the parameters referencing the old textures are switch to the .rat files.
Allows a user to input a geometry cache node (File Cache, ROP geometry), camera, and a file path (unnecessary if MPlay is checked) in order to first cache, then flipbook the newly cached geometry.
If the "Move camera" option is checked, the selected camera is first adjusted to fit the bounding box of the last frame of the cache prior to flipbooking. This is helpful when a cached sim might expand beyond the anticipated frame.
Allows a user to select any number of cameras in the scene to flipbook the same frame range from. The tool does this frame by frame (rather than camera by camera) in order to preserve any memory cache over the course of the frame range. The flipbook process is written to a specified file path, appended with the name of the camera.
When the user is either within a matnet or a matnet is selected, this tool will convert all Texture nodes within the matnet from $F notation to the UDIM expression %(UDIM)d. This is mainly just a small convenience tool for quickly converting texture nodes into referencing UDIM tiles.
A convenience tool for quickly clearing large FBX subnets with sprawling child trees. I developed this while working on crowds within Houdini when the agent FBX nets became cumbersome. The user can select any number of top level parent nodes in the net to delete. The tool deletes all children of the selected nodes.
This script adds an extra checkbox to the File Cache interface ("Notify on Completion", beneath the save buttons - see below) that the user can check in order to be notified when the cache operation completes. Since Python cannot be directly injected into the native parameters (i.e. the cache button), the script also spoofs the Render to Disk button with a version of its own that then calls a script to email the user when the operation completes.
The email to send the notification to is configured through the SDMTools Preferences window, and must be a Gmail (uses the Gmail API).
This context menu function when right clicking on nodes allows the user to quickly set the current node's shape and color as the default for all nodes of its type.
This custom menu option emulates what a lot of 3D packages do aside from Houdini - save the current file as a new incremented version. The script works with either ### or v### versioning schemes (any number of zero padding).
This script quickly shuffles each individual AOV from the selected Read node into individual shuffles, properly naming them and turning on postage stamps.
This allows the user to either reload every Read node in the Nuke script, or individual groups of Read nodes, depending on what is selected. Select nothing to reload everything. Select any number of Read nodes to reload only those.
Based on the selected Write node, a Read node will be placed down that reads in the output of the Write node.