Jump to content

Mod Loader/Reference/Fabric fields

From Threadbox

A fabric pack is a folder with a mod.json and the images it uses. The Mod Loader adds each entry as a new fabric; it does not replace the fabric it uses as a starting point.

For most recolors, use Make fabrics in Mod Manager. The in-game editor can copy a fabric's material, keep or replace its image, and adjust tint, pattern size, and gloss. The Advanced editor exposes the shader properties listed below.

Pack manifest

This example includes the supported pack and fabric fields. Optional material properties can be left out.

{
  "id": "yourname.fabricpack",
  "name": "My Fabric Pack",
  "author": "Your name",
  "version": "1.0.0",
  "icon": "pack-icon.png",
  "fabricTypes": [{ "id": "Leather", "name": "Leather" }],
  "fabricTags": [{ "id": "Leather", "name": "Leather" }],
  "fabrics": [{
    "id": "sage-weave",
    "name": "Sage Weave",
    "baseFabric": "Cotton Black",
    "fabricType": "Linen",
    "colors": ["Green"],
    "texture": "sage-weave.png",
    "material": {
      "shader": "$defaultFabricShader",
      "color": "#FFFFFFFF",
      "mainTextureScale": [1, 1],
      "mainTextureOffset": [0, 0],
      "renderQueue": 2000,
      "keywords": [],
      "floats": { "_Smoothness": 0.28 },
      "ints": {},
      "colors": { "_SpecularColor": "#A8B8A7FF" },
      "vectors": {},
      "textures": {},
      "textureScales": {},
      "textureOffsets": {}
    },
    "cost": 18,
    "unlockLevel": 0,
    "tagWeights": [{ "tag": "Casual", "weight": 70 }],
    "notes": "Optional internal note"
  }]
}

Here baseFabric supplies the material and lets the pack omit the shader. The texture is optional when a base is set; without one, the base fabric's image is kept. To build a fabric from scratch, leave out baseFabric and provide the required material, type, colors, cost, and tag weights.

Pack fields

Field Meaning and rules
id Required pack namespace. Use 1–64 letters, digits, dots, underscores, or hyphens. Keep it stable after release; it forms part of saved fabric IDs.
name Name shown in Mod Manager. Defaults to the pack ID.
author Optional for older packs; 1–80 characters. Shown with the pack.
version Optional for older packs. Use a version such as 1.0.0 or 1.1.0-beta; increase it for an update while keeping IDs unchanged.
icon Optional PNG or JPEG beside mod.json. Maximum 4 MB and 2048 × 2048 pixels.
fabrics Array of fabrics. Each fabric ID must be unique within the pack.
fabricTypes, fabricTags Optional arrays of {"id":"Leather","name":"Leather"} entries. These add filter choices without editing game files. Runtime IDs are <modId>.<id>. Keep IDs stable; a fabric may refer to an ID from its own pack or another loaded pack.

Fabric fields

Field Meaning and rules
id Required stable key, local to the pack. Uses the same character rules as the pack ID. The loader uses it in the fabric name and save GUID; do not change it after release.
name Required non-empty display name.
baseFabric Optional internal ID of a native fabric or a custom fabric loaded earlier. Custom IDs use <modId>.<fabricId>. The base must have a material. Its shader, tint, detail textures, and other material settings are copied, while this entry's texture, name, type, color categories, and cost are retained.
fabricType Main category. Use one of the built-in values below or a custom type ID. Required when baseFabric is omitted.
colors Array of color categories below. Required without baseFabric.
texture Relative path to a PNG or JPEG in the pack folder. Optional with baseFabric; omitting it keeps the base fabric's image.
material Shader and rendering settings. shader is required without baseFabric; other properties may be omitted.
cost Required integer shop price without baseFabric; range 0–2,149,633.
unlockLevel Prestige level to unlock the fabric. Range 0–50; defaults to 0.
tagWeights Array of {"tag":"Casual","weight":70}. Use built-in or custom tag IDs. Required without baseFabric; duplicate tags are invalid. Weights must be finite numbers, and only positive weights count for HasTag.
notes Optional internal note copied to the fabric asset. It is not the display name.

The loader assigns an internal GUID. Native fabrics may use unlock levels from −1 to 51 and tag weights from −25 to 2525; those are native data ranges, not custom pack limits.

Built-in categories

Fabric type: Burlap, Cotton, Lace, Linen, Sequin, Silk, Velvet, Wool. Define another value in fabricTypes when your pack needs a category such as Leather.

Colors: Blue, Green, Pink, Purple, Red, Yellow, Orange, Black, White, Grey, Brown.

Tags: Casual, Cool, Cute, Daywear, Eclectic, Elaborate, Elegant, Eveningwear, Flowers, Formal, Glamour, Goth, Patterned, Playful, Professional, Risque, Romantic, Shimmering, Simple, Uncomfortable, Warm, Workwear. Add pack-specific choices through fabricTags.

Mods load in alphabetical folder order. Fabrics in a pack load in the order of the fabrics array, so a custom base must be defined by a pack that loads first. Each custom fabric automatically receives the Modded tag at weight 1; native fabrics keep their original tags. Fabric type does not choose a shader.

Material fields

Field Value
shader Exact name of a loaded shader, or $defaultFabricShader for the game's MannequinFabric shader. New materials start with that shader's defaults.
color Overall tint as #RRGGBB, #RRGGBBAA, or an object with numeric r, g, b, and optional a.
mainTextureScale, mainTextureOffset Two finite numbers, [x, y], for repeat and offset of the main image.
renderQueue Integer from −1 to 5000.
keywords Array of shader keyword strings. A keyword only works when the shader implements it.
floats Map of shader property names to finite numbers. Supports Float and Range properties.
ints Map of property names to integers. Supports Int, Float, and Range properties.
colors Map of property names to hex colours or numeric colour objects.
vectors Map of property names to four finite numbers.
textures Map of texture property names to PNG or JPEG paths inside the pack. The fabric's texture field supplies the main texture.
textureScales, textureOffsets Maps of texture property names to two finite numbers.

