Wooden Etch in Houdini
Evokes the bold, graphic style of woodcut prints, capturing their striking visual impact with high-contrast areas and strong, simplified forms that demand attention.
TABLE OF CONTENTS
1. Scene Setup
Most of the presets in this pack, if not all of them, require the presence of a UV map on all the objects. If you decide to use your own scene, you can do so as long as you take into account that without a UV map present on all the objects in your scene then the preset will not function as intended and you will have a visually unpleasing result.
The template.hiplc can be downloaded from the RenderMan Resources section. the Houdini project file include the template file along with all the completed projects for each brush type. We’re going to learn how to apply the preset to a brand new scene and then you can compare your results to the completed project.
Let us explore the template scene. It consists of two objects, A RubberToy and a Cyc (a.k.a Limbo). Both objects have UVs, see not below the image.
We also have one Distant light with a direction coming from the right side. There is a camera as well.
Both objects have their own PxrSurface materials. This will not matter once we import the preset because those materials will be replaced.
Alongside a distant light the scene is set with an RIS ROP with a PathTracer Integrator. The PathTracer Integrator Max Indirect Bounces is set to 0. Both of the choice of a Distant light and setting the Max Indirect Bounces to 0 are important for the look we are after but it is not a requirement for Stylized Looks. The importance is three folds.
I tend to use sharp shadow in all of my scenes so a Distant Light is the best choice to achieve that type of shadow.
I don’t want indirect light or additional light bounces to influence my lighting. All the direct and indirect lighting manipulation happens within the Stylized Looks framework, so no need for additional lights.
The combination of both a Distant light and Max indirect bounces results in the least amount of noise to sample through or even noise around the edges of the toon stepped shading. It is not as completely noise free as using the new Artistic Toon mode, but it is around 90% there while still being physically accurate.
Load the We’ll start by loading our template.hiplc file. Set your project directory to the presets project folder and load template.hiplc.
2. Import The Preset
Time to import the preset. Select the Toy object and open a RenderMan Preset View. Select the Wooden Etch preset, right click and select Import and Assign to Selected
We’ll need to apply our preset on a single object. We’ll then make a copy of the material and apply that to the limbo object. The reason we do it only once is because the import preset mechanism in Houdini will import all the displayFilters for Stylized Looks. So if we import it twice then we’ll have two sets of each filter and that will cause the stylized looks to fail. There is currently no way to specify which parts of a Stylized Looks you want to import.
3. Apply Limbo Material
With the preset imported we are going to apply a second copy of our main material to the Limbo object.
You might be asking why do we need to copy the material on the limbo instead of creating a new one? or Why don’t we apply the same material of the toy object to the limbo? We’ll explore those questions and in the process we’ll learn a little bit on how Stylized Looks work and how shading networks setup work.
Why don’t we keep the current Limbo material or create a new one? The short answer to this is that for a material to function properly, really it is about having the displayFilters recognize the object and apply the Stylized Looks, then we need a certain setup added to the main surface of the object. By copying the material we have a starting point to go from with all the required material connection in place.
Stylized Looks doesn't mess with your original surface, so you can keep your existing shading networks. But to make it work, you need to add a PxrStylizedControl to the Utilities pattern of the surface. This won't break anything as the utilities pattern is like an auxiliary channel, and it lets you control the stylized look for each object separately. If you want to add more shading nodes to change the stylized look, do it on the PxrStylizedControl.
Why not use the same material as the one applied to the Toy object? The object UV size and object size determines the brush size. So we need separate values to tweak on an object by object level. Also, we sometimes we need different albedo color value for each object. This is way we give each object it’s own material.
For this preset the albedo or diffuse color is the same across all objects. However we need to tweak the PxrManifold2D that is connected to the PxrStylizedcontrol for the Limbo as well as change the Triplanar Scale values for the Limbo object. We’ll deal with those changes in step No.7.
4. ROP Setup
Up to this point we haven’t said much about the ROP setup and the rendering requirements. We’’re going to address that right now. If you are using the presets in this pack then this following step is going to be the same for all.
The template.hiplc file include an RIS ROP already setup. This ROP is configured to use a PathTracer as an integrator.
The PathTracer is configured to have 0 Max Indirect Bounces. This is important as it will be the equivalent to using PxrDirectLighting as an integrator, so our renders will be noise free, or minimal noise. But with a PathTracer we will have access to additional AOVs and LPEs which we don’t have access to in PxrDirectLighting.
However, when we import any Stylized Looks presets the preset browser will generate a new ROP for our scene. This ROP will have a direct connection to all the Stylized Looks displayFilters that make up the preset with the order they are intended to be used. So what I would do usually is to copy the path of our PathTracer integrator from the template ROP node to our new Preset ROP and delete the template one. So we end up with only a single ROP file in our project.
That is step 1 completed. We have a new ROP in our scene, it includes links to our displayFilters and it has our preconfigured PathTracer brought over.
Now for step 2. We must activate Stylized Looks in our ROP. This is not accomplished by pressing a single button, but require a collection of AOVs to be enabled. The list is quite long and it tends to take a minute or two to do. Instead of doing it by hand I have prepared a simple script that does that for you.
You can download the script from this github repo. Once downloaded, you can add it to any shelf as a button. I did mine inside of the RenderMan shelf, gave it the name “Enable Stylized Looks” and even gave it an icon.
RECAP
Before we move forward, let us recap what have we done so far, as these steps are pretty similar for all the presets in this pack. Any difference will be an additional light added to the template.hiplc projct and/or an additional AOVs that need to be present. But for all the presets the steps are as following:
Make sure you have a scene with UV maps
Have at least one PxrDistantLight as your main source light.
Apply the preset to your main object, or one object in the scene.
Make copies of the material and assign those copies to each object in your scene.
Copy the existing Pathtracer Integrator to the new preset ROP
Run the AOV script while selecting the prest ROP to create the default AOVs required by the Stylized Looks.
Can you use a PxrRectLight instead of a PxrDistantLight with Stylized Looks? You certainly can. And there is no rule that says you shouldn’t. But in my work, and this is a personal preference, I tend to use a PxrDistantLight because:
A it resolves faster. Meaning I don’t need many samples
I like my objects to have sharp shadows.
Works really well with a PathTracer Integrator with 0 Max Indirect Bounces. Again, less samples to work and much faster rendertimes.
5. Initial Render
We've completed the necessary steps and are now ready to render. Remember, we've only used the preset material and generated the necessary AOVs. We haven't made any adjustments to the scene materials or adjusted any of the Stylized Looks displayFilters, so expect the outcome to be subpar, if not terrible. Fortunately, the steps to improve this initial look are not difficult and will serve as a useful introduction to how Stylized Looks functions.
6. Tweaking Values
Okay, that doesn't seem very appealing. Allow me to explain what is going on and how we can achieve the desired look. Before we dive into some core Stylized Looks hatching concepts, I suggest you get your favorite hot or cold beverage ready.
NOTE
Specific Pattern in the Presets Pack
When working with the template.hiplc and importing the presets, you'll encounter recurring steps that require editing for the same objects and nodes. This is because the presets were created using the RenderMan official Swatch scene, which has its own scale and UV scale for each object.
Template.hiplc Objects
The two objects in template.hiplc have different UV scales compared to preset material, and they also have different UV scales from each other. As a result, the RubberToy requires a slight decrease in the PxrManifold2D ST frequency, while the Limbo needs a significant increase. It's helpful to remember these values, as you'll be reusing them for each preset when using them with template.hiplc.
Common Theme Among Presets
While there may be additional variations between the presets, there is a common theme across many of them, especially those with a single color theme.
Where Things Differ
The differences arise when each object requires its own color or when a different camera range is needed for screen space hatching. However, for the majority of the presets in this pack, the edits are largely the same when applied to template.hiplc.
Unique Scenes
Keep in mind that your own scenes will be different, so the default values we provide may not work for you. It's crucial to use values that are tailored to your specific scene. The difference lies in the value of the UV scale, not the actual setup. The steps outlined in this document should help you get started with any scene of your own.
The note above mentions PxrManifold2D in connection with UVs. Let's explore why they are used in this context and why you should be familiar with them.
Stylized look images are essentially constructed using three main display filters:
PxrStylizedToon: This node defines the lighting response for toon shading.
PxrStylizedHatching: Despite its name, this node is actually the brush used to paint the scene or objects.
PxrStylizedLine: This node handles all the line work.
There's also PxrStylizedCanvas, but it's not relevant to this context or these presets.
In this guide, we'll focus on the PxrStylizedHatching display filter and how it applies the brushes of our presets to each object.
Brushes are applied to objects, or more specifically to objects whose shading network contains a PxrStylizedControl node, in one of three ways:
Screen Space: This overlays the brush across all objects with a PxrStylizedControl node from the camera's point of view.
Triplanar: This creates a triplanar projection on all objects in the scene, which can be tweaked individually or globally. It's great if you want random overlapping projection with modes to adhere to the surface during animation or deformation.
NPRtexture Coords AOV: This daunting name simply means that any manifold or projection node plugged into the NPRtextureCoordinate input of the surface PxrStylizedControl is used. This can be PxrManifold2D, PxrManifold3D, PxrProjector, or PxrHexTileManifold.
I personally prefer PxrManifold2D because it allows me to use UV maps to orient brushes on a single surface. It has limitations due to seams between UV islands, but it works for most of my scenes. That's why you'll always find a PxrManifold2D plugged into the surface for each preset in this pack, even if it's not used. I've even created a Maya script to automatically plug one for any selected PxrStylizedControl node.
Here's a secret: Just because there's a PxrManifold2D node connected and the hatching is set to NPRtexture Coords AOV doesn't mean you have to use it. Most of the completed scenes with variations in this pack have the PxrStylizedHatching display filter changed to something else. I encourage you to experiment. The result may initially look terrible, but you can tweak various filters and scale values until you're satisfied. The good news is that each display filter is properly named, so you'll know exactly what to change. The steps below to tweak the hatching on our Limbo object will teach you a fundamental method for working with Stylized Looks: setting global values shared across the scene and only adjusting individual trouble objects to achieve the desired scene hatching scale.
In this section, we won't change the hatching projection mode. Instead, we'll keep the preset projection intact and adjust the problem objects to reach the desired scene hatching scale.
1. Increase PxrManifold2D for Limbo:
I’ll start with the Limbo object for the MAIN Etch brush or hatching. Go into the material applied to the LIMBO object and find the PxrManifold2D node that is connected to the PxrStylizedControls InputTextureCoord.
There should be one PxrManifold2D in the shading network preset. However, if you have more than one PxrManifold2D always check the one connected to the InputTextureCoord of the PxrStylizedControl and this would be the one you want to tweak.
In the frequency S and T change the default of 20 to be 50 or 60. You can do a test render to see what effect that will have on our Limbo object. I went ahead with 60 for both S and T to match the Toy Object which I like the size of the etch streaks.
2. Change the color of the Limbo surface:
This scene will look best if there are two different colors. I’ll keep the default one applied to the RubberToy but change the color on the Limbo.
If you look at the initial render closely you’ll notice that there are two types of colors. The overall surface color and the outline. These two colors are defined in two locations. The surface color is read from the PxrSurface diffuse color. While the line work color is read from the PxrStylizedControl Line albedo color. We’re going to change both of these things.
You can perform the following changes while running an IPR session. The render is fast since there are no indirect bounces and there isn’t really reflection, refraction or diffuse shadow. So updates are quick and feel almost like real-time.
Dive into the shading network of the floor (a.k.a Limbo) and select the PxrSurface. I’ve changed the default brown color to a turquoise one. You can pick any color you like.
Next, select the PxrStylizedControl. Find the Line tab and change the Line albedo color to a less saturated color and a little bit darker. Again you can judge the color better if you have an IPR session running.
Once completed those two steps you can launch a render to see your final image.
Congratulations!
You’ve made it through and you’ve done your first Stylized Looks render. 🎉
These steps might have seamed like a lot. And they are if you just started using Stylized Looks. As you gain more proficiency with Stylized Looks you’ll be able to set this up quiet quickly. And most of the presets aren’t that involved and will load out of the box, so instead of 7 steps they would be 4 steps. Tweaking the hatching values will always be required, so this long tour is necessary so you know how to get the most out of these presets and to learn how to tweak the stylized looks for your own project.
The image below is a slight variation of the Wooden Etch. For this version I replaced the PxrManifold2D for the Limbo with a PxrProjector and projected the brushes from the camera. Also, lightened the turquoise color of the Limbo. Most importantly I’ve switched the hatching projection to be Triplanar for both the initial wash hatch and the Over filter. the Over filter brings out the shadows by compositing on top of every other hatch, while the Wash filter is the first one and sets the initial page which I am brushing on top. Lastly I’ve layered the RubberToy texture as a Multiply on top of the wooden color to bring some of the details in the eyes and introduces splotches on the surface. You can find the completed project file in the project folder named Wooden_Etch_Variation.hiplc. Have a look at the scene file and try to see how these changes were implemented.
Don’t be afraid to experiment and break things 😉
Back


