diff --git a/Assets/ARRealismDemos/PointCloud/Scenes/PointCloud.unity b/Assets/ARRealismDemos/PointCloud/Scenes/PointCloud.unity index 2d78e7c..e565240 100644 --- a/Assets/ARRealismDemos/PointCloud/Scenes/PointCloud.unity +++ b/Assets/ARRealismDemos/PointCloud/Scenes/PointCloud.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_IndirectSpecularColor: {r: 0.37311953, g: 0.38074014, b: 0.3587274, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -196,7 +196,7 @@ MonoBehaviour: m_GameObject: {fileID: 128069680} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 91a2c44af012e4c02ac317054e2838bb, type: 3} + m_Script: {fileID: 11500000, guid: 4ddbac5279728a64bb6a44ffbd13f993, type: 3} m_Name: m_EditorClassIdentifier: UseRawDepth: 0 diff --git a/Assets/ARRealismDemos/PointCloud/Scenes/PointCloudWithRawDepth.unity b/Assets/ARRealismDemos/PointCloud/Scenes/PointCloudWithRawDepth.unity new file mode 100644 index 0000000..8839de1 --- /dev/null +++ b/Assets/ARRealismDemos/PointCloud/Scenes/PointCloudWithRawDepth.unity @@ -0,0 +1,621 @@ +%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.37311953, g: 0.38074014, b: 0.3587274, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + 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: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + 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_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + 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 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &128069680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 128069684} + - component: {fileID: 128069682} + - component: {fileID: 128069681} + - component: {fileID: 128069683} + - component: {fileID: 128069685} + m_Layer: 0 + m_Name: Point cloud from CPU depth data + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!33 &128069681 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128069680} + m_Mesh: {fileID: 0} +--- !u!23 &128069682 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128069680} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 095393401fd0e48c2b3665c05b290e5a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!114 &128069683 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128069680} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 79e874a0ad35b9d418b287356194f877, type: 3} + m_Name: + m_EditorClassIdentifier: + UseRawDepth: 1 +--- !u!4 &128069684 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128069680} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &128069685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128069680} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e42a5dba022f44d2bbcd45b3a1eb5125, type: 3} + m_Name: + m_EditorClassIdentifier: + UseRawDepth: 1 + SetAsMainTexture: 0 + DepthTargetMaterial: {fileID: 0} +--- !u!1 &764884809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 764884810} + - component: {fileID: 764884813} + - component: {fileID: 764884812} + - component: {fileID: 764884811} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &764884810 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764884809} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1809696643} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &764884811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764884809} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c93ea1dce8251406ea4fe678225de108, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &764884812 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764884809} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 50a50753ba3b4487e93b75cafa4a9518, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Update +--- !u!222 &764884813 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764884809} + m_CullTransparentMesh: 0 +--- !u!1001 &1039285601 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 5734534533885354488, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5734534533885354488, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5734534533885354488, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5734534533885354488, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5734534533885354488, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5734534533885354488, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5734534533885354488, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5734534533885354488, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5734534533885354488, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5734534533885354488, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5734534533885354488, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5734534533885354492, guid: 9b04b7d0c1be3426585838493f60c53b, + type: 3} + propertyPath: m_Name + value: DepthARComponents + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9b04b7d0c1be3426585838493f60c53b, type: 3} +--- !u!1 &1421493915 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1421493919} + - component: {fileID: 1421493918} + - component: {fileID: 1421493917} + - component: {fileID: 1421493916} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1421493916 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421493915} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1421493917 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421493915} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 2 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1421493918 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421493915} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 50 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1421493919 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421493915} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1809696643} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1809696639 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1809696643} + - component: {fileID: 1809696642} + - component: {fileID: 1809696641} + - component: {fileID: 1809696640} + m_Layer: 5 + m_Name: Update Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1809696640 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1809696639} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1809696641} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 128069683} + m_MethodName: UpdateRawPointCloud + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1809696641 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1809696639} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.7058824} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 50e4e9aed7b514a84becc51889a80b1c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1809696642 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1809696639} + m_CullTransparentMesh: 0 +--- !u!224 &1809696643 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1809696639} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 764884810} + m_Father: {fileID: 1421493919} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: -33, y: 24} + m_SizeDelta: {x: 66, y: 44} + m_Pivot: {x: 0, y: 0} diff --git a/Assets/ARRealismDemos/PointCloud/Scenes/PointCloudWithRawDepth.unity.meta b/Assets/ARRealismDemos/PointCloud/Scenes/PointCloudWithRawDepth.unity.meta new file mode 100644 index 0000000..eca6e06 --- /dev/null +++ b/Assets/ARRealismDemos/PointCloud/Scenes/PointCloudWithRawDepth.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 275c3cbd6d1ab6c4ea896228f281bf00 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ARRealismDemos/PointCloud/Scripts/PointCloudGenerator.cs.meta b/Assets/ARRealismDemos/PointCloud/Scripts/PointCloudGenerator.cs.meta index 642b400..030fcfe 100644 --- a/Assets/ARRealismDemos/PointCloud/Scripts/PointCloudGenerator.cs.meta +++ b/Assets/ARRealismDemos/PointCloud/Scripts/PointCloudGenerator.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 91a2c44af012e4c02ac317054e2838bb +guid: 4ddbac5279728a64bb6a44ffbd13f993 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ARRealismDemos/PointCloud/Scripts/RawPointCloudGenerator.cs b/Assets/ARRealismDemos/PointCloud/Scripts/RawPointCloudGenerator.cs new file mode 100644 index 0000000..47c4e9f --- /dev/null +++ b/Assets/ARRealismDemos/PointCloud/Scripts/RawPointCloudGenerator.cs @@ -0,0 +1,271 @@ +//----------------------------------------------------------------------- +// +// +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using GoogleARCore; +using UnityEngine; +using UnityEngine.UI; +/// +/// Computes a point cloud from the depth map on the CPU. +/// +public class RawPointCloudGenerator : MonoBehaviour +{ + /// + /// Type of depth texture to attach to the material. + /// + public bool UseRawDepth = false; + + private const float _maxVisualizationDistanceM = 7; + private const float _minVisualizationDistanceM = 0.4f; + private bool _initialized; + private CameraIntrinsics _cameraIntrinsics; + private Mesh _mesh; + + + //From Blender// + // Limit the number of points to bound the performance cost of rendering the point cloud. + private const int _maxVerticesInBuffer = 1000000; + private const double _maxUpdateInvervalInSeconds = 0.5f; + private const double _minUpdateInvervalInSeconds = 0.07f; + //private static readonly string _confidenceThresholdPropertyName = "_ConfidenceThreshold"; + + + private Vector3[] _vertices = new Vector3[_maxVerticesInBuffer]; + private int _verticesCount = 0; + private int _verticesIndex = 0; + private int[] _indices = new int[_maxVerticesInBuffer]; + private Color32[] _colors = new Color32[_maxVerticesInBuffer]; + + // Buffers that store the color camera image (in YUV420_888 format) each frame. + private byte[] _cameraBufferY; + private byte[] _cameraBufferU; + private byte[] _cameraBufferV; + private int _cameraHeight; + private int _cameraWidth; + private int _pixelStrideUV; + private int _rowStrideY; + private int _rowStrideUV; + private double _updateInvervalInSeconds = _minUpdateInvervalInSeconds; + private double _lastUpdateTimeSeconds; + private Material _pointCloudMaterial; + /// + + /// + /// Computes 3D vertices from the depth map and creates a Mesh() object with the Point primitive + /// type. Each point differently colored based on a depth color ramp. + /// + + public void UpdateRawPointCloud() + { + // Exits when ARCore is not ready. + if (!_initialized || _cameraBufferY == null) + { + return; + } + + // Exits if updating the point cloud too frequently for better performance. + if (Time.realtimeSinceStartup - _lastUpdateTimeSeconds < _updateInvervalInSeconds) + { + return; + } + + + Reset(); //Clear previously create pointcloud + //_pointCloudMaterial.SetFloat(_confidenceThresholdPropertyName, ConfidenceSlider.value); + + // Color and depth images usually have different aspect ratios. The depth image corresponds + // to the region of the camera image that is center-cropped to the depth aspect ratio. + float depthAspectRatio = (float)DepthSource.DepthHeight / DepthSource.DepthWidth; + int colorHeightDepthAspectRatio = (int)(_cameraWidth * depthAspectRatio); + int colorHeightOffset = (_cameraHeight - colorHeightDepthAspectRatio) / 2; + + // Creates point clouds from the depth map. + for (int y = 0; y < DepthSource.DepthHeight; y++) + { + for (int x = 0; x < DepthSource.DepthWidth; x++) + { + int depthIndex = (y * DepthSource.DepthWidth) + x; + float depthInM = (UseRawDepth ? DepthSource.RawDepthArray[depthIndex] : + DepthSource.DepthArray[depthIndex]) * DepthSource.MillimeterToMeter; + float confidence = DepthSource.ConfidenceArray[depthIndex] / 255f; + + // Ignore missing depth values to improve runtime performance. //Only for raw depth + if ((depthInM == 0f || confidence == 0f) && UseRawDepth) + { + continue; + } + + // Computes world-space coordinates. + Vector3 vertex = DepthSource.TransformVertexToWorldSpace( + DepthSource.ComputeVertex(x, y, depthInM)); + + + //Add Color + /*int colorX = x * _cameraWidth / DepthSource.DepthWidth; + int colorY = colorHeightOffset + + (y * colorHeightDepthAspectRatio / DepthSource.DepthHeight); + int linearIndexY = (colorY * _rowStrideY) + colorX; + int linearIndexUV = ((colorY / 2) * _rowStrideUV) + ((colorX / 2) * _pixelStrideUV); + + // Each channel value is an unsigned byte. + byte channelValueY = _cameraBufferY[linearIndexY]; + byte channelValueU = _cameraBufferU[linearIndexUV]; + byte channelValueV = _cameraBufferV[linearIndexUV]; + + byte[] rgb = ConvertYuvToRgb(channelValueY, channelValueU, channelValueV); + byte confidenceByte = (byte)(confidence * 255f); + Color32 color = new Color32(rgb[0], rgb[1], rgb[2], confidenceByte);*/ + float depthRange = _maxVisualizationDistanceM - _minVisualizationDistanceM; + float normalizedDepth = (depthInM - _minVisualizationDistanceM) / depthRange; + Color32 color = ColorRampGenerator.Turbo(normalizedDepth); + + + + if (_verticesCount < _maxVerticesInBuffer - 1) + { + ++_verticesCount; + } + + // Replaces old vertices in the buffer after reaching the maximum capacity. + if (_verticesIndex >= _maxVerticesInBuffer) + { + _verticesIndex = 0; + } + + _vertices[_verticesIndex] = vertex; + _colors[_verticesIndex] = color; + ++_verticesIndex; + } + } + + if (_verticesCount == 0) + { + return; + } + + // Assigns graphical buffers. + + _mesh.SetVertices(_vertices, 0, _verticesCount); + _mesh.SetIndices(_indices, 0, _verticesCount, MeshTopology.Points, 0); + _mesh.SetColors(_colors, 0, _verticesCount); + _mesh.RecalculateBounds(); + + MeshFilter meshFilter = GetComponent(); + meshFilter.mesh = _mesh; + _lastUpdateTimeSeconds = Time.realtimeSinceStartup; + } + + /// + /// Converts a new CPU image into byte buffers and caches to be accessed later. + /// + /// The new CPU image to process. + private void OnImageAvailable(CameraImageBytes image) + { + // Initializes the camera buffer and the composited texture. + if (_cameraBufferY == null || _cameraBufferU == null || _cameraBufferV == null) + { + _cameraWidth = image.Width; + _cameraHeight = image.Height; + _rowStrideY = image.YRowStride; + _rowStrideUV = image.UVRowStride; + _pixelStrideUV = image.UVPixelStride; + _cameraBufferY = new byte[image.Width * image.Height]; + _cameraBufferU = new byte[image.Width * image.Height]; + _cameraBufferV = new byte[image.Width * image.Height]; + } + + // Copies raw data into managed camera buffer. + System.Runtime.InteropServices.Marshal.Copy(image.Y, _cameraBufferY, 0, + image.Height * image.YRowStride); + System.Runtime.InteropServices.Marshal.Copy(image.U, _cameraBufferU, 0, + image.Height * image.UVRowStride / 2); + System.Runtime.InteropServices.Marshal.Copy(image.V, _cameraBufferV, 0, + image.Height * image.UVRowStride / 2); + } + + private byte[] ConvertYuvToRgb(byte y, byte u, byte v) + { + // See https://en.wikipedia.org/wiki/YUV. + float yFloat = y / 255.0f; // Range [0.0, 1.0]. + float uFloat = (u * 0.872f / 255.0f) - 0.436f; // Range [-0.436, 0.436]. + float vFloat = (v * 1.230f / 255.0f) - 0.615f; // Range [-0.615, 0.615]. + float rFloat = Mathf.Clamp01(yFloat + (1.13983f * vFloat)); + float gFloat = Mathf.Clamp01(yFloat - (0.39465f * uFloat) - (0.58060f * vFloat)); + float bFloat = Mathf.Clamp01(yFloat + (2.03211f * uFloat)); + byte r = (byte)(rFloat * 255f); + byte g = (byte)(gFloat * 255f); + byte b = (byte)(bFloat * 255f); + return new[] { r, g, b }; + } + + public void Reset() + { + _verticesCount = 0; + _verticesIndex = 0; + } + + private void Start() + { + _mesh = new Mesh(); + _mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; + _pointCloudMaterial = GetComponent().material; + + // Sets the index buffer. + for (int i = 0; i < _maxVerticesInBuffer; ++i) + { + _indices[i] = i; + } + + Reset(); + } + + private void Update() + { + // Waits until Depth API is initialized. + if (!_initialized && DepthSource.Initialized) + { + _initialized = true; + } + + if (DepthSource.NewRawDepthAvailable) + { + // Fetches CPU image. + using (var image = Frame.CameraImage.AcquireCameraImageBytes()) + { + if (!image.IsAvailable) + { + return; + } + + OnImageAvailable(image); + } + + //UpdateRawPointCloud(); + } + + /*transform.position = Camera.main.transform.forward * OffsetFromCamera; + float normalizedDeltaTime = Mathf.Clamp01( + (float)(Time.deltaTime - _minUpdateInvervalInSeconds)); + _updateInvervalInSeconds = Mathf.Lerp((float)_minUpdateInvervalInSeconds, + (float)_maxUpdateInvervalInSeconds, + normalizedDeltaTime);*/ + } +} diff --git a/Assets/ARRealismDemos/PointCloud/Scripts/RawPointCloudGenerator.cs.meta b/Assets/ARRealismDemos/PointCloud/Scripts/RawPointCloudGenerator.cs.meta new file mode 100644 index 0000000..dab4202 --- /dev/null +++ b/Assets/ARRealismDemos/PointCloud/Scripts/RawPointCloudGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79e874a0ad35b9d418b287356194f877 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: