Skip to content

Releases: ramokz/phantom-camera

v0.8.2.3

04 Feb 13:26
3592ab7
Compare
Choose a tag to compare

🐛 Fixes

  • Resolved an unintended crash when closing the editor. This resulted in some editor features like Reload Current Project not working correctly. The issue was caused by the Phantom Camera Manager singleton being automatically freed before Phantom Camera scene nodes, who reference the manager whenever they are freed (#389).

v0.8.2.2

22 Dec 19:58
Compare
Choose a tag to compare

🐛 Fixes

  • Fixed an issue where calling quit() could trigger an error and crash the game client in some scene hierarchy structures.

v0.8.2.1

22 Dec 15:46
Compare
Choose a tag to compare

🐛 Fixes

  • Removed an annoying warning about an invalid UID inside viewfinder_panel.tscn that triggers when opening a project (#440).

v0.8.2

15 Dec 12:42
Compare
Choose a tag to compare

✨ New Features

Axis Lock

Follow Axis Lock

This feature allows for locking the follow movement of a given PCam2D/PCam3D in a given axis. This can be applied either from the editor or during runtime (#431).

Multiple axes can be restricted at the same time.

More details can be found on the documentation page.


2D

3D
2d-lock-axis.mp4
3d-lock-axis.mp4

Thanks @JamesLoyMartin for the proposal (#424).

⬆️ Improvements

  • The viewfinder now applies the Texture Filter value that has been set inside Project Settings under rendering/textures/canvas_textures/default_texture_filter (#427).
  • Framed Follow's target position should now behave more consistently when changing the viewport to a different size than defined in display/window/size/viewport_width/height inside Project Settings (#428).
    • Thanks @TTMoon for raising the issue and providing the solution (#404).

🐛 Fixes

  • Resolved an issue where the Framed Follow dead zones would capture mouse input, preventing mouse interactions in the scene (#434)
  • Resolved an error that would occur when using Group Look At if the array size was 0.

v0.8.1

07 Dec 15:51
Compare
Choose a tag to compare

✨ New Features

3d-physics-interpolation

3D Physics Interpolation Support

Important

This is only available in Godot 4.4 or later.

Similar to #294 added physics interpolation support to PCam2Ds in 2D scenes, with the release of Godot 4.4, physics interpolation has now been added to 3D nodes, which the addon can now take advantage of (#375).

Practically, it means you can now select a PhysicsBody3D based node, such as a CharacterBody3D, as a follow or look at target without doing any extra setup like the guide on the documentation site had previously suggested.

There is still more testing to be done for this, and welcome any additional help finding where gaps remain, but this should mark a big step towards better visual camera consistency and user experience when working in 3D scenes.

⬆️ Improvements

  • Automatically sets a PCam's top_level to be true if it has a follow mode and follow target applied, and false if either are not valid. This should help prevent any parent Node2D / Node3D from causing positional changes when using a follow mode.
  • Selecting a follow target that has a parent node that is of type PhysicsBody, that does not have its top_level property set to true, will now work as if the target was a PhysicsBody.
  • Simplified process checker for Third-Person Follow. Should see a slight performance improvement.
  • Applied a default shape value to the SpringArm3D when using Third-Person Follow. This is a standard behavior when using a Camera3D with a SpringArm3D, where the Camera3D applies a specific shape under-the-hood. It should greatly improve collision detection and reduce the frequency of the Camera3D clipping through geometry. This change will only go into effect if no shape value has been applied to the shape property of a PCam3D.

🐛 Fixes

  • Resolved an issue where selecting a mixture of PhysicsBody2D/3D targets for Group Follow didn't properly update the camera's physics process mode correctly
  • Resolved an issue with a scene's performance dropping drastically when adding an Animation to an AnimationPlayer node (#420)
  • Resolved an issue with Look At Mimic not working (#425)

v0.8

19 Oct 12:24
Compare
Choose a tag to compare

🚨 Breaking Changes

  • append_look_at_targets_array used to take a Array[NodePath] as a parameter
    • Parameter now only accepts type Array[Node3D]

⚠️ Deprecated Functions & Properties

  • erase_look_at_targets_member is now deprecated
    • Use erase_look_at_targets instead.

✨ New Features

phantom-camera-noise

Phantom Camera Noise


2D

3D
2d_noise.mp4
3d_noise.mp4

Camera noise, a long requested feature, also known as camera shake, has now been added for PCam2Ds and PCam3Ds, able to affect both the rotation and position of a given PCam. The feature comes with a few additional nodes and resources that enable this functionality.

Read more on the documentation site for a better general overview.

Phantom Camera Noise Resource

Named PhantomCameraNoiseResource, is a new resource type with a 2D and 3D variant. It defines all the variables for the noise such as intensity, rotational / position multiplier and randomness seed. The noise is calculated using a perlin noise pattern.

Read more about the PhantomCameraNoise2D and PhantomCameraNoise3D on the documentation site.


Phantom Camera Noise Emitter

Named PhantomCameraNoiseEmitter, is a new node type with a 2D and 3D variant for their respective scenes. Its primary use case is to trigger noise at a given moment, by calling its emit() method, for either a specified duration or a continuous loop. It can be previewed in the editor by toggling the Preview property in the inspector.

Read more about the PhantomCameraNoiseEmitter2D and PhantomCameraNoiseEmitter3D on the documentation site.

⬆️ Improvements

  • TileMapLayer Support for the Limit Node feature
  • Active PCams' logic are now being called in the same tick as the PCamHost it belongs to, whereas previously PCams triggered their logic in their own tick, which was often not in sync with the PCamHost node. This is to better synchronize the PCam2D/3D and Camera2D/3D logic, which should further smooth out camera movement.
    • Thanks @m4rr5 for the suggestion
  • Reduced the under-the-hood complexity of the Follow (2D / 3D) and Look At (3D) logic
  • Added dead_zone_reached signal, is emitted whenever the target touches the edge of the dead zone
  • Improved the behavior of 2D Framed Follow. Should now no longer change vertical camera movement when only the horizontal dead zones are reached and vice versa

🐛 Fixes

  • Resolved a crash that would occur when freeing a parent of follow_target, follow_targets (for group follow) or look_at_target and look_at_targets (group look at) (#381)
  • Resolved error spam when changing 2D scene
  • Resolved error spam when changing 3D scene
  • Resolved an issue with getting an error spam when having an empty or a valid target not in the first array index when using Follow Group or Look At Group
  • Resolved an issue where Auto Zoom (2D) and Auto Follow Distance (3D) properties would be visible when the follow mode wasn't set to Group
  • Resolved an issue where Follow Group would be biased towards the first follow target in the array
  • Resolved a false positive error saying: get_tree: Parameter "data.tree" is null. This was due to having enabled Physics Interpolation in the Project Settings, where the addon changed the Physics Interpolation of the camera to Off for none-physics targets, when it should be Inherit (#377)

v.0.8 Beta

03 Oct 12:38
Compare
Choose a tag to compare
v.0.8 Beta Pre-release
Pre-release

Important

This beta is intended as a pre-release build to allow the community to give feedback on the upcoming version before it goes live for everyone.
The main area of feedback interest is about the Phantom Camera Noise feature (see below).

Note

The version number in plugin.cfg is purposely set to v0.7.9.
This is to allow for upgrading to v0.8 from the Beta release using the addon's updater.

Note

Feedback and comments can be shared in the discussion post found here.

🚨 Breaking Changes

  • append_look_at_targets_array used to take a Array[NodePath] as a parameter
    • Parameter now only accepts type Array[Node3D]

⚠️ Deprecated Functions & Properties

  • erase_look_at_targets_member is now deprecated
    • Use erase_look_at_targets instead.

✨ New Features

Phantom Camera Noise

A long requested feature, camera noise, also known as camera shake, is available for PCam2Ds and PCam3Ds, able to affect both the rotation and position of the PCam.

Phantom Camera Noise Resource

Named PhantomCameraNoiseResource, is a new resource type with a 2D and 3D variant. It defines all the variables for the noise such as intensity, rotational / position limits and randomness seed. The noise is calculated using a perlin noise pattern.

Both 2D and 3D Noise Resources can apply changes to position and rotation; however, it's recommended to avoid rotational noise in 3D scenes to avoid geometry clipping issues.


Phantom Camera Noise Emitter

Named PhantomCameraNoiseEmitter, is a new node type with a 2D and 3D variant for their respective scenes. Its primary use case is to trigger noise at a given moment, by calling its .emit() method, for either a specified duration or a continous loop. It can be previewed in the editor by toggling the Preview property in the inspector.

Each emitter uses a Noise Resource to define its noise pattern and only affects the PCams in the matching Noise Emitter Layers. That is to say, in order for the emitter to work both the emitter and the individual PCam node needs to have at least one matching Noise Layer

Quick Guide

There are 2 ways to apply noise to a Camera2D/3D with this system:

  1. Supply a Noise Resource to the Noise property in a given PCam directly. Doing so will make the noise run persistently without pause on that specific PCam. Note: This will only run after a tween has been completed.
  2. Add a Noise Emitter (PhantomCameraNoiseEmitter node) to the scene, assign a Noise Resource and trigger it at any time by calling its emit() function — again, it can be previewed in the viewfinder by toggling the Preview button. The Emitter can be placed anywhere in the scene tree. Note: This will impact the Camera2D/3D both when following and during a tween to a PCam if it has a matching Noise Layer.

Using External Noise Values

If the user wants to supply their own noise values, either from third-party libraries or using their scripts, then that can be achieved by calling emit_noise() from a PCam2D/3D by supplying a Transform2D or Transform3D respectively.

Examples Scenes

  • 2D - 2d_noise_example_scene.tscn
  • 3D - 3d_noise_example_scene.tscn

⬆️ Improvements

  • TileMapLayer Support for Limit Node
  • Simplified Follow (2D / 3D) and Look At (3D) logic in the tick thread
  • Added dead_zone_reached signal, is emitted whenever the target touches the edge of the dead zone
  • Improved the behaviour of 2D Framed Follow. Should now no longer change vertical camera movement when only the horizontal dead zones are reached and vice versa

🐛 Fixes

  • Resolved a crash that would occur when freeing a parent of follow_target, follow_targets (for group follow) or look_at_target and look_at_targets (group look at) (#381)
  • Resolved error spam when changing 2D scene
  • Resolved error spam when changing 3D scene
  • Resolved an issue with getting an error spam when having an empty or a valid target not in the first array index when using Follow Group or Look At Group

v0.7.3

03 Aug 12:05
Compare
Choose a tag to compare

✨ New Features

phantom-camera-attributes-environemnt

Attributes & Environment Resource Support (3D-only)

Attributes

Allows for setting and dynamically tweening between CameraAttribute resources for each PCam3D. Used to enable and transition between things like depth-of-field, i.e. camera blur, and camera light exposure.

0.7.3-attributes-resource.mp4

Note

The attribute interpolation in the video above appears instant, however, that is due to the tween duration being very short.

Important

If a CameraAttribute resource is already applied to a Camera3D node, then adding one to a PCam3D will automatically override it.
Again, using an Attribute resource in the PCam3D should be intended as a means of dynamically switching between different resources for tweens. In other words, if a project, or scene, only needs one CameraAttribute resource, then consider using a WorldEnvironemnt node or apply it directly to Camera3D node instead.

Important

Aside from a few exposure properties, any tweening between different CameraAttribute resources will only occur if the types are the same. So for best results, stick to using just CameraAttributePractical or CameraAttributePhysical.

Important

If applying a CameraAttribute resource to a PCam3D, then the Camera3D will retain the most recently applied one if the consequent active PCam3Ds have no CameraAttribute applied.
So if you want to move away from a current CameraAttribute setting, or reset it to default values, you would need to have another, active, PCam3D with another CameraAttribute resource with the desired changes / defaults.

Environment

Support has also been added for setting Environment resources for individual PCam3Ds. Unlike CameraAttributes, however, the properties here are not tweened between each PCam3D instance.

Also, like with CameraAttributes, only consider using this if there is a desire to change the environment variable per PCam3D instance. Otherwise, consider using a WorldEnvironemnt node or apply it directly to Camera3D node instead.


phantom-camera-visibility

Enable by Visibility

Disable a PCam2D/3D from activating, or deactivate an active one, by setting its visibility to false.

Works both in the editor and during runtime.

0.7.3-enable-by-visibility.mp4

⬆️ Enhancements

  • Camera3DResource properties can now be accessed and modified using the property name from a PCam3D directly, instead of having to call the getter or setter function to do the respective.
    • E.g. instead of changing the fov using pcam_3d.set_fov(value), it can be written as pcam_3d.fov = value
  • Likewise, PhantomCameraTween properties can now also be accessed and modified using properties.
    • E.g. instead of pcam_2d.set_tween_duration(value) it can be written as pcam_2d.tween_duration = value
  • Added additional checkers for the follow (2D and 3D) and look_at (3D) processes to prevent errors if the target is freed during runtime.

🐛 Fixes

  • Resolved an error log when disconnecting a signal from an addon UI node when disabling the addon (#358)

v0.7.2.1

22 Jun 17:28
Compare
Choose a tag to compare

🐛 Fixes

  • Resolved an issue with the addon not consistently loading the PhantomCameraManager singleton upon installation, which causes a cascade of errors and general usability issues (#338).
  • Resolved an issue with tweens not running its last frame making some properties not tween to the intended value (#330). Was particularly noticeable when tweening between PhantomCamera3DResources.

v0.7.2

05 Jun 11:38
ba55607
Compare
Choose a tag to compare

✨ New Features

Phantom Camera Manager

phantom-camera-manager

A singleton class that can be accessed from all scripts. It allows for accessing all the PCams and PCamHosts in a given scene.

# Returns all PhantomCamera2D nodes in a scene
PhantomCameraManager.phantom_camera_2ds

# Returns all PhantomCamera3D nodes in a scene
PhantomCameraManager.phantom_camera_3ds

# Returns all PhantomCameraHost nodes in a scene
PhantomCameraManager.phantom_camera_hosts

This also marks the foundational work for getting Camera Noise (#126) and Multi PCamHost / Split Screen support (#26) working.

PhantomCamera3DResource Projection Types

image

It's now possible to set the Projection type to Perspective, Orthogonal and Frustum, and their associate properties within the PhantomCamera3DResource resource. Previously limited to just Persepctive.

If tweening between two PCam3D that both use Orthogonal or Frustum, then the Size and Frustum Offset will be tweened when switching.

Near and Far properties have also been added. They, too, will be tweened if the values differ between PCams.

Thanks @Jegber for the proposal (#218).

⬆️ Enhancements

Muted Updater

editor-updater-panel

After some feedback that the current updater being too 'in-your-face' whenever new releases are out, the changes here will now prevent the updater prompt from appearing on start-up.

Instead, it will now change the viewfinder panel button to include an icon with a changed text color. The update button can then, like in previous releases, be accessed from the top-right side of the Viewfinder panel, which will trigger the updater prompt.

Thanks @kelteseth for the feedback (#271).

🛠️ Fix & Improvements

  • Improved the PCam and PCamHost detection for the viewfinder. This was most apparent in scenes where multiple Camera2D or Camera3D nodes present (#307).
  • PCamHosts will now show a warning in the scenetree when it isn't a child of a Camera2D/3D and not spam errors in the Output tab.
  • Added suffix, such as m or °, to the appropriate Camera3DResource properties.
  • Resolved an issue where Tween on Load would trigger even if disabled for Third Person Follow when instantiated via code (#319).
  • Fixed an issue where setting FollowMode to None would not make a PCam movable in the editor (#320).
  • Added support for disable_3d export templates. This should allow 2D games that want to exclude 3D specific nodes to be exported without errors (#311).