archz2 Posted Saturday at 04:56 PM Share Posted Saturday at 04:56 PM (edited) I'm trying to import an fbx model with embedded textures but the textures don't show up in the render. They get hidden in render because of this shop material attribute that I have to delete for each and every piece of the watch. Is there an automated way to delete this attribute instead of entering the node for every piece inside the wristwatch? I converted the embedded materials by using ODtools. Here's the project file. https://www.dropbox.com/scl/fi/e8803p5cmz2pw3vsct820/wristwatch-material-challenge.zip?rlkey=kys5oyueemjzkv9k7d86vrb9j&st=4wpwuhkt&dl=0 Edited Saturday at 04:57 PM by archz2 Quote Link to comment Share on other sites More sharing options...
fencer Posted Saturday at 06:18 PM Share Posted Saturday at 06:18 PM (edited) 1. Create an attribdelete with required parameters 2. Windows > Python Source Editor selected_nodes = hou.selectedNodes() source_node = selected_nodes[0] subnet_path = "/obj/Hublot_King_Power_F1___Watch_fbx" subnet = hou.node(subnet_path) file_nodes = [n for n in subnet.allSubChildren() if n.type().name() == "file"] for file_node in file_nodes: parent = file_node.parent() copied_node = source_node.copyTo(parent) outputs = file_node.outputs() copied_node.setInput(0, file_node) 3. Select attribdelete to copy to 4. Appy script It will copy-paste selected node into each node in Hublot_King_Power_F1___Watch_fbx subnetwork and attach it to file* node Edited Saturday at 10:07 PM by fencer Quote Link to comment Share on other sites More sharing options...
archz2 Posted Sunday at 06:52 AM Author Share Posted Sunday at 06:52 AM 12 hours ago, fencer said: 1. Create an attribdelete with required parameters 2. Windows > Python Source Editor selected_nodes = hou.selectedNodes() source_node = selected_nodes[0] subnet_path = "/obj/Hublot_King_Power_F1___Watch_fbx" subnet = hou.node(subnet_path) file_nodes = [n for n in subnet.allSubChildren() if n.type().name() == "file"] for file_node in file_nodes: parent = file_node.parent() copied_node = source_node.copyTo(parent) outputs = file_node.outputs() copied_node.setInput(0, file_node) 3. Select attribdelete to copy to 4. Appy script It will copy-paste selected node into each node in Hublot_King_Power_F1___Watch_fbx subnetwork and attach it to file* node Thank you!! Wow! This worked quite well! Is it also possible to set the display flag to attribdelete inside each of the parts in bulk too? Quote Link to comment Share on other sites More sharing options...
archz2 Posted Sunday at 07:33 AM Author Share Posted Sunday at 07:33 AM (edited) Another thing. Is there a direct way to select materials of each piece rather than checking what material is applied to it in the render tab by selecting the obj node and then going to the matnet and then searching for the name amongst 50 materials used in the project, and then clicking the material node? If I click on this button on the right side of material it opens a window containing list of all materials inside the model. Doesn't open the directly the material network of the material applied to the geometry piece. Jump to operator button right next to it only shows this panel. Edited Sunday at 07:41 AM by archz2 Quote Link to comment Share on other sites More sharing options...
fencer Posted Sunday at 03:14 PM Share Posted Sunday at 03:14 PM Quote Is it also possible to set the display flag to attribdelete inside each of the parts in bulk too? attribdelete is set as render node already Quote Jump to operator button right next to it only shows this panel. not sure I understand what this issue is, jump to operator shows exact material applied to the node 1 Quote Link to comment Share on other sites More sharing options...
archz2 Posted 10 hours ago Author Share Posted 10 hours ago On 3/22/2026 at 8:44 PM, fencer said: attribdelete is set as render node already Quote Ok. Right. I ran the script again and found it was that indeed. My bad. Also...while importing the fbx, I came across a better import option that places materials inside the existing matnet instead of creating a new one inside OBJ network. It also creates all parts directly at the OBJ level, rather than nesting everything inside a subnet (which is what my earlier method was doing). Would it be possible for you to tweak your Python script to work with this setup instead? Here's the updated project file. https://www.dropbox.com/scl/fi/e9np7kw2n0n90s5myjrmn/wristwatch_updatedone-Copy.hiplc?rlkey=slt4wfz55snmtf2ljitfi4wzc&st=dtmr0k66&dl=0 Also, I had a broader question.. Is there a no-code way to achieve something like this in Houdini? Right now, this approach requires knowing Python, remembering the logic, and executing it each time. Is saving these scripts in a file the standard workflow, or is there a more efficient way (like shelf tools, digital assets, or something else) that you’d recommend? Quote Link to comment Share on other sites More sharing options...
fencer Posted 41 minutes ago Share Posted 41 minutes ago Quote Would it be possible for you to tweak your Python script to work with this setup instead? Wrap new nodes into one subnetwork and use the logic as before. Quote Also, I had a broader question.. Is there a no-code way to achieve something like this in Houdini? Alembic, USD... Quote Right now, this approach requires knowing Python, remembering the logic, and executing it each time. Is saving these scripts in a file the standard workflow, or is there a more efficient way (like shelf tools, digital assets, or something else) that you’d recommend? Save script as a shelf tool. Improve script to be able to select "subnet_path", fully create "attribdelete" instead of copy-paste. Google Python examples, you will find close enough to this tasks. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.