Tiles not loading at edge of render area

I’m seeing an issue when rendering where tiles aren’t loading in during the render. The tiles will eventually load after several frames. I’ve seen a few issues related to this on the forum, but I haven’t been able to fix my issue with any of those solutions. Here’s what I’ve tried:

  1. I’ve made sure my level sequence is in the level. I even created my level sequence in the same way recommended here: UE 5.1 rendering with movie render queue, tiles not loading in time
  2. I’ve enabled Forbid Holes.
  3. I’ve increased Maximum Simultaneous Tile Loads.
  4. I’ve increased Maximum Cached Bytes.

See the attached image for an example of the the type of error I’m seeing. If you look on the top and bottom you’ll see areas where the tile hasn’t loaded in.

edit: fixed a few typos

Much to our frustration, Unreal Engine provides us with no way to determine the dimensions of the output render when using Movie Render Queue, and thus we can’t determine its aspect ratio. So if your video has an aspect ratio other than the usual 16:9 ratio of 1920x1080, you can end up with artifacts like this. The only way around this currently is to use the CesiumCameraManager to define a custom camera that reflects the position, orientation, width, and height of the actual view used to record the video. There are some more details in the PR that added the camera manager functionality:

Perfect! Yes my aspect ratio is definitely non-standard. I’m a little new to Unreal, so I have a quick follow up question. It was my understanding that blueprints run during the execution of the game. It seems like for this solution to work the blueprint would have to be run during the movie render. Is there a way to get that to happen without activating the movie render through the blueprint?

I just tried it out and confirmed that Level Blueprints are executed while recording with the Movie Render Queue. I think when a Level Sequence is running, it’s similar to a “Play in Editor”.

I’ve never actually tried myself to use the CesiumCameraManager to deal with Movie Render Queue aspect ratio problems (though Nithin did when he first added the feature), so I thought I’d try it. There were some unexpected gotchas, but it worked well enough in the end. Here’s what I did.

First I added a new Level Sequence and added a Cine Camera Actor to it. I set up a simple flight for the camera with two keypoints. Rendering with the Movie Render Queue now works fine, because the default CineCameraActor has a 16:9 aspect ratio.

So let’s break it by changing that. Here I simply reversed the Sensor Width and Sensor Height properties on the Cine Camera Actor, giving it a 9:16 aspect ratio instead:

image

And I also changed the Output Resolution in the Movie Render Queue settings to 1088x1920? Why 1088 instead of 1080? Well, I initially used 1080, but when I did the render, MRQ printed a message to the log every frame complaining that it should be 1088 instead. Presumably based on the aspect ratio of the CineCameraActor.

With those changed, if we now render with the Movie Render Queue, we have problems:

We can use the CesiumCameraManager to fix this. First, drag the CesiumCameraManager from the Outliner into the Sequence.

Then click + Track and choose Event TrackRepeater. Right click on the new “Events” section and go to Edit Section and then, for the Event property, choose Create New Endpoint. The “Director Blueprint” will open and a new SequenceEvent_0 will be added to the canvas. You can rename this to something more meaningful, like UpdateCesiumCamera. This event will be invoked every frame (at least, every frame that the track/section covers, which should be the entire sequence by default), and we’ll use it to update the Cesium camera parameters.

Modify your Director Blueprint to look like this:

You can create the “Get Sequence Binding” nodes by dragging the CineCameraActor and CesiumCameraManager from the Sequence window into the Director Blueprint. You’ll need to add a new variable named CameraID of type Integer.
image

Give the CameraID variable a default value of -1:

The idea here is that every frame we get the current location and orientation of the CineCameraActor. Then we either Add Camera on the CesiumCameraManager (if a camera doesn’t yet exist) and store the ID in the CameraID variable, or we update the existing camera using the previously-set CameraID.

On the Make CesiumCamera node, the Viewport Size should match the Output Resolution you provided to the Movie Render Queue. You can copy the Field Of View Degrees value from the Current Horizontal FOV property on the CineCameraActor:
image

With those changes, we should now be able to successfully render a movie with the custom aspect ratio:

2 Likes

That worked perfectly. Thank you so much!

Hi Kevin! Thank you for this solution. Since I do not work with Blueprints I cannot easily copy/paste from the image you attached. Is there a way you could add this Blueprint here so we can simply copy and paste it to UE? https://blueprintue.com/

Sorry I don’t have this Blueprint handy anymore. Perhaps someone else here has recreated it and can paste it into that site for you?