{"id":347,"date":"2026-06-01T19:01:29","date_gmt":"2026-06-01T19:01:29","guid":{"rendered":"https:\/\/rivals2.com\/workshop-dev\/?post_type=knowledgebase&#038;p=347"},"modified":"2026-07-07T21:06:31","modified_gmt":"2026-07-07T21:06:31","slug":"animating-material-parameters","status":"publish","type":"knowledgebase","link":"https:\/\/rivals2.com\/workshop\/knowledge-base\/character-creation\/animating-material-parameters\/","title":{"rendered":"Animating Material Parameters\u00a0"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Often we want to animate a character&#8217;s materials to control visual effects. <br>A couple of common examples include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Controlling visibility of the character (or sections of it) <\/li>\n\n\n\n<li>Pan Textures<\/li>\n\n\n\n<li>Control emissive (Glow map) intensity<\/li>\n\n\n\n<li>Animate Texture Flipbooks<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/animation-curves-in-unreal-engine\" target=\"_blank\" rel=\"noreferrer noopener\">Animation Curves &#8211; Unreal Documentation<\/a><\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">This is required if you want to <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Material parameter curves need to first be added to the skeleton asset in Unreal before you can directly animate them via animation clips.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example if you want to animate a character\u2019s visibility mid animation with the \u201cDiscardUVGlobal\u201d parameter , you will need to add the name of the material parameter as a curve inside the skeleton asset as well as set the type of curve&nbsp; to Material. Any float parameter on your material instances can be animated this way.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can do this by opening the skeleton asset, and opening the Curves window<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"438\" height=\"397\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-4.png\" alt=\"\" class=\"wp-image-349\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-4.png 438w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-4-300x272.png 300w\" sizes=\"auto, (max-width: 438px) 100vw, 438px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"366\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/Screenshot-2026-06-01-132104.png\" alt=\"\" class=\"wp-image-350\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/Screenshot-2026-06-01-132104.png 768w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/Screenshot-2026-06-01-132104-300x143.png 300w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click on Add Curve<\/li>\n\n\n\n<li>Enter the name of the material parameter you would like to animate<\/li>\n\n\n\n<li>Add a check mark to the right column under type (enables material curve type)<\/li>\n\n\n\n<li>The name of the curve is critical and must match exactly the parameter name in the material instance.<\/li>\n\n\n\n<li>Only Floats can be added this way, Vectors must be animated as multiple float curves that are appended together in the material &#8211; existing ROA2 Materials do not have any such vectors.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"513\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-5-1024x513.png\" alt=\"\" class=\"wp-image-351\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-5-1024x513.png 1024w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-5-300x150.png 300w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-5-768x385.png 768w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-5.png 1055w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add the parameter curve to your animation clips by clicking the add curve button, you can then preview and animate the material in real time directly in the editor.<\/li>\n\n\n\n<li>If you wish to animate these values outside of Unreal you can add them as  blank Shape Keys in Blender, you will need one shape key named for each of the material parameters you intend to use. We aren\u2019t actually going to animate Morph targets with these, instead we will use their imported curves to control material parameter animations. Because we are using Shape keys we will need to enable \u201cImport Morph Targets\u201d on our animation files.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1022\" height=\"411\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-12.png\" alt=\"\" class=\"wp-image-364\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-12.png 1022w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-12-300x121.png 300w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-12-768x309.png 768w\" sizes=\"auto, (max-width: 1022px) 100vw, 1022px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you animate your materials in blender, ensure that you set your Animations to Import Custom Attributes on import to Unreal.<\/li>\n\n\n\n<li>If you do not set \u201cDelete custom Attributes\u201d unreal will only import your custom attribute curves on initial import, and will ignore them on subsequent reimports so be sure to enable this as well.&nbsp;<\/li>\n\n\n\n<li>Animating materials outside of Unreal can be tricky due to a lack of real time previewing of the material &#8211; unless you set up your own custom materials for this in blender.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Animation Modifier Blueprints<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You may experience unpredictable behavior if only certain animation clips contain curves for a material parameter. Ensure that all clips contain at least a single keyframe on all animated material parameter curves to explicitly set the parameter to the intended value on all states.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"590\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-6-1024x590.png\" alt=\"\" class=\"wp-image-352\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-6-1024x590.png 1024w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-6-300x173.png 300w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-6-768x443.png 768w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-6.png 1448w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You can use <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/animation-modifiers-in-unreal-engine\" target=\"_blank\" rel=\"noreferrer noopener\">Animation Modifier Blueprints<\/a> to quickly add curves to animations in bulk, refer to BP_Zet_AddCurves in Zetterburn&#8217;s animation folder for a working example.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"1024\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-7-638x1024.png\" alt=\"\" class=\"wp-image-353\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-7-638x1024.png 638w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-7-187x300.png 187w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-7-768x1233.png 768w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-7.png 889w\" sizes=\"auto, (max-width: 638px) 100vw, 638px\" \/><figcaption class=\"wp-element-caption\">Select your animation clips, right click and navigate to Animation modifiers to manage assign, apply, remove or otherwise manage your animation modifiers.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"626\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-8-1024x626.png\" alt=\"\" class=\"wp-image-354\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-8-1024x626.png 1024w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-8-300x183.png 300w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-8-768x469.png 768w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-8-1536x939.png 1536w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-8.png 1999w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">You can also manage modifiers by opening an animation clip and opening the animation Data Modifier window<\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Animate Materials Via Blueprint Logic <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Material Parameter Curves in the skeleton act globally on all materials assigned to that skeletal mesh.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to target only specific materials you can achieve this in the character\u2019s Blueprint Renderer.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of relying on the skeleton to pass animation curves to the materials we can use blueprint logic to achieve the same thing targeting only specified material slots.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Clairen\u2019s blueprint renderer has an example of this method being used to read a custom animation curve and apply it to the visibility of her plasma blade as well as the emissive effect on her visor.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"755\" height=\"641\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-9.png\" alt=\"\" class=\"wp-image-355\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-9.png 755w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-9-300x255.png 300w\" sizes=\"auto, (max-width: 755px) 100vw, 755px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Open your character renderer blueprint and select the root node.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Search &#8220;Slot Group&#8221; in the details panel with the root node selected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Add Group names for the different sections you want to control, and then add material slot names to those groups. In the example above the VisorGroup controls emissive on Clairen&#8217;s Visor, and contained within the group is her &#8220;Visor&#8221; material slot. This refers to the Visor Slot on her default skin skeletal mesh.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"949\" height=\"94\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-10.png\" alt=\"\" class=\"wp-image-356\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-10.png 949w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-10-300x30.png 300w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-10-768x76.png 768w\" sizes=\"auto, (max-width: 949px) 100vw, 949px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Finally we can add node logic in our Rivals Character Renderer blueprint to read the animation curve value and use them to control parameters on the materials assigned to these slot groups.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-174.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"434\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-174-1024x434.png\" alt=\"\" class=\"wp-image-1651\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-174-1024x434.png 1024w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-174-300x127.png 300w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-174-768x326.png 768w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-174.png 1473w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"658\" height=\"339\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-176.png\" alt=\"\" class=\"wp-image-1654\" srcset=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-176.png 658w, https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-176-300x155.png 300w\" sizes=\"auto, (max-width: 658px) 100vw, 658px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In the example of Clairen&#8217;s Visor glow above, (Her visor emissive deactivates during her fully charged  FSpecial):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A shape key named &#8220;VisorGlow&#8221;, is added to Clairen&#8217;s rig animated is animated from 0-1 in Blender.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The VisorGlow animation curve is imported into unreal along with her animation sequences.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A Material Slot Group named &#8220;VisorGroup&#8221; containing her visor material slot is added to her blueprint renderer.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"268\" height=\"184\" src=\"https:\/\/rivals2.com\/workshop\/wp-content\/uploads\/2026\/06\/image-175.png\" alt=\"\" class=\"wp-image-1652\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Using the Set Parameter from Anim Curve node, logic is added to her renderer to read the VisorGlow Curve, and apply the value from it to the &#8220;EmissiveActive&#8221;  parameter on any materials assigned to slots listed in the &#8220;VisorGroup&#8221; material slot group.<\/p>\n\n\n\n<p class=\"is-style-text-annotation has-accent-1-background-color has-background is-style-text-annotation--1 wp-block-paragraph\">Note: You are not limited to controlling parameters through animation, any values accessible in the blueprint renderer can be passed into these nodes to drive material parameter values.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Often we want to animate a character&#8217;s materials to control visual effects. A couple of common examples include: Animation Curves &#8211; Unreal Documentation<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","template":"","knowledgebase_cat":[4],"knowledgebase_tag":[],"class_list":["post-347","knowledgebase","type-knowledgebase","status-publish","hentry","knowledgebase_cat-character-creation"],"_links":{"self":[{"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/knowledgebase\/347","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=347"}],"version-history":[{"count":9,"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/knowledgebase\/347\/revisions"}],"predecessor-version":[{"id":1656,"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/knowledgebase\/347\/revisions\/1656"}],"wp:attachment":[{"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/media?parent=347"}],"wp:term":[{"taxonomy":"knowledgebase_cat","embeddable":true,"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/knowledgebase_cat?post=347"},{"taxonomy":"knowledgebase_tag","embeddable":true,"href":"https:\/\/rivals2.com\/workshop\/wp-json\/wp\/v2\/knowledgebase_tag?post=347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}