Skip to content
This repository was archived by the owner on Oct 7, 2024. It is now read-only.

Commit a224b85

Browse files
Initial support for World Locking Tools in Unreal
1 parent c930a83 commit a224b85

File tree

118 files changed

+24342
-21
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

118 files changed

+24342
-21
lines changed

Images/QRCode_01.png

3.04 KB
Loading

Images/QRCode_02.png

3.09 KB
Loading

README.md

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,44 @@
1-
# Project
1+
# What is World Locking Tools
2+
World Locking Tools for provides a stable and reliable world-locked coordinate system, binding the virtual/holographic world to the physical world.
23

3-
> This repo has been populated by an initial template to help get you started. Please
4-
> make sure to update the content to build a great experience for community-building.
4+
World Locking Tools locks the entire holograph space of your application to the physical world. A hologram put in position relative to physical world features will stay fixed relative to those features, and remain fixed relative to other holograms.
55

6-
As the maintainer of this project, please make a few updates:
6+
World Locking Tools also includes Space Pins, which reposition the scene to match real-world features like QRCodes.
7+
8+
9+
# Using the Plugin
10+
Add the plugin to your project from either GitHub or the Marketplace and enable it in the Plugins window. Call the "StartWorldLockingTools" function to start using world locking tools with the given parameters.
11+
12+
This plugin was written for HoloLens, and is meant to be used with the [Microsoft OpenXR](https://github.com/microsoft/Microsoft-OpenXR-Unreal) plugin. The underlying FrozenWorld binaries that world locking tools depends on are available for Android and iOS, and this plugin uses ARBlueprintLibrary when using core AR features like ARPins, so this can be modified to build for ARKit and ARCore as well.
13+
14+
15+
## From GitHub source
16+
Copy the WLT_Project/Plugins/WorldLockingTools directory into your game's Plugins directory. Reopen your project and enable the World Locking Tools plugin in your Plugins window.
17+
18+
19+
## World Locking Tools Pawn
20+
World Locking Tools works by repositioning the users' head to match a pose the underlying frozen world system is generating from nearby anchors that have been created while walking around. To do this, the camera on the pawn must have a parent and grandparent component that are children of the DefaultSceneRoot. The sample's WLTPawn is setup this way, and one is also included in the plugin under Source/WorldLockingTools/Public/WorldLockingToolsPawn.h.
21+
22+
23+
## Space Pins
24+
Space Pins have a virtual position in your scene and need to be given a physical position in your world to reposition the scene to match the real-world. This is accomplished by calling SetSpongyPose on a SpacePin with a transform in the device's tracking space. When multiple space pins are locked in a scene, the relative real-world offsets between them should closely match how they are setup in the virtual scene to minimize drift as you walk from one space pin to another.
25+
26+
27+
## Try the example project
28+
The sample project has two levels which demonstrate starting world locking tools, and using space pins with either hand manipulation in one level or QRCodes in the other level. Both levels have an 8 meter long hologram with a space pin on either side. Build, deploy, and run the sample on a HoloLens and take note of the direction the hologram is facing. Close the application, rotate your body to face a different direction, then relaunch the application.
29+
30+
Without using world locking tools, the scene will face the new direction you are facing. With world locking tools, the scene will be oriented based on the first saved launch.
31+
32+
Test the space pins by grabbing the cube on one end of the 8 meter hologram. It will turn pink when it can be interacted with. Face the direction of the white arrow off of this cube and move your hand around while gripped to move the space pin around. The entire scene will move around as the space pin moves. Walk to the other space pin, face the same direction as its white arrow, grip and move this space pin around too. Once both space pins have been positioned, walk between the two and observe that the scene will shift into place to match the space pin's locked real-world position as you get closer to it.
33+
34+
The second scene does the same thing, but positions the space pins based on the QRCodes in the Images directory.
35+
36+
37+
# See Also
38+
[World Locking Tools](https://learn.microsoft.com/en-us/mixed-reality/world-locking-tools/)
39+
40+
[Space Pins](https://learn.microsoft.com/en-us/mixed-reality/world-locking-tools/documentation/concepts/advanced/spacepins)
741

8-
- Improving this README.MD file to provide a great experience
9-
- Updating SUPPORT.MD with content about this project's support experience
10-
- Understanding the security reporting process in SECURITY.MD
11-
- Remove this section from the README
1242

1343
## Contributing
1444

@@ -24,6 +54,7 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://ope
2454
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
2555
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
2656

57+
2758
## Trademarks
2859

2960
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft

SUPPORT.md

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,3 @@
1-
# TODO: The maintainer of this repo has not yet edited this file
2-
3-
**REPO OWNER**: Do you want Customer Service & Support (CSS) support for this product/project?
4-
5-
- **No CSS support:** Fill out this template with information about how to file issues and get help.
6-
- **Yes CSS support:** Fill out an intake form at [aka.ms/onboardsupport](https://aka.ms/onboardsupport). CSS will work with/help you to determine next steps.
7-
- **Not sure?** Fill out an intake as though the answer were "Yes". CSS will help you decide.
8-
9-
*Then remove this first heading from this SUPPORT.MD file before publishing your repo.*
10-
111
# Support
122

133
## How to file issues and get help
@@ -16,9 +6,7 @@ This project uses GitHub Issues to track bugs and feature requests. Please searc
166
issues before filing new issues to avoid duplicates. For new issues, file your bug or
177
feature request as a new Issue.
188

19-
For help and questions about using this project, please **REPO MAINTAINER: INSERT INSTRUCTIONS HERE
20-
FOR HOW TO ENGAGE REPO OWNERS OR COMMUNITY FOR HELP. COULD BE A STACK OVERFLOW TAG OR OTHER
21-
CHANNEL. WHERE WILL YOU HELP PEOPLE?**.
9+
For help and questions about using this project, please [file an issue](https://github.com/microsoft/WorldLockingTools-Unreal/issues).
2210

2311
## Microsoft Support Policy
2412

WLT_Project/Config/DefaultEditor.ini

Whitespace-only changes.
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
2+
3+
[Audio]
4+
UseAudioMixer=True
5+
6+
[/Script/Engine.RendererSettings]
7+
r.Mobile.DisableVertexFog=False
8+
r.Shadow.CSM.MaxMobileCascades=2
9+
r.Mobile.AntiAliasing=1
10+
r.Mobile.FloatPrecisionMode=0
11+
r.Mobile.AllowDitheredLODTransition=False
12+
r.Mobile.VirtualTextures=False
13+
r.Mobile.ReflectionCaptureCompression=False
14+
r.DiscardUnusedQuality=False
15+
r.Shaders.CompressionFormat=2
16+
r.AllowOcclusionQueries=False
17+
r.MinScreenRadiusForLights=0.030000
18+
r.MinScreenRadiusForDepthPrepass=0.030000
19+
r.MinScreenRadiusForCSMDepth=0.010000
20+
r.PrecomputedVisibilityWarning=False
21+
r.TextureStreaming=True
22+
Compat.UseDXT5NormalMaps=False
23+
r.VirtualTextures=False
24+
r.VT.EnableAutoImport=True
25+
r.VirtualTexturedLightmaps=False
26+
r.VT.AnisotropicFiltering=False
27+
r.VT.TileSize=128
28+
r.VT.TileBorderSize=4
29+
r.vt.FeedbackFactor=16
30+
WorkingColorSpaceChoice=sRGB
31+
RedChromaticityCoordinate=(X=0.640000,Y=0.330000)
32+
GreenChromaticityCoordinate=(X=0.300000,Y=0.600000)
33+
BlueChromaticityCoordinate=(X=0.150000,Y=0.060000)
34+
WhiteChromaticityCoordinate=(X=0.312700,Y=0.329000)
35+
r.ClearCoatNormal=False
36+
r.DynamicGlobalIlluminationMethod=1
37+
r.ReflectionMethod=1
38+
r.ReflectionCaptureResolution=128
39+
r.ReflectionEnvironmentLightmapMixBasedOnRoughness=True
40+
r.Lumen.HardwareRayTracing=False
41+
r.Lumen.HardwareRayTracing.LightingMode=0
42+
r.Lumen.TraceMeshSDFs=1
43+
r.Shadow.Virtual.Enable=1
44+
r.RayTracing=False
45+
r.RayTracing.Shadows=False
46+
r.RayTracing.Skylight=False
47+
r.RayTracing.UseTextureLod=False
48+
r.PathTracing=True
49+
r.GenerateMeshDistanceFields=True
50+
r.DistanceFields.DefaultVoxelDensity=0.200000
51+
r.AllowStaticLighting=True
52+
r.NormalMapsForStaticLighting=False
53+
r.ForwardShading=False
54+
r.VertexFoggingForOpaque=True
55+
r.SeparateTranslucency=False
56+
r.TranslucentSortPolicy=0
57+
TranslucentSortAxis=(X=0.000000,Y=-1.000000,Z=0.000000)
58+
vr.VRS.HMDFixedFoveationLevel=0
59+
vr.VRS.HMDFixedFoveationDynamic=False
60+
r.CustomDepth=1
61+
r.CustomDepthTemporalAAJitter=True
62+
r.PostProcessing.PropagateAlpha=0
63+
r.DefaultFeature.Bloom=False
64+
r.DefaultFeature.AmbientOcclusion=False
65+
r.DefaultFeature.AmbientOcclusionStaticFraction=True
66+
r.DefaultFeature.AutoExposure=False
67+
r.DefaultFeature.AutoExposure.Method=0
68+
r.DefaultFeature.AutoExposure.Bias=1.000000
69+
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
70+
r.DefaultFeature.MotionBlur=False
71+
r.DefaultFeature.LensFlare=False
72+
r.TemporalAA.Upsampling=True
73+
r.AntiAliasingMethod=0
74+
r.MSAACount=4
75+
r.DefaultFeature.LightUnits=1
76+
r.DefaultBackBufferPixelFormat=4
77+
r.Shadow.UnbuiltPreviewInGame=True
78+
r.StencilForLODDither=False
79+
r.EarlyZPass=3
80+
r.EarlyZPassOnlyMaterialMasking=False
81+
r.Shadow.CSMCaching=False
82+
r.DBuffer=True
83+
r.ClearSceneMethod=1
84+
r.VelocityOutputPass=0
85+
r.Velocity.EnableVertexDeformation=2
86+
r.SelectiveBasePassOutputs=False
87+
bDefaultParticleCutouts=False
88+
fx.GPUSimulationTextureSizeX=1024
89+
fx.GPUSimulationTextureSizeY=1024
90+
r.AllowGlobalClipPlane=False
91+
r.GBufferFormat=1
92+
r.MorphTarget.Mode=True
93+
r.GPUCrashDebugging=False
94+
vr.InstancedStereo=True
95+
r.MobileHDR=False
96+
vr.MobileMultiView=True
97+
r.Mobile.UseHWsRGBEncoding=False
98+
vr.RoundRobinOcclusion=False
99+
vr.ODSCapture=False
100+
r.MeshStreaming=False
101+
r.WireframeCullThreshold=5.000000
102+
r.SupportStationarySkylight=True
103+
r.SupportLowQualityLightmaps=True
104+
r.SupportPointLightWholeSceneShadows=True
105+
r.SupportSkyAtmosphere=True
106+
r.SupportSkyAtmosphereAffectsHeightFog=True
107+
r.SupportCloudShadowOnForwardLitTranslucent=False
108+
r.Material.RoughDiffuse=False
109+
r.Material.EnergyConservation=False
110+
r.SkinCache.CompileShaders=False
111+
r.SkinCache.DefaultBehavior=1
112+
r.SkinCache.SceneMemoryLimitInMB=128.000000
113+
r.Mobile.EnableStaticAndCSMShadowReceivers=True
114+
r.Mobile.EnableMovableLightCSMShaderCulling=True
115+
r.Mobile.EnableNoPrecomputedLightingCSMShader=False
116+
r.Mobile.AllowDistanceFieldShadows=True
117+
r.Mobile.AllowMovableDirectionalLights=True
118+
r.MobileNumDynamicPointLights=4
119+
r.Mobile.EnableMovableSpotlights=False
120+
r.Mobile.EnableMovableSpotlightsShadow=False
121+
r.GPUSkin.Support16BitBoneIndex=False
122+
r.GPUSkin.Limit2BoneInfluences=False
123+
r.SupportDepthOnlyIndexBuffers=True
124+
r.SupportReversedIndexBuffers=True
125+
r.Mobile.AmbientOcclusion=False
126+
r.GPUSkin.UnlimitedBoneInfluences=False
127+
r.GPUSkin.UnlimitedBoneInfluencesThreshold=8
128+
MaxSkinBones=(Default=65536,PerPlatform=(("Mobile", 256)))
129+
r.Mobile.PlanarReflectionMode=0
130+
r.Mobile.SupportsGen4TAA=True
131+
bStreamSkeletalMeshLODs=(Default=False,PerPlatform=())
132+
bDiscardSkeletalMeshOptionalLODs=(Default=False,PerPlatform=())
133+
VisualizeCalibrationColorMaterialPath=/Engine/EngineMaterials/PPM_DefaultCalibrationColor.PPM_DefaultCalibrationColor
134+
VisualizeCalibrationCustomMaterialPath=None
135+
VisualizeCalibrationGrayscaleMaterialPath=/Engine/EngineMaterials/PPM_DefaultCalibrationGrayscale.PPM_DefaultCalibrationGrayscale
136+
137+
[/Script/HardwareTargeting.HardwareTargetingSettings]
138+
TargetedHardwareClass=Mobile
139+
AppliedTargetedHardwareClass=Mobile
140+
DefaultGraphicsPerformance=Scalable
141+
AppliedDefaultGraphicsPerformance=Scalable
142+
143+
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
144+
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
145+
146+
[/Script/WorldPartitionEditor.WorldPartitionEditorSettings]
147+
CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet'
148+
149+
[/Script/EngineSettings.GameMapsSettings]
150+
EditorStartupMap=/Game/WLT.WLT
151+
LocalMapOptions=
152+
TransitionMap=None
153+
bUseSplitscreen=False
154+
TwoPlayerSplitscreenLayout=Horizontal
155+
ThreePlayerSplitscreenLayout=FavorTop
156+
FourPlayerSplitscreenLayout=Grid
157+
bOffsetPlayerGamepadIds=False
158+
GameInstanceClass=/Script/Engine.GameInstance
159+
GameDefaultMap=/Game/WLT.WLT
160+
ServerDefaultMap=/Engine/Maps/Entry.Entry
161+
GlobalDefaultGameMode=/Game/WLTGameMode.WLTGameMode_C
162+
GlobalDefaultServerGameMode=None
163+
164+
[/Script/Slate.SlateSettings]
165+
bExplicitCanvasChildZOrder=True
166+
167+
[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings]
168+
bEnablePlugin=True
169+
bAllowNetworkConnection=True
170+
SecurityToken=7868A8A34018B7FE67DEF5BF5BCB1635
171+
bIncludeInShipping=False
172+
bAllowExternalStartInShipping=False
173+
bCompileAFSProject=False
174+
bUseCompression=False
175+
bLogFiles=False
176+
bReportStats=False
177+
ConnectionType=USBOnly
178+
bUseManualIPAddress=False
179+
ManualIPAddress=
180+

WLT_Project/Config/DefaultGame.ini

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[/Script/EngineSettings.GeneralProjectSettings]
2+
ProjectID=C57AEC0549C91B6BAF1428899BD5E345
3+
ProjectName=WLT
4+
CompanyDistinguishedName=CN=NoPublisher
5+
bStartInVR=True
6+
7+
[/Script/UnrealEd.ProjectPackagingSettings]
8+
FullRebuild=False
9+

0 commit comments

Comments
 (0)