{"id":205,"date":"2026-05-29T18:59:12","date_gmt":"2026-05-29T18:59:12","guid":{"rendered":"https:\/\/rivals2.com\/workshop-dev\/?post_type=knowledgebase&#038;p=205"},"modified":"2026-07-08T16:53:09","modified_gmt":"2026-07-08T16:53:09","slug":"setting-up-dynamic-colors","status":"publish","type":"knowledgebase","link":"https:\/\/rivals2.com\/workshop\/knowledge-base\/character-creation\/setting-up-dynamic-colors\/","title":{"rendered":"Dynamic Color Palettes (Custom Color System)"},"content":{"rendered":"<section class='bpress-notice has-title has-icon is-style-warning'><div class=\"bpress-notice-icon\"><span class=\"bp-exclamation-circle\"><\/span><\/div><div class=\"bpress-notice-title\">Warning<\/div><div class=\"bpress-notice-content\">This article is a stub! We&#8217;ll have more info on this topic coming soon.<\/div><\/section>\n\n\n\n<p class=\"wp-block-paragraph\">Palettes can be set up using either a static method: <br>Base Color Map (a separate base color <strong>Texture<\/strong> and <strong>Material Instance<\/strong> are created and assigned per-palette as outlined in the <a href=\"https:\/\/rivals2.com\/workshop\/knowledge-base\/character-creation\/color-palettes-setup\/\" data-type=\"knowledgebase\" data-id=\"599\">Color Palette Section<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Or a dynamic method:<br>A set of Color Map (_CM) <strong>Textures<\/strong> are assigned to a Single <strong>Material Instance<\/strong> across all palettes, and then using a PS_ (PaletteSkin) data file to modify the colors at runtime.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the base game the dynamic method is used for all character and item content.&nbsp;You can determine which method you prefer but it&#8217;s recommended to only approach the dynamic method once you are comfortable with the rest of the character art process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Benefits of the dynamic method include:<br>Less file management, since you aren&#8217;t creating new textures or material instances per palette.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Smaller download size, all palettes can use the same set of masks, and color definitions files are tiny compared to textures. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Overview:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ensure that all of your skeletal mesh have appropriately named Material slots. Be aware that if two <strong>Skeletal Mesh<\/strong> share a material slot name those slots will also share color definitions.<\/li>\n\n\n\n<li>Create up to 3 Custom Color Map textures (_CM _CM2 _CM3) per <strong>Material Instance<\/strong><\/li>\n\n\n\n<li>Import the textures to unreal and ensure that their compression type is set to mask (Select textures, right click, scripted actions Automatic Texture Settings if you followed correct naming conventions.)<\/li>\n\n\n\n<li>Assign these maps to your <strong>Material Instances<\/strong>, <\/li>\n\n\n\n<li>Assign the <strong>Material Instances<\/strong> to your <strong>Skeletal Mesh<\/strong> material slots. <\/li>\n\n\n\n<li>Set the CustomColor Parameters of your <strong>Material Instance<\/strong>s to preview their effects on your mesh.<\/li>\n\n\n\n<li>Right click on the Skin data Blueprint and go scripted actions\/Populate Custom Color Params. This will generate lists of material slots on each Skeletal Mesh associated with the skin and the custom color parameters for each of these slots. You can also do this manually if needed. You may also controls colors other than Custom Color, for example you may want to control emissive or fresnel color parameters.<\/li>\n\n\n\n<li>Open the Skin Data Blueprint and give appropriate names to the Custom color entries (Names are completely arbitrary so choose something descriptively useful)<\/li>\n\n\n\n<li>Right click on the CS_ Blueprint Files and go scripted actions, Import Custom color entries, this will populate your PS_ files (PaletteSkin) with the entries defined in the Skin Data Blueprint. The PS_ data files store lists of colors and the Color Names used to invoke them.<\/li>\n\n\n\n<li>Open the photobooth, load the palette you would like to edit and begin assigning colors as you like.  Save when you are finished.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Color Mask Textures (_CM)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#fb0000\" class=\"has-inline-color\">Ensure that Custom Color Map Compression is set to \u201cMask\u201d in Unreal<\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you wish to use the dynamic recoloring system to create alt color palettes, you must use Custom Color Maps instead of a Base Color map.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Custom Color Masks use the separate RGB channels of the textures to build up areas of color on the model.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each channel correlates to one of the \u201cCustomColor\u201d Parameters in the material that allow you to dynamically color your materials. Each one blends over top of the channels before like layers in a stack, if any channel above is occupied it will obscure the ones below. Gradients and blending are possible. Values less that full white will begin to reveal the layers below, and fully black regions will have no effect.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you followed the guide on painting your Base Color Map texture you should have your Colors isolated on separate layers in your file. You can now use these layers to build up your Custom Color Maps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"974\" height=\"839\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-10.png\" alt=\"\" class=\"wp-image-177\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-10.png 974w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-10-300x258.png 300w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-10-768x662.png 768w\" sizes=\"auto, (max-width: 974px) 100vw, 974px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>UseCMMap &#8211; Disables the CM Map &#8211; Useful if you wish to use only a single color.<\/li>\n\n\n\n<li>ColorRegionMask &#8211; Assign the first Color Map Texture &#8211; Custom Colors X-2<\/li>\n\n\n\n<li>Use2ColorMasks &#8211; Enable use of the second color map <\/li>\n\n\n\n<li>ColorRegionMask2 &#8211; Assign the Second Color Map Texture &#8211; Custom Colors 3-5<\/li>\n\n\n\n<li>Use3ColorMasks &#8211; Enable use of the third color map<\/li>\n\n\n\n<li>ColorRegionMask3 &#8211; Assign the Third Color Map Texture &#8211; Custom Colors 6-8<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The masks are listed in ascending order<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CustomColorX &#8211; Sits beneath ALL Color Masks <\/li>\n\n\n\n<li>CustomColor0 &#8211; R Channel of Color Mask 1<\/li>\n\n\n\n<li>CustomColor1 &#8211; G Channel of Color Mask 1<\/li>\n\n\n\n<li>CustomColor2 &#8211; B Channel of Color Mask 1<\/li>\n\n\n\n<li>CustomColor3 &#8211; R Channel of Color Mask 2<\/li>\n\n\n\n<li>CustomColor4 &#8211; G Channel of Color Mask 2<\/li>\n\n\n\n<li>CustomColor5 &#8211; B Channel of Color Mask 2<\/li>\n\n\n\n<li>CustomColor6 &#8211; R Channel of Color Mask 3<\/li>\n\n\n\n<li>CustomColor7 &#8211; G Channel of Color Mask 3<\/li>\n\n\n\n<li>CustomColor8 &#8211; B Channel of Color Mask 3<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Using all 3 color masks plus CustomColorX allows up to 10 individual color definitions per material.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you need more colors than this, consider breaking up your model to use multiple materials.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note that masks should usually be ordered by most coverage to least coverage, like a pyramid. Neighboring region Masks should usually include a bit of color bleed to eliminate compression artifacts between masked areas. If a character has a pattern like fur with spots or stripes, it&#8217;s a good idea to make these masks in sequence for the same reason (Example Base Fur on CustomColor1, spots on CustomColor 2. and have the base fur fill in beneath the spots as well)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With the masks in place custom colors can now be selected in the material or in the skin data file and palettes instead of authoring separate textures per palette.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Skin Data<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open the Skin Data file and navigate to the <strong>Colors<\/strong> section.<\/li>\n\n\n\n<li>Open up the <strong>Base Material Slots<\/strong> section\n<ul class=\"wp-block-list\">\n<li>Hit the <strong>+<\/strong> to add a material slot name that you wish to recolor. (ex:Body)<\/li>\n\n\n\n<li>This will affect ALL material slots with this name across all of your skeletal meshes including mesh effects and articles.<\/li>\n\n\n\n<li>Expand the Material Parameters and add CustomColor Parameter names (X-8) and then assign an arbitrary color name for the associated mask. (If the mask is defining the boots region call the color \u201cBoots\u201d)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"497\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-26-1024x497.png\" alt=\"\" class=\"wp-image-206\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-26-1024x497.png 1024w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-26-300x146.png 300w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-26-768x373.png 768w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-26.png 1168w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Left panel is the Skin Data file &#8211; showing Color associations Right panel is the PS (Palette Skin) file containing the color definitions<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the example image above any material instances assigned to Material Slots Named \u201cClothing\u201d will receive the following colors based on these definitions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CustomColorX (Empty space of all color mask textures) will apply \u201cBelt\u201d Color<\/li>\n\n\n\n<li>CustomColor0 (R Channel of CM texture) will apply \u201cBelt\u201d Color&nbsp;&nbsp;&nbsp;<\/li>\n\n\n\n<li>CustomColor1 (G Channel of CM texture) will apply \u201cTrim\u201d Color<\/li>\n\n\n\n<li>CustomColor2 (B Channel of CM texture) will apply \u201cBelt\u201d Color<\/li>\n\n\n\n<li>CustomColor3 (R Channel of CM2 texture) will apply \u201cGloves\u201d Color<\/li>\n\n\n\n<li>CustomColor4 (G Channel of CM2 texture) will apply \u201cGloves\u201d GloveTrim<\/li>\n\n\n\n<li>CustomColor5 (B Channel of CM2 texture) will apply \u201cGloves\u201d Boot&nbsp; Etc.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For quick editing Create a list of every custom Color slot and Copy and paste it under each material slot name, unused parameters can simply be left with the name none.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ProTip: Multiple Material slots and parameters can sample the same Color name in order to share color across those areas, if your character has a material for a hat and clothing, but you want them to use the exact same blue for both, name the parameter Cloth for each and they will both sample the \u201cCloth\u201d Color.<\/li>\n\n\n\n<li>Once you have defined all of your colors, compile and prepare to transfer these definitions to the PS files.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Assign palette files<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">By default the newly created palette files will be assigned in your Color slot Data.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"603\" height=\"91\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-169.png\" alt=\"\" class=\"wp-image-1616\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-169.png 603w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-169-300x45.png 300w\" sizes=\"auto, (max-width: 603px) 100vw, 603px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">However you can replace these as you see fit. Some Palettes are shared across the base cast, so you could for example assign the shared retro, champion, or other palettes, or create your own to reuse color sets across multiple skins (this only works if your skin color definitions are setup appropriately)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Base Color Palette &#8211; This is the palette used by the default skin. Contributes all color information used for the default. These colors are assigned to any color slots defined in the skin data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Skin Color Palette &#8211; This acts as an override for alt skins, if a matching definition exists in both entries the Skin color palette will be used. <br>This is mainly used to add custom color to clothing or accessories added on an alt skin, while preserving the main body or hair colors assigned to the default.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Elemental Palette &#8211; Mainly used for coloring VFX, broadcasts values to all materials for the character globally and therefore can be used to globally control other effects such as outline colors.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">PS (Palette Skin)&nbsp;<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"590\" height=\"1024\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-28-590x1024.png\" alt=\"\" class=\"wp-image-208\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-28-590x1024.png 590w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-28-173x300.png 173w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-28-768x1332.png 768w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-28-886x1536.png 886w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-28.png 922w\" sizes=\"auto, (max-width: 590px) 100vw, 590px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The PS file is where a skin\u2019s palette color definitions are stored.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They are defined in the skin data file and should reflect those entries.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Altering these colors will change the colors the character will load in with.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each entry in this list is a Color Name Definition<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If color names are changed, added or removed from the Skin data file the PS file does not automatically update to reflect these changes.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To <strong>auto populate or synchronize<\/strong> the PS file with the named entries from the Skin Data file, <strong>right click on the appropriate CS file<\/strong> with the target PS file assigned to it and run the scripted asset action: \u201cImport Custom Color Assignments\u201d<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select the CS file, right click&gt;scripted asset actions&gt;Import Custom Color Assignments<\/li>\n\n\n\n<li>Now type in the name of your skin and select your skin data file.<\/li>\n\n\n\n<li>You have now added your color slots to your PS files and can begin customizing your colors.<\/li>\n\n\n\n<li>If names have been removed or added to the skin data since last running this script, run it again to reflect those changes. If you wish to rename a slot you may consider renaming it in the PS files before running this script to preserve your color choices.<\/li>\n\n\n\n<li>Head to the photobooth and start picking colors<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"719\" height=\"395\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-27.png\" alt=\"\" class=\"wp-image-207\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-27.png 719w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-27-300x165.png 300w\" sizes=\"auto, (max-width: 719px) 100vw, 719px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">PE (Palette Elemental)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This file is similar to the PS file except that it is universally broadcast to all material slots regardless of naming.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Usually relegated to coloring VFX but can be used to color any parameters or you like.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Photobooth Color Editing<br><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open the <strong>Photobooth Level<\/strong> to start customizing your colors with real time previews.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click the camera to use the tool.<\/li>\n\n\n\n<li>On the right, under <strong>Custom Color Viewer<\/strong>, choose the skin and color slot you want to customize and hit <strong>Load Skin and Color Slot<\/strong>&nbsp;<\/li>\n\n\n\n<li>Hit <strong>G<\/strong> to hide the camera, in order to focus on the skin. You could always go to the top right and click <strong>BP_RivalCapture<\/strong> if you accidentally click off of the tool.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"1024\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-30-901x1024.png\" alt=\"\" class=\"wp-image-211\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-30-901x1024.png 901w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-30-264x300.png 264w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-30-768x873.png 768w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-30-1352x1536.png 1352w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-30.png 1403w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If done right, we should be looking like this.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A blank character waiting to have their colors selected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once you\u2019re done making your choices hit <strong>Save SkinCustomColor and Save ElementalCustomColorSlot. <\/strong>Make sure you save your palette before loading a different skin or leaving the scene!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ProTip:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can copy (Shift+RClick) and paste (Shift+LClick) colors in the UI.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can also save preset colors that you use often to a shelf.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"987\" height=\"797\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-29.png\" alt=\"\" class=\"wp-image-210\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-29.png 987w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-29-300x242.png 300w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/05\/image-29-768x620.png 768w\" sizes=\"auto, (max-width: 987px) 100vw, 987px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You can also copy and paste entire sections of data by shift click or right clicking on the heading.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Palettes can be set up using either a static method: Base Color Map (a separate base color Texture and Material Instance are created and assigned per-palette as outlined in the Color Palette Section). Or a dynamic method:A set of Color Map (_CM) Textures are assigned to a Single Material Instance across all palettes, and then [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","template":"","knowledgebase_cat":[4],"knowledgebase_tag":[],"class_list":["post-205","knowledgebase","type-knowledgebase","status-publish","hentry","knowledgebase_cat-character-creation"],"_links":{"self":[{"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/knowledgebase\/205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/knowledgebase"}],"about":[{"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/types\/knowledgebase"}],"author":[{"embeddable":true,"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/comments?post=205"}],"version-history":[{"count":14,"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/knowledgebase\/205\/revisions"}],"predecessor-version":[{"id":1663,"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/knowledgebase\/205\/revisions\/1663"}],"wp:attachment":[{"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/media?parent=205"}],"wp:term":[{"taxonomy":"knowledgebase_cat","embeddable":true,"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/knowledgebase_cat?post=205"},{"taxonomy":"knowledgebase_tag","embeddable":true,"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/knowledgebase_tag?post=205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}