PageSourceSearch

https://docs-vrgeo-version3.netlify.app/assets/js/8c6b3eab.d265eab2.js

js docs-vrgeo-version3.netlify.app collected 2026-10-03 10:39:56 UTC 30,540 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkvrgs_docs_v_3_1=globalThis.webpackChunkvrgs_docs_v_3_1||[]).push([[2201],{74164(e,n,t){t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"general/viewing-collaboration/vr-user-guide","title":"VR / Headset User Guide","description":"Explore VRGS outcrop models in virtual reality \u2014 setup, controller layout, navigation, teleport, grab-the-world scaling, the paged radial menu, and in-headset measurement and annotation tools.","source":"@site/docs/general/viewing-collaboration/vr_user_guide.md","sourceDirName":"general/viewing-collaboration","slug":"/general/viewing-collaboration/vr-user-guide","permalink":"/docs/next/general/viewing-collaboration/vr-user-guide","draft":false,"unlisted":false,"editUrl":"https://github.com/vrgeoscience/vrgs_docs_v3/tree/master/docs/general/viewing-collaboration/vr_user_guide.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"id":"vr-user-guide","title":"VR / Headset User Guide","sidebar_label":"VR Headset","description":"Explore VRGS outcrop models in virtual reality \u2014 setup, controller layout, navigation, teleport, grab-the-world scaling, the paged radial menu, and in-headset measurement and annotation tools.","keywords":["VR","virtual reality","OpenXR","headset","Vulkan","measurement","orientation","polyline"],"sidebar_position":2},"sidebar":"docs","previous":{"title":"Figures and Images","permalink":"/docs/next/general/viewing-collaboration/figures-and-images"},"next":{"title":"Virtual Field Trips","permalink":"/docs/next/general/viewing-collaboration/virtual-field-trips"}}');var s=t(74848),i=t(28453);const o={id:"vr-user-guide",title:"VR / Headset User Guide",sidebar_label:"VR Headset",description:"Explore VRGS outcrop models in virtual reality \u2014 setup, controller layout, navigation, teleport, grab-the-world scaling, the paged radial menu, and in-headset measurement and annotation tools.",keywords:["VR","virtual reality","OpenXR","headset","Vulkan","measurement","orientation","polyline"],sidebar_position:2},l=void 0,d={},a=[{value:"Requirements",id:"requirements",level:2},{value:"Choosing the renderer",id:"choosing-the-renderer",level:2},{value:"Starting VR",id:"starting-vr",level:2},{value:"Controls at a glance",id:"controls-at-a-glance",level:2},{value:"Moving around",id:"moving-around",level:2},{value:"Free-fly (thumbsticks)",id:"free-fly-thumbsticks",level:3},{value:"Teleport",id:"teleport",level:3},{value:"Grab the world (scale & reposition)",id:"grab-the-world-scale--reposition",level:3},{value:"The laser pointer",id:"the-laser-pointer",level:2},{value:"The radial menu",id:"the-radial-menu",level:2},{value:"Root ring",id:"root-ring",level:3},{value:"Display page",id:"display-page",level:3},{value:"Edit page",id:"edit-page",level:3},{value:"Edit tools",id:"edit-tools",level:2},{value:"Scale Bar",id:"scale-bar",level:3},{value:"Measure",id:"measure",level:3},{value:"Orientation",id:"orientation",level:3},{value:"Polyline",id:"polyline",level:3},{value:"Horizon",id:"horizon",level:3},{value:"Comfort and motion sickness",id:"comfort-and-motion-sickness",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"Globe imagery and terrain in the headset",id:"globe-imagery-and-terrain-in-the-headset",level:2},{value:"Known limitations",id:"known-limitations",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["VRGS can display 3D outcrop models, point clouds and tiled scenes in ",(0,s.jsx)(n.strong,{children:"virtual reality"})," through any OpenXR-compatible headset. In VR you can walk around an outcrop at life-size, fly through it, teleport across it, or shrink the whole model to a tabletop you can lean over and inspect. You can also ",(0,s.jsx)(n.strong,{children:"measure and annotate"})," the outcrop in the headset \u2014 place scale bars, take distance measurements, record dip/azimuth readings and digitise polylines, all saved straight into the project."]}),"\n",(0,s.jsx)(n.admonition,{title:"Preview feature",type:"info",children:(0,s.jsxs)(n.p,{children:["VR runs on the ",(0,s.jsx)(n.strong,{children:"Vulkan 3D view"}
1)," and is currently a preview. It is enabled opt-in (see ",(0,s.jsx)(n.a,{href:"#requirements",children:"Requirements"}),") so standard desktop sessions never start a VR runtime or pay any cost."]})}),"\n",(0,s.jsx)(n.h2,{id:"requirements",children:"Requirements"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Requirement"}),(0,s.jsx)(n.th,{children:"Notes"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"A VR headset"}),(0,s.jsx)(n.td,{children:"Meta Quest (Link/Air Link), Valve Index, HTC Vive, Windows Mixed Reality, or any OpenXR device."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"An OpenXR runtime"}),(0,s.jsxs)(n.td,{children:["e.g. ",(0,s.jsx)(n.strong,{children:"SteamVR"})," or the ",(0,s.jsx)(n.strong,{children:"Oculus"})," app, installed and running, with the headset connected and awake."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:["The ",(0,s.jsx)(n.strong,{children:"Vulkan"})," renderer"]}),(0,s.jsxs)(n.td,{children:["VR runs in the Vulkan 3D view. VRGS uses the Vulkan renderer by default; see ",(0,s.jsx)(n.a,{href:"#choosing-the-renderer",children:"Choosing the renderer"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Two tracked controllers"}),(0,s.jsx)(n.td,{children:"Required for navigation, the laser pointer and the menu."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"choosing-the-renderer",children:"Choosing the renderer"}),"\n",(0,s.jsxs)(n.p,{children:["VRGS can render the 3D view with either the ",(0,s.jsx)(n.strong,{children:"Vulkan"})," backend (required for VR) or the legacy ",(0,s.jsx)(n.strong,{children:"OpenGL"})," backend. Vulkan is the default. The choice is ",(0,s.jsx)(n.strong,{children:"saved between sessions"}),", and you can override it from the command line:"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Command-line argument"}),(0,s.jsx)(n.th,{children:"Effect"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"-vulkan"})}),(0,s.jsx)(n.td,{children:"Use the Vulkan renderer (enables VR). Saved as the new default."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"-opengl"})," (or ",(0,s.jsx)(n.code,{children:"-gl"}),")"]}),(0,s.jsx)(n.td,{children:"Use the OpenGL renderer. Saved as the new default."})]})]})]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bat",children:"start VRGS.exe -vulkan\n"})}),"\n",(0,s.jsx)(n.p,{children:"If you pass nothing, VRGS uses whichever renderer you last selected (Vulkan on a fresh install)."}),"\n",(0,s.jsx)(n.h2,{id:"starting-vr",children:"Starting VR"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Make sure VRGS is running with the ",(0,s.jsx)(n.strong,{children:"Vulkan"})," renderer (the default \u2014 see above)."]}),"\n",(0,s.jsxs)(n.li,{children:["Open a project and a ",(0,s.jsx)(n.strong,{children:"3D model view"}),", then load a model."]}),"\n",(0,s.jsxs)(n.li,{children:["Put on the headset, then run the ",(0,s.jsx)(n.strong,{children:"Connect HMD"})," command to start the session. Run it again at any time to stop VR and return to the desktop view."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["If ",(0,s.jsx)(n.strong,{children:"Connect HMD"})," reports that it can't start, it's almost always one of: VRGS is running in OpenGL mode, the OpenXR runtime isn't running, or the headset isn't connected/awake. See ",(0,s.jsx)(n.a,{href:"#troubleshooting",children:"Troubleshooting"}),"."]})}),"\n",(0,s.jsx)(n.h2,{id:"controls-at-a-glance",children:"Controls at a glance"}),"\n",(0,s.jsxs)(n.p,{children:["The layout follows a ",(0,s.jsx)(n.strong,{children:"Mode-2 drone"})," convention (the most common RC/drone stick layout)."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Input"}),(0,s.jsx)(n.th,{children:"Action"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Left thumbstick"})}),(0,s.jsx)(n.td,{children:"X = turn (yaw) \xb7 Y = move up / down"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Right thumbstick"})}),(0,s.jsx)(n.td,{children:"X = strafe left / right \xb7 Y = move forward / back"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"Right grip"})," (hold)"]}),(0,s.jsx)(n.td,{children:"Speed boost while moving"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"Left grip"})," (hold \u2192 release)"]}),(0,s.jsx)(n.td,{children:"Teleport: aim, then release to jump"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"Both grips"})," (hold)"]}),(0,s.jsx)(n.td,{children:"Grab the world \u2014 scale & reposition the model"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Right trigger"})}),(0,s.jsxs)(n.td,{children:["Laser pointer \xb7 select a menu item \xb7 place points with an ",(0,s.jsx)(n.a,{href:"#edit-tools",children:"edit tool"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Left menu button"})}),(0,s.jsx)(n.td,{children:"Open / close the radial menu"})]})]})]}),"\n",(0,s.jsx)(n.admonition,{title:"In an edit tool",type:"note",children:(0,s.jsxs)(n.p,{children:["While an ",(0,s.jsx)(n.a,{href:"#edit-tools",children:"edit tool"})," is armed the ",(0,s.jsx)(n.strong,{children:"right trigger places points"})," and the ",(0,s.jsx)(n.strong,{children:"left grip finishes a polyline"})," (teleport is paused so the grip is free). Re-open the menu to switch tools or stop."]})}),"\n",(0,s.jsx)(n.admonition,{title:"Controller differences",type:"note",children:(0,s.jsxs)(n.p,{children:["Meta Touch and Valve Index controllers use the layout above directly. On ",(0,s.jsx)(n.strong,{children:"HTC Vive"})," the ",(0,s.jsx)(n.strong,{children:"trackpad"})," stands in for the thumbstick, and the ",(0,s.jsx)(n.strong,{children:"menu button"})," opens the radial menu. Any OpenXR controller will at least show the hand models and track pose."]})}),"\n",(0,s.jsx)(n.h2,{id:"moving-around",children:"Moving around"}),"\n",(0,s.jsx)(n.p,{children:"There are three complementary ways to move. They w
1ork together \u2014 pick whichever suits the moment."}),"\n",(0,s.jsx)(n.h3,{id:"free-fly-thumbsticks",children:"Free-fly (thumbsticks)"}),"\n",(0,s.jsxs)(n.p,{children:["Push the sticks to fly. With the ",(0,s.jsx)(n.strong,{children:"Mode-2"})," layout, the ",(0,s.jsx)(n.strong,{children:"right stick"})," drives forward/back and strafe (where you're going), and the ",(0,s.jsx)(n.strong,{children:"left stick"})," turns you and moves you up/down."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Hold the ",(0,s.jsx)(n.strong,{children:"right grip"})," for a ",(0,s.jsx)(n.strong,{children:"speed boost"})," \u2014 useful for crossing large scenes quickly."]}),"\n",(0,s.jsx)(n.li,{children:"Flying speed scales with the size of the scene, so it stays usable whether you're inspecting a hand sample or a kilometre-wide cliff."}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"Comfort",type:"caution",children:(0,s.jsxs)(n.p,{children:["Continuous stick movement is the most likely thing to cause motion discomfort. A ",(0,s.jsx)(n.a,{href:"#comfort-and-motion-sickness",children:"comfort vignette"})," is on by default to help, and you can ",(0,s.jsx)(n.a,{href:"#the-radial-menu",children:"cycle the speed"})," down or switch to teleport."]})}),"\n",(0,s.jsx)(n.h3,{id:"teleport",children:"Teleport"}),"\n",(0,s.jsxs)(n.p,{children:["Hold the ",(0,s.jsx)(n.strong,{children:"left grip"})," to aim a ray from your left controller; a ",(0,s.jsx)(n.strong,{children:"green marker"})," shows where you'll land and a beam shows the aim. ",(0,s.jsx)(n.strong,{children:"Release the grip"})," to jump there instantly. A short haptic pulse confirms the jump."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The ray lands on the model surface where you point; if you aim past everything it falls back to ground level."}),"\n",(0,s.jsx)(n.li,{children:"Teleport is a low-discomfort way to cover distance \u2014 your view doesn't slide, it cuts."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"grab-the-world-scale--reposition",children:"Grab the world (scale & reposition)"}),"\n",(0,s.jsxs)(n.p,{children:["Hold ",(0,s.jsx)(n.strong,{children:"both grips"})," at once to grab the whole model with your hands:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Spread your hands apart"})," to enlarge the model (zoom in); ",(0,s.jsx)(n.strong,{children:"bring them together"})," to shrink it \u2014 for example, collapse a whole cliff face down to a ",(0,s.jsx)(n.strong,{children:"tabletop"})," you can walk around and look over."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Move both hands together"})," to slide the model into a comfortable position."]}),"\n",(0,s.jsx)(n.li,{children:"The scaling happens around the point between your hands, so the feature you're holding stays put while everything scales around it."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Your scale and position ",(0,s.jsx)(n.strong,{children:"persist"})," after you let go, so you can grab, adjust, release, and keep working. Teleport and free-fly continue to work correctly at any scale."]}),"\n",(0,s.jsx)(n.admonition,{title:"Reset",type:"tip",children:(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.strong,{children:"Recenter"})," in the ",(0,s.jsx)(n.a,{href:"#the-radial-menu",children:"radial menu"})," to snap straight back to the original view at 1:1."]})}),"\n",(0,s.jsx)(n.h2,{id:"the-laser-pointer",children:"The laser pointer"}),"\n",(0,s.jsxs)(n.p,{children:["Pull the ",(0,s.jsx)(n.strong,{children:"right trigger"})," to project a thin, translucent laser beam from your right controller. It doubles as the ",(0,s.jsx)(n.strong,{children:"cursor for the radial menu"})," \u2014 point at an item and the trigger selects it."]}),"\n",(0,s.jsx)(n.h2,{id:"the-radial-menu",children:"The radial menu"}),"\n",(0,s.jsxs)(n.p,{children:["Press the ",(0,s.jsx)(n.strong,{children:"left menu button"})," to open a ring of options around your left controller. Each option shows an ",(0,s.jsx)(n.strong,{children:"icon and a text label"}),". ",(0,s.jsx)(n.strong,{children:"Point at an item with the right-controller laser"})," (a soft haptic tick confirms the highlight) and ",(0,s.jsx)(n.strong,{children:"pull the right trigger"})," to select it. Press the menu button again to close."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Spin the ring with the left thumbstick"})," (push left/right) to bring any option round toward your pointer \u2014 handy if an item sits at an awkward angle."]}),"\n",(0,s.jsxs)(n.p,{children:["The menu is organised into ",(0,s.jsx)(n.strong,{children:"pages"})," so the ring never gets crowded. The first ring (",(0,s.jsx)(n.strong,{children:"Root"}),") holds the two most-used actions plus two ",(0,s.jsx)(n.strong,{children:"category"})," buttons that open sub-pages. Every sub-page has a ",(0,s.jsx)(n.strong,{children:"Back \u25c2"})," item that returns you to Root."]}),"\n",(0,s.jsx)(n.h3,{id:"root-ring",children:"Root ring"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Item"}),(0,s.jsx)(n.th,{children:"What it does"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Display \u25b8"})}),(0,s.jsx)(n.td,{children:"Open the display & comfort page."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Edit \u25b8"})}),(0,s.jsx)(n.td,{children:"Open the edit-tools page."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Recenter"})}),(0,s.jsxs)(n.td,{children:["Reset position, heading ",(0,s.jsx)(n.strong,{children:"and"})," world scale \u2014 back to the starting view at 1:1."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Exit VR"})}),(0,s.jsx)(n.td,{children:"End the VR session and return to the desktop view."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"display-page",children:"Display page"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Item"}),(0,s.jsx)(n.th,{children:"What it does"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Level"})}),(0,s.jsx)(n.td,{children:"Keep your position but straighten your heading."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Speed"})}),(0,s.jsx)(n.td,{children:"Step the free-fly speed through 1\xd7 \u2192 2\xd7 \u2192 4\xd7 \u2192 1\xd7. The icon shows a slow or fast glyph for the current setting."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"Vignette"})," \u2611"]}),(0,s.jsx)(n.td,{children:"Turn the peripheral comfort vignette on or off."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"Mirror"})," \u2611"]}),(0,s.jsx)(n.td,{children:"Mirror the headset view to the desktop window so others can watch (on by default)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Back \u25c2"})}),(0,s.jsx)(n.td,{children:"Return to the Root ring."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"edit-page",children:"Edit page"}),"\n",(0,s.jsxs)(n.p,{children:["The edit tools place measurements and annotations directly on the outcrop \u2014 see ",(0,s.jsx)(n.a,{href:"#edit-tools",children:"Edit tools"})," for how each one works."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Item"}),(0,s.jsx)(n.th,{children:"What it does"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Scale Bar"})}),(0,s.jsx)(n.td,{children:"Place a scale bar on the surface."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Measure"})}),(0,s.jsx)(n.td,{children:"Measure a distance with a live readout."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Orientation"})}),(0,s.jsx)(n.td,{children:"Record a dip/azimuth from three points."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Polyline"})}),(0,s.jsx)(n.td,{children:"Digitise a multi-point line."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Horizon"})}),(0,s.jsx)(n.td,{children:"Digitise a horizon on the seismic sections."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Back \u25c2"})}),(0,s.jsx)(n.td,{children:"Return to the Root ring."})]})]})]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["While the menu is open, the thumbsticks and grips drive the menu (the left thumbstick spins the ring) instead of moving you, so you won't fly off while choosing an option. Toggle items (",(0,s.jsx)(n.strong,{children:"Vignette"}),", ",(0,s.jsx)(n.strong,{children:"Mirror"}),") carry a small ",(0,s.jsx)(n.strong,{children:"checkbox badge"})," \u2014 green when on, grey when off."]})}),"\n",(0,s.jsx)(n.h2,{id:"edit-tools",children:"Edit tools"}),"\n",(0,s.jsxs)(n.p,{children:["Open ",(0,s.jsx)(n.strong,{children:"Edit \u25b8"})," in the ",(0,s.jsx)(n.a,{href:"#the-radial-menu",children:"radial menu"})," and pick a tool. The menu closes and the tool ",(0,s.jsx)(n.strong,{children:"arms"}),": the right-controller laser becomes a placement cursor with a coloured preview marker on the surface where you're aiming. Aim the same way you point at the menu, and ",(0,s.jsx)(n.strong,{children:"pull the right trigger"})," to place a point."]}),"\n",(0,s.jsxs)(n.p,{children:["Everything you create is ",(0,s.jsx)(n.strong,{children:"saved into the project"})," \u2014 it appears in the desktop view and the project tree, and stays visible in the headset. Objects made on the desktop show up in VR too, so you can review existing measurements and interpretation in the headset."]}),"\n",(0,s.jsx)(n.admonition,{title:"Switching or stopping",type:"tip",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Re-open the menu"})," at any time to switch tools or stop \u2014 opening the menu cancels whatever you're part-way through placing."]})}),"\n",(0,s.jsx)(n.h3,{id:"scale-bar",children:"Scale Bar"}),"\n",(0,s.jsxs)(n.p,{children:["Aim at the surface and ",(0,s.jsx)(n.strong,{children:"pull the trigger"})," to drop a scale bar at that point. The tool stays armed so you can place several in a row."]}),"\n",(0,s.jsx)(n.h3,{id:"measure",children:"Measure"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Hold the right trigger"}),': the first point anchors where you pulled, and the second follows your aim as you move it \u2014 a stretchy "tape measure". A line and end markers show the span on the outcrop, and a ',(0,s.jsx)(n.strong,{children:"readout floats by your right hand"})," showing the ",(0,s.jsx)(n.strong,{children:"distance"}),", ",(0,s.jsx)(n.strong,{children:"azimuth"})," and ",(0,s.jsx)(n.strong,{children:"inclination"}),", updating live. ",(0,s.jsx)(n.strong,{children:"Release"})," the trigger to finish. Distances are real-world regardless of how far you've scaled the model with ",(0,s.jsx)(n.a,{href:"#grab-the-world-scale--reposition",children:"grab-the-world"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"orientation",children:"Orientation"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Pull the trigger on three points"})," across a bedding plane (or any planar feature). On the third point VRGS fits a best-fit plane and drops a ",(0,s.jsx)(n.strong,{children:"dip/azimuth disc"})," lying in that plane. The tool re-arms for the next reading, so you can record many in a row."]}),"\n",(0,s.jsx)(n.h3,{id:"polyline",children:"Polyline"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Pull the trigger to drop each node"})," along a feature; a line follows your aim from the last node. ",(0,s.jsx)(n.strong,{children:"Squeeze the left grip to finish"})," the line (you need at least two nodes). The tool re-arms for the next polyline."]}),"\n",(0,s.jsx)(n.h3,{id:"horizon",children:"Horizon"}),"\n",(0,s.jsxs)(n.p,{children:["Like Polyline, but for seismic interpretation: the laser aims at the ",(0,s.jsx)(n.strong,{children:"visible seismic sections"})," (inlines, crosslines, time-slices, or a 2D line's curtain) instead of the outcrop, so you can trace a reflector across a section hanging in space. ",(0,s.jsx)(n.strong,{children:"Pull the trigger to drop each node"})," \u2014 the point ",(0,s.jsx)(n.strong,{children:"snaps to the strongest reflection"})," near where you aimed, so nodes land on the reflector rather than exactly under the laser. ",(0,s.jsx)(n.strong,{children:"Squeeze the left grip to finish"})," (at least two nodes). The result is a standard project polyline, visible on the desktop and in the project tree like any other interpretation. Aiming off the sections shows no placement cursor \u2014 there's nothing to pick there."]}),"\n",(0,s.jsx)(n.h2,{id:"comfort-and-motion-sickness",children:"Comfort and motion sickness"}),"\n",(0,s.jsx)(n.p,{children:"VR can cause discomfort for some users, especially during continuous movement. VRGS includes a few aids:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Comfort vignette"}),' \u2014 the edges of your view gently darken while you move and clear again when you stop, which reduces the "moving scenery" effect that triggers nausea. It\'s ',(0,s.jsx)(n.strong,{children:"on by default"}),"; toggle it with ",(0,s.jsx)(n.strong,{children:"Vignette"})," on the radial menu's ",(0,s.jsx)(n.a,{href:"#display-page",children:"Display page"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Teleport"})," instead of free-fly to avoid sliding motion entirely."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Lower the speed"})," with the ",(0,s.jsx)(n.strong,{children:"Speed"})," item on the ",(0,s.jsx)(n.a,{href:"#display-page",children:"Display page"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"First-timers",type:"tip",children:(0,s.jsx)(n.p,{children:"Start seated, keep sessions short, and use teleport until you're comfortable. Take the headset off as soon as you feel any discomfort."})}),"\n",(0,s.jsxs)(n.p,{children:["Movement speed, turn speed and the boost multiplier are also available in the application's ",(0,s.jsx)(n.strong,{children:"VR dis
1play settings"})," if you want to tune the defaults."]}),"\n",(0,s.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsxs)(n.admonition,{title:'"Could not start VR"',type:"caution",children:[(0,s.jsx)(n.p,{children:"Work through these in order:"}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Renderer"})," \u2014 VRGS must be using the ",(0,s.jsx)(n.strong,{children:"Vulkan"})," renderer. If you're in OpenGL mode, restart with ",(0,s.jsx)(n.code,{children:"-vulkan"})," (see ",(0,s.jsx)(n.a,{href:"#choosing-the-renderer",children:"Choosing the renderer"}),")."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"OpenXR runtime"})," \u2014 make sure SteamVR or the Oculus app is running and the headset is connected and awake."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"3D view"})," \u2014 open a 3D model view and load a model before connecting the HMD."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Logs"})," \u2014 check ",(0,s.jsx)(n.code,{children:"logs/vrgs-debug.log"}),' for an OpenXR error (it lists the exact failure, e.g. "no runtime" or "headset not connected").']}),"\n"]})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Symptom"}),(0,s.jsx)(n.th,{children:"Likely cause / fix"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Hand controllers don't appear"}),(0,s.jsx)(n.td,{children:"Controllers off or not tracked; wake them and make sure the headset has focus (not the runtime's home/dashboard)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Nothing renders / black headset"}),(0,s.jsx)(n.td,{children:"The scene may be empty \u2014 load a model in the 3D view before connecting the HMD."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Movement feels too fast / too slow"}),(0,s.jsxs)(n.td,{children:["Use ",(0,s.jsx)(n.strong,{children:"Speed"})," on the radial menu's ",(0,s.jsx)(n.a,{href:"#display-page",children:"Display page"}),", or adjust the VR movement-speed setting."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Motion discomfort"}),(0,s.jsx)(n.td,{children:"Keep the comfort vignette on, lower the speed, or use teleport instead of free-fly."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"globe-imagery-and-terrain-in-the-headset",children:"Globe imagery and terrain in the headset"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cesium / Google 3D Tiles stream and render live in VR"}),", terrain masking\nincluded, so a model sitting on the globe keeps its surroundings loading as you\nfly rather than being frozen at whatever was on screen when the headset started."]}),"\n",(0,s.jsxs)(n.p,{children:["Level-of-detail and culling are driven from a single symmetric frustum covering\n",(0,s.jsx)(n.strong,{children:"both eyes"}),", so tiles at the edge of one eye's view are not dropped."]}),"\n",(0,s.jsxs)(n.p,{children:["Cesium's ",(0,s.jsx)(n.strong,{children:"attribution"})," is drawn inside the headset's safe area, since the\ndesktop display is inactive while VR is running."]}),"\n",(0,s.jsx)(n.h2,{id:"known-limitations",children:"Known limitations"}),"\n",(0,s.jsx)(n.p,{children:"This is an early VR preview. Notable current limits:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["World ",(0,s.jsx)(n.strong,{children:"grab"})," supports scale and reposition; ",(0,s.jsx)(n.strong,{children:"rotating"})," the world with your hands isn't available yet (use stick turn / ",(0,s.jsx)(n.strong,{children:"Level"}),")."]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.a,{href:"#edit-tools",children:"edit tools"})," cover scale bars, measurements, orientations and polylines. Other interpretation types (waypoints, faults, full editing of existing objects) are still desktop-only for now."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Lineation/plunge"})," orientations from the desktop aren't drawn in the headset yet (planar dip/azimuth discs are)."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"Feedback",type:"info",children:(0,s.jsx)(n.p,{children:"Behaviour such as turn direction, speed and grab sensitivity is still being tuned. If something feels off in the headset, note what you were doing so it can be adju
1sted."})})]})}function c(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453(e,n,t){t.d(n,{R:()=>o,x:()=>l});var r=t(96540);const s={},i=r.createContext(s);function o(e){const n=r.useContext(i);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.