Skip to content
Snippets Groups Projects
Commit 38f1b219 authored by lacoche's avatar lacoche
Browse files

Update Samples GLTF and readme

parent 095853a0
No related branches found
No related tags found
No related merge requests found
Showing with 39 additions and 375 deletions
...@@ -424,7 +424,7 @@ MonoBehaviour: ...@@ -424,7 +424,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 02da7adcc65f4694684d71e61d88070b, type: 3} m_Script: {fileID: 11500000, guid: 02da7adcc65f4694684d71e61d88070b, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
worldStorageServer: {fileID: 11400000, guid: cc5c5acfb44773a4ba9decc291b718d2, type: 2} worldStorageServer: {fileID: 11400000, guid: c1d7543b3d89e1543a49016de1a81d8f, type: 2}
--- !u!4 &236535456 --- !u!4 &236535456
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -569,8 +569,9 @@ MonoBehaviour: ...@@ -569,8 +569,9 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f7351c94a4c22144284b9eac3270dc8d, type: 3} m_Script: {fileID: 11500000, guid: f7351c94a4c22144284b9eac3270dc8d, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
_PathToGLTF: ARSceneOneAnchor.glb _PathToGLTF: ARSceneThreeAnchor.glb
_ValiditySubscription: 10000000 _ValiditySubscription: 10000000
_DisableObjectWhenNotTracked: 1
--- !u!4 &842320175 --- !u!4 &842320175
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -728,7 +729,6 @@ MonoBehaviour: ...@@ -728,7 +729,6 @@ MonoBehaviour:
m_DeselectOnBackgroundClick: 1 m_DeselectOnBackgroundClick: 1
m_PointerBehavior: 0 m_PointerBehavior: 0
m_CursorLockBehavior: 0 m_CursorLockBehavior: 0
m_ScrollDeltaPerTick: 6
--- !u!114 &1405320277 --- !u!114 &1405320277
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
......
...@@ -14,8 +14,12 @@ public class SceneManagementGLTF : MonoBehaviour ...@@ -14,8 +14,12 @@ public class SceneManagementGLTF : MonoBehaviour
/// <summary> /// <summary>
/// Validity in milliseconds for a subscription to the WA /// Validity in milliseconds for a subscription to the WA
/// </summary> /// </summary>
public int _ValiditySubscription = 100000; public int _ValiditySubscription = 100000;
/// <summary>
/// If true : before first tracking, objects are hidden
/// </summary>
public bool _DisableObjectWhenNotTracked;
/// <summary> /// <summary>
/// List of trackables and anchors in the AR Scene /// List of trackables and anchors in the AR Scene
/// </summary> /// </summary>
...@@ -33,6 +37,7 @@ public class SceneManagementGLTF : MonoBehaviour ...@@ -33,6 +37,7 @@ public class SceneManagementGLTF : MonoBehaviour
foreach(KeyValuePair<Guid , Transform> toSubscribe in m_trackablesAndAnchorsInARScene) foreach(KeyValuePair<Guid , Transform> toSubscribe in m_trackablesAndAnchorsInARScene)
{ {
toSubscribe.Value.gameObject.SetActive(!_DisableObjectWhenNotTracked); // disable object when not tracked
int validity = _ValiditySubscription; int validity = _ValiditySubscription;
Guid subscriptionUUID; Guid subscriptionUUID;
// TODO : if only one : subscribeToPose, if multiple subscribetoPoses // TODO : if only one : subscribeToPose, if multiple subscribetoPoses
...@@ -58,6 +63,7 @@ public class SceneManagementGLTF : MonoBehaviour ...@@ -58,6 +63,7 @@ public class SceneManagementGLTF : MonoBehaviour
ETSI.ARF.OpenAPI.WorldAnalysis.VectorQuaternionPoseValue value = (ETSI.ARF.OpenAPI.WorldAnalysis.VectorQuaternionPoseValue)pose.Value; ETSI.ARF.OpenAPI.WorldAnalysis.VectorQuaternionPoseValue value = (ETSI.ARF.OpenAPI.WorldAnalysis.VectorQuaternionPoseValue)pose.Value;
if (m_trackablesAndAnchorsInARScene.ContainsKey(pose.Uuid)) if (m_trackablesAndAnchorsInARScene.ContainsKey(pose.Uuid))
{ {
m_trackablesAndAnchorsInARScene[pose.Uuid].transform.gameObject.SetActive(true);
m_trackablesAndAnchorsInARScene[pose.Uuid].transform.position = WorldAnalysisUnityHelper.ConvertETSIVector3ToUnity(value.Position); m_trackablesAndAnchorsInARScene[pose.Uuid].transform.position = WorldAnalysisUnityHelper.ConvertETSIVector3ToUnity(value.Position);
m_trackablesAndAnchorsInARScene[pose.Uuid].transform.rotation = WorldAnalysisUnityHelper.ConvertETSIARFQuaternionToUnity(value.Rotation); m_trackablesAndAnchorsInARScene[pose.Uuid].transform.rotation = WorldAnalysisUnityHelper.ConvertETSIARFQuaternionToUnity(value.Rotation);
} }
......
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e4b7be4c33f68d0418c3b4e1a7053d91, type: 3}
m_Name: ARFWorldStorageServerOrange
m_EditorClassIdentifier:
serverName: Test
company: Orange
basePath: http://stef512.ddns.net
port: 0
currentUser: {fileID: 11400000, guid: 19460fb98cba6a247a1ab3a067f97cb2, type: 2}
fileFormatVersion: 2
guid: ee077e143d6b54f5599ae86b474ec214
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: ee1525db27f57c04aa59527c062bb582
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 12
m_GIWorkflowMode: 1
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &1604991696
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1604991698}
- component: {fileID: 1604991697}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1604991697
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1604991696}
m_Enabled: 1
serializedVersion: 10
m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &1604991698
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1604991696}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &1881923816
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1881923819}
- component: {fileID: 1881923818}
- component: {fileID: 1881923817}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &1881923817
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1881923816}
m_Enabled: 1
--- !u!20 &1881923818
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1881923816}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &1881923819
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1881923816}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 1881923819}
- {fileID: 1604991698}
fileFormatVersion: 2
guid: 679a243ed5a2a734389f22491fca41cd
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
No preview for this file type
No preview for this file type
Subproject commit 355e03bcf54e7ebd9d6769e71f3dcc812c68d7f6 Subproject commit 7aeed4c2c3bd363f816c34582c673d6b4b2073bf
Subproject commit 3ec771d8e1df26e750f93bab36d7c8b9def97bf7 Subproject commit a3687e09b8a3428cab2f13a63d50e77d81955dee
...@@ -26,7 +26,17 @@ or clone the repos updating the submodules directly: ...@@ -26,7 +26,17 @@ or clone the repos updating the submodules directly:
git clone --recurse-submodules https://labs.etsi.org/rep/arf/world-storage-api-helpers/unity-world-storage-editor.git git clone --recurse-submodules https://labs.etsi.org/rep/arf/world-storage-api-helpers/unity-world-storage-editor.git
Once it's done, you can open your project from the Unity Hub, the project was developed with Unity 2021.3 Once it's done, you can open your project from the Unity Hub, the project was developed with Unity 2022.3
## World Storage Editor
The WS Editor is responsible for editing the World Graph with the Trackables and World Anchors to which the AR content will be attached.
To edit the World Storage use a World Storage Server Asset and then "Open World Storage Window" to access the server and then "Open World Representation Graph Window" to open the graph view.
An example of server is available at https://etsi.hhi.fraunhofer.de and accessible through a dedicated asset in .\Assets\ISG-ARF\Resources\WS.ARFWorldStorageServer HHI
## World Analysis ## World Analysis
...@@ -34,7 +44,7 @@ The WA is responsible to compute the poses of the AR Scene nodes in reference to ...@@ -34,7 +44,7 @@ The WA is responsible to compute the poses of the AR Scene nodes in reference to
Two types of WA are available. Two types of WA are available.
* LOCAL_ARFOUNDATION corresponds to WA that runs locally based on Unity ARFoundation (ARKit on iOS and ARCore on Android) * LOCAL_ARFOUNDATION corresponds to WA that runs locally based on Unity ARFoundation (ARKit on iOS and ARCore on Android)
* REST corresponds to a remote WA (HHI or b<>com SolAR solution for instance). * REST corresponds to a remote WA. Examples of implementation include the spatial computing platforms from HHI or b<>com SolAR solution. Please contact them for additional information and for testing.
To choose a given one use the WorldAnalysisInstance script on the ARFWorldAnalysis GameObject. To choose a given one use the WorldAnalysisInstance script on the ARFWorldAnalysis GameObject.
...@@ -43,14 +53,21 @@ For a local WA, the information about the WS to retrieve Relocalization Informat ...@@ -43,14 +53,21 @@ For a local WA, the information about the WS to retrieve Relocalization Informat
A GameObject of the Unity Scene graph can be associated with a node (Trackable or WorldAnchor) of the World Storage with the AnchorTrackableReferenceNode script. You just have to associate the script with a given GameObject and specify the WS uuid of the corresponding Trackable or WorldAnchor. A GameObject of the Unity Scene graph can be associated with a node (Trackable or WorldAnchor) of the World Storage with the AnchorTrackableReferenceNode script. You just have to associate the script with a given GameObject and specify the WS uuid of the corresponding Trackable or WorldAnchor.
## Test Scene glTF ## Samples
This repo is used to demonstrate and to show the usage of the different World Analysis wrappers. ### Server Maintenance
A First Unity Scene can be found here: The repository includes examples on how to use the WS and WA components to develop a Unity application in the context of a data center server guidance and maintenance and use case.
.\Assets\Scenes\ExampleGLTF This use case has been adapted respectively by Orange (see .\Assets\ISG-ARF\Orange_Application) and the HHI (see .\Assets\ISG-ARF\HHI_Application). These applications are dedicated to specific physical places and are dependent to specific World Storage instances.
Please contact them to have more information about how to adapt this use case to different places.
### glTF Player
To demonstrate simple examples the respository includes a sample based on the glTF format
The sample can be found in
.\Assets\ISG-ARF\Common_Application\ExampleGLTF
The scene loads a GLTF file situated in the Unity persistent data path (streaming assets path in editor mode). Any node with the following pattern name: ws:"uuid" will correspond to an Anchor or Trackable in the World Storage and then will be updated by the loaded World Analysis wrapper. The scene loads a GLTF file situated in the Unity persistent data path (streaming assets path in editor mode). Any node with the following pattern name: ws:"uuid" will correspond to an Anchor or Trackable in the World Storage and then will be updated by the loaded World Analysis wrapper.
As an example, based on the provided HHI server, ARSceneOneAnchor.glb found in the StreamingAssets can displayed on top of the following image : https://www.dropbox.com/scl/fi/jlswlf0rhgha3pfbf76ft/graf.png?rlkey=z3rtcvuzgl9m2k7s8td8kl2ls&st=a178iuvt&dl=0 (A4 format)
\ No newline at end of file
#
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment