Thursday, November 3, 2016

Dev update #24

Regrouping and reorganizing

You may have noticed that our development slowed down lately so we want to explain why it happened.

VRidge userbase grew a lot during this year. When we first shown our prototype proof of concept in March we expected some people to be interested in beta testing but we didn't expect thousands.
We always love chatting about development, receiving feedback, solving user problems. Our devs were always directly responding to e-mails. This includes feedback, suggestions, bug reports, pc upgrade advice, general VR chat. It was taking more and more of our devtime.

Now VRidge's userbase is approaching 100 000 and the old ways that used to work had to be changed. Even if we hear back only from a small subset, let's say a 3% of our userbase - that's 3 thousand people.

That's why our devs will no longer be the frontline of our support system because it simply takes too much time discussing every single case individually. Our support system will of course continue to work but we'll try to write a general FAQ items on each type of issue so people can fix most of the problems on their own. We'll have a dedicated person handling support tickets that will be communicating with our devs on a regular basis.

Dev note:  We love solving problems directly but this way we'll be able to fix underlying problems faster instead of developing duct-tape workarounds for each invididual case. :) We'll also continue to hang around reddit. We didn't post too much lately but we read every single discussion.

If you contacted us lately and haven't received a response for a few days, don't worry - we'll try to cach up with everyone soon.

We're also reassigning our dev time. Until now we focused 100% on fixing problems instead of adding new features but there's a good percentage of our users running VRidge without any major problems. That's why we'll have 1 developer assigned to fixing problems and optimizing experience (including "the jitter", read more in the last paragraph of this post) while the other developer will work on adding new features.

Sound streaming

If you have decent ac router and non-crowded 5 GHz band you can usually stream wirelessly with quality, lag and reliability comparable to USB cable. Many people asked us for sound streaming for fully untethered experience. Being able to sit down on your couch without a bunch of wires limiting your movement sounds very nice. You will be able to turn it on/off because there's no need to stream another data channel and eat up extra bandwidth if you want to use PC headphones anyway. We want to deliver this feature in December.

PS Move / controller black screen

We tried to fix it on our side. We exchanged our data and test results with PSMoveService contributors but it seems that the problem is not linked to VRidge itself but to the way SteamVR handles multiple drivers. It also happened with Oculus DK2 with PSMoveService (without VRidge) or with Leap Motion + VRidge (without PSMS). PSMoveService on its own works fine. VRidge does work on its own as well. But it seems that when two drivers are interacting with SteamVR together they may randomly "collide" when they try to send messages at the same time. It's a speculation because it's hard to know what exactly is happening because SteamVR runtime isn't open source. You can read full discussion here. We'll definitely let you know if we have more news on this topic.

Jitter

It's a bit long so there's a short version at the bottom. Scroll down if you want to skip this wall of text.

