Announcement

Collapse
No announcement yet.

VR Expansion Plugin

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

    If I based my project on your 4.16 template and upgraded it to 4.17 with the newest version of your plugin.
    Will I miss out on something important from the template? i.e. the stuff that is in the Content/VRexpansion folder which I based a lot of my objects on.
    Or is there anything else I need to think about when update to a later version of the engine?

    Comment


      Originally posted by KristofferF View Post
      If I based my project on your 4.16 template and upgraded it to 4.17 with the newest version of your plugin.
      Will I miss out on something important from the template? i.e. the stuff that is in the Content/VRexpansion folder which I based a lot of my objects on.
      Or is there anything else I need to think about when update to a later version of the engine?
      4.17 is mostly minor changes to get it working with engine changes, I have been updating the 4.16 branch with any actual changes instead of 4.17.


      Consider supporting me on patreon

      My Open source tools and plugins
      Advanced Sessions Plugin
      VR Expansion Plugin

      Comment


        Originally posted by mordentral View Post
        4.17 is mostly minor changes to get it working with engine changes, I have been updating the 4.16 branch with any actual changes instead of 4.17.
        Ok. Thanks for the quick answer.

        Comment


          Ive been having some problems with online matchmaking. Everything seems te be set up correctly and it integrates into Steam, however, sometimes the game fails to find the other hosting server. I try changing the host between PC's, but it keeps telling me no servers are found. Then after shutting down the program a few times, it finally appears in the server list. Is there a reason why the server finding is so unreliable? Is there something I should do to find the other hosting PC quicker? Can it be because I'm packaging the game quite a lot in different iterations and it gets confused with versions?

          Comment


            Originally posted by Link_AJ View Post
            Ive been having some problems with online matchmaking. Everything seems te be set up correctly and it integrates into Steam, however, sometimes the game fails to find the other hosting server. I try changing the host between PC's, but it keeps telling me no servers are found. Then after shutting down the program a few times, it finally appears in the server list. Is there a reason why the server finding is so unreliable? Is there something I should do to find the other hosting PC quicker? Can it be because I'm packaging the game quite a lot in different iterations and it gets confused with versions?
            Cross build servers don't work because by default the engine filters sessions by build ID.

            However the more likely reason is that currently the SteamVRHomeBeta interferes with the Steam subsystem loading for some reason.


            Consider supporting me on patreon

            My Open source tools and plugins
            Advanced Sessions Plugin
            VR Expansion Plugin

            Comment


              Originally posted by mordentral View Post
              Cross build servers don't work because by default the engine filters sessions by build ID.

              However the more likely reason is that currently the SteamVRHomeBeta interferes with the Steam subsystem loading for some reason.
              That is a good point, these problems have started after the Home Beta update. I'm gonna do some further research, thanks.

              Comment


                Pushed new commit to the plugin (4.16 master branch)

                Code:
                Skeletal mesh fixed when it has a rotated root bone and is gripped with physics
                
                Still not as optimal as I would have liked, but having to deal with center of mass
                and the root bone rotational difference between physics body and main is aggravating.
                Also fixed the center of mass setting to an offset location when the object is scaled.
                
                Added ClientSideAuthoritive_NoRep grip replication mode, acts just like ClientSide_Authoritive
                except it doesn't tell the server about it. Basically it behaves like the old LocalGrip identifier.
                
                Added IsALocalGrip function to the blueprint characters to clean up checking BOTH of the modes
                instead of just the one in some spots now (IE: where it chooses to call grip on client or server
                side).
                
                Set all grippable components to auto replicate by default.
                
                Otherwise a lot of funky things can happen, I think I removed this setting a few patches ago but it
                has proved to be important in most cases in multiplayer so i'm forcing it to default true
                again. Can still be disabled if you want.
                
                *Note* Stereo layer widget components appear to be updating incorrectly all of the sudden, I think this has to do with
                the new steamVR patch. I haven't found a fix yet, I can't test on Rift to see if it is working as intended there at the moment.
                Last edited by mordentral; 07-20-2017, 01:36 PM.


                Consider supporting me on patreon

                My Open source tools and plugins
                Advanced Sessions Plugin
                VR Expansion Plugin

                Comment


                  Hey [MENTION=4285]mordentral[/MENTION]!
                  Judging from the demo vids, and wiki pages I must admit that it sure seems like you've done some amazing work on that plugin.
                  Also it seems you're very active in updating and developing it which really makes using it in long-term projects a valid option.
                  Our studio has recently released an indie VR title on steam (http://store.steampowered.com/app/57...he_Lost_Fleet/).
                  The last week few weeks have all about learning and designing what's necessary to evolve it into a VR multiplayer game (we're thinking dedicated servers).
                  In any case, I've been struggling to find an efficient way of play-testing VR multiplayer in the editor.
                  I mean even the most basic things, like checking if a replicated actors behaves as expected, if all client's received some RPC call, if game is consistent between clients.
                  So a few questions in terms of general multiplayer VR development workflow:
                  - How do you test multiplayer functionality each time you make a change?
                  - Is it possible to some how perform testing for 2 clients and a server using just a single PC and headset (even if the other client is just running a keyboard/mouse version of the game)?
                  - Any debugging tools /tips you could share from your experience?

                  Comment


                    Originally posted by Jake1337 View Post
                    Hey [MENTION=4285]mordentral[/MENTION]!
                    Judging from the demo vids, and wiki pages I must admit that it sure seems like you've done some amazing work on that plugin.
                    Also it seems you're very active in updating and developing it which really makes using it in long-term projects a valid option.
                    Our studio has recently released an indie VR title on steam (http://store.steampowered.com/app/57...he_Lost_Fleet/).
                    The last week few weeks have all about learning and designing what's necessary to evolve it into a VR multiplayer game (we're thinking dedicated servers).
                    In any case, I've been struggling to find an efficient way of play-testing VR multiplayer in the editor.
                    I mean even the most basic things, like checking if a replicated actors behaves as expected, if all client's received some RPC call, if game is consistent between clients.
                    So a few questions in terms of general multiplayer VR development workflow:

                    - How do you test multiplayer functionality each time you make a change?

                    In 2D, I have a function setup so that if I am not specifically launching in VRPreview then it uses a copy of my character with the head and hands locked (ie acts like a normal character).
                    prior to actual feature release everything gets tested again actually in VR across two computers. This was harder to do in the beginning because many of the core features needed testing in VR.
                    However since the plugin is fairly stable I am able to do the majority of initial testing in 2D now.

                    It is likely that any eventual system you make would be able to get to that point as well fairly quickly.


                    - Is it possible to some how perform testing for 2 clients and a server using just a single PC and headset (even if the other client is just running a keyboard/mouse version of the game)?

                    See above but set client or server to non vr mode, can launch from uproject without packaging for local testing

                    - Any debugging tools /tips you could share from your experience?

                    Netprofiler is god in this engine, every new feature unless you specifically know what the overhead is going to be should be ran through it to check for bandwidth problems.

                    As of 4.16 you need to set minimum NetUpdateFrequency times or you will get some very aggravating inconsistencies, this is due to AdaptiveNetFrequency being enabled by default now.
                    I wouldn't turn the feature off though, it is good, you just have to be careful.

                    You appear to have some more complicated movement systems in your game, transitioning this to multiplayer "correctly" will be more difficult than you expect unless you go the route of
                    full client side movement authority or adapt / re-create the character movement system.
                    Commented in bold above


                    Consider supporting me on patreon

                    My Open source tools and plugins
                    Advanced Sessions Plugin
                    VR Expansion Plugin

                    Comment


                      "In 2D, I have a function setup so that if I am not specifically launching in VRPreview then it uses a copy of my character with the head and hands locked (ie acts like a normal character)."

                      Yeah I get what you are saying, we have a similar "KMS mode" setup that runs if HMD is not connected. Is yours available in the template/example project that's currently available?

                      "See above but set client or server to non vr mode, can launch from uproject without packaging for local testing"

                      You mean running the editor from the cmd like "...UE4Editor.exe" "C:\Users\vr\Documents\Unreal Projects\NextStep\myproject.uproject" 10.100.102.2 -game -fullscreen -log -nosteam"?
                      And do you actually run your multiplayer testing this way as well, having clients/server all run on a single workstation?


                      "You appear to have some more complicated movement systems in your game"

                      Even though it comes off as being complicated, I'm hoping it should be not too complicated to pull off in multiplayer, since it's mostly navigation which by itself is predictable and should be able to run almost completely on the client side (once a path has been calculated on the server).
                      However since I've completely ignored the character movement component in my implementation (I mainly use the "set location along spline" + "Set actor location", more or less) and so completely ignores not only physics (which we handle artificially), it will also not be able to take advantage of the built in network features such as correction etc.
                      Needless to say, I manually handle the whole syncing of the "character location relative to camera/HMD offset location etc." logic myself.
                      That's why I was looking in to your implementation as it seems to almost magically combine the best of both worlds.
                      **Correct me if I'm wrong but using the "navigation" locomotion option you displayed I could achieve a similar result, at least for walking around.**
                      For the jumping I would have to choose between the physics approach which you use and a "spline movement" approach which we currently make use of


                      In any case I've downloaded the example project along with the plugin and will be trying it out and playing around with it asap.
                      Last edited by Jake1337; 07-21-2017, 12:26 PM.

                      Comment


                        Originally posted by Jake1337 View Post
                        "In 2D, I have a function setup so that if I am not specifically launching in VRPreview then it uses a copy of my character with the head and hands locked (ie acts like a normal character)."

                        Yeah I get what you are saying, we have a similar "KMS mode" setup that runs if HMD is not connected. Is yours available in the template/example project that's currently available?

                        "See above but set client or server to non vr mode, can launch from uproject without packaging for local testing"

                        You mean running the editor from the cmd like "...UE4Editor.exe" "C:\Users\vr\Documents\Unreal Projects\NextStep\myproject.uproject" 10.100.102.2 -game -fullscreen -log -nosteam"?
                        And do you actually run your multiplayer testing this way as well, having clients/server all run on a single workstation?


                        "You appear to have some more complicated movement systems in your game"

                        Even though it comes off as being complicated, I'm hoping it should be not too complicated to pull off in multiplayer, since it's mostly navigation which by itself is predictable and should be able to run almost completely on the client side (once a path has been calculated on the server).
                        However since I've completely ignored the character movement component in my implementation (I mainly use the "set location along spline" + "Set actor location", more or less) and so completely ignores not only physics (which we handle artificially), it will also not be able to take advantage of the built in network features such as correction etc.
                        Needless to say, I manually handle the whole syncing of the "character location relative to camera/HMD offset location etc." logic myself.
                        That's why I was looking in to your implementation as it seems to almost magically combine the best of both worlds.
                        **Correct me if I'm wrong but using the "navigation" locomotion option you displayed I could achieve a similar result, at least for walking around.**
                        For the jumping I would have to choose between the physics approach which you use and a "spline movement" approach which we currently make use of


                        In any case I've downloaded the example project along with the plugin and will be trying it out and playing around with it asap.
                        Yeah you can connect to local machine servers with -nosteam and Open command or lan sessions.

                        The navigation setup I have is a bit different, you likely use an AI controller, I don't, I just moved some of the AI controller functions into the player character so that I could navigate in there. However something you would want to consider is that with the default navigation in engine the navigation is server sided only. In my plugin I specifically send an additional variable to the server from the movement component so that client sided navigation is also possible in engine.


                        Consider supporting me on patreon

                        My Open source tools and plugins
                        Advanced Sessions Plugin
                        VR Expansion Plugin

                        Comment


                          Hi Mordentral,

                          Quick question: I have a bow in my game and until recently I was able to modify the rotation of the bow (while gripped in "Physics Only") just by setting the world and local rotation in the bow blueprint every tick, but since 4.16.2 this won't work anymore. It's like the grip is resetting the rotation every tick. The blueprint object is just a static mesh actor.

                          Do you have any idea what might be happening? In grip mode "Hybrid" it applies the rotation correctly.

                          Thanks!
                          Last edited by jawatr; 07-22-2017, 01:06 AM.

                          Comment


                            Originally posted by jawatr View Post
                            Hi Mordentral,

                            Quick question: I have a bow in my game and until recently I was able to modify the rotation of the bow (while gripped in "Physics Only") just by setting the world and local rotation in the bow blueprint every tick, but since 4.16.2 this won't work anymore. It's like the grip is resetting the rotation every tick. The blueprint object is just a static mesh actor.

                            Do you have any idea what might be happening? In grip mode "Hybrid" it applies the rotation correctly.

                            Thanks!
                            The only reason that worked is because the tick order of the controllers was before the tick event you were using in blueprint, so your tick ordering is off. There is nothing specific to the grip that changed on my end that would effect that and even if epic changed something I am not aware on in 4.16.2 you should still be able to overwrite rotation when the tick happens after the initial movement.

                            You have a few options
                            1. Switch the primary tick of the blueprint to post physics (controllers are pre-physics so they tick prior to that)..not the best option as any physics collisions would be 1 tick behind.
                            2. Add a TickPrerequisite of the controller to the object after it is gripped (forces it to tick after the controller), you would then get reliable tick ordering, this is easy and you could keep your current logic.
                            3. Use the AdditionTransform to handle the rotation directly in the gripping system and without having to overwrite anything.


                            *Edit* I just remembered that the tick preres is already automatically being set on grip so that actor tick has the correct locations, so that should already be working.


                            I will also note that there is little to no reason to even be using a managed grip if you are already setting the location and rotation on each tick, you would be better off using the "Custom" grip type and moving the bow in the TickGrip event. This would bypass all of the logic that you are already throwing out making it less intensive and also giving you complete control over the movements.


                            Consider supporting me on patreon

                            My Open source tools and plugins
                            Advanced Sessions Plugin
                            VR Expansion Plugin

                            Comment


                              Originally posted by mordentral View Post
                              The navigation setup I have is a bit different, you likely use an AI controller, I don't, I just moved some of the AI controller functions into the player character so that I could navigate in there. However something you would want to consider is that with the default navigation in engine the navigation is server sided only. In my plugin I specifically send an additional variable to the server from the movement component so that client sided navigation is also possible in engine.
                              Actually I just use the navmesh to calculate the waypoints then I handle the navigation myself instead of using the engine's NavMeshWalking - I do it by generating a spline from the waypoints and walking it as my path.

                              Comment


                                I ended up adding the Tick-prerequisite, it was cleaner in my setup and worked perfectly. Thank you so much!

                                BTW, where is the TickGrip event? I looked for it in the grip motion controller component but I could not find it.

                                Comment

                                Working...
                                X