3ds Max Guidelines
The RapidPipeline DCC Importer converts complex offline-render materials into PBR materials for use in real-time rendering. It is designed to work with many material setups, and includes smart handling of non-PBR behavior, however the best conversion results will occur when materials are created within PBR standards. The closer the input materials match these standards, the better your results will be.
Gamma Workflow
For the best compatibility with PBR materials, it is best to enable Gamma and set it to 2.2.
DCC Importer converts materials into PBR using the glTF PBR material system, which is set up to work in sRGB color space, which in turn is fundamentally very similar to Gamma 2.2.
Bitmaps for colored inputs like Diffuse, Emissive, Reflection and Refraction each use sRGB color space, while all the other inputs use linear color space. Normal maps should also use linear.
Color space for Diffuse textures should be set to Auto, or sRGB, or From 3ds max.
Color space for Normal Map textures should be None, or Inverse Gamma 1.0.
Normal map textures should be saved in linear color space, without Gamma or sRGB. Use a histogram to check.
UV Guidelines
DCC Importer will always attempt to preserve the existing UVs if possible, as long as the material ingredients do not require texture baking.
DCC Importer will always favor preservation of the artist's original intent for the final visual appearance of the model. It examines each material in depth, and chooses different conversion strategies depending on material complexity.
VRayMtl examples of increasing material complexity
- The metal material on the left has no texture inputs, so the UVs are simply removed on output.
- The brick and fabric materials in the middle use textures and color adjustments, so they can re-use their existing UV layouts.
- The chipped-plastic example on the right uses procedural textures and edge wear, which are both geometry-dependent, so this material must be baked. If the existing UVs do not conform to atlas contraints, new UVs will be generated.
Tiling versus Atlas Baking
Tiled UV usually has coordinates outside the 0-1 space, and may include overlaps
The conversion process attempts to preserve texture tiling parameters. Whenever possible, tiling values are converted into the glTF extension KHR_texture_transform and the USD parameter UsdTransform2d.
If multiple texture nodes are using different tiling values, or complex blending is being used, then tiled textures will be baked down into non-tiled "atlas" textures. An atlas UV layout is similar to how a world atlas shows all the continents in one view. Baking this way will preserve the overall visual appearance of the original input, but may not end up as detailed as when using tiled textures.
UV "atlas" layout is when all coordinates are within the 0-1 space, preferrably with no overlaps.
When baking to an atlas is required, existing UVs will be checked for overlaps and whether all UVs are contained within the 0-1 UV space. If UVs do not fit these criteria, and if the material ingredients require baking, then new UVs will be generated to prevent baking errors. There is also an option to adjust the threshold for allowable overlap amount, see --uvThreshold.
How to Preserve Tiling
To avoid atlas baking and preserve tiled textures in the converted output, be careful how textures are being transformed within the node hierarchy for a material:
- Avoid using geometry-dependent nodes like VRayCurvature or VRayDirt or VertexColor. These nodes rely on the shape of the model, and if they are present in a material channel then any tiling textures within that channel cannot be preserved as-is, they have to be baked into an "atlas" UV layout.
- Avoid 3D procedural textures such as Noise or Cellular, because these patterns adapt to the 3D shape of the model. Some 2D procedurals can preserve tiling as long as they are in UV space, for example Checker.
- Avoid using UDIMs or Real-World Scale texture transforms. (Note, we are planning to preserve RWS tiling in the near future, stay tuned! Currently though, RWS is baked into an atlas layout.)
- Avoid different tiling values for "paired" inputs. glTF PBR and USDPreviewSurface require some inputs to share color channels within the same texture. If bitmaps in these paired inputs use different transforms, then atlas baking will be required:
- Diffuse map and Opacity map (combined into baseColorTexture)
- Reflection Glossiness/Roughness map and Refraction Glossiness/Roughness map and Metalness map (metallicRoughnessTexture)
- Anisotropy map and Anisotropy Rotation map (anisotropyTexture)
- Coat Amount map and Coat Roughness map (clearcoatTexture)
- Sheen Color map and Sheen Glossiness/Roughness map (sheenColorTexture)
- Avoid using different texture transform values for bitmaps within the same input for a material. For example if two Diffuse textures are being blended together, but each has different Offset or Tiling or Angle values, then atlas baking is required.
Texture transform settings in 3ds Max
If it is not possible to avoid these settings, materials will automatically be converted gracefully using atlas baking. DCC Importer always favors preserving the original visual intent, regardless of the incoming material setup.
Displacement
DCC Importer can convert displacement maps into normal maps, or into geometry.
Displacement conversion methods
The Displace modifier is automatically converted into geometry.
The VRayDisplacementMod modifier is converted into a normal map, but can optionally be converted into geometry when the Type is set to 3D mapping and if the DCC Importer option bakeDisplacement has been enabled before conversion.
VRayDisplacementMod using Type: 3D mapping
V-Ray Material Settings
The material system in V-Ray is very powerful and allows creators a great amount of control. However, some settings can be used to override physical plausibility, which can make accurate conversion difficult.
Falloff Nodes
Avoid using Falloff nodes; this is a view-dependent effect which is tightly restricted in PBR material systems.
Falloff nodes are flattened by DCC Importer into an 80:20 mix between the two nodes/colors in use, and the Mix Curves are ignored.
As an alternative, we suggest using the Sheen parameters in VRayMtl (see below); DCC Importer can convert this directly into the glTF extension KHR_materials_sheen.
Falloff nodes should be avoided
VRayMtl: Sheen
Instead of using Falloff nodes, we recommend using the Sheen parameters in VRayMtl. RapidPipeline DCC Importer will convert this into glTF using the extension KHR_materials_sheen.
Sheen parameters in a VRayMtl are converted into Sheen parameters in a glTF Material
Note: The sheen effect is not available with USDz because it uses USDPreviewSurface which does not suport Sheen. DCC Importer gracefully down-converts to USDz by omitting Sheen.
VRayMtl: Diffuse Roughness
Avoid using Diffuse Roughness. This can be used for extremely rough surfaces like unglazed ceramics, but it produces a fairly minor visual change and is not available in metallic-roughness PBR. DCC Importer ignores this property.
VRayMtl: Reflection Roughness
In the BRDF rollout, set the option Use roughness. This is not strictly necessary for good conversion as DCC Importer will invert Glossiness when it is being used. However it is better to work natively with Reflection Roughness so it matches PBR metallic-roughness. This also works well with other tools such as the Adobe Substance 3D suite.
The setting Use Roughness in a VrayMtl
VRayMtl: Reflection Color
Reflection Color should be white for most materials. For colored metals, put the color in Diffuse and set Metalness to 1.0.
It is very rare for real-world non-metallic materials to have a reduced or colored reflection value. Exceptions are Silk or Satin fabrics, which can sometimes show colored reflections.
To reduce reflectivity, we recommend increasing Reflection Roughness which works very similarly to metallic-roughness PBR, effectively spreading out and softening the reflection.
Most materials should use white Reflection Color
VRayMtl: Fresnel Reflections
Do not disable Fresnel Reflections. Real-world surfaces always have Fresnel reflection behavior, and Fresnel is a built-in component of PBR materials. If this is disabled, DCC Importer cannot reproduce a faithful conversion.
The setting for Fresnel Reflections in a VRayMtl
VRayMtl: Fresnel IOR lock
Do not disable the Fresnel IOR lock, because PBR materials (as in glTF and USDz) have a single IOR control for the whole material.
For the best results, use the IOR value in Refraction to control the combined IOR value.
The setting for Fresnel IOR lock in a VRayMtl
VRayMtl: Refraction IOR
It is best to use realistic IOR values for reflective and refractive materials. When Fresnel IOR is locked, the Refraction IOR controls both reflection and refraction, which is how IOR is implemented in most PBR systems.
For example glass is 1.5, see https://pixelandpoly.com/ior.html.
The setting for Refraction IOR in a VRayMtl
High IOR for Metalness
We recommend avoiding the use of high IOR for metallic surfaces; instead it is better to set the Metalness value to 1.0 or to use a Metalness texture.
However to support old high-IOR workflows, DCC Importer has an option to gracefully convert these into proper PBR metals. This setting is available in the Web Platform interface on upload, or it can be enabled in the CLI using the --iorToMetalness flag.
Note that enabling this setting will cause it to be applied to all materials in the scene.
A high IOR value in a VRayMtl being used to simulate metal
VRayMtl: Metalness
To create metallic surfaces, set the Metalness value to 1.0. This offers a more realistic surface response than using a high IOR value.
For non-metals, set Metalness to 0__, and set the Reflection Color to white
For metals, set the Metalness value to 1.0, Reflection Color to white, and control the metallic color with Diffuse Color
Physically Based Database
This website is helpful for finding realistic PBR colors: https://physicallybased.info/
Set the Engine: to V-Ray then set the Color Space depending on how you wish to control the Diffuse Color:
- VRayMtl Diffuse Color swatch uses linear color, so on the website set Color Space =
sRGB (linear)
. - The VRayColor node should be set to Color Gamma 2.2, so on the website set Color Space =
sRGB
.
Use sRGB (linear) for the Diffuse Color swatch
Use sRGB and Color Gamma 2.2 for the VRayColor node
VRayMtl: Refraction Color
Colored glass can be created using black in Diffuse, white in Reflection, and the glass color in Refraction. This works well for glass with an even thickness, for example window glass.
Standard window glass has a greenish tint from iron oxide impurities
VRayMtl: Fog Color
To represent refractive materials with differing thicknesses, Fog Color can be used instead of Refraction Color.
With Fog Color it is essential to use real-world dimensions. The teapot in this example is about 6cm tall, and the thinnest glass in the spout is about 0.5cm thick. Which means we can set Depth(cm) to about 0.5 to get semi-accurate attenuation. Be careful not to Scale an asset with Fog Color, since this will push the real-world dimensions of the model away from an accurate Depth(cm) value.
We recommend to not use a texture for Fog Color. This will not be converted to real-time PBR since none of the output formats support it.
A glass teapot with varying thickness. Thicker glass causes the color to attenuate and get darker
VRayMtl: Bump
It is best to use normal map textures for bump. When grayscale bump textures are used, this results in a slower conversion process, because PBR can only use normal maps for bump.
V-Ray uses the DirectX convention for normal maps, which means the green channel is pointing down. If the normal map green channel is pointing up, use the Flip Green option in VRayNormalMap.
V-Ray uses the DirectX convention for normal maps
If the green channel is pointing up, use the Flip Green setting