The loader checks property types against the selected shader. It does not clamp values to Unity Range limits. The ints and vectors maps are supported even though the game's default fabric shader exposes neither type.

Numeric colours and HDR

Use a colour object when you need exact component values or HDR brightness. RGB components are required; alpha defaults to 1 when omitted. Values must be finite numbers and are passed to the shader without clamping or colour-space conversion. For example, this keeps the blue specular component at 2.118:

"material": {
  "colors": {
    "_Color": { "r": 0.037, "g": 0.14, "b": 0.645, "a": 1 },
    "_SpecularColor": { "r": 0.0776, "g": 0.871, "b": 2.118 },
    "_EmissionColor": "#000000"
  }
}

The same object format works in material.color and in accessory materials. Hex strings still work, and both formats can be used in the same map. Only include properties exposed by the item's shader; copying every property from a material dump can include unused properties which the loader rejects.

Properties on the game's fabric shader

These names belong to MannequinFabric. Put number settings in material.floats, colors in material.colors, and image paths in material.textures. Start with baseFabric to keep the maps and finish of a fabric you like, then change the properties you need.

A range below is the slider range declared by the shader. JSON values are not clamped to it. In the in-game editor, a fixed-range slider brings typed values back into that range.

Tint and finish

Property Value Use
_Color Hex color Tints the fabric and its image. White (#FFFFFFFF) leaves the image's colors untinted. You can also set this with material.color.
_Smoothness Number, 0 to 1 Move toward 0 for a matte finish and toward 1 for a glossy one.
_ReflectionStrength Number, 0 to 1 Controls how strongly the room reflects on the fabric.
_SpecularColor Hex color Colors the bright highlights. For example, a pale gold gives the highlights a warmer color.
_SpecularTint Number, 0 to 1 Controls the amount of tint in the highlights.
_SpecularLightStrength Number Brightness of the light spots on the fabric.
_SpecularLightStrengthMax Number Upper limit for the highlight strength.
_ExtraSpecularTightness Number Controls how concentrated the extra highlights are. Compare it under the same lighting when changing it.
_EmissionColor Hex color Emission color. Keep black (#000000FF) for an ordinary non-glowing fabric.

Texture maps and weave

Property Value Use
_Albedo Image The main print. Set it with the fabric's texture field.
_Detail Image A finer image layered into the fabric's surface detail. Copying a cotton material keeps its weave image.
_Normal Normal-map image Makes the surface look raised or indented under light without changing the garment mesh.
_NormalStrength Number, 0 to 1 Strength of the main normal map. Changing this needs a map in _Normal.
_DetailNormal Normal-map image Fine raised-looking detail, such as a cloth weave.
_DetailNormalStrength Number, 0 to 1 Strength of the fine detail. Zero hides this normal-map effect.
_AmbientOcclusion Image A map used to darken recessed parts of the surface.
_OcclusionStrength Number, 0 to 1 Amount of darkening from the ambient-occlusion map.

A normal map describes surface direction; a photograph of a weave is not a normal map. If you are only replacing the print, keep the normal and detail maps from your base fabric.

Sheen and lighting

Property Value Use
_WrapValue Number, 0 to 1 Controls how far light wraps around the curved surface.
_FresPower Number, 0.0001 to 16 Controls how the edge sheen changes with the viewing angle. Rotate the mannequin to compare changes.
_FresnelBrightness Number Brightness of the sheen seen at glancing angles.
_IndirectStrength Number, 0 to 1 Strength of indirect lighting on the fabric.
_BackFaceBrightness Number Brightness of the fabric's reverse side.
_Anisotropic Number Directional sheen, where highlights change with the weave direction. Start by copying a fabric that already has the sheen you want.
_AnisoAngle Number Turns the directional sheen. In the editor this is called Weave highlight angle.
_ReceiveShadows Number Whether the material receives shadows. Copied game fabrics use 1.

Other shader properties

The effects of _AlphaGloss, _BackfaceBias, _DiffuseReducesSpecular, and _AnisoDrift have not been verified. They are number properties and can be copied from a base fabric. Leave them out of your overrides when adjusting an ordinary finish.

_QueueOffset and _QueueControl are number properties used for rendering order. For an ordinary fabric, leave them copied and keep material.renderQueue at its default. The _texcoord, _texcoord2, unity_Lightmaps, unity_LightmapsInd, and unity_ShadowMasks texture slots are managed by the shader or Unity; you do not need to supply images for them.

Game materials use the keywords _ALPHAGLOSS_ON, _ANISOTROPIC_ON, and _DIFFUSEREDUCESSPECULAR_ON. Copy the base material's keywords unless you are changing one of those features. A keyword only works with a shader that implements it.

Check changes on a dress as well as the shop bolt. Some garment screens copy only part of the fabric material. A custom shader can have different property names; use the names declared by that shader.

Reference files and examples

  • BepInEx/config/DressmakerMods/fabric-reference.json is generated when the plugin starts. It contains native fabric IDs, material values, tags, and keywords. It is written before custom packs load, so it lists native fabrics only.
  • The Textile Field Guide ZIP has working material examples.

For a quick recolor, open Make fabrics, add a fabric, and choose a native fabric under Mimic material properties of. Leaving the texture empty uses its image. The editor's basic controls set tint, pattern size, and gloss; Advanced edits the same material values shown above.

Back to the Mod Loader guide