We tested, we measured, we analyzed rendering with high FPS cameras, we spent many, many hours trying to exclude all possible factors of this problem with various phones and display types. We know that in fact 60 (58 actually but this doesn't change anything) frames are reaching the phone (assuming good connection conditions) but something's not quite right - it feels jittery.

Nearly all (90%) of jitter reports come from S6 & S7 (Exynos chipsets) but there were few Snapdragons reports too. It's hard to tell if those Snapdragons experience the same underlying problem as Exynos devices. Samsung devices also use different type of screen than other mobile phones (AMOLED).

We knew that it's visible the most in Gear VR version but it also happens in Cardboard version on S6 & S7 too. After extensive testing we found that other phones also experience not exactly silky-smooth rendering during head movements but it's not quite as noticeable. It may manifest itself in bluriness instead of jitter.

Human perception is a tricky subject and some people don't see a difference between 30/60/144 FPS. People can play games with lowend GPUs at 20 FPS while some others consider the experience ruined if it drops below 60 FPS. The worst thing about it is that it's hard to objectively judge how smooth our small changes affect the experience. We do some changes, we test them again and compare, we show it to different people but when we try to describe how smooth it feels on a scale of 1-10 we get very random results. We literally have to stare at the distance through the window for a while to "reset" our eyes to see differences between our test versions. That's why it takes so long to achieve the perfect streaming.

We tried to use numeric metrics like FPS or frame latency but even we use high FPS camera to record the screen it's hard to catch everything because human eyes don't see the same way camera does. We don't have a brain refresh rate or eye capture rate. We see motion and we know when it's fluid and when it's not. We can get used to non-perfect rates but some some people may get a headache after a while and that's not something we think is acceptable. We know that even regular VR HMDs can trigger headaches and motion sickness in some people so the problem is not 100% solvable but VRidge has a lot of room for improvement.

Since all of our tools and metrics failed to give our definitive, measurable answer that can be used to compare different versions of VRidge we decided that we need more metrics, tools, numbers, graphs, timings, all kinds of data. We wanted to fix it quickly, to find the the wrong line of code, the mistimed part of the pipeline but it seems that there's no magical, easy way of "fixing" it.

With one of our developers assigned to new features and one free to dig deep into the VRidge internals, we think this approach will be the better way of handling the jitter problem. It takes more time but this we can do it the right way instead of the quick way, which doesn't always work. Will it work? We very much hope so.

You can think of VRidge as a street between two points - your phone and the PC. The problem is that there's a bunch of intersections - sensor reading & fusion, sending sensor data, SteamVR/Oculus driver interaction, game capture, encoding, sending, transmission error concealment, receiving, reconstructing, decoding, rendering. A small traffic jam at any of those intersection can stall the whole flow. Cities have cameras to monitor traffic flow and to optimize urban planning. We need similar tools monitoring flow at each part of the pipeline.

We found one thing that can possibly reduce jitter a little bit in non-GearVR Android version. This will be probably pushed to beta Android channel next week. It's the first step of fixing the problem but definitely not the last one.

TL;DR; We didn't find a quick solution for old problem so we took the long way to diagnose them more thoroughly. Some of you are quite happy with current version. so we're splitting devtime 50:50 with 1 dev assigned to new features and 1 to optimize and fix old problems.

Friday, October 7, 2016

Dev update #23 - After the storm

What happened 

On October 4th an update was released to SteamVR. It included changes in direct display driver component which is utilized by VRidge. The changes weren't documented/reflected in OpenVR interface. We've seen those changes in SteamVR's beta channel and after it started flickering there (few weeks ago) we posted the issue to SteamVR forums. An unfortunate series of events caused this changes to go into live SteamVR channel anyway. 

The result was preeeeetty bad. Everyone experienced flickering in random intervals making VRidge totally unusable with SteamVR. Less than 1 hour after the changes went live we contacted SteamVR team through more channels to ask for help.

The SteamVR team was very responsive but it takes some time to update the live system. We were amazed that they pushed the update with a fix into their live stable channel on such short notice (everything was fixed in less than 24 hours). Some companies attempt to wall themselves off from 3rd party support and modding but Valve is doing the complete opposite with this kind of open attitude. We always recommended OpenVR/SteamVR for aspiring VR developers when they asked us how to start VR gamedev and we will continue to do so. It's nice that some companies care about VR's future overall. 

What we learned

It's hard to have a system working 100% of the time when it relies on multiple 3rd party components (SteamVR, GPU drivers, Windows version, OS components, router config & rules, Android OS flavors, phone chipsets, Direct3D, etc). It is difficult, but there are still ways to mitigate the critical situations like this.

We will add some sort of emergency alert to the desktop client so we can notify about the possible compatibility issues. Sometimes all you need is to update some 3rd party components (like video driver) and everything starts working again. We can write this kind of important updates on our blog/facebook/twitter but over 90% of our users stay in client without checking the social media. A simple way to push a message to the client from our servers with a link to a detailed article can do wonders. Many other companies already have something like this (Battle.net or LoL launchers come to my mind). 

We will also follow SteamVR's beta updates more closely now. If there's a chance of this kind of stuff happening again we'll start preparing alternative fallback ways. There is a way to capture SteamVR game surface with a slightly increased latency that could have worked even after the Oct 4th changes. Degraded performance while we are working to fix it "the right way" is better than app not working at all.

What we were doing in September

We've been working on behind-the-scenes modules and refactoring some code. This is in preparation for future Android 4.x version and iOS. This also allows to see clearer performance picture which is very helpful to locate Android performance problems (Samsung jitter mostly).

We were updating part of the platform so we can add more servers. Currently all our online service are running on single machine which works well enough but it sometimes need maintenance/updates or simply just fails due to some unforeseen event. Having one more gives us some more breathing space. 

What's next

It's been a while without a feature update. There are a few unsolved problems that we are prioritizing now - Samsung jitter issue and motion controller black screen. Planned features are fake VR (playing regular flat games in VR), sound streaming and iOS version. We want to squeeze in an updated video encoder (H265/HEVC, double the performance of current one) somewhere in the meantime.

We know that some of you really want to know when we'll add those but giving ETAs often causes devs to go out of our way to meet the deadlines instead of doing things "the right way". This can work short time but over a longer period it leads to spaghetti code and long terms bugs that are hard to fix. All we can say is that our current short term priority is Samsung jitter & motion controller black screen and we really hope to see progress on these in October.

Wednesday, October 5, 2016

[Resolved] SteamVR broken after Oct 4 SteamVR update

Problem is fixed

Many thanks to SteamVR devs who were very helpful and responsive during past 24 hours.

All you need to do is to update your SteamVR to the latest beta. Right click SteamVR in Steam library -> Properties -> Beta -> Select "SteamVR beta" in the dropdown box.


The fix is live in stable SteamVR update channel! Let your SteamVR install any pending updates and you're good to go. You might need to restart Steam to get latest updates.



After latest SteamVR update an important component stopped working in SteamVR. New SteamVR version is using undocumented closed code which broke VRidge.

We are surprised that they pushed the beta runtime into live channel without updating their documentation first even after multiple developers* reported the problem to Valve as compatbility breaking.

It's hard to fix a problem without proper documentation or at least an explanation what changed inside the black box. We'll continue to search for a quick workaround. We'll also try to reach out to SteamVR team through more channels than we already did.

It's middle of the night here and I don't have all the information yet.  This post will be updated with more news as soon as we know more.

*
https://github.com/OSVR/OSVR-Vive/issues/21
https://github.com/ValveSoftware/openvr/issues/276
https://steamcommunity.com/app/358720/discussions/0/343786746012512454/



Past updates:

Update @T+30mins:
We received response. SteamVR beta update with a fix should be available this afternoon or tomorrow (Seattle time). Switch to SteamVR's beta channel to make sure update is installed as soon as it's available.

Update @T+60mins:
SteamVR beta update is deployed. We are investigating remaining compatibility problems.

Update @T+80mins:
The problem still occurs but the characteristics changed. We are trying to find out why the new version still has this issue.

Update @T+120mins:
Many thanks to Valve for quick updates. They are investigating update changes further.

Update @T+12 hrs:
We're eagerly awaiting Seattle office hours to hear back from Valve. In the meantime we're trying to develop an alternative capture method that doesn't rely on direct mode driver compatibility.

Update @T+18 hrs (Oct 5 - 10:00 AM PDT, 1:00 PM EDT, 19:00 CEST):
The problem has been escalated further by SteamVR devs. We are thinking about creating temporary SteamVR driver rewrite but we're still estimating the scope of work needed to do so. We updated our main site with a site-wide notification about this problem.

Update @T+20 hrs (Oct 5 - 12:00 PM PDT, 3:00 PM EDT, 21:00 CEST):
An update has been released to SteamVR's beta channel. After updating SteamVR the issue should be resolved. Both Riftcat beta and stable channels seem to work correctly. We're running some more tests to make sure everything else works fine.

Update @T+22 hrs (Oct 5 - 2:00 PM PDT, 5:00 PM EDT, 23:00 CEST):
The fix is live in stable SteamVR update channel! Let your SteamVR install any pending updates and you're good to go. You might need to restart Steam to get latest updates.

Friday, September 9, 2016

Dev update #22 - Gear VR first release


Update: If you experience jittery streaming on your Samsung device, see this topic:
https://support.riftcat.com/hc/en-us/articles/211516609

---

Gear VR edition is out! You can now download and install it and use full power of your Gear VR sensors. Scroll down for instructions and known issues.

VRidge for Gear VR


Yesterday evening our submission was approved at SideloadVR. Even without a blog post or Facebook/Twitter update some of you found the app minutes after it became available. It had several hundred downloads after few hours. It's amazing how fast you guys are!

It's the first version and some bugs are present but we'll keep bugfixing everything as soon as we can. The first bugfixing update (version 2) should be available shortly after this post is published. 

Instructions

You need SideloadVR which repackages VRidge .apk file for every user individually. It's needed because you can't easily install 3rd party Gear VR apps from outside of Oculus Store.

Remember that you need to turn Gear VR service back on (with CB enabler or any other app you used to disable it) if you disabled it to use your Gear VR as cardboard viewer. If you don't do it, no Gear VR apps will launch (tapping icon will not open anything).

Short version:
  1. Install SideloadVR and run one-time configuration.
  2. Install VRidge for Gear VR
  3. Start VRidge for Gear VR from your app drawer and pair it on the desktop side.
Detailed instructions:
  1. Install SideloadVR on your Samsung device
  2. Follow in-app introduction to complete one-time setup
  3. Go to Browse Marker in left drawer menu.
  4. Find VRidge for Gear VR by RiftCat Sp. z o. o. and install it by clicking top right button.
  5. You will see Android app installation popup. Some Samsung devices may treat unknown apps as unsafe and you might need to confirm it multiple times that you want to install the app.
  6. Launch the VRidge for Gear VR app in your Android app launcher.
  7. Pair it with desktop app (same as the regular app - full instructions here)

Known issues

Entries marked with * should be fixed with version 2 released today.

*Double vision / lack of stereoscopy

Few people reported double vision because images are aligned incorrectly. Some of you noticed that the picture is not stereoscopic. You're right, the first version has left eye duplicated twice on the left and right side. This should be fixed by today's update. We were playing around with stereoscopic/monoscopic views and somehow we pushed the wrong version into release channel. Sorry!

*App treated as unsafe by Samsung

Some Samsung Android OS versions were showing big red warning that app is unsafe and you shouldn't install it. We removed some permissions and the warnings should be gone. The permissions were there because Cardboard SDK needed them.

*Green/garbled stream 

Some of you reported that they can't see anything because view is all messed up. This happens on beta version of VRidge Cardboard app too and can be fixed by disabling automatic stream fixes in mobile settings. We're disabling this by default for Gear VR edition since Samsung devices handle stream without any problems anyway and don't need those fixes - "if it ain't broke, don't fix it". Hopefully disabling those fixes won't cause any problems. We might need to add per-device user switch if it does.

Latency / delay

Some of you reported unusually high latency. Delay will be obviously bigger vs regular Gear VR apps because we need to stream frames from the PC but it should be still in comfortable range. If you experience large delays please e-mail us at support@riftcat.com and include your Samsung model number and Android OS version. You can it in Settings -> About phone screen.

We will keep tuning the prediction values to reduce the latency. We might need to find the right balance between jitter and floatiness/lag. If you find the current experience comfortable, shoot us an e-mail and describe how it feels. If you give us enough feedbacks we might introduce some default presets + extra sliders so people can fine-tune the tracking.

Thursday, August 25, 2016

Dev update #21 - Legacy GPU support




Update on Gear VR (1 September):
We managed to fix known bugs but we still need to shuffle some code and run some tests after. We will try to finish all the release prep work before Monday so we can submit the app to Sideload VR early next week. Sorry for being late!

---

This is a small update, not the one with Gear VR support. Minor bug fixes and a new software encoder for some older GPUs. Desktop app version is 1.1.2 and it's available in beta channel.

Software encoding

Many people kept asking us to introduce support for video cards other than modern GeForces and Radeons. We added Intel HD Graphics support (starting with Intel Core 4000+ processors) but it wasn't enough.

Today we bring full software encoding capability for all systems running Windows 8.1+. This will allow you to run VRidge on any system that can launch your games in VR. There will be of course limitations and game / SteamVR / Oculus hardware requirements still apply but no extra hardware will be required by VRidge.

This mode is last resort option and is automatically pre-selected only if no modern video card is detected on the system. This puts high load on your CPU (depending on video resolution but good CPUs can encode 1080-1440p in real time). It may also add some latency depending on your CPU performance. It's the worst decoder out of all the options but it's the best one where none of the other options work. 

New software encoding option

Bugfixing

  • Sometimes SteamVR wasn't launching VRidge server properly. An extra option was added to desktop app settings. If you check it, it will run some extra checks during launch process to make sure VRidge server starts properly.
  • AMD "Not enough storage" or "Signature verification error" error will now ask if users wants to open troubleshooting page for this error.
  • Old NVIDIAs (pre-Kepler chipset) will no longer default to NVENC encoder. It will now offer new software encoder.
  • Changed MF's default encoding profile to 100. It shouldn't cause any problems but if it does, go to Riftcat\Config, open vridgeQuality.cfg with notepad and change UseLegacyProfile to true. Setting it to legacy profile may affect Android device compatibility.
  • Minor text fixes.

GearVR news

We contacted SideloadVR to make sure we have some platform to launch on. If they don't agree to host VRidge we'll have to create our own repackaging service to bundle user signatures. This shouldn't be too hard but may delay release for few days if SideloadVR crew refuses to host VRidge.
There is one major bug to fix and we're good to go. Expect more news and, if everything goes well, an apk file next week.

Dev update #21 - Legacy GPU support




Update on Gear VR (1 September):
We managed to fix known bugs but we still need to shuffle some code and run some tests after. We will try to finish all the release prep work before Monday so we can submit the app to Sideload VR early next week.

---

This is a small update, not the one with Gear VR support. Minor bug fixes and a new software encoder for some older GPUs. Desktop app version is 1.1.2 and it's available in beta channel.

Software encoding

Many people kept asking us to introduce support for video cards other than modern GeForces and Radeons. We added Intel HD Graphics support (starting with Intel Core 4000+ processors) but it wasn't enough.

Today we bring full software encoding capability for all systems running Windows 8.1+. This will allow you to run VRidge on any system that can launch your games in VR. There will be of course limitations and game / SteamVR / Oculus hardware requirements still apply but no extra hardware will be required by VRidge.

This mode is last resort option and is automatically pre-selected only if no modern video card is detected on the system. This puts high load on your CPU (depending on video resolution but good CPUs can encode 1080-1440p in real time). It may also add some latency depending on your CPU performance. It's the worst decoder out of all the options but it's the best one where none of the other options work. 

New software encoding option

Bugfixing

  • Sometimes SteamVR wasn't launching VRidge server properly. An extra option was added to desktop app settings. If you check it, it will run some extra checks during launch process to make sure VRidge server starts properly.
  • AMD "Not enough storage" or "Signature verification error" error will now ask if users wants to open troubleshooting page for this error.
  • Old NVIDIAs (pre-Kepler chipset) will no longer default to NVENC encoder. It will now offer new software encoder.
  • Changed MF's default encoding profile to 100. It shouldn't cause any problems but if it does, go to Riftcat\Config, open vridgeQuality.cfg with notepad and change UseLegacyProfile to true. Setting it to legacy profile may affect Android device compatibility.
  • Minor text fixes.

GearVR news

We contacted SideloadVR to make sure we have some platform to launch on. If they don't agree to host VRidge we'll have to create our own repackaging service to bundle user signatures. This shouldn't be too hard but may delay release for few days if SideloadVR crew refuses to host VRidge.
There is one major bug to fix and we're good to go. Expect more news and, if everything goes well, an apk file next week.

Thursday, August 18, 2016

Dev update #20


It's been a while since our last updates. Some of us took few days off to enjoy some of the summer sun but we're now back in full force and ready to code some VR!

Gear VR edition progress update

Last week we managed to put together core components of GearVR version. We already have working internal version which benefits from fast and stable sensors. Latency is a bit better because of more frequent updates of head rotation. The whole experience is noticeably smoother and has no drift.

Because of similar concepts in both Android and GearVR versions we decided to spend some time to extract as much as we could into shared library to make further developement faster. There is still some work to be done in terms of stability and user experience but things are really looking good and we are satisfied with progress. There is no release date at present but some test version should become available this month. It's now a matter of weeks, not months.

There's a really nice thing about Gear VR native API. We can set CPU frequency to lower (reducing battery drain and heat generation). We hope that it allows to run long Gear VR sessions without overheating.


Soon™

Phone compatibility

We spent a lot of time trying to fix some of the problems experienced by specific phone models (Zenfone 2, Galaxy S4, Redmi Note 2/3, Huawei Honor 4C/P8 Lite). This process takes a lot of time because those problems happen only in very specific configurations that we cannot reproduce with our hardware. There will be beta mobile update tomorrow that will include some extra fixes for Zenfones 2 running Android OS 5.0 (Zenfones 2 updated to 6.0 should work already in beta channel).

If you still experience problems after tomorrow's update (mobile app ver. 1.1.1b) use the Diagnostics mode available in settings and send us logs again. We only received several reports this month and percentage of users reporting problems went down significantly so it means that some fixes in fact worked. 

We'll try to get more phones at the office but since those problems are caused by undefined set of conditions it's not easy because the same model (Samsung S4 for example) can use different hardware for European and American variants. That's why this takes so long. We create a potential solution -> send it to testers -> receive reports -> figure out what went wrong this time. Add some delays for each of the steps above (timezone differences, work schedule, people leaving for a weekend) and it turns out that testing simple fix can take few days.

What's next?

We're gonna refocus more on feature development now because fixing some of the phones (paragraph 2) only affects a very small subset of our users. There are few devices that absolutely dominate the Android market - Galaxies, LGs, OnePluses, Nexuses (or is it Nexi?) - and we want to add some new stuff for people using those phones too. At this point it's probably easier to add Android 4.x support or older GPU support than to fix the mysteries of some of the phone models listed in paragraph 2. There are quality improvements possible, latency optimization, overheating prevention, SteamVR features - a lot of things that are very important to us.

Currently we're aiming to release GearVR edition for public testing (through SideloadVR or similar solution) in the next 14 days. We don't expect to hit any major roadblocks.

P.S. Someone add VR support to No Man's Sky, please!