Jump to content

Corvus

Verified Members
  • Posts

    313
  • Joined

  • Last visited

Everything posted by Corvus

  1. Viveport DRM Guide Option 1. - Use DRM Wrapper Option 2. - Use Viveport SDK FAQ * How to test DRM? Disable one of the DRM requirements (disable internet, log out, close viveport) * How to use PC DRM wrapper? On the Viveport Developer Console, go to your title submission > VIVEPORT Listing > DRM section. Check the "Wrapper-based DRM" option. Upload a build to the store (beta or production release). Build will be automatically DRM wrapped during submission. * How to use Mobile DRM wrapper? Refer to the "Wrapper-based DRM" section of the submission guide: https://developer.vive.com/resources/viveport/store-guide/store-submission-guide/english/submitting-your-mobile-vr-content/viveport-listing/ * Does the Viveport DRM Wrapper work with Unity/Unreal games? Yes. * When should an app/game use the DRM Wrapper? If the game doesn't need any store SDK functionality (leaderboards, achievements, IAP, DLC, etc.). * When should an app/game use the Viveport SDK? If the game needs any Viveport store SDK functionality (leaderboards, achievements, IAP, DLC, etc.). * Can a title be submitted to Viveport that uses other store SDKs, such as Oculus or Steamworks? No, please remove other store SDKs such as Oculus or Steamworks. * Is DRM active in Beta releases? Yes, if it has been DRM wrapped or the Viveport SDK DRM has been implemented. * Will lack of DRM fail a Viveport submission for Production release? Yes, DRM is required for store submission unless explicitly communicated by the developer via email to developer support. NOTE (MOBILE ONLY): For Viveport Mobile submissions (Using the VIVE Wave SDK) there is a known bug where Unreal apps cannot be submitted with the DRM wrapper. Please use the Viveport SDK integration for Unreal + Wave apps. NOTE: PC submissions larger than 4GB may have issues with DRM wrapper. Suggest to use 7-zip software to zip the package and set Compression method to Deflated64. DRM Requirements: Viveport app open Viveport account logged in Internet connection DRM Wrapper or Viveport SDK, API "Init()" (initialization) success & "GetLicense()" success Documentation https://developer.vive.com/resources/documentation/viveport-sdk/apis/drm-api/ Unity Sample Code using System.Collections; using UnityEngine; using Viveport; // Viveport DRM Documentation: // https://developer.vive.com/resources/documentation/viveport-sdk/apis/drm-api/ // NOTE: To use Unity functions such as Application.Quit within callback functions requires running on the main thread. // Please attach 'MainThreadDispatcher.cs' to an object in your scene // https://developer.vive.com/resources/documentation/viveport-sdk/integration-with-viveport-sdk/for-unity-developers/using-the-unity-main-thread-dispatcher-script/ [RequireComponent(typeof(MainThreadDispatcher))] public class ViveportDRM : MonoBehaviour { // Get a VIVEPORT ID and VIVEPORT Key from the VIVEPORT Developer Console: // https://developer.viveport.com/console/titles // https://developer.vive.com/resources/documentation/viveport-sdk/overview/about-viveport-id-and-viveport-key/ static string VIVEPORT_ID = "VIVEPORT ID of the content"; // replace with developer VIVEPORT ID static string VIVEPORT_KEY = "VIVEPORT Key of the content"; // replace with developer VIVEPORT Key private const int SUCCESS = 0; private static bool bInitComplete = false; void Start() { Api.Init(InitStatusHandler, VIVEPORT_ID); // initialize VIVEPORT platform Invoke("CheckInitStatus", 10); // check that VIVEPORT Init succeeded } void OnDestroy() { Api.Shutdown(ShutdownHandler); } private static void InitStatusHandler(int nResult) // The callback of Api.init() { if (nResult == SUCCESS) { Debug.Log("VIVEPORT init pass"); Api.GetLicense(new MyLicenseChecker(), VIVEPORT_ID, VIVEPORT_KEY); // the response of Api.Init() is success, continue using Api.GetLicense() API bInitComplete = true; } else { Debug.Log("VIVEPORT init fail"); Application.Quit(); return; // the response of Api.Init() is fail } } private static void ShutdownHandler(int nResult) // The callback of Api.Shutdown() { if (nResult == SUCCESS) { Application.Quit(); // the response of Api.Shutdown() is success, close the content } else { return; // the response of Api.Shutdown() is fail } } private void CheckInitStatus() { if (!bInitComplete) { Debug.LogWarning("Viveport init check fail"); // init requires VIVEPORT app installed and online connection Application.Quit(); } else Debug.Log("Viveport init check pass"); } class MyLicenseChecker : Api.LicenseChecker { public override void OnSuccess(long issueTime, long expirationTime, int latestVersion, bool updateRequired) { // the response of Api.GetLicense() is DRM success, user is allowed to use the content and continue with content flow Debug.Log("Viveport DRM pass"); Debug.Log("issueTime: " + issueTime); Debug.Log("expirationTime: " + expirationTime); MainThreadDispatcher.Instance().Enqueue(SuccessAction()); } public override void OnFailure(int errorCode, string errorMessage) { // the response of Api.GetLicense() is DRM fail, user is not allowed to use the content MainThreadDispatcher.Instance().Enqueue(FailAction()); } // Use these methods to call Unity functions from the API callbacks on the main thread IEnumerator SuccessAction() { // todo: continue loading game or load next scene Debug.LogWarning("Viveport DRM Success"); yield return null; } IEnumerator FailAction() { Debug.LogWarning("Viveport DRM Fail: Quitting"); Application.Quit(); yield return null; } } }
  2. @Fireproof Thanks for re-reporting this. Can you let me know what version of Unity you're using?
  3. @BlueLee There is html documentation in the SDK. The location depends on what engine you are using. For example, if you're using Unity, you can open the "Document_Unity" link. There are two methods of getting eye openness and you can find there details here: GetEyeOpenness() Function /SRanipal_SDK_1.1.0.1/02_Unity/Document/Eye/html/class_vive_s_r_1_1anipal_1_1_eye_1_1_s_ranipal___eye.html#a4be08e3c161f0d1dd95f7b399be1acb3 SingleEyeData eye_openness Attribute /SRanipal_SDK_1.1.0.1/02_Unity/Document/Eye/html/struct_vive_s_r_1_1anipal_1_1_eye_1_1_single_eye_data.html#a10f9ab57750b7066a544684c3de0d4a9 GetEyeOpenness() Example float leftOpen; ViveSR.anipal.Eye.SRanipal_Eye.GetEyeOpenness(ViveSR.anipal.Eye.EyeIndex.LEFT, out leftOpen);
  4. Hi @JesúsM To use the Tobii SDK will require the VIVE Eye Tracking SDK (SRanipal) also be imported into your project. SRanipal SDK Download https://developer.vive.com/resources/knowledgebase/vive-sranipal-sdk/ Tobii XR SDK Setup https://vr.tobii.com/sdk/develop/unity/getting-started/vive-pro-eye/
  5. @BlueLee Please download the SDK and documentation to get a better understanding of the available data. To be clear, for #4 I am referring to the raw video of the users eyes. For eye_openness you get a float value between 0 (closed) and 1 (open).
  6. @Lhannan Interesting, thanks for sharing your test results! Also, make sure you have recently calibrated ( I find it helps with more accurate facial animation, less twitchy).
  7. 3. Yes, it is possible to show the fixation point on the PC monitor and record it. Recording functionality is not built into the SDK but can be implemented within engine or via 3rd party tools. 4. No, access to the raw eye camera video is not enabled.
  8. @sdfalter @OCH This issue has been identified and solutions are being investigated. There are reports of Unity 2019.3.6 working without the memory leak if downgrading to that version is an available option for your project. Currently Unity 2018.4 LTS + SDK3.1.94 are recommended for best performance and stability.
  9. @Lhannan I believe it works in 4.22 & 4.23 but haven't confirmed. I know that 4.24 & 4.25 require some code changes to work with the eye tracking SDK. Feel free to test 4.22. Make sure you're using the v2 test scene and v2 framework.
  10. Hello @BlueLee, 1. Number of blinking VIVE Eye Tracking SDK can easily measure blinking with the "eye_openness" function. 2. To get the gaze velocity, i need gaze position data. Gaze position data is available via the "gaze_direction_normalized" function. 3. To calculate the video's velocity(to compare with gaze velocity), i need video(or frames) to be decoded. Can you elaborate on the information you require? Please feel free to download the Eye Tracking SDK (SRanipal) and review the documentation for further information. https://developer.vive.com/resources/knowledgebase/vive-sranipal-sdk/
  11. @Lhannan Okay thanks for reporting this. We will look into Unreal 4.23 + v2 support and follow up with you if we can reproduce the issue.
  12. @Lhannan Are you testing with the v2 framework version? Support for extra blendshapes was added in v2.
  13. @mrk88 For the top figure you refer to, it appears to be measuring the position over time, not the displacement. From the published article: "Vertical eye position (upper panel) ... as a function of time since fixation onset at 0 ms."
  14. @Asish @shomik 1. To be clear the VR HMD screen refresh rate is not the same as the eye tracking data output frequency. If you're not using the callbacks or multi-threading the eye tracking data will be restricted by the main thread which will generally run at the HMD screen refresh rate. If using the callbacks the eye tracking data will output on average at 120Hz. To be clear, measuring the game frame rate will not reflect the callback frequency. 2. Yes, generally the VR HMD will have a different refresh rate than the monitors. 3. To measure the refresh rate for eye tracking you can record and compare the timestamp data. 4. Yes, on average the eye tracking data is output at 120Hz (120 times per second). If using callbacks the data output will not be limited by the refresh rate/fps of the games main thread.
  15. @Ashish How are you measuring the callback data frequency? If you're using the callback method or a separate thread for 120hz data it will be independent of the Unity FPS.
  16. @OCH We are looking into this issue. It appears to affect all versions of Unity after 2019.2, possibly due to the major changes in Unity XR. If possible use 2019.2 or 2018.4 LTS. When profiling you will notice a memory leak where the VRAM increases in size by about ~100MB /second until it crashes at 1GB VRAM usage.
  17. @mrk88 Can you elaborate on what values you're getting that are wrong?
  18. @wdrake @fayre If anyone is experiencing crashes with Unity and threads feel free to use the callback method in the SDK. The thread crashes may be due to aborting a thread during an eye data update. The callback method has been reliable in my testing. using UnityEngine; using ViveSR.anipal.Eye; using System.Runtime.InteropServices; public class CallbackExample : MonoBehaviour { private EyeData eyeData = new EyeData(); private bool eye_callback_registered = false; private void Update() { if (SRanipal_Eye_Framework.Status != SRanipal_Eye_Framework.FrameworkStatus.WORKING) return; if (SRanipal_Eye_Framework.Instance.EnableEyeDataCallback == true && eye_callback_registered == false) { SRanipal_Eye.WrapperRegisterEyeDataCallback(Marshal.GetFunctionPointerForDelegate((SRanipal_Eye.CallbackBasic)EyeCallback)); eye_callback_registered = true; } else if (SRanipal_Eye_Framework.Instance.EnableEyeDataCallback == false && eye_callback_registered == true) { SRanipal_Eye.WrapperUnRegisterEyeDataCallback(Marshal.GetFunctionPointerForDelegate((SRanipal_Eye.CallbackBasic)EyeCallback)); eye_callback_registered = false; } } private void OnDisable() { Release(); } void OnApplicationQuit() { Release(); } private void Release() { if (eye_callback_registered == true) { SRanipal_Eye.WrapperUnRegisterEyeDataCallback(Marshal.GetFunctionPointerForDelegate((SRanipal_Eye.CallbackBasic)EyeCallback)); eye_callback_registered = false; } } private void EyeCallback(ref EyeData eye_data) { eyeData = eye_data; // do stuff with eyeData.. } }
  19. Open SteamVR "Settings" > "Controllers" Select "MANAGE VIVE TRACKERS" Select desired "Tracker Role"
  20. @jason2 The Wave SDK is required to support Vive Focus.
  21. @h-shirakami See this post for help with android manifests: https://forum.vive.com/topic/6959-wave-android-manifest-guide/
  22. @Yihan At this time it is not possible to customize the calibration process. We appreciate the feedback and will consider it for future updates.
  23. @TimmyVonMoerkel For the Droolon F1 you will need a special driver. We will be sharing setup instructions soon.
  24. @tedw4rd Also, here's some tips you can try: https://www.unity3dtips.com/unity-z-fighting-solutions/ Z-fighting happens because two or more surfaces are at the place with almost the same depth (looking from the camera). The renderer pipeline need to check which surface is near, and which surface is far, but it fails to correctly distinguish this information. Intuitively, there are two easy ways to reduce the z-fighting issue. Separate these surfaces apart. In the demo you shows, the z-fighting issue happens on the text and the board. It’s easy to fix by moving the text forward a little bit, rather than putting it exactly on the board surface. Increase the precision of depth buffer. Increase precision of depth buffer also helps the rendering pipeline to distinguish nearer and further surfaces. https://docs.unity3d.com/ScriptReference/Camera.SetTargetBuffers.html
  25. @tedw4rd This may be a floating point precision error. How far away are the objects that are z-fighting? Can you share a sample scene to reproduce?
×
×
  • Create New...