Search the Community
Showing results for tags 'proxies'.
Found 2 results
willpreston posted a topic in General Houdini QuestionsHi Guys, is there a way to have tree meshes scattered on a terrain with variance in leaf colour on every single tree so that no two are the same colour? back in the Softimage/ICE days i could scatter points on a terrain mesh and give the points a random colour then i'd create a plant or tree mesh with different materials for bark, leaves etc, in Softimage's node based material builder i would plug in an attribute node into a colour mixer merged in with the leaf texture map, this attribute would read the random colour generated on the scattered points then i'd export the tree mesh as a Redshift proxy at render time the proxies would be loaded in, and each individual tree's leaves would be given an individual colour variation within a specified range based on the random colour from the scattered points this would mean each individual tree would have a unique colour added to its leaves and would be quick in the viewport/quick to render because of RS proxies (it also worked for Arnold standins) I've been trying to do this in Houdini but am hitting a wall, I've tried material style sheets but that requires me to create a different override for each parameter i want to control then assign specific trees to those overrides, its still not giving me unique colour variation per tree, its also quite a pain to set up, on top of that mat style sheets don't work if there's more than one material on a mesh which makes it redundant in this scenario I've also tried user data + attributes + shader switch but again you're using a mixer to switch between different specific shaders that you have to individually build, am i missing something? thanks for your help Houdiniers
With the help of both the Redshift community and resources here, I finally figured out the proper workflow for dealing with Redshift proxies in Houdini. Quick summary: Out of the box, Mantra does a fantastic job automagically dealing with instanced packed primitives, carrying all the wonderful Houdini efficiencies right into the render. If you use the same workflow with Redshift, though, RS unpacks all of the primitives, consumes all your VRAM, blows out of core, devours your CPU RAM, and causes a star in nearby galaxy to supernova, annihilating several inhabited planets in the process. Okay, maybe not that last one, but you can't prove me wrong so it stays. The trick is to use RS proxies instead of Houdini instances that are in turn driven by the Houdini instances. A lot of this was based on Michael Buckley's post. I wanted to share an annotated file with some additional tweaks to make it easier for others to get up to speed quickly with RS proxies. Trust me; it's absolutely worth it. The speed compared to Mantra is just crazy. A few notes: Keep the workflow procedural by flagging Compute Number of Points in the Points Generate SOP instead of hard-coding a number Use paths that reference the Houdini $HIP and/or $JOB variables. For some reason the RS proxy calls fail if absolute paths are used Do not use the SOP Instance node in Houdini; instead use the instancefile attribute in a wrangle. This was confusing as it doesn’t match the typical Houdini workflow for instancing. There are a lot of posts on RS proxies that mention you always need to set the proxy geo at the world origin before caching them. That was not the case here, but I left the bypassed transform nodes in the network in case your mileage varies The newest version of Redshift for Houdini has a Instance SOP Level Packed Primitives flag on the OBJ node under the Instancing tab. This is designed to basically automatically do the same thing that Mantra does. It works for some scenarios but not all; it didn't work for this simple wall fracturing example. You might want to take that option for a spin before trying this workflow. If anyone just needs the Attribute Wrangle VEX code to copy, here it is: v@pivot = primintrinsic(1, “pivot”, @ptnum); 3@transform = primintrinsic(1, “transform”, @ptnum); s@name = point(1, “name_orig”, @ptnum); v@pos = point(1, “P”, @ptnum); v@v = point(1, “v”, @ptnum); Hope someone finds this useful. -- mC Proxy_Example_Final.hiplc