Jump to content

Johnson_Wu

Verified Members
  • Posts

    16
  • Joined

  • Last visited

Posts posted by Johnson_Wu

  1. Hi @Elysia

    I checked the logs and they all crashed at "No implementation found for void com.htc.vr.unreal.ResourceWrapper.initNative()"

    I found lots of logs had been suppressed, could you directly launch your content by QUICK LAUNCH like below

    image.png.cb2c9a9cfbda7aa3c13223b13e6622b8.png

    And share the files under C:\Users\<Your Account>\AppData\Roaming\Unreal Engine\AutomationTool\Logs\E+Program+Files+Epic+Games+UE_5.2 after the app crash with us for more check.

    Or, share the app you packaged.

    Thanks a lot!

  2. Hi @rio_nkwt,

    Here is our ViveOpenXR tutorial for Hand Tracking https://developer.vive.com/resources/openxr/unreal/unreal-tutorials/handtracking/.

    Will you ever package ViveOpenXRGame/Content/HandTracking/Map/HandTrackingMap.umap, install and play it on Focus3?

    If you would like to use Vive Business Streaming(VBS) feature, please refer to the documentation https://business.vive.com/us/support/vbs/category_howto/vive-business-streaming.html

    1. After you install the VIVE Business Streaming application on PC. Update the server application and android client app by clicking the two buttons below (in the red circle).  

    image.png.736895dbd39640a6c470e3bf7f961bed.png

    2. Launch the VIVE Business app in Focus3.

    3. Click VR Preview to play.

    image.png.40a07a5c2f43f5878c9a410fba4c3f78.png 

    4. Then you can see the hand tracking model.

    image.thumb.png.47e239eafd3877ce375a28e0a147f348.png

    BR

     

    • Like 1
  3. Hi @UnendlicheMoeglichkeiten,

    Here comes the solution for quick support by following the code snippet to modify WaveVR SDK. You can use GetHMDWornState after doing so. We will support the function in the next release.

    image.png.96bd4f8ad5a5f37246be08c95a524c29.png

     

    You need to modify the following four files and put the attached file ProximitySensorEventListener.java under Plugins\WaveVR\Source\WaveVR\java\com\htc\vr\unreal

    modified:   plugin/Plugins/WaveVR/Source/WaveVR/Private/Platforms/Android/JNI.cpp
    modified:   plugin/Plugins/WaveVR/Source/WaveVR/Private/WaveVRHMD.cpp
    modified:   plugin/Plugins/WaveVR/Source/WaveVR/Private/WaveVRHMD.h
    modified:   plugin/Plugins/WaveVR/Source/WaveVR/WaveVR_UPL.xml

    prerequisite:

    The project should be a C++ project

    Here are the steps:

    1.  Put the attached file ProximitySensorEventListener.java under Plugins\WaveVR\Source\WaveVR\java\com\htc\vr\unreal

    2. modified:   plugin/Plugins/WaveVR/Source/WaveVR/Private/Platforms/Android/JNI.cpp

     // conditions signed by you and all SDK and API requirements,
     // specifications, and documentation provided by HTC to You."
    
    +#include "HeadMountedDisplayTypes.h"
    +
     #if PLATFORM_ANDROID
     #include "RequestResultObject.h"
     #include "RequestUsbResultObject.h"
    @@ -231,4 +233,8 @@ extern "C" void Java_com_htc_vr_unreal_VRTransitionBroadcastReceiver_StateOnRece
             FWaveVRHMD::SetVRTransitionState(state);
     }
    
    +extern "C" void Java_com_htc_vr_unreal_ProximitySensorEventListener_OnHMDWornStateChanged(JNIEnv* LocalJNIEnv, jobject LocalThiz, jboolean isWearing) {
    +       (isWearing) ? FWaveVRHMD::SetHMDWornState(EHMDWornState::Worn) : FWaveVRHMD::SetHMDWornState(EHMDWornState::NotWorn);
    +}
    +
     #endif  // PLATFORM_ANDROID

    3.  plugin/Plugins/WaveVR/Source/WaveVR/Private/WaveVRHMD.h

    @@ -131,6 +131,7 @@ public:
            virtual void RecordAnalytics() override { LOG_FUNC(); FHeadMountedDisplayBase::RecordAnalytics(); }
            virtual bool IsRenderingPaused() const override { LOG_FUNC(); return IHeadMountedDisplay::IsRenderingPaused();/*false*/ }
            virtual void SetClippingPlanes(float NCP, float FCP) override;
    +       virtual EHMDWornState::Type GetHMDWornState() override { return HMDWornState; }
    
            /** IHeadMountedDisplay interface not used*/
            virtual void EnableHMD(bool allow = true) override;
    @@ -156,7 +157,6 @@ public:
            virtual const float* GetBlueDistortionParameters() const override { LOG_FUNC(); return nullptr; }
            virtual bool DoesAppUseVRFocus() const override { LOG_FUNC(); return IHeadMountedDisplay::DoesAppUseVRFocus(); }
            virtual bool DoesAppHaveVRFocus() const override { LOG_FUNC(); return IHeadMountedDisplay::DoesAppHaveVRFocus(); }
    -       virtual EHMDWornState::Type GetHMDWornState() override { return EHMDWornState::Unknown; }
    
             //** FHeadMountedDisplayBase interface */
             virtual bool PopulateAnalyticsAttributes(TArray<struct FAnalyticsEventAttribute>& EventAttributes) override { LOG_FUNC(); return FHeadMountedDisplayBase::PopulateAnalyticsAttributes(EventAttributes);}
    @@ -562,6 +562,7 @@ public:
            static void SetVRTransitionState(bool state);
            bool IsVRTransitionShowing();
            void SetFrameSharpnessEnhancementLevel(float level);
    +       static void SetHMDWornState(EHMDWornState::Type state) { LOG_FUNC(); HMDWornState = state; }
    
     private:
            bool bHmdEnabled;
    @@ -606,6 +607,8 @@ private:
            static bool bVRTransitionIsShowning;
            static bool bIsVRTransitionInUse; //Focus3 and later.
    
    +       static EHMDWornState::Type HMDWornState;
    +
            TArray<FTransform> PoseModeOffsets;
            uint8_t CachedPoseModes[2] = { 0 };

    4.  plugin/Plugins/WaveVR/Source/WaveVR/Private/WaveVRHMD.cpp

    @@ -2367,3 +2367,5 @@ void FWaveVRHMD::SetFrameSharpnessEnhancementLevel(float level)
            LOG_FUNC();
            mRender.SetFrameSharpnessEnhancementLevel(level);
     }
    +
    +EHMDWornState::Type FWaveVRHMD::HMDWornState = EHMDWornState::Unknown;

    5. modified:   plugin/Plugins/WaveVR/Source/WaveVR/WaveVR_UPL.xml

    @@ -163,6 +163,7 @@
                            import com.htc.vr.unreal.OEMConfig;
                            import com.htc.vr.unreal.SoftwareIpd;
                            import com.htc.vr.unreal.VRTransitionBroadcastReceiver;
    +                       import com.htc.vr.unreal.ProximitySensorEventListener;
                    </insert>
            </gameActivityImportAdditions>
    
    @@ -180,6 +181,8 @@
                            private PermissionCallback mPermissionCallback = null;
                            private OEMConfig mOEMConfig = null;
                            private VRTransitionBroadcastReceiver mVRTransitionBR = null;
    +                       private Sensor mProximity = null;
    +                       private ProximitySensorEventListener mProximitySensorEventListener = null;
    
                            ///@Override
                            ///public void setRequestedOrientation(int requestedOrientation) {
    @@ -289,6 +292,9 @@
                            mOEMConfig.setDelegate(mVRActivityDelegate);
    
                            mVRTransitionBR = VRTransitionBroadcastReceiver.getInstance();
    +
    +                       mProximity = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
    +                       mProximitySensorEventListener = new ProximitySensorEventListener();
                    </insert>
            </gameActivityOnCreateAdditions>
    
    @@ -348,6 +354,12 @@
                            mVRActivityDelegate.onPause();
                            <!--for Permission Manager-->
                            mPM.onPauseAndReturnFail();
    +
    +                       if (mProximitySensorEventListener != null)
    +                       {
    +                               sensorManager.unregisterListener(mProximitySensorEventListener);
    +                       }
    +
                            if (isFinishing()) {
                                    Log.debug("Activity isFinishing()!");
                            }
    @@ -360,6 +372,12 @@
                            Log.debug("[WaveVR_UPL Additions] onResume()!");
                            mOEMConfig.onResume();
                            mVRActivityDelegate.onResume();
    +
    +                       if (mProximity != null &amp;&amp; mProximitySensorEventListener != null)
    +                       {
    +                               sensorManager.registerListener(mProximitySensorEventListener, mProximity, SensorManager.SENSOR_DELAY_NORMAL);
    +                       }
    +
                            <!--for Permission Manager-->
                            mPM.onResume();
                            <!--Workaround to prevent restarting application.-->

    6. Rebuild the Development Editor, the GetHMDWornState will take effect.

    ProximitySensorEventListener.java

  4. Hi @UnendlicheMoeglichkeiten,

    As I know, the two events WVR_EventType_RenderingToBeResumed and WVR_EventType_RenderingToBePaused had already not been sent anymore because the rendering behavior was changing(the rendering process will not been Resumed or Paused). That is to say, the solution in Unity above does not work now,too. The alternative way for Unity is to listen ProximitySensor which is implement by Andoird API directly. 

    But Unreal Engine does not have the same feature(API) like that, so we need to listen the event by Android API and JNI. The solution is ongoing, I will share the code snippet by next Monday.

  5. HI @AKATheBoss,

    1. The WaveVR has no plan for supporting UE5.3 yet. The alternative way is to consider our vive openxr SDK https://developer.vive.com/resources/openxr/unreal/unreal-overview/, you can check the features to see if they meet your need first. (Note that the project settings are different from WaveVR)

    2. For the crash problem, could you share your log with us to check further.

    Here are the steps:

    1) Make sure the device is connected to PC with USB. (Open Powershell and input "adb devices" to check.

    2) Start logging by "adb logcat > log.log" on PC side.

    3) Launch the app in HMD (Focus3 headset)

    4) "Ctrl + C" to stop logging.

    5) The log.log is what we need.

    Thanks a lot!

    • Like 1
  6. Hi @Flaxias,

    Have you ever tried this:

    Based on the Virtual Reality project of Unreal Engine to align project settings. Import and enable the WaveVR plugin.

    image.png.f1b2c156f598704345feef9d4b83e33c.png 

    Then keep both the Instanced Stereo and the Mobile Multi-View ENABLED.

    Enlarge the New Viewport Resolution:

                    Navigate to Editor -> Editor Preference -> Level Editor -> Play -> Game Viewport Settings -> New Viewport Resolution

                    Select a large resolution (might be 27” monitor for example)

    image.png.e237a59fda8549a28a0f8be40e5aca81.png

    BR,

    Johnson

  7. Hi @Mike12345, because the ViveOpenXR plugin highly depends on the ROM runtime, please update your ROM (Navigate to Settings > General > System update in the launcher) then try.

    If the issue still exists, please inform us what the System Version of your device is. (Navigate to Settings > General > About > System version).

    The problem has been fixed since version number 1.0.999.372 on VIVE XR Elite.

    For VIVE Focus 3,  the crash problem will be fixed in the next FOTA (greater than  5.0.999.820).

    Thanks!

×
×
  • Create New...