Sequence Recorder not recording Material Instance Dynamic

I was trying to record a sequence but failed. I was using a BP Character with Material Instance Dynamic created and applied. In the MID, there is a parameter which is tweaked per tick and drives WPO. Basically, a Zen Garden fish, except I’m using skeletal mesh with a swim forward animation. I wanted to record a sequence with me piloting the BP Character, swimming, turning.

In PIE, everything seemed fine. But when I play the recorded sequence (in editor or in PIE), the WPO is gone. When the fish turns, it’s just rotating bluntly.

For now, I have a workaround, which is to create a new actor that calculates its delta transform and set WPO based on that; with that attached to the recorded character and the visibility of the recorded character turned off, I have a close replication of what I wanted to record. But the “overhead” is enormous…

Sorry if it doesn’t seem like a question… But I’m sure you get what I mean…

Hey Vito, have you been able to figure it out ? I have the exact same problem with a ship and a dynamic water calls from every tick. When I’m recording everything is fine but when watching recorded sequences, waves aren’t there anymore and ship is just floating in the air. So i’d love to hear your solution if you figured it out.

And i wonder, is there a simple way to record gameplay in Unreal ? Or all we got is the sequence recorder ? Can we just place a camera in the scene and record everything ?

There still seems to be no way to have Sequence Recorder record MID parameters in 4.21.

Hi necromancers.
Anything new in here? I have this exact problem. I am trying to implement a sequence recording from BP and I can’t find a way to record any changes in materials, since I am not able of exposing the dynamic material created inside the blueprint.
Thanks!

Bump on this.
It’s kinda annoying 4 years later we still don’t have a way to do this.

I think I’m getting a similar if not the same issue. I am manipulating a material instance dynamic inside a blueprint and using the take recorder to record. Everything looks fine when playing in editor and when recording. When I come to playback the recording I can see most (I have issues with child actors not playing anything back including transform data, but I believe thats a separate issue as I can see those child actors transforms working as they should in the recording, only thing common to both is that the material instances are not working) things playing back as intended except for the material instance dynamic remains at default settings.

Anyone managed to get this working? Can we get any update from Epic about this?

Hello there,

First post here so please excuse any misstep :slight_smile:

I’ve spent the week on the same issue and I figured I would post a solution I think might work.

Before I start, all the credit to that video that triggered a Eureka moment for me: https://www.youtube.com/watch?v=qt3x64Grlq0

So to make this work with the take recorder you will need:

  • A material with your parameter definition
  • A material Instance (that step might be optional) with the parameter checked
  • Your blueprint with your object and the material instance associated
  • A variable for each parameter you want to change. That variable needs to be exposed to Cinematics and Instance Editable
  • A function for each variable, starting with “Set” and then the name of the variable (what is commonly called a setter)

Here is a simple example step by step (sorry I had pictures ready but since it’s my first post, well, I can’t post them…):

First create a new Material (with a single RGB parameter)

Then create a new Material Instance (in content browser, right click on the Material you just created, create Material Instance)

After that, create a new blueprint and add a simple sphere static mesh.
In the details, set the sphere material to the material instance you’ve just created.
Add a Linear Color variable, named NewColor and set the Instance Editable and Expose to Cinematics flags for the variable (in the variable details).

Create a new function named after the variable (in my case SetNewColor) that has an input with the same type (here Linear Color).
Make sure to check “Call in Editor” in the details of the function.

In the function itself set the value of the variable and call the Set Parameter function directly on the static mesh

In the event graph, call the function after a delay of 5 seconds after receiving the event Begin Play

(Nothing in the constructor)

At that point if you drag and drop your BP into the take recorder, hit the play button, start recording, wait for the color to change and stop the game.

When you review the sequence you should see the NewColor variable changing after a few seconds.

The NewColor variable will evaluate to the Set Function, allowing the BP to call the Set Parameter. The sphere will change color as the NewColor variable gets updated.

Note 1: It’s good practice to have setters - even outside of this use case. In this use case it’s quite interesting because it’s not a code that is specific to the Take recorder or the sequencer, so the code (BPs) remains clean
Note 2: you can adapt this functionality to pretty much anything you want, not just changing material colors
Note 3: Why is it not working in take recorder? Because the take recorder can only record a limited set of tracks (transform…) and the properties exposed by the BP. Changing a parameter on a material requires to call a function, which is not observed by the Take Recorder, and there are no direct reference to the parameters in materials, as they need to be updated on the Game Thread (or at least this is what I gathered from my countless hours spent reading the source code).

I hope it helped!

2 Likes

@Cazraj1 Hi! Thank you for your solution. Could you please post your pictures, or place them on external file storage and add link?

Material

Material Inst

BP

Function

Thank you @kirov08 ! Apologies for not answering sooner I didn’t get any notifications.

Thanks for posting the screenshot. The only thing I have setup differently is the function. I don’t think you should be creating the dynamic material each time the function is called. Here is how I have the function setup.

1 Like