Materials and textures
Describes how to create a material catalog in Unreal, report it to your Dousen project, and assign catalog materials and textures to source assets in a DCC.
- 01 · UnrealUnreal Data AssetMaster materials, their parameters, and texture settings.
- 02 · PortalProject’s Materials tabA read-only copy that Unreal reports to the studio server.
- 03 · DCCDCC material pickerAssign materials to mesh slots or texture sets, then validate and publish.
Before you start
- Project admin: an Admin sign-in, the project’s UUID, DousenUE enabled in the Unreal project, and permission to edit its content and configuration.
- Materials: working Unreal materials that expose texture, scalar or vector parameters. The picker can’t override a texture that is wired into the graph without a texture parameter.
- Artist: DousenDesktop signed in, the project’s source root and workspace configured, the DCC launched from Desktop, and the master materials synced into the target Unreal project.
Material integration is a preview feature. Before you roll it out, run the test below with your studio’s engine and DCC versions.
Create the catalog in Unreal
The examples use a sample material, M_PaintedMetal, with texture parameters BaseColor,
Normal and ORM and a scalar parameter RoughnessMult. Replace them with the
parameter names your own materials expose.
-
Prepare a master material.
On a working master material, expose the parameters that artists can override. Keep the existing parameter names. Compile and save the material.
-
Create a Data Asset in project content.
In the Unreal Content Browser, create a Data Asset and select Dousen Material Catalog (
UDousenMaterialCatalog) as its class. Save it in your project’s content, because the DousenUE plugin doesn’t contain content assets. For example, save it asDA_MaterialCatalogin/Game/Dousen/. -
Add a Materials entry.
Open the Data Asset and add an entry to Materials. Set Material to your master material. Give the entry a unique Id in lowercase with underscores, such as
painted_metal, and a Display Name, such as Painted Metal. Set Allow Nanite for that material. It is on by default. -
Populate the parameters.
Click AutoPopulateFromMaterials. For each entry that has a Material, it fills in an empty Id and Display Name and adds a declaration for every texture, scalar and vector parameter the material exposes. It guesses each texture’s Content, SRGB, Compression and Match Keywords from the parameter name. It keeps values you filled in and never removes declarations.
-
Review and save.
Check every guess, each scalar default and range, and each vector default (see the next section). Remove declarations you don’t need, then save the catalog and the master material. Don’t change an Id after artists have saved assignments that use it.
M_CoatedMetal, whose parameters are named differently from
M_PaintedMetal.Set up texture channels and parameters
Each entry in Texture Slots maps one shader parameter to a texture channel:
- Param Name is the exact Unreal parameter name. It isn’t the source filename or the mesh’s material-slot name.
- Content describes what the pixels mean, whatever the parameter is called. A parameter called
DiffuseMaporColorTexturecan have Content set to Albedo. - SRGB and Compression set how the catalog-driven importer treats the texture.
- Match Keywords are lowercase filename fragments that Dousen uses to match exported files to the slot.
The Content and Compression dropdowns list fixed choices from the plugin. Parameter names, labels and keywords come from your project. Review what AutoPopulateFromMaterials guessed, and correct Content where it’s wrong.
ColorTexture is a custom parameter name. Its Content is Albedo, and its keywords match
filenames that contain basecolor, albedo or _color.| Parameter name | Content | SRGB | Compression |
|---|---|---|---|
BaseColor | Albedo | Enabled | Default |
Normal | Normal | Disabled | NormalMap |
ORM | ORM | Disabled | Masks |
In this example, use the keywords basecolor and albedo for BaseColor, normal
for Normal, and orm for ORM. The channel order of a packed map must match the shader graph, because
Dousen doesn’t repack image channels based on a filename. Auto-population can classify several packed-map names the
same way, so check its result against how your textures are packed.
Other texture content types
The Content list also includes Roughness, Metallic, ARM, AO, Emissive, Opacity, Height, Mask and Custom. The Compression choices are Default, NormalMap, Masks, Grayscale and HDR. Data maps normally use linear sampling, so turn SRGB off for them and choose the compression that fits the data. Set Custom slots yourself, because Dousen can’t guess their settings from a name.
Configure scalar and vector controls
Expand Scalar Params and add an entry for each scalar parameter that artists may override. Set Name to the exact shader parameter name. Set Default, Min and Max to values that suit the graph, and enter a Label for the control that artists see. The label can differ from the parameter name and doesn’t rename the shader parameter. If you leave Label empty, artists see the parameter name.
RoughnessStrength, and artists see the label Surface roughness. The
0 to 1 range suits this example’s shader.Vector Params work the same way: set the exact parameter Name, a Default linear color, and an optional Label. Save the catalog, then test an override on one imported Material Instance from the DCC picker.
Connect the catalog to the project
- Check out
Config/DefaultDousenUE.iniin the Unreal project if it’s read-only, or create it if it doesn’t exist. Keep the settings that are already in it. - Under
[/Script/DousenUE.DousenProjectSettings], addMaterialCatalogwith the Data Asset’s full object path, including the asset name after the dot. - Check
ServerScheme,ServerHostandProjectId. An editor launched from DousenDesktop takes the server, project ID and bridge port from Desktop instead, so select the same project in Desktop. - Restart the editor from Desktop while you’re signed in as an Admin, then save the catalog to trigger a report.
INI[/Script/DousenUE.DousenProjectSettings]
ServerScheme=https
ServerHost=core.example.com
ProjectId=YOUR_PROJECT_UUID
MaterialCatalog=/Game/Dousen/DA_MaterialCatalog.DA_MaterialCatalog
Set ServerHost to your studio’s DousenCore host and ProjectId to your project’s UUID.
Don’t point ServerHost at the marketing website or the cloud control plane. Don’t put access tokens in
project INI files, because Desktop supplies the current sign-in credentials. For the other keys and the HTTPS rule,
see Configure the plugin.
Verify the report and distribute it
- In the web portal, click Projects, select your project, and click Materials. Check that each material’s ID, display name, path, texture declarations and parameters match the Data Asset.
- If the page says "No material catalog has been reported for this project yet," see Troubleshoot catalog and assignment problems.
- Submit the catalog
.uasset, the master material and its dependencies, andConfig/DefaultDousenUE.inito source control. Other workstations need these files, even though the picker gets the catalog from Core. - On a test artist workstation, sync those files, launch the project, and check that the expected material appears in the DCC picker.
Unreal reports the catalog to Core when the editor starts, when you save the catalog, when the catalog file changes on disk (for example after a Perforce sync), and every five minutes. It skips a report if nothing changed. Core rejects a report that is older than the catalog it already has as stale.
DCCs cache the catalog for five minutes, so Load Materials can return an older copy.
Assign a material in the DCC
-
Open the source.
Check the project and task in Desktop, then open the saved source file. Note the mesh’s material-slot names (or the Substance Painter texture-set names), which receive the assignments. They are different from shader parameter names such as
BaseColor. -
Load the catalog and choose a material.
In the Qt picker, click Load Materials, then choose a material for each slot in Slot Materials. The slot’s texture and parameter fields appear under Material Details. In Substance Painter, the list is Texture Set Materials on the EXPORT tab. Blender uses native controls (see the Blender workflow), and Houdini uses its material setup tools.
-
Bind textures and set overrides.
Under Material Details, click Browse… next to each texture parameter and choose its source image, for example the base color, normal and packed ORM images. After an export, Dousen can fill in unset texture paths by matching filenames to the Match Keywords, so check them. Enter only the scalar and vector overrides you want.
-
Save, validate and publish.
Save the source, which saves the assignments with it. Collect the instance again, check its type and destination, and click Validate. In Substance Painter, if the mesh didn’t come from a Dousen export with its sidecar, open the EXPORT tab, enter the Unreal object path in Target Unreal mesh (for example
/Game/Props/S_Crate.S_Crate), and click Use target mesh before you publish texture sets. Publish the checked instances. -
Check the result in Unreal.
Wait for Desktop to confirm that Unreal imported and saved the asset. Open the imported mesh and its Material Instance, and check the parent material, slot binding, texture parameter values, SRGB and compression settings, and overrides for each slot.
If you choose a different material for a slot, the Qt picker clears that slot’s texture bindings and overrides, so bind them again before you publish. Each DCC saves assignments with the source file in its own way.
Test one asset before rollout
- The portal and the DCC show the same material ID and declarations.
- The master material resolves in the target Unreal project.
- Each mesh slot gets the intended Material Instance, and each image is bound to the intended parameter.
- Base color is sampled as color, and the normal and packed data maps use the intended linear and compression settings.
- After you change a scalar override and publish again, the new value appears in Unreal.
- After you reopen the source, its assignments are still there, and Desktop confirms that Unreal saved the new imported packages.
How the import sets Nanite
When Unreal imports a static mesh that has a material assignment, it turns Nanite on if every assigned catalog material has Allow Nanite on, and off if any has it off, with these exceptions:
- A geometry profile that disables Nanite keeps it off, whatever Allow Nanite says. See geometry profiles.
- If an assignment doesn’t match a catalog entry (for example, it falls back to a material path), Unreal leaves the mesh’s Nanite setting alone.
- Skeletal meshes have no Nanite settings, so Unreal skips them.
The DCC uses the same material lookup to choose between the Nanite and NonNanite validators. See The Nanite / NonNanite gate.
Update an existing catalog
- Sync the latest catalog and check it out before you edit it. Coordinate your edits with the other project admins.
- Keep existing Ids when you change display names or add parameters. If you move a master material, update the reference and check that it resolves on a second workstation.
- After you change a shader’s interface, click AutoPopulateFromMaterials and review the declarations. Remove renamed or deleted parameters yourself, and set the range and content type for new ones.
- Save the catalog, check the new values in the portal, and submit the content and config changes. Artists can refresh or relaunch their DCC once the catalog cache expires.
- A catalog update doesn’t rewrite existing Material Instances, so review the existing source assignments and republish a test instance.
Troubleshoot catalog and assignment problems
- The Data Asset class is missing
- Check that DousenUE is enabled in this project and restart the editor. Fix any plugin build or load errors first.
- The Materials tab says "No material catalog has been reported for this project yet"
- Look for
LogDousenUEmessages in Unreal’s Output Log. Check the configured object path, the project UUID, the selected project and the server connection, then save the Data Asset while signed in as an Admin. An HTTP 401 means the editor has no valid sign-in credentials, and an HTTP 403 means the signed-in user isn’t an Admin. Fix that in Desktop, then restart the editor or save the catalog again. - The portal is current but the picker shows an older catalog
- Check that the DCC was launched for the same project. Wait for the five-minute cache to expire and load again, or restart the DCC. In Blender, you can click Refresh Material Catalog instead. If a fetch fails, the DCC keeps showing the last catalog it loaded.
- The report is rejected as stale
- Core already has a newer saved catalog. Sync the Data Asset and merge in the other admin’s changes before you change it again.
- Unsaved edits block an update from a sync
- If the catalog file changes on disk while the loaded package has unsaved edits, the editor skips the report. Save your edits or reload the version you want, then check the portal again.
- Textures are missing or assigned to the wrong channel
- Check the source paths, shader parameter names, mesh-slot names, filename keyword matches and packed-map order. Rebind the incorrect fields, validate, and publish a test instance.
- The material parent is missing in Unreal
- Sync the referenced material and its dependencies into the target project. The catalog stores only the material’s path, so it doesn’t copy the asset to other machines.
For more, see Publishing assets, DCC addons and Unreal Engine.