How to get achieve smooth camera above 60fps

Fenda

Member
On monitors with higher refresh rates of say 144hz, camera movement feels like its still at 60hz. This is the case in both v2 and v3.

On v2 we had to apply a small hack to fix this within KinematicObjectManager.Update() but on v3 I've not had any luck. We played with SimulationManager and moved the camera calls from FixedUpdate() into a LateUpdate() - this does make the camera rotation update smoothly to match the refresh rate but it also feels like its been sped up so there is probably something downstream with the time scale that needs to be tweaked too.

Has anyone achieved smooth camera movement above 60fps on v3 yet?
@Justin Do you have a 144hz monitor?
 
There was a post earlier about moving the camera updates to LateUpdate - maybe that'll help? I plan on looking at this when I do the Cinemachine integration:


@Justin Do you have a 144hz monitor?
No, I don't.
 
There was a post earlier about moving the camera updates to LateUpdate - maybe that'll help? I plan on looking at this when I do the Cinemachine integration:



No, I don't.

Thanks, yeah I looked at that and tried it out. The camera moves smoothly if you stand still but if you move the character and camera at the same time it starts jittering. More code changes would be needed somewhere.

Can we all chip in to get you one? Pretty much any avid FPS player will play on a higher refresh rate monitor and if you've not felt the difference before I think you'll find it really impacts gameplay. It's definitely a selling point for an asset if you promote that it supports high FPS too. Nobody wants to play at capped 60fps these days.
 
I think that we can work together to find a solution. I can start by adding support for late update within the camera controller, and see if my implementation is any different which then allows it to work at high framerates. I am currently trying to get the PUN add-on out ASAP but can work on this after that is out (which will probably be next week). I'll send you a PM after that with my changes. I have no doubt that we'll be able to get something working.
 
I think that we can work together to find a solution. I can start by adding support for late update within the camera controller, and see if my implementation is any different which then allows it to work at high framerates. I am currently trying to get the PUN add-on out ASAP but can work on this after that is out (which will probably be next week). I'll send you a PM after that with my changes. I have no doubt that we'll be able to get something working.
Great. Looking forward to it!
 
Hello, allow me to bump this thread. It's something I should have talked about a long time ago, I didn't really need to because I'm making a Resident Evil-like game with no controllable camera, but yeah there's a big issue with camera smoothness with UCC since version 2. I just tested one more time the demo scenes from UCC2 and 3, and compared with Unity's Third Person sample, and I'm sorry to say that but the results are simply shameful and not acceptable for a professional asset. The Third Person sample's camera is very smooth and pleasant, while UCC's not smooth at all, it doesn't seem to be placed in as many spots during the same amount of frames. Here is a comparison video I made, it may not be very helpful because of the 60fps limitation, but I hope you can see it nonetheless, going frame by frame may help :


Since I'm using the latest version of UCC3 that means no fix has been publically released, but did you work on something in the meantime ? If yes I'd very much like to try it and tell you if it works on my end if you have a package to share.

But in any case, in order for the issue to be properly addressed, and because this is not the first time we have a framerate related issue with UCC3, I'm seriously urging Justin to buy a 100+hz monitor ASAP. I don't know what size or resolution you need your monitor to be, but for around 200 dollars you can definitely get a correct 144hz and 1080p monitor : https://www.amazon.com/s?i=computers-intl-ship&bbn=16225007011&rh=n:16225007011,n:1292115011,p_n_feature_twenty-one_browse-bin:73824518011&dc&ds=v1:isRdxUnlpBjH46UuJL6sOOURn4XACwIpbOth66ov5VU&rnid=73824515011&ref=sr_nr_p_n_feature_twenty-one_browse-bin_3

I'd recommend going for a 300hz monitor if you can afford it, but 144hz is already amazing and it's the gap between 60 and 144 that matters most - you can't ignore it while working in game dev.

