Portal cutscene

When making cutscene in Godot, what be best practice to give it cinematic feel ?

I have this simple third person game that have portal as door to next level, player collects crystals from chests to open them .

The portal is just stones with plane and shader.

Should I implement on overall scene the GDScript to trigger it once player got all crystals and is in area3d of portal?
What I need is animate camera fly and player custom animation for scene , with particle effects .

This could be overall expensive, but also I thought baking it into movie could be worse as Godot not have great support for video assets.

Some recommendations for how to handles it, best if I can keep it friendly for web export.

Videos are generally going to be significantly larger than using in-game assets. If you use the assets as part of your game then they are essentially free as far as size comparisons go. Particle effects will perform much worse on video, requiring intense bit-rates to look okay so again you’ll end up with a huge video file size.

You can make a new scene and/or use an AnimationPlayer node to animate a cutscene. If you are having CPU/GPU performance issues you should look at the profiler

5 Likes

I would say that these days, unless you are creating games with a very specific look or feel or for a very constrained setup (like a fixed resolution) pre-renders are almost never worth it, they made a lot of sense back when real time rendering of graphics was impossible or impractical, but arguably more importantly, when resolutions were very fixed and small in scope.

While Godot offers various upscaling options, and you can opt for rendering the cinematic at a much higher resolution than you expect most users to have and downscale, that is putting a lot of data in the project that won’t be used for the most part.

These days I’d also say that people might react to the difference between the rendering quality and details of pre-renders when they clash with the actual gameplay, unless again you are going for a specific style

And echoing the part above, a very detailed video will suffer from compression limitations and be very large, this is especially critical as you are talking about targeting the web, where large assets can be a problem for performance, especially with download times

And aside from the very limited video playback support in Godot (there are plugins though I believe that add additional formats)

That’s just my few cents on it, in summary for the tl;dr;

  • Pre-renders suffer from the unpredictability of resolutions the game will be played on, if you don’t strongly limit the configurations or use a fixed aspect ratio (in which case you can freely scale it, with some limitations and caveats)
  • File size, especially on web and mobile platforms, as well as bitrate considerations depending on platform and hardware (mobile should handle this well as it’s part of the general target functionality), making it potentially counterintuitively more limiting on some hardware
  • The contrast between pre-rendered content and the actual gameplay, especially on low-end devices or low settings, this can be less of a factor if the game leans into stylized things, or uses it sparingly. I’d especially caution against using it as the first impression for the game
  • Limited support for formats, and hardware acceleration AFAIK
4 Likes

Question regarding camera override

Do I need to make singleton camera controller or use UI method call ( this handles pause , options , change of level - but have no direct access to player camera ) to override players camera during last interaction with stone ?

Here is starting level with primitives , for open chest and portal I use animation_player as it’s easier to call methods at specific time rather then making timers .

The idea would be give spectator view camera follow the crystal insert .

Just use another camera.

4 Likes

If you want the current camera to go from the player’s perspective to a specific location you will have to use Tweens, since the animation start position depends on the player’s position, which you cannot know before the game starts when creating animations.

3 Likes

Simplest solution :ok_hand:
Some tip how to get follow the prism but not rotation?

Using class_name for Portal and Player helped, also there is similar logic already build by GDTV which I borrowed.

Parent thw prism to a dummy node 3d. Use that node to move it but rotate the prism itself without moving it, i.e. decompose position and rotation into two nodes.

Parent a new dummy camera to that dummy node and position/ orient it so it looks at the prism as you’d ideally want to.

So now you have 3 cameras. The dummy one is just for easier adjustment of the view.

When the cutscene starts, assign the player camera’s transform to the cutscene camera’s transform.

For the duration of the cutscene, each frame interpolate the cutscene camera’s transform a tiny bit towards the dummy camera’s transform.

2 Likes

I have lost a bit here.
Actually two cameras are interpolated inside player screen for smooth and 3rd person.

The extra camera is ( dummy) for cut_scene live inside portal scene .

So should I use node transform and interpolation for camera from decomposed node from “prism node3d parent “ right ?

The dummy camera’s purpose is just to have a transform towards which the actual cutscene camera is interpolated. Technically, a plain transform node could be used instead but having it as a camera lets you adjust the wanted view at the prism. The actual cutscene camera then tries to smoothly keep up with that. How swiftly it’ll keep up depends on the interpolation amount you do per frame.

There are other ways to do it as well. The simplest is to just animate the camera manually. Make an exact mockup in blender if you want a specific suggestion.

1 Like

I think this is what you meant, I have used built it interpolation in animation_player for node3d so both camera and prism are smooth.

I’ll refine it later, for now I try much as core logic to get down .

The idea is to have a smooth transition between the player camera and the cutscene camera. You have a cut there now.

1 Like

Oh ok , get it .

That’s why two node3d :+1:

So in the end used tween_property with global_transform stored from current active camera which is used before and after animation finished.

@normalized @gertkeno
Thank you for all advice .:+1: