Final Camera - Camera System

Final Camera](https://www.unrealengine.com/content/19ed420e1a344d61b0f8022be42a1d50)

Now released on the marketplace for 10$ :slight_smile:

Video: https://www.youtube.com/watch?v=CGCEsOTSLrM
Web-Demo: http://www.indygoof.com/FinalCameraDemo

How does it work?
Its implemented as a custom PlayerCameraManager. To use it, simply open up your PlayerController and set the ā€œPlayerCameraManagerā€ property to FinalCameraManager.
This also means, no fiddling around with cameras for each and every character you may have to possess, since the PlayerCameraManager works through the PlayerController and not through the Character.

And the features?
For now it can do the following:

  • Zooming in and out, with smoothing and min and max zoom distance
  • FreeCam Mode where Yaw and Pitch are changed through mouse/joystick (i.e. with middlemousebutton)
  • Min and Max Yaw and Pitch for FreeCamMode to prevent unwanted view angles
  • Smooth Snapback from FreecamMode back to the original Rotation (i.e. like in Starcraft) with configurable values for speed
  • Offset from Target Actor Location (i.e. for making a shoulder view, this would be something like Offset=50,0,60)
  • Configurable camera lag
  • Border Scrolling (RTS Camera style, configurable border-width and scroll-speed), also possible through i.e. right thumbstick
  • Possibility to set any Target Actor at runtime, i.e when you click at an actor the camera then follows this actor
  • Position Locking (=stationary camera following target actor through rotation only)
  • RTS like Edge Scrolling with configurable speed and edge-area with configurable speed
  • RTS like scrolling through input axis (i.e. Thumbstick) with configurable speed
  • Basic Collision (similar to Springarm)
  • and of course everything is configurable!

and moreā€¦

A feature for all the people that need different cameras for different situations, or need to switch dynamically between them: CameraPresets
You can always switch to a preset and are able to define if the switch should be smoothed (location and rotationwise) or just instant.
Presets that are already defined in the package:

  • TopDown
  • RTS
  • Shoulder
  • FirstPerson
  • FirstPersonArms

Sample PlayerControllers are included for ThirdPerson, FirstPerson, TopDown, RTS; Also one PlayerController combining all of the features into a single one (the one used in the video).

One more thing :slight_smile:
Also included is a sample PlayerController showcasing a cameramode which always keeps all players on screen while still respecting min and max zoom levels, pushing back the players if they are trying to run out of the maximum zoom level of the camera.

If you got any feature requests or have any issues, just contact me at my support address office@indygoof.net!

Cheers,

Hi. Can I use this to create a True first person view camera for my main character?
Regards

Hi,

you mean something like that? https://www.youtube.com/watch?v=KyrTbw-P7_Q

Sure that is perfectly possible; A sample controller for this will be included in the next update (and i can send it to you if you already need it after i got the proof of purchase).

Though, please note that:
Every character mesh is different, so you will have to play around a bit with the offset for your actual character
The AnimBlueprint must be changed by yourself to allow the upper body part to change its pitch along with the camera, this is not included in the camera package (and thats the reason why you dont see the pitch of the hands move in the video).

Cheers,

Yes thats it. Thanks for info.
Regards

Hello indygoof,

Iā€™m loving this package. Iā€™m interested in the Full-bodied FPS Controller. Iā€™m also in need of a means to mouselook Camera Yaw/Pitch independently (IndieCam) without effecting the rotation of Pawn mesh. Just need to be pointed in the right direction to modify FinalCameraManager.

Proof of Purchase Sent via Private Message.

Hi Techlord,

funny enough, i am currently implementing such a Controller for another customer, along with some changes in the FinalCameraManager to make it work smoother (i.e. you can choose between Lerp and Constant InterpTo for Snapback, Snapback can be triggered explicitely from a controller, clamping of camerarotation can be set to be absolute or relative to the target, etc).

As soon as this is finished (probably end of the week) i would submit the update to Epic along with the Full-Body-PlayerController. I will also send you a direct download link (as you already proofed that you bought it).

Cheers,

Hi IndyGoof, Thank you for the information. Iā€™m currently using version UE4 4.8.3. My attempt to upgrade to 4.9 failed and Iā€™m weary of upgrading at this time. Will the update be compatible 4.8.3? I forgot to add my (http://frankie_taylor@hotmail.com).

Hi,

usually i am doing any changes with the lowest supported engine version (in this case 4.8.3), so it definitely is compatible :slight_smile:

Cheers,

Guys,

really sorry for the big delay!

Iā€™ve submitted an update to Epic today with a few bugfixes and a TrueFirstPersonController (as shown in the video above).

Cheers,

Can someone advise if was the update published in the marketplace?

Hi TechLord,

unfortunately not; I guess the Marketplace Team is still too busy with doing the last updates for the 4.9 version.
Though, if you email me your receipt you got from Epic when buying it (as a proof of purchase), i can provide you with a link to the current version.

Cheers,

Added a Linkto an HTML5-Export of the Demo Level. The marketplace description should be updated soon to :slight_smile:

Cheers,

That HTML5 Demo is sweet. Could be a trend setter for live demos directly on the Marketplace! Any technical documentation available on the system?

I recently purchased this camera system. I am really enjoying the ease of this system along with being able to make the changes I want.

There is a change that I made to make it more usable in Third Person. I added a RotatesWithControllerPitch boolean that works similar to RotatesWithPlayerPitch/Yaw but uses the controller pitch instead of the actorā€™s pitch when it needs to update its position. My third person char rotates with controller yaw but not pitch, but I wanted him to be able to look up and down all the time so thatā€™s why I added this update.

There is another change I will be making to smooth out the camera offset on preset change. Right now location, free cam distance, and rotation all do smooth changes but offset doesnā€™t. So if I want to go from a following position to an over-the-shoulder position, I need to reduce the cam distance and change the offset. When the preset changes, it smoothly zooms in but jumps to the new offset. For this change, Iā€™ll follow the same way it lerps to location and rotation.

I will also be adding a FOV to the preset values so that you can change FOVā€™s between presets and this will also be able to change smoothly. This way I can have the following camera on letā€™s say 70 FOV and the over the shoulder FOV at 40-45.

I would say Iā€™m like halfway to creating a camera system similar to The Division. Iā€™m just trying to figure out how they do the camera offset but keep the same target in the middle of the screen. Because if you change the offset, the camera is centering on something else. They must do a slight initial rotation or something. I wonder if they are constantly raycasting in follow mode and if they go to OTS mode, it will rotate the camera based on if any object is returned by the raycast.

Thanks for all the good work!

Nice! And thanks for the nice words too :slight_smile:

I guess i will implement a few of the features in the next update of FinalCamera, like ā€œRotatesWithController*ā€, the smoothing to the offset and the configurable FOV.

Regard the Division-style camera change, would be really interesting to know what they actually do; Since i dont own it i cant play around with it, but i guess they are really doing raycasts with a minimum and maximum range and if it hits something it takes this location as target and if not it uses the max range raycast location. Though, they wouldnt have to constantly raycast but just do it on buttonpress (or any other event) when you switch to OTS and set the result to the camera system.

If you got any other ideas or requests, dont hesitate to tell me :slight_smile:

Cheers,

Hi ,

Last night, I was trying to make it so if any of the ā€˜RotatesWithPlayer/Controllerā€™ booleans are true, then the initial rotation of the camera becomes an offset based on the player/controller rotation. I was almost able to get it, but it kept on snapping back into place after the preset change, even though I would turn off snap back. Any ideas as to why this would happen? And would you be able to show what I would need to do to make an offset rotation work? Maybe Iā€™m doing something incorrectly.

I did more camera testing in the Division last night. They definitely do a camera offset by decreasing Z and increasing Y as the camera goes down and to the right when it zooms. When there is a wall in front of you, you can clearly see the camera offset. When there is a certain distance between the player and an object though, you canā€™t even tell that the camera is still doing the offset. But based on the camera position and the player mesh position, it still is offsetting it so there must be an initial rotation when there is no object within a certain range. This is why my offset rotation that I explained above is important. Iā€™ll probably have to add some kind of boolean somewhere that will tell the camera on preset change if it needs to rotate.

Thank you,
Toxin

Nevermind about my first question. I was able to solve it by creating a new OffsetRotation variable. I was having the issue because I was trying to have the initial rotation be the offset but because I have it using controller pitch, initial rotation always gets updated to that.

I have done all of my changes except for making the camera position offset a smooth change. I was also able to pretty closely replicate the Division camera system now that I have the rotation in place. Iā€™m not going to worry about the raycast on preset switch. Once I get the position offset change into a smooth change, my camera system will pretty much be complete. :smiley:

EDIT: Got the smooth offset working. I have it set up now so when I go from following third person to an over the shoulder third person, the center of the screen with the crosshair doesnā€™t move from its target like at all.

There is one last thing I need to look at and it is the extended duration of a smooth change if you are constantly moving your mouse. The initial rotation variable never gets to the tolerance of the target rotation and therefore always LERPs and produces what looks like camera lag even though I donā€™t want camera lag. Iā€™m afraid that raising the tolerance will produce a snap but weā€™ll see.

Hey,

yeah, thats the reason why it didnt make it into the FinalCamera, it was in fact looking better to ā€œendlessly lerpā€ (at some point the player WILL stop moving the mouse aroundā€¦hopefully :wink: ) instead of having a hard snap after some kind of timeout (which was in the system at the beginning).

Though what you could do is to count the DeltaTime and speed up the lerp with the passed time, so ultimately it will be fast enough to just smoothly get into position. The other option would be to use RInterpToConstant instead of a Lerp, since it wont slow down when nearing the end of the rotation (thereā€™s a checkbox for that in the class defaults if you didnt already notice :wink: ); but you would have to play around with the smooth rotation factor a bit, since the values are completely different for lerp and constant interpto.

Cheers,

Ah, thank you for the information. I knew there were other interptoā€™s but I just didnā€™t know what else to use without messing it up. Iā€™ll try out your suggestions.

EDIT: In my brief experience trying to set up RInterpTo Constant, I could not get the proper feel when zooming. If I tried to do the RInterp fast, it would lock on to what rotation it needed to go to faster than the rest of the Lerps for position and whatnot, so the rotation would appear to snap. But if I lowered the constant, it would take to long if I moved the mouse while zooming.

When you say speed up the lerp, do you mean change the Alpha value?

Yeah, right now its constant through the Class Defaults. Iā€™m not exactly sure how you could scale it correctly (through Deltatime, or degrees that are left to rotate?), you would have to play around here too.

Cheers,