CustomShaderLoaderAlt
Improvements over Regguise/CustomShaderLoader v1.72
✦ How To UseImprovements over Regguise/CustomShaderLoader v1.72
Please load the CustomShaderLoaderAlt.cslist file to activate the plugin.
For detailed examples, please check out the demo video at the end of this post.
massive shoutout to regguise for the OG plugin, we’re officially in the wizard era now!
✦ New Features
✦ Update
NEW. New Property Type:
cubemap — Load Cubemaps from AssetBundleNew version adds the
cubemap property type, which automatically scans the AssetBundle for all packaged Cubemap assets and presents them in a dropdown list for the user to select. Supports real-time switching, and selections are automatically saved/restored with the scene. Works across all three modes: Person / Clothing / CUA.- Cubemaps are packaged in the same AssetBundle as the shader
- The dropdown automatically lists all Cubemap assets found in the bundle
defaultAssetName(optional): specifies the default Cubemap selection
JSON:
{ "name": "_CubemapTex", "displayName": "Environment Map", "type": "cubemap", "defaultAssetName": "MyCubemap" }
1. Material Slot Limit: 10 → 50
The original plugin hardcoded a limit of 10 material slots for Clothing/CUA mode. Any CUA or clothing item with more than 10 materials could not have its extra slots controlled.
The improved version raises the limit to 50 Clothing/CUA slots (skin slots remain at 30), supporting large CUAs and high-material-count clothing items.
2. New Property Type:
vector4The original only supported 3D vectors (
vector = XYZ).The improved version adds
vector4, providing four sliders (X/Y/Z/W) for shader properties that require a Vector4 parameter (e.g. packed tiling+offset, custom parameter groups).
JSON:
{
"name": "_TilingOffset",
"displayName": "Tiling & Offset",
"type": "vector4",
"defaultVector4": { "x": 1.0, "y": 1.0, "z": 0.0, "w": 0.0 },
"minVector4": { "x": 0.1, "y": 0.1, "z": -2.0, "w": -2.0 },
"maxVector4": { "x": 10.0, "y": 10.0, "z": 2.0, "w": 2.0 }
}
3. New Property Type:
label — Section HeadersThe original had no way to group properties visually — everything was stacked without structure.
The improved version introduces the
label type, which inserts a colored banner to visually separate property groups.defaultColor: Banner background color (supports#RRGGBBhex or named colors)textColor: Text color; if omitted, black or white is chosen automatically based on background luminanceheight,fontSize: Control banner dimensions
JSON:
{ "name": "", "displayName": "─── Base Colors ───", "type": "label", "defaultColor": "#1a2a4a", "height": 45, "fontSize": 26 },
{ "name": "", "displayName": "─── Lighting ───", "type": "label", "defaultColor": "#2a1a1a", "textColor": "#ffcc88", "height": 45, "fontSize": 26 }
4. New Property Type:
column — Left/Right Column ToggleThe original placed all shader properties in the right column only (hardcoded
rightSide = true), leaving the left column completely empty.The improved version adds the
column type — inserting it switches all subsequent properties to the other column, enabling a balanced two-column layout.
JSON:
{ "name": "_Color", "displayName": "Base Color", "type": "color", "defaultColor": "white" },
{ "name": "_Emission", "displayName": "Emission", "type": "color", "defaultColor": "black" },
{ "name": "", "displayName": "", "type": "column" },
{ "name": "_Metallic", "displayName": "Metallic", "type": "float", "defaultValue": 0.0, "minValue": 0.0, "maxValue": 1.0 },
{ "name": "_Gloss", "displayName": "Smoothness", "type": "float", "defaultValue": 0.5, "minValue": 0.0, "maxValue": 1.0 }
The two color pickers appear in the right column; after
column, the sliders switch to the left column.5. New Property Type:
tab — Tab-Based LayoutThe original had no tab support — large property lists required endless scrolling.
The improved version integrates CustomTabUI: placing a
tab entry in the JSON creates a tab button at the top of the plugin UI, and all subsequent properties are grouped under that tab.
JSON:
{ "name": "", "displayName": "Basic", "type": "tab", "tabWidth": 100 },
{ "name": "_Color", "displayName": "Base Color", "type": "color", "defaultColor": "white" },
{ "name": "_Metallic", "displayName": "Metallic", "type": "float", "defaultValue": 0.0, "minValue": 0.0, "maxValue": 1.0 },
{ "name": "", "displayName": "Textures", "type": "tab", "tabWidth": 100 },
{ "name": "_MainTex", "displayName": "Albedo", "type": "texture", "wrapMode": "Repeat" },
{ "name": "_BumpMap", "displayName": "Normal Map", "type": "texture", "wrapMode": "Repeat" }
toggle: New keyword Field — Shader Keyword ControlThe original
toggle only set a shader property's float value (0/1), with no ability to control #pragma multi_compile keyword branches.The improved version adds an optional
keyword field — toggling the switch also calls EnableKeyword / DisableKeyword.
JSON:
{ "name": "_UseNormalMap", "displayName": "Enable Normal Map", "type": "toggle", "defaultValueBool": false, "keyword": "USE_NORMAL_MAP" },
{ "name": "_UseEmission", "displayName": "Enable Emission", "type": "toggle", "defaultValueBool": false, "keyword": "EMISSION_ON" }
Corresponding shader code:
Code:
#pragma multi_compile_local _ USE_NORMAL_MAP
#pragma multi_compile_local _ EMISSION_ON
texture: New wrapMode FieldThe original applied the default wrap mode to all textures with no way to override it. The improved version lets you specify wrap mode per texture:
| Value | Behavior |
|---|---|
Repeat (default) | Tile and repeat |
Clamp | |
Mirror | Mirrored tiling |
JSON:
{ "name": "_MainTex", "displayName": "Albedo", "type": "texture", "wrapMode": "Repeat" },
{ "name": "_MaskTex", "displayName": "Mask", "type": "texture", "wrapMode": "Clamp" },
{ "name": "_FlowMap", "displayName": "Flow Map", "type": "texture", "wrapMode": "Mirror" }
✦ New Features (continued)
8.
texture: New Clear ButtonThe original provided no way to clear a selected texture without reloading the entire shader properties UI.
The improved version adds a Clear button (dark red) next to every
texture property:- Sets the texture on all active material slots to
nullviaSetTexture(name, null) - Simultaneously clears the path display field
9. Toggle Controls: Unified 14mhz Pill Style
The original used VAM's native checkbox (
CreateToggle), which looked inconsistent alongside other CustomUI elements.The improved version replaces all toggle controls — material slot toggles, skin slot toggles, and shader property toggles — with
BaseSliderToggleUI (14mhz pill-style). A deferred coroutine calls apply() after Unity layout settles, resolving the sze=0 rendering issue that caused toggles to appear as tiny dots on first load.10. UI Color Scheme: Dark Sci-Fi Blue-Purple Theme
All section headers and the Tab container now use a consistent dark sci-fi blue-purple palette:
| Area | Color |
|---|---|
| Shader Properties header | Deep navy #1E2860 |
| CUA header | Deep purple #731A8C |
| Clothing header | Deep blue-violet #381485 |
| Skin header | Deep cyan-blue #006BA6 |
| Tab container background | Deep blue-black #121733 |
| Tab inactive text | Semi-transparent blue-grey |
| Tab active text | Bright cyan-blue |
✦ Full Configuration Example: Clothing Shader
Demonstrates label grouping / two-column layout / keyword / time animation / vector4
JSON:
[
{ "name": "", "displayName": "─── Colors ───", "type": "label", "defaultColor": "#1a1a2e", "height": 42 },
{ "name": "_Color", "displayName": "Base Color", "type": "color", "defaultColor": "#888888" },
{ "name": "", "displayName": "", "type": "column" },
{ "name": "_Metallic", "displayName": "Metallic", "type": "float", "defaultValue": 0.8, "minValue": 0.0, "maxValue": 1.0 },
{ "name": "_Smoothness", "displayName": "Smoothness", "type": "float", "defaultValue": 0.6, "minValue": 0.0, "maxValue": 1.0 },
{ "name": "", "displayName": "─── Textures ───", "type": "label", "defaultColor": "#1a2e1a", "height": 42 },
{ "name": "_MainTex", "displayName": "Albedo", "type": "texture", "wrapMode": "Repeat" },
{ "name": "_BumpMap", "displayName": "Normal Map", "type": "texture", "wrapMode": "Repeat" },
{ "name": "_UseNormal", "displayName": "Enable Normal", "type": "toggle", "defaultValueBool": true, "keyword": "USE_NORMAL_MAP" },
{ "name": "", "displayName": "─── Dynamic ───", "type": "label", "defaultColor": "#2e1a2e", "height": 42 },
{ "name": "_CustomTime", "displayName": "Time Animation", "type": "time" },
{ "name": "_TilingOffset", "displayName": "Tiling/Offset", "type": "vector4",
"defaultVector4": { "x": 1.0, "y": 1.0, "z": 0.0, "w": 0.0 },
"minVector4": { "x": 0.1, "y": 0.1, "z": -2.0, "w": -2.0 },
"maxVector4": { "x": 10.0, "y": 10.0, "z": 2.0, "w": 2.0 } }
]
✦ Demo Video
