Project 01: Procedural Nails
Nothing fancy here.
First, I made a nail with Line and Sweep node. The transform node is to rotate it to the Z axis (for copy to points)
For the nail placement:
1. PointWrangle, to add N attribute
2. Just a group node using bounding sphere to group a part of the bat
3. Scatter points
4. AttributeRandomize, to randomize the value of N. I made it min -0.7, and max 0.7
5. PointWrangle to move the nails outside and inside the bat
a. Create a public float variable, in the form of a slider min and maxb. Create a new vector variable P1. We will add the original P attribute with this. So P1 will be randomized.
c. In this expression, we use ptnum for random, and fit it based on max and min variable. We multiply that by N too so the nail will move perpendicular to the bat. A channel scale was made for overall strength control.
Project 02: Procedural Bandage
Michael Elton teaches me how to make this (https://vimeo.com/eltonwidjaja)
The key concept is actually very simple.
1. Make a group of selected Primitives
2. IsoOffset, to make it into a volume
3. Scatter points
4. Transform points to center (just scale 0 for x and z axis)
5. AttributeRandomize orient attribute (by default, point have it already). Change the distribution to Direction or Orientation. By default you will have this variable to adjust:
a. Cone Angle
b. Bias towards direction
So far this is the easiest and most powerful orientation control. For simple stuff, randomizing the N is enough, but for extra control this is very useful.
6. Connectivity node: to make an attribute called class. When using forEachConnectedPieces, this is necessary. By default, this is what you get when creating a forEachConnectedPieces node
7. Inside the for loop, we want wrap it, extrude, smooth, add UV, etc etc.
The ray base mesh is the one that we change based on the forloop feedback.
8. Elton also teach me how to make a wrinkle map too by using a difference between 2 Measure node, before and after the ray (wrap) node.
Using AttWrangle to calculate that: f@area_diff = f@orig_area - f@wrap_area;
Then using pointVOP to add to the P attriibute (multiplied by the ramp created by the difference of the area)
But this is not necessary for simple blockout of bandage. Very cool tho.
New Nodes:
1. For Each Connected Piece (for feedback)
I use this to wrap each individual primitives (each bandage).
Important things to change:
a. Gather Method to Feedback Each Iteration. This is so that every new bandage will collide with the previous bandage.
b. Foreach_begin2, change to Fetch Feedback. This is so that the next input is the previous forloop result.
2. Switch Expression: if(detail(-1,"iteration",0)==0,1,0)
If iteration is 0 (first bandage) use the second input (1). If it's not 0, use the first input (0, foreach_begin2)
This expression is my first try out on Spare Input in Houdini. What I understand is that you can use spare input to insert an attribute from other nodes, which is often used in ForLoops, to create variation. In this case I'm using it to choose either project only to baseball bat, or the previous Feedback iteration from the foreach_begin input node.
Inside the spare input is the Meta Import node, created from for each_begin node.
3. IsoOffset: basically dynamesh into volume
4. Connectivity: return an attribute, with unique value for each connected pieces.
5. Ramp (VOP): create a ramp parameter, to adjust the value of the input (photoshop curve basically)
Project 03: Procedural Rope
I'm following this tutorial from Simon https://www.youtube.com/watch?v=RyA7JboNTT0&ab_channel=SimonHoudini.
I also learn how to use the sweep node to create a simple rope easily. Very easy! But I foresee that I'm going to use this a lot in the future.
New Nodes:
1. ShrinkWrap: make a bounding box around it, with simple geometry. It follows the shape more closely unlike Bound.
2. Poly Path: convert polygon edges into polygon curves! Making multiple primitives into 1 primitive.
3. Sweep: from curve to polygon, or more curves. Very powerful.
Project 04: Metahuman Batch Map Transfer
In the middle of making Project: Aubrey, Epic Games release their MetaHuman sample files. I decided to steal their texture: cavity map, animated albedo, and animated normal map for my character.
I did this to understand how their shader works, especially to understand wrinkle mapping workflow. Although in the final render the wrinkle map is not very obvious, I enjoy making it work on a technical level.
1. Use ZWrap to wrap DAZ3d head model to metahuman model.
2. Transfer UV from metahuman model to DAZ 3d head.
3. Transfer textures from DAZ 3d head (metahuman UV) -> DAZ 3d head (original UV) in Houdini
4. Then I try to merge the albedo in substance for base albedo, albedo wm1, albedo wm2, and albedo wm3.
5. Then I import all the necessary texture to UE4
Implementing these texture is bit complicated in UE4, mainly because I used Virtual Texture so I can use UDIM. Also by default the MaterialFunction for blending the Wrinkle Map have the texture object built inside them unchangeable. In the end I duplicated every MasterMaterial and MaterialFunctions in MetaHuman, and modify it with my own texture.
Project 05: Making Marvelous Designer Simulation Looping
For Project: Aubrey I need a cloth simulation abc file in ue4. To optimize file size, I only make the abc goes on for roughly 300 frames, on the condition that the last frame flows seamlessly to the first frame.
1. The first Timeshift is to change the first frame pose.
2. The second timeshift is simply 'last frame number' - $F.
This is so that the last frame (timeshfit2) is the exact frame before the first frame (timeshift1)
3. I add blendshape with 2 keyframe that blends the first timeshift node, with the second timeshift node. I play around with the position of the keyframe to make it as natural as possible.
4. Timewarp is just to slow down the animation.
5. Another blendshape because I only want to slow down the cloth sim on certain parts of the animation.
Project 06: Stylized Tree from Houdini in UE4
I tried to follow this tutorial by Kris from Lucen, an Indie Game currently on development (https://www.youtube.com/watch?v=BeRjyj2Xhtw&ab_channel=Kris-LucenDev). No too long ago, Kris also released his tree material for free (https://www.youtube.com/watch?v=I9oTupdnSgk&t=4s&ab_channel=Kris-LucenDev). So naturally I downloaded it and try to create my own tree.
The tree that I made in Houdini with Kris' material. The shape is very ugly because I just anyhow play with the parameter.
The tiling of the trunk is also wrong
This is just a small exploration I did with SideFX Labs add-on in Houdini and my first encounter with a vertex-animated shader.
Object level Node Graph
QuickTree node from SideFX Labs. Red color SOP is adjusted SOP or added SOP
I tried the shader with custom tree I bought from the unity Asset Store too (https://assetstore.unity.com/packages/3d/vegetation/story-northern-nature-164556 and https://assetstore.unity.com/packages/3d/vegetation/the-illustrated-nature-153939). It was on 50% sale, so I just bought it. This asset will act as a constraint for my next projects
The tree moves along like the one inside Lucen DevLog. The UV is different tho, so some of the branches is floating now. Need to fix this.
1. Bound: make a bounding box/sphere
2. Ray node: with minimum distance, this project all the points to the target. Like projectall in ZBrush, but better, especially for low-res geo.
3. Peak node: basically inflate
7. Switch: the same like ue4, but with more option because it could be more than 2.
8. Getting more familiar with CopyParameter, and PasteRelativeParameters.























































































