a. Images – With rugs, top down images are a must in almost all scenarios. Without a *high resolution photograph of the entire rug, it’s extremely difficult to recreate a rug in 3D. Sometimes you will get away with creating a generic pattern in Photoshop, but with complex patterns and designs it would be near impossible to create.
*High resolution images typically consist of a minimum of 1500px on the shortest side. Ideally 2000px and up on the shortest side.
b. Dimensions – collect all the dimensions you can get about the rug. This includes the overall length, width, pile height (length), and, if it’s applicable/available, the dimensions of the binding as well.
c. Pile Height – The pile height is one of the more important dimensions to be aware of. This will help us enter exact values when using V-Ray fur.
d. Detail Images (if available) – Detail images will allow us recreate the fur type more accurately.
a. Photoshop (Cutting out the white) – Typically the image that we want to use as the texture will have some additional environment on the edges, or white a white border of some sort. If this is the case, take the image into photoshop and crop until we only see the rug.
Left – After (Cropped in Photoshop)
Right – Before (with white border)
a. Open a new scene
b. Use a primitive box to get the basic shape
i. Using the rugs dimensions, create a box and type in the length and width. When using fur, the height of the rug will be determined by the length of the fur, so make the height of the base geometry somewhere around a ⅛”(.125”) depending on the type of rug. This is basically acting as the ‘backing’ for the rug, so it will generally be thin.
ii. For this specific example, the dimensions are 7’7” x 5’3” x ⅛” (91”x 63”x 0.125”)
Remember that 3DS Max will convert dimensions for you; so even though our files should be set to inches we can type 5’3” and it will convert it to 63” for us.
iii. Adding segments is important for making our rugs look slightly imperfect details. For rugs, the segments should match the ratio of the rug.
Since the length is 91” I’ll make the Length Segs: 9 and the Width Segs: 6 since the width is 63”
c. Chamfer the edges
i. For this I find it easier to use the modifier. Using the chamfer modifier, I used the following settings:
ii. The chamfer will round off our edges for us. This is more important for the transition of fur from the top to the side.
d. Adjust the UVs
i. For this style rug, the binding will block the edge, so we don’t need to make significant adjustments to the edge UV’s. Simply apply a UVW Map and set it to the Planar Mapping Type. This will allow the texture wrap around the edge.
ii. Note: This is stretching the UV’s, but again we only need the transition to look good, not the entire edge.
e. Adding noise variation
i. This is where having the segments come into play. Add a noise modifier, set the Scale: 6 and the strength of the x: and y: to 0.1 – This will add a subtle wave to the geometry breaking up the hard line edge.
f. Creating the serging geometry (or different binding type)
i. At this point, we can convert our model to an Editable Poly.
ii. In Edge mode, select one of the side edge loops toward the bottom of the rug and use Create Edge From Selection in the modifier panel. Give the curve a name and set the Shape Type: Linear
(See GIF below)
Now we have a separate spline object that follows the silhouette of our rug.
iii. Exit edge mode (sub object mode) by hitting 6 of the keyboard and select the spline we just created.
iv. Add a sweep modifier. With the sweep modifier, we can select from the list of preset shapes or we can use a custom spline. For this example, a cylinder will do. Set the shape to cylinder with a Radius of 0.15 looks about right. Turn on Generate Mapping Coordinates and Use Real World Scale.
v. Create a Unwrap UVW modifier for the binding. You’ll notice that the seam is on the outside of the binding. This isn’t ideal as the texture seam will be obvious to anyone looking at it, and can cause issues with displacement. Lets fix this by opening the UV editor.
vi. You’ll notice that the UV’s are very large, and we’re only seeing one end. Don’t change the size of the UV’s. Select one of the inside edge loops by double clicking on it, and Break it (CTRL + B | Tools > Break) Then select the original seam by double clicking on it, and Stitch it.
vii. Close the UV editor, we will come back to the UV’s once we create the serging material.
a. Create the V-Ray fur
i. Select the rug base shape we created earlier, and create a VRayFur Object
Create > V-Ray > VRayFur or This icon from the V-Ray Toolbar.
b. Set material ID’s on rug geometry
i. In order to have the fur only come from the top of the rug, we need to quickly create material ID’s for the geometry.
ii. Select the geometry and ender Polygon (face) mode. Turn on Ignore Backfacing as this will make it easier for us to only select faces we see, rather than the other side as well.
iii. From the top view ( T ), select the top faces only. There’s a number of ways to do this, and some ways are easier than others depending on the version of 3DS Max you’re using.
I’ll use the By Angle feature and set it to 10.0 – This will allow me to only select faces that are within that 10 degree angle change based off the face I select.
iv.Invert your selection (CTRL + I) and set the Material ID for these faces to 2..
v. Go back to the Fur Object and look for Placement in the modify panel. By default it’s set to apply fur to the Entire Object, but now we can set it to Material ID: 1 and it will only show on the top.
c. Fur Viewport Display
i. Before we start doing test renders, we should do one more thing to optimize our scene. At times the amount of fur objects in the scene can cause viewport slow down. To prevent this from happening, I usually decrease the Max. hairs under Viewport Display for the fur object. I usually set it to 500 which is half the default amount.
i. Length: 0.25” – This is how long the fur strands will be. Set this to the pile height for the rug, so ¼ inch in this example.
ii. Thickness 0.03” – This value controls the thickness of each fur strand and will vary between different rug types. I try to make this value at literal as possible, but at times it’s necessary to have them larger to lower render times. If the strands are really small, then you will need a lot more fur distribution which leads to longer render times.
iii. Gravity: -3.0 (default) – This is the gravity contribution. I leave this at default most the time since other settings like Bend and Initial Direction Maps can control the direction of the fur.
iv. Bend: 0.1 – This value determines how stiff or flexible the fur strands are and affects how strongly the fur strands react to directional influences (such as gravity).
v. Taper: 0.15 – Determines how thick the fur strands are as they reach the tip. The root will always be the Thickness value that was set.
b. Geometric Detail
i. Knots: 4 – Controls amount of points in each fur ‘spline.’ The more knots, the more details the bend and curl can be. Only raise this value as necessary since it increases render times with no visual difference if used improperly. Default is 8, but I didn’t have a bunch of bend detail for this rug, so I lowered it.
i. Direction Var: 0.01 – Adds slight variation to the direction in which fur strands grow from the source object. With a value of zero the strands will not bend when they are standing straight up.
ii. Length Var: 0.0 – Adds variation in height. The length will only shorten certain strands randomly, never exceed the length value that was set under Parameters.
iii. Thickness Var 0.0 – Same as above. Not needed for this example.
iv. Gravity Var: 0.0 – Same as above. Not needed for this example.
v. Curl Var: 0.0 – Same as above. Not needed for this example. Note: in order for curl variation to do anything, curl must be activated. Curl can be found lower in the modifier stack.
Set the amount of fur that should be applied to the object. In the case of rugs, we need a lot of smaller strands, so this value will be quite high.
i. Per Face: N/A – Specifies the number of fur strands per face of the source object. Every face will generate the specified number of fur strands. I usually use Per Area since it is measured in square scene units.
ii. Per Area: 600 – Specifies the number of strands per squared scene unit.
iii. At this point, a simple render should look something like this.
Note that this was rendered in Wayfair’s Studio Environment.
For this kind of rug, we will be using a generic V-RayMtl. In come cases, we want to use a V-Ray Hair Material.
a. Create a VRayMtl
i. Also, drag the texture for the rug into the Material Editor.
ii. In the Bitmap, set the Blur: 0.01 to reduce the filtering that naturally occurs for textures. This will ensure that the details of our texture aren’t degraded in any way. Even in thumbnail size views, like the GIF below, you can see how the detail becomes more crisp in the texture when your lower the blur amount.
b. Add Falloff
Falloff is used on a lot of fabrics to simulate fibers catching light. It creates a more ideal looking fabric in most cases where reflectivity can cause issues.
i. Create a FallOff node and plug the rug texture into both Map 1 and Map 2.
ii. Adjust the Map 2 amount (the bottom one) to 85 – This means the map will be 85% opaque and the color value, white, will be 15% opaque. This will give us our lighter looking texture at grazing angle, making it look softer.
iii. Adjust the mix cuve to be a sharper curve, allowing the white to only show on extreme angles. We don’t want the rug getting too light until the camera is really low.
(See GIF to the right)
iv. Plug this into the diffuse of the material you created.
c. Add Bump
For the bump, I usually use a cellular map for a final touch of minor detail. Don’t use a grayscale version of the rug texture. This never really produces a good result.
i. Create a Cellular Map.
ii. Make the Division Colors both black. This will give us some high contrast noise which is perfect for subtle bump detail that breaks up the surface.
iii. Set the Size to .001
iv. Plug it into the bump material.
d. Assign to the rug base and the fur
In order to maintain the color accuracy of the fur, assign the material to both the base and the fur object. Now the render should look something like the image above.
This bindings can be a little tricky to get to look right, but we need to remember the general distance we are viewing these rugs.
a. Finding / Creating the right texture
For this texture, we already had something that was created that resembled a repeating rope pattern. If we tile this enough, it appears to be a finder thread like the serging reference. You can download the example for this rug here.
The material is fairly similar to the one we just created for the fur of the rug base.
i. Start with a grayscale version of the texture that best represents the binding type. The example I used is linked above and looks like the image to the right.
ii. Drag the grayscale texture into the editor and set the Blur Amount a little lower. In this case I used 0.01
iii. To get the color of the binding, we will use a Mix node. Create a Mix and plug the binding texture into the Mix Amount.
iv. At this point, the texture should look the same because the Mix colors are set to Black and White. With a Mix node:
– Color #1 = Black on the Mix Amount Map
– Color #2 = White on the Mix Amount Map
v. Create a V-Ray Color node. Select the color of the binding by sampling the color on the rug bitmap.
NOTE: If you are sampling colors in 3DS Max, you need to set the Gamma Correction to None
However, you are using a specific RGB value from Photoshop, you must set Gamma Correction to Specific otherwise you will get an incorrect result.
vi. Plug the VRayColor in to Color #2, so all the pure White areas of the texture that we plugged into the Mix Amount will be the pink color and it will get closer to black as the texture does.
vii. Now, the color is a little too dark because the texture could use some more contrast. We can easily adjust this using the Mixing Curve right in the Mix node. Turn on Use Curve and set the Upper to 0.33
viii. If black is a little too strong, you can make a copy of the VRayColor and make a darker version of the main color. For this example, I don’t find this necessary.
ix. To finish off the Diffuse, create a Falloff > Plug the Mix into Map 1 and the VRayColor into Map 2. You can plug the texture into both maps just like the main rug material, but in this case I thought the light pink without the darker areas look better.
Lighten up the color by adjusting the Map 2 Fall Off Opacity to 80, leaving the color set to white. Adjust the curve like the image below.
x. Plug the Falloff into the Diffuse then plug the same texture we use for the Mix Amount, into the Bump with the bump set to 30.
xi. Assign the material to the binding and set the Serging texture to Show Shaded Material in Viewport (GIF to the right)
xii. Now we can see there’s a issue with the UV’s on the corners of the binding. To fix this, we need to do Relax the UV’s. Open the UV Editor for the binding.
xiii. In Polygon Mode (3) select all (CTRL + A) and go to Tools > Relax. Use the following settings.
Note: 3DS Max can act strange with long geometry like this, so use Keep Boundary Points Fixed to prevent non ideal relaxing.
xiv. The render should look like this now!
To add variation detail to the edge, we can use V-Ray Displacement to push the geometry detail on render time. The setup for this kid of material is pretty simple, so we won’t be going too in depth with the settings for the VRayDisplacement modifier itself.
a. Adding V-Ray Displacement
i. With the binding geometry selected, create an OpenSubdiv with the Iteration set to 1.
Since displacement adds the necessary geometry on render time to achieve the proper details, it’s sometimes better to add a little more geometry in order to shorten calculation during render time.
ii. Now create a VRayDisplacement Modifier. Most the settings should remain default, but this modifier can have different defaults depending on settings last used. In that case, look at the screenshot for the settings used.
iii. Make sure the Mapping type is set to 3D Mapping.
iv. Plug the same binding texture from the material into the Texmap box.
v. Set the Amount to 0.05 (1/20”).
This is how much the binding will displace which isn’t much. This will just add a little extra variation at the cost of some added render time.
vi. The settings used didn’t impact render calculations much, so be sure to check the settings on the right and experiment with the settings to test how each one impacts render times.
vii. Adjust the contrast of the map as needed.
Typically we would group this together with the SKU name, and it would be good to go; however, VRayFur causes some issues with our QA system, and the way it calculates dimensions, at Wayfair®
a. Dimensions of Fur Object
One or more texture files are missing from the model submission.
i. Select everything we’ve created so far and Group it together
Group (Top Tool Bar) > Group.
ii. Everything will appear to be fine, but when you turn on the objects Selection Bracket (J) you’ll notice that the height of the rug is extremely off. (See Image Below)
iii. Using the Measure utility, we can see that 3DS Max thinks that the whole group is about 40” tall. In order to fix this, we need to scale down the fur object. With the group selected, go to Group > Ungroup then select the Fur object. Note: Only opening the group causes problems with the transform values.
iv. With the fur object selected, open the Scale Dialog by right clicking the Scale icon
v. Set the scale for XYZ from 100 to 1.0 – You’ll see the bracket immediately form to the size of the rug.
vi. Select all the elements again and group them together. Feel free to check the measurements again from the Utility Tab.
Here is an example of the rug in one of our scenes. Now you’re ready to create rugs that will look good in any environmental setting.