Edit : DankP3 suggested I tried setting the Position Smoothing value to 0, but it already has a very low value of 0.08 in the demo scene and setting it to 0 doesn't seem to do much. However setting it to 1 or 2 creates a slow following movement which reminded me that this issue, has others have already pointed out, is related to rotation rather than position. I'm not totally sure at the moment, but I feel like the position part only has a little lack of smoothness.
 
Last edited:
I have not been able to address this yet. I am planning on looking at it when I do the Cinemachine integration. After I look at it will send you a message with a package to test. I know that we will be able to get it solved though.
 
Hi, please allow me to make some comments.

1. The reason for camera jitter when a character moves is due to the different update intervals between LateUpdate and FixedUpdate.

To solve the jitter problem, it is necessary to eliminate the influence caused by the update interval. Because UCC should not support updating physical motion in Update, it is only possible to interpolate the Rigidbody, and the position obtained in LateUpdate is the interpolated position between physical frames, which can basically solve the jitter problem.

It's necessary to set the Update Mode of the Animator to Normal to solve the different update intervals of the animation.


2. Instead of only updating the camera in FixedUpdate now, I wish the CameraController or SimulationManager had some options about updating the camera.

One is like Animator's Update Mode. For example, update the camera in LateUpdate and update the camera in FixedUpdate. The other is a switch for whether the camera is affected by time scaling.

These options also require some other modifications, because Unity will get different relationships and results when getting Time.deltaTime and Time.timeScale in LateUpdate or FixedUpdate. I suggest setting a global CameraDeltaTime property to obtain deltaTime with different calculation methods according to different Update Modes.


3. For Cinemachine integration, I want to only pass data when UCC updates the camera. Cinemachine is responsible for controlling the position and rotation of Camera.


4. After completing the above three similar tasks, I completed the ViewType dedicated to LateUpdate, so I got good results. There must be something wrong with using an otherwise unchanged ViewType.


Good luck with modifying UCC's camera system and creating the Cinemachine integration!
(A 144hz monitor is really necessary! ?️)
 
I have a potential fix for this an am interested in getting a small group together to test it out. If you're wanting to test it and have a faster refresh rate monitor please let me know. I'll probably create a group private chat.

For this test I'll be using UCC so you must have a license to that.
 
My laptop is currently at the repair shop and I should get it back on Saturday, you can still count me in and add me to the group chat, I’ll be glad to give it a try with my 300hz screen as soon as I can !
 
On monitors with higher refresh rates of say 144hz, camera movement feels like its still at 60hz. This is the case in both v2 and v3.

On v2 we had to apply a small hack to fix this within KinematicObjectManager.Update() but on v3 I've not had any luck. We played with SimulationManager and moved the camera calls from FixedUpdate() into a LateUpdate() - this does make the camera rotation update smoothly to match the refresh rate but it also feels like its been sped up so there is probably something downstream with the time scale that needs to be tweaked too.

Has anyone achieved smooth camera movement above 60fps on v3 yet?
@Justin Do you have a 144hz monitor?
Would you mind sharing that hack to fix that issue? I'm still on v2 and I won't be updating to v3 any time soon, so I could use it. Smooth camera movement has always been an issue for me in UCC, it just never felt right, just has this janky vibe, you can mitigate it somewhat by tweaking various options in the Input Control and Camera Controller but it still doesn't feel good. It should be smooth out of the box, even the default Unity controllers are smooth. Coming from RFPS to UCC smoothness of controls is one thing where UCC felt worse to be honest.
 
The change requires a lot of restructuring in order to achieve. Unfortunately it's not possible with version 2.
 
What issue are you having with the camera? I know that @FastSkillTeam is having some issues with the Ultimate Seating Controller but we should have a workaround for it. I'm curious if you have any other issues than that.

Focusing on this thread, with the current release the camera is no longer locked to a fixed timestep.
 
I'm curious if you have any other issues than that.

No, on the camera subject is pretty much the same issues (I'm using USC btw).

I do have some physics issues, but i'm trying to analyze better to see if is related to UCC or my project / setup before report here on another topic.
 
Top