Woven Rope

Material Breakdown

Ishan Verma


Ishan Verma

Senior Material Artist


Hello, my name is Ishan Verma. I am a Senior Material Artist with five years of experience in AAA game development.
In addition to being a self-taught artist, I am also an Unreal Engine and a Substance 3D Designer enthusiast.
Currently, I am working as a Senior Material Artist at Nodding Heads Games, the developers of Raji: An Ancient Epic video game.


In this article, I will discuss the process and share how I achieved my recent study on Woven Rope material.

Reference Work

To begin with, when conducting material studies, I always consider two essential factors. The first is the primary reference or goal, which outlines the desired characteristics of the surface. The second is the supporting references that provide additional information on the desired features. To maintain focus and avoid distractions, I use a neutral reference board. This approach helps me stay on track with my workflow and prevent getting sidetracked by insignificant details.


As an example, the initial picture illustrates my intended shape construction, including the weaving and alignment of ropes. The subsequent images depict the woven thread work and scattered thread strands on the surface.


The breakdown of materials comprises three distinct sub-graphs that incorporate several generators.
These sub-graphs are integrated into the main graph, which is responsible for creating the final texture.


Rope Pattern Generator

The initial generator involves constructing a pattern for the rope surface.
To achieve this, I began with the Blending Gradient Linear 1 and 2, both horizontally and vertically, to create the weave surface.


Following that, I utilized another Gradient Linear 2 node. I rotated it using a safe transform and then applied it to warp the weave surface pattern that was created earlier.


Next, I multiplied the warp and rotated Gradient node to generate the final rope surface. To enhance it, I applied a safe transform and tiled it two or three times. With this, the Rope Pattern Generator was completed.


Threadwork Generator

Moving on, I aimed to develop thread work to be overlaid on the previously created rope surface. 

To achieve this, I commenced by generating a capsule shape similar to a rope. This was done using a uniform color, Transform 2D, Blur, and Trapezoid nodes. Next, I employed a Tile sampler for the linear directional threads. I used a gradient as the input shape and tiled it in the Y direction.

Subsequently, I applied a slope blur to add some disformations and then used it to warp the previously created capsule shape with some directional warps.



Next, I employed various directional warps and slope blurs in conjunction with anisotropic blur to create volume and linear thickness in the threads. This method enabled me to achieve the desired effect and enhance the overall quality of the thread work.


Finally, I added some thin threads to the thicker ones to create more volume and contrast in the thread work. To achieve this, I utilized the output from the thread tile sampler and rotated it using a Safe Transform node. I then used several directional warps to create a swinging effect in the threads, before blending them on top of the actual capsule height. This approach allowed me to enhance the visual appeal of the thread work and make it stand out.


Strands Generator


Moving on to the third and final generator, my goal was to create the strands that appear to be coming off from the split ends and the surface of the rope. To achieve this, I began with a Shape node to create a Paraboloid shape, which I then moved up. Next, I created an invert of the same shape and used both as input into the Non-Uniform Blur node to obtain the desired directional drip effect.


To further refine the appearance of the strands, I applied a trapezoid node to narrow them down and used the histogram scan to add clamp values on top of it. This step was crucial in achieving the desired look and ensuring that the strands had a consistent appearance throughout.


The next step in the process was scattering the strands on the rope surface. To achieve this, I utilized a Tile Sampler node, adjusting the amount of tiling to correspond with the size of the rope. 



I then applied directional warps using both Fractal Sum Base and Perlin noise nodes to add some jagged, curly, and distorted qualities to the strands.


Actual Height Building

Weave Pattern

To create the weave pattern, I started by creating a main graph where I imported all of my subgraphs or generators. I used the threadwork generator six times to create variations and then plugged it into a tile sampler to create a horizontal weave pattern.



Next, I utilized the rope pattern generator and followed the same workflow with the sample tile sampler to obtain a rope weave pattern. Then, I blended this pattern with the threadwork to create a visually appealing twisted surface effect on top of the rope weave.


To create the vertical weave pattern, I began by duplicating the Thread tile sampler that was used earlier and added a slope blur to distort it. Then, using a safe transform node, I rotated the distorted thread pattern to the desired angle. 

To create the base of the rope, I used a Linear Gradient 2 node and narrowed it down using a Transform 2D node. I then blended the rope pattern created earlier on top of the base using some directional warps from the threadwork sampler. To add volume to both the surface and threads, I used slope blurs and finally added a directional warp to enhance the storytelling aspect of the pattern.


Woven Pattern

To achieve the desired blend, I began by subtracting the vertical weave from the horizontal weave. Next, I added a Perlin noise to the horizontal weave and subtracted the result again, creating variation in the height. 

I then used the max lighten blending mode to blend the horizontal and vertical weaves together. Finally, I applied a histogram range to limit extreme height frequencies and achieve a more balanced blend. Though blending proved tricky at first, with a few attempts I was able to create a smooth and visually appealing result.



Make it storytelling

In order to make the height of the pattern more reflective of real-world use, I added some subtle distortions and irregularities to create a less rigid and more natural-looking surface.

This involved adjusting parameters such as slope blurs and directional warps to add a sense of looseness and flexibility to the overall design. By incorporating these elements, the pattern would feel more organic and realistic, rather than looking like a perfectly uniform and artificial creation.


Loose Thread Strands

To layer some strands on the rope surface, I used multiple variations of the Thread Strands generator with different sizes and directions and blended them together.
However, instead of blending them with the actual height, I combined them directly with the normal map.


Normal Map

To create a more realistic effect, I decided to use multiple normals to layer them in relation to the height. Instead of just creating a single height to a normal map, I used various normals to layer them on top of each other.
The first normal I used came from the threadwork generator, while another was created by blurring the height map to add depth to the surface.


I blended these normals from the actual height map, the normals for the vertical rope bulge, and the strand normals with the main normal.
This allowed for a more detailed and nuanced normal map that would add depth and dimensionality to the surface.


BaseColor Buildup

To create the base color, I used a curvature smooth node derived from a normal map.
After that, I created multiple gradient maps and layered them one by one using masks generated through histogram scan nodes.


To enhance the surface details and add more depth, I used a grayscale curvature smooth with a soft blend mode, and multiplied it with an ambient occlusion map on top of the base color.


Roughness Buildup


To create the roughness map, I first used a curvature smooth node and inverted it. Then, I applied a histogram range to remove higher frequencies.


Next, I added a Grunge Map 014 to add more surface variation and blended it on top of the roughness map.


Ambient Occlusion Buildup

To create a more realistic ambient occlusion effect, I used three different ambient occlusions. The first output was obtained from threadwork, the second from the soft bulge where height is blurred, and the third from the shadows node coming from the actual depth. 


I multiplied these outputs one by one and used them as the final ambient occlusion.

Practical Usage

Here is an example of the practical application of the woven rope material that I created, along with a few in-engine renders.



Consistency is the key! I likely spent two to three hours on this material study. I wanted to fill that time void so I kept my fundamentals and goals clear about what I am going to achieve and didn’t get sidetracked by any random thoughts. I will say – Keep pushing till thoughts turn into results!

Feel free to contact me on my socials in case you have any questions –

Artstation https://www.artstation.com/ishanverma 

Linkedin https://www.linkedin.com/in/detemach/