Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Dani Phye · Jun 08, 2016 at 08:49 PM · vrgraphicsprofilercompute shaderprofiling

How can you detect judder in VR?

I've been working in OpenVR (the Steam API), and every once and a while I will get some judder. Is there a way to detect exactly what frames juddered/when juddering will occur? I'd like to minimize this, and I can change processing of my application dynamically based on how much judder might occur (to make things run faster to prevent judder), but I need some way of "profiling" the judder.

I'm in Unity, but I'm doing all my processing on the graphics card (using a Compute Shader), so the profiler says the framerate is very fast, yet sometimes judder occurs. I thought maybe taking the maximum frame rate over, say, 5000 frames might work, but sometimes judder occurs when the maximum hasn't changed. So is there a way I can actually measure it?

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

· Add your reply
  • Sort: 
avatar image
2
Best Answer

Answer by Dani Phye · Jun 09, 2016 at 02:51 AM

It turned out that Unity 5.4 has VRStats.gpuTimeLastFrame which was exactly what I was looking for.

Edit: For those that are interested, it turns out that that "detecting spikes" method isn't actually relevant for detecting judder. Here is a plot to see why:

Judder Chart

Where the x axis is frames, and the right axis is the ms value returned by VRStats.gpuTimeLastFrame. To generate this plot, I found somewhere that I had a very high amount of judder, and somewhere where I had no judder, and moved from the non-juddery region to the juddery region and back.

As you can see, the gpu times vary a ton, which means that measuring spikes will give you very little data about judder. Instead, judder occurs when there is simply a lower framerate. While it seems that judder is these "spikes" of lagging movement, it's actually consistent when you have a lower framerate and is happening even if your head is still, you just only experience it when your head is moving.

Thus, the best way to measure judder is simply to look at the fps (of sorts) of this gpu value, and then if it is above about 6 ms (this is something you can play with) you will most likely experience judder.


figure-1-1.png (32.3 kB)
Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image
1

Answer by FortisVenaliter · Jun 08, 2016 at 09:00 PM

You mean jitter? Never heard it called judder before.

Your basic premise is correct, but 5000 frames at 60fps is nearly an hour and a half, so that might be too long. Any bumps would be averaged out. I would use 60 or 120 frames for averaging.

Comment
Add comment · Show 3 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Raresh · Jun 08, 2016 at 09:37 PM 0
Share

Judder = motion stutter. Basically blurs some/all objects

avatar image Dani Phye · Jun 08, 2016 at 09:42 PM 0
Share

"Any bumps would be averaged out"

Actually I was just taking the maximum of all of those, not the average. But yes sorry it was a poor example, I was typically using about 100 frames. And okay, not sure where I heard that, but jitter probably makes more sense.

I found that what I needed to do was set VSync to Every Second V Blank and then my CPU wasn't getting ahead of the GPU anymore, and the performance of the GPU (which is what VR cares about) was reflected in the frame rate.

What I ended up doing was taking the maximum of 100 frames as my current "frame rate" to be adjusted for, and then setting that to the average of those frames*1.5, and then taking the max of that and the next 100 frames. This ensures that between the 100 frames you don't happen to run into one with a very small fps.

avatar image Dani Phye · Jun 09, 2016 at 06:32 PM 0
Share

Also, I think what you meant was a $$anonymous$$ute and a half (about 83 seconds), but I still get your point.

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

60 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Device.Present profiling 1 Answer

Is it possible to profile compute shaders? 2 Answers

Graphics and GPU Profiling 0 Answers

Reading Profiler Results 1 Answer

Realistic non flat wall in VR 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges