比较提交

...
此合并请求有变更与目标分支冲突。
/README.md
/com.unity.perception/CHANGELOG.md

1 次代码提交

作者 SHA1 备注 提交日期
Aryan Mann 83d646f2 update references to preview.1 3 年前
共有 102 个文件被更改,包括 7061 次插入1365 次删除
  1. 8
      .github/pull_request_template.md
  2. 18
      .yamato/environments.yml
  3. 314
      TestProjects/PerceptionHDRP/Assets/Scenes/PoseSample.unity
  4. 299
      TestProjects/PerceptionHDRP/Assets/Scenes/SampleScene.unity
  5. 2
      TestProjects/PerceptionHDRP/Assets/Scenes/SampleScene.unity.meta
  6. 73
      TestProjects/PerceptionHDRP/Assets/Scenes/SampleSceneLensDistortion.unity
  7. 5
      TestProjects/PerceptionHDRP/ProjectSettings/EditorBuildSettings.asset
  8. 79
      TestProjects/PerceptionHDRP/ProjectSettings/ProjectSettings.asset
  9. 4
      TestProjects/PerceptionHDRP/ProjectSettings/ProjectVersion.txt
  10. 16
      TestProjects/PerceptionHDRP/UserSettings/EditorUserSettings.asset
  11. 12
      TestProjects/PerceptionHDRP/Packages/manifest.json
  12. 44
      TestProjects/PerceptionHDRP/Packages/packages-lock.json
  13. 10
      TestProjects/PerceptionURP/Packages/manifest.json
  14. 34
      TestProjects/PerceptionURP/Packages/packages-lock.json
  15. 4
      TestProjects/PerceptionURP/ProjectSettings/ProjectVersion.txt
  16. 9
      TestProjects/PerceptionURP/ProjectSettings/VersionControlSettings.asset
  17. 2
      TestProjects/PerceptionURP/ProjectSettings/QualitySettings.asset
  18. 13
      TestProjects/PerceptionURP/UserSettings/EditorUserSettings.asset
  19. 258
      TestProjects/PerceptionURP/Assets/Scenes/PoseSample.unity
  20. 35
      TestProjects/PerceptionURP/Assets/Scenes/SampleScene.unity
  21. 70
      TestProjects/PerceptionURP/Assets/Scenes/SampleSceneLensDistortion.unity
  22. 11
      TestProjects/PerceptionURP/Assets/Settings/UniversalRPAsset.asset
  23. 16
      TestProjects/PerceptionURP/Assets/Settings/ForwardRenderer.asset
  24. 11
      README.md
  25. 3
      com.unity.perception/Tests/Runtime/Unity.Perception.Runtime.Tests.asmdef
  26. 54
      com.unity.perception/Tests/Runtime/GroundTruthTests/SegmentationGroundTruthTests.cs
  27. 28
      com.unity.perception/Tests/Runtime/Randomization/RandomizerTests/RandomizerTests.cs
  28. 307
      com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/ScenarioTests.cs
  29. 11
      com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/Resources/SampleScenarioConfiguration.json
  30. 9
      com.unity.perception/Editor/Randomization/Utilities/UIElementsEditorUtilities.cs
  31. 8
      com.unity.perception/Editor/Randomization/Editors/RunInUnitySimulationWindow.cs
  32. 2
      com.unity.perception/Editor/Randomization/PropertyDrawers/AssetSourceDrawer.cs
  33. 4
      com.unity.perception/Editor/Randomization/VisualElements/AssetSource/AssetListElement.cs
  34. 2
      com.unity.perception/Editor/Randomization/VisualElements/AssetSource/AssetListItemElement.cs
  35. 2
      com.unity.perception/Editor/Randomization/VisualElements/AssetSource/AssetSourceElement.cs
  36. 6
      com.unity.perception/Runtime/GroundTruth/RenderPasses/CrossPipelinePasses/SemanticSegmentationCrossPipelinePass.cs
  37. 3
      com.unity.perception/Runtime/GroundTruth/RenderPasses/HdrpPasses/InstanceSegmentationPass.cs
  38. 3
      com.unity.perception/Runtime/GroundTruth/RenderPasses/HdrpPasses/SemanticSegmentationPass.cs
  39. 1
      com.unity.perception/Runtime/GroundTruth/RenderPasses/UrpPasses/InstanceSegmentationUrpPass.cs
  40. 1
      com.unity.perception/Runtime/GroundTruth/RenderPasses/UrpPasses/SemanticSegmentationUrpPass.cs
  41. 17
      com.unity.perception/Runtime/GroundTruth/PerceptionCamera.cs
  42. 6
      com.unity.perception/Runtime/GroundTruth/Labelers/InstanceSegmentationLabeler.cs
  43. 4
      com.unity.perception/Runtime/GroundTruth/Labelers/KeypointLabeler.cs
  44. 20
      com.unity.perception/Runtime/Randomization/Samplers/ISampler.cs
  45. 20
      com.unity.perception/Runtime/Randomization/Samplers/SamplerTypes/AnimationCurveSampler.cs
  46. 42
      com.unity.perception/Runtime/Randomization/Samplers/SamplerTypes/ConstantSampler.cs
  47. 39
      com.unity.perception/Runtime/Randomization/Samplers/SamplerTypes/NormalSampler.cs
  48. 39
      com.unity.perception/Runtime/Randomization/Samplers/SamplerTypes/UniformSampler.cs
  49. 9
      com.unity.perception/Runtime/Randomization/Randomizers/Randomizer.cs
  50. 19
      com.unity.perception/Runtime/Randomization/Scenarios/PerceptionScenario.cs
  51. 13
      com.unity.perception/Runtime/Randomization/Scenarios/UnitySimulationScenario.cs
  52. 6
      com.unity.perception/Runtime/Randomization/Scenarios/ScenarioBase.cs
  53. 14
      com.unity.perception/Runtime/Randomization/Scenarios/Serialization/JsonConverters.cs
  54. 20
      com.unity.perception/Runtime/Randomization/Scenarios/Serialization/SerializationStructures.cs
  55. 156
      com.unity.perception/Runtime/Randomization/Scenarios/Serialization/ScenarioSerializer.cs
  56. 20
      com.unity.perception/CHANGELOG.md
  57. 2
      com.unity.perception/Documentation~/SetupSteps.md
  58. 78
      com.unity.perception/Documentation~/Tutorial/Phase3.md
  59. 2
      com.unity.perception/Documentation~/Tutorial/Phase2.md
  60. 97
      com.unity.perception/Documentation~/Tutorial/Phase1.md
  61. 6
      com.unity.perception/package.json
  62. 4
      TestProjects/PerceptionHDRP/Assets/New Terrain.asset
  63. 8
      TestProjects/PerceptionHDRP/Assets/New Terrain.asset.meta
  64. 1001
      TestProjects/PerceptionHDRP/Assets/Scenes/MultiCameraExample.unity
  65. 7
      TestProjects/PerceptionHDRP/Assets/Scenes/MultiCameraExample.unity.meta
  66. 1
      TestProjects/PerceptionURP/UserSettings/Search.settings
  67. 492
      TestProjects/PerceptionURP/Assets/Prefabs/Rotating Keypoint Cube.prefab
  68. 7
      TestProjects/PerceptionURP/Assets/Prefabs/Rotating Keypoint Cube.prefab.meta
  69. 1001
      TestProjects/PerceptionURP/Assets/Scenes/MultiCamera.unity
  70. 7
      TestProjects/PerceptionURP/Assets/Scenes/MultiCamera.unity.meta
  71. 63
      TestProjects/PerceptionURP/Assets/Scenes/MultiCameraSettings.lighting
  72. 8
      TestProjects/PerceptionURP/Assets/Scenes/MultiCameraSettings.lighting.meta
  73. 8
      TestProjects/PerceptionURP/Assets/Scenes/SampleScene.meta
  74. 198
      com.unity.perception/Tests/Runtime/GroundTruthTests/RgbOutputTests.cs
  75. 11
      com.unity.perception/Tests/Runtime/GroundTruthTests/RgbOutputTests.cs.meta
  76. 50
      com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/AllMembersAndParametersTestRandomizer.cs
  77. 11
      com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/AllMembersAndParametersTestRandomizer.cs.meta
  78. 24
      com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/Resources/sampleAnimationPoseConfig.asset
  79. 8
      com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/Resources/sampleAnimationPoseConfig.asset.meta
  80. 23
      com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/Resources/sampleIdLabelConfig.asset
  81. 8
      com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/Resources/sampleIdLabelConfig.asset.meta
  82. 210
      com.unity.perception/Runtime/PerceptionAnalytics.cs
  83. 3
      com.unity.perception/Runtime/PerceptionAnalytics.cs.meta
  84. 360
      com.unity.perception/Runtime/PerceptionAnalyticsStructs.cs
  85. 3
      com.unity.perception/Runtime/PerceptionAnalyticsStructs.cs.meta
  86. 725
      com.unity.perception/Documentation~/Tutorial/Images/did_visualizer_open.png
  87. 1001
      com.unity.perception/Documentation~/Tutorial/Images/visualizer_sample_synthdet.png
  88. 119
      com.unity.perception/Documentation~/Tutorial/DatasetInsights.md
  89. 8
      TestProjects/PerceptionHDRP/Assets/Scenes/SampleScene.meta
  90. 63
      TestProjects/PerceptionHDRP/Assets/Scenes/PoseSampleSettings.lighting
  91. 8
      TestProjects/PerceptionHDRP/Assets/Scenes/PoseSampleSettings.lighting.meta
  92. 8
      TestProjects/PerceptionHDRP/Assets/Scenes.meta
  93. 8
      TestProjects/PerceptionHDRP/Assets/StreamingAssets.meta
  94. 3
      TestProjects/PerceptionHDRP/Assets/Terrain Data.asset
  95. 8
      TestProjects/PerceptionHDRP/Assets/Terrain Data.asset.meta
  96. 8
      TestProjects/PerceptionHDRP/Assets/Resources.meta
  97. 7
      TestProjects/PerceptionURP/Assets/Prefabs/KeypointCube.prefab.meta
  98. 521
      TestProjects/PerceptionURP/Assets/Prefabs/KeypointCube.prefab
  99. 3
      com.unity.perception/Editor/Randomization/Editors/PerceptionEditorAnalytics.cs.meta

8
.github/pull_request_template.md


# Peer Review Information:
## Editor / Package versioning:
**Editor Version Target**: 2019.4
**Editor Version Target**: 2020.3
## Dev Testing:
**Tests Added**:

**At Risk Areas**:
## Checklist
- [ ] - Updated docs
- [ ] - Updated changelog
- [ ] - Updated test rail
- [ ] Updated docs
- [ ] Updated changelog
- [ ] Updated test rail

18
.yamato/environments.yml


upmci_registry: https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-npm
# sticking to 2019.4.6f1 for testing for now because Linux Editor fails to open PerceptionHDRP on 2019.4.8f1
# see https://fogbugz.unity3d.com/default.asp?1273518_d68j5lb6eucglb84
# - version: 2019.4.18f1
- version: 2020.3.17f1
- version: 2020.3.19f1
- version: 2021.1.23f1
# - version: 2019.4.18f1
- version: 2020.3.17f1
- version: 2020.3.19f1
- version: 2021.1.23f1
# - version: 2019.4.18f1
- version: 2020.3.17f1
- version: 2020.3.19f1
- version: 2021.1.23f1
# - version: 2019.4.18f1
- version: 2020.3.17f1
- version: 2020.3.19f1
- version: 2021.1.23f1
publish_platforms:
- name: win

314
TestProjects/PerceptionHDRP/Assets/Scenes/PoseSample.unity


--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
serializedVersion: 12
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2

m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2

manualTileSize: 0
tileSize: 256
accuratePlacement: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
--- !u!1 &258323374
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 258323375}
- component: {fileID: 258323376}
m_Layer: 0
m_Name: Keypoint Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &258323375
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 258323374}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -1.65, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1555628032}
- {fileID: 1055163395}
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &258323376
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 258323374}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b33f0bc2b78db642a758f07826d0dd0, type: 3}
m_Name:
m_EditorClassIdentifier:
labels:
- Crate
useAutoLabeling: 0
autoLabelingSchemeType:
--- !u!1001 &793584645
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalScale.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
value: -0.152
value: 1.5
value: 0.528
value: -0.5
value: -0.897
value: 0.83
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}

- target: {fileID: 3710685714995308732, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_Name
value: KeypointCube
value: Rotating Keypoint Cube
--- !u!1 &793584646 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3710685714995308732, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
m_PrefabInstance: {fileID: 793584645}
m_PrefabAsset: {fileID: 0}
--- !u!114 &793584647
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 793584646}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 673a227032a8e4940b9828c5b6f852ab, type: 3}
m_Name:
m_EditorClassIdentifier:
yDegreesPerSecond: 60
--- !u!1 &963194225
GameObject:
m_ObjectHideFlags: 0

m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_LocalRotation: {x: 0.11266163, y: -0.26002073, z: 0.030562058, w: 0.95852107}
m_LocalPosition: {x: 1.4392753, y: 1.2635702, z: -2.3026767}
m_LocalScale: {x: 36.249973, y: 36.249973, z: 36.249973}
m_LocalPosition: {x: 1.929, y: 1.123, z: -3.057}
m_LocalScale: {x: 1, y: 1, z: 1}
m_RootOrder: 0
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &963194229
MonoBehaviour:

dithering: 0
stopNaNs: 0
taaSharpenStrength: 0.6
TAAQuality: 1
taaHistorySharpening: 0.35
taaAntiFlicker: 0.5
taaMotionVectorRejection: 0
taaAntiHistoryRinging: 0
physicalParameters:
m_Iso: 200
m_ShutterSpeed: 0.005

m_BarrelClipping: 0.25
m_Anamorphism: 0
flipYMode: 0
xrRendering: 1
fullscreenPassthrough: 0
allowDynamicResolution: 0
customRenderingSettings: 0

m_Bits: 4294967295
hasPersistentHistory: 0
exposureTarget: {fileID: 0}
m_RenderingPathCustomFrameSettings:
bitDatas:
data1: 70297877217101

maximumLODLevel: 0
maximumLODLevelMode: 0
maximumLODLevelQualityLevel: 0
sssQualityMode: 0
sssQualityLevel: 0
sssCustomSampleBudget: 20
materialQuality: 0
renderingPathCustomFrameSettingsOverrideMask:
mask:

type: {class: KeypointLabeler, ns: UnityEngine.Perception.GroundTruth, asm: Unity.Perception.Runtime}
data:
enabled: 1
activeTemplate: {fileID: 11400000, guid: 90217544e06a7b1408543cd72382ccbb,
activeTemplate: {fileID: 11400000, guid: a29b79d8ce98945a0855b1addec08d86,
annotationId: F66DFD55-FE53-4AA7-8934-B1226D9C9175
annotationId: 8b3ef246-daa7-4dd5-a0e8-a943f6e7f8c2
selfOcclusionDistance: 0.15
activeTemplate: {fileID: 11400000, guid: a29b79d8ce98945a0855b1addec08d86,
activeTemplate: {fileID: 11400000, guid: 90217544e06a7b1408543cd72382ccbb,
annotationId: 8b3ef246-daa7-4dd5-a0e8-a943f6e7f8c2
annotationId: F66DFD55-FE53-4AA7-8934-B1226D9C9175
selfOcclusionDistance: 0.15
--- !u!1 &1055163391
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1055163395}
- component: {fileID: 1055163394}
- component: {fileID: 1055163393}
- component: {fileID: 1055163392}
m_Layer: 0
m_Name: Object
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!65 &1055163392
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1055163391}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &1055163393
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1055163391}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 257
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, 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: 1
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
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1055163394
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1055163391}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &1055163395
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1055163391}
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: 258323375}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1190242050
GameObject:
m_ObjectHideFlags: 0

- component: {fileID: 1190242052}
- component: {fileID: 1190242051}
m_Layer: 0
m_Name: GameObject
m_Name: Scenario
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0

m_EditorClassIdentifier:
m_Randomizers:
- id: 0
configuration: {fileID: 0}
constants:
randomSeed: 539662031
totalIterations: 2000

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1427719271
GameObject:

m_EditorClassIdentifier:
m_Profile: {fileID: 0}
m_StaticLightingSkyUniqueID: 0
m_SkySettings: {fileID: 0}
m_SkySettingsFromProfile: {fileID: 0}
--- !u!4 &1427719273
Transform:
m_ObjectHideFlags: 1

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1488440284
GameObject:

m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 3.1415927
m_Intensity: 15000
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208

m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 2
m_AreaSize: {x: 1, y: 1}
m_AreaSize: {x: 0.5, y: 0.5}
m_UseViewFrustumForShadowCasterCull: 1
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &1488440286

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 4
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!114 &1488440287
MonoBehaviour:

m_Script: {fileID: 11500000, guid: 7a68c43fe1f2a47cfa234b5eeaa98012, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 10
m_Version: 11
m_ObsoleteShadowResolutionTier: 1
m_ObsoleteUseShadowQualitySettings: 0
m_ObsoleteCustomShadowResolution: 512

m_AreaLightShape: 0
m_Intensity: 3.1415927
m_Intensity: 15000
m_SpotIESCutoffPercent: 100
m_VolumetricFadeDistance: 10000
m_AffectDiffuse: 1
m_AffectSpecular: 1
m_NonLightmappedOnly: 0

m_ApplyRangeAttenuation: 1
m_DisplayAreaLightEmissiveMesh: 0
m_AreaLightCookie: {fileID: 0}
m_IESPoint: {fileID: 0}
m_IESSpot: {fileID: 0}
m_IncludeForRayTracing: 1
m_AreaLightShadowCone: 120
m_UseScreenSpaceShadows: 0
m_InteractsWithSky: 1

m_LightShadowRadius: 0.5
m_SemiTransparentShadow: 0
m_ColorShadow: 1
m_DistanceBasedFiltering: 0
m_EvsmExponent: 15
m_EvsmLightLeakBias: 0
m_EvsmVarianceBias: 0.00001

m_NormalBias: 0.75
m_SlopeBias: 0.5
m_ShadowUpdateMode: 0
m_AlwaysDrawDynamicShadows: 0
m_UpdateShadowOnLightMovement: 0
m_CachedShadowTranslationThreshold: 0.01
m_CachedShadowAngularThreshold: 0.5
m_preserveCachedShadow: 0
m_ShadowCascadeRatios:
- 0.05
- 0.2

showAdditionalSettings: 0
m_AreaLightEmissiveMeshShadowCastingMode: 0
m_AreaLightEmissiveMeshMotionVectorGenerationMode: 0
m_AreaLightEmissiveMeshLayer: -1
--- !u!1 &1555628031
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1555628032}
- component: {fileID: 1555628033}
m_Layer: 0
m_Name: FrontBottomLeft
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1555628032
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1555628031}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.481, y: -0.491, z: 0.5}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 258323375}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1555628033
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1555628031}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- FrontBottomLeft
overrideSelfOcclusionDistance: 0
selfOcclusionDistance: 0.98
--- !u!1001 &1667437134
PrefabInstance:
m_ObjectHideFlags: 0

- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}
propertyPath: m_RootOrder
value: 1
value: 3
objectReference: {fileID: 0}
- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}

- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
value: -0.75
objectReference: {fileID: 0}
- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}

- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}
propertyPath: m_LocalRotation.w
value: -0.041973293
value: 0
value: -0
value: 0
value: 0.9991188
value: 1
value: -0
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}

- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 184.81099
value: 180
objectReference: {fileID: 0}
- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}

- target: {fileID: 8917933090883489511, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}
propertyPath: m_Name
value: LabeledAndRandomized
value: Keypoint Person
objectReference: {fileID: 0}
- target: {fileID: 8917933090883489511, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}

299
TestProjects/PerceptionHDRP/Assets/Scenes/SampleScene.unity


--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
serializedVersion: 12
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2

m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 1
m_LightmapEditorSettings:
serializedVersion: 12

m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2

manualTileSize: 0
tileSize: 256
accuratePlacement: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
--- !u!1 &117484506
--- !u!1 &85886256
m_ObjectHideFlags: 1
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}

- component: {fileID: 117484507}
- component: {fileID: 85886257}
m_Name: StaticLightingSky
m_Name: Scenario
--- !u!114 &117484507
--- !u!114 &85886257
m_ObjectHideFlags: 1
m_ObjectHideFlags: 0
m_GameObject: {fileID: 117484506}
m_GameObject: {fileID: 85886256}
m_Script: {fileID: 11500000, guid: 441482e8936e35048a1dffac814e3ef8, type: 3}
m_Script: {fileID: 11500000, guid: d50076aff0af4515b4422166496fdd5e, type: 3}
m_Profile: {fileID: 0}
m_StaticLightingSkyUniqueID: 0
m_SkySettings: {fileID: 0}
m_SkySettingsFromProfile: {fileID: 0}
m_Randomizers: []
configuration: {fileID: 0}
constants:
randomSeed: 539662031
totalIterations: 100
instanceCount: 1
instanceIndex: 0
framesPerIteration: 1
references:
version: 1
m_ObjectHideFlags: 1
m_ObjectHideFlags: 0
m_GameObject: {fileID: 117484506}
m_GameObject: {fileID: 85886256}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalPosition: {x: 107.21, y: 72.77, z: -144.12}
m_RootOrder: 6
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &411238276
GameObject:

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &411238280
MeshFilter:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
yDegreesPerSecond: 180
--- !u!1 &703243862
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 703243865}
- component: {fileID: 703243864}
- component: {fileID: 703243863}
- component: {fileID: 703243866}
m_Layer: 0
m_Name: Terrain
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 4294967295
m_IsActive: 1
--- !u!154 &703243863
TerrainCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 703243862}
m_Material: {fileID: 0}
m_Enabled: 1
m_TerrainData: {fileID: 15600000, guid: 4bb44296574a34e65a441df8c0a0e66a, type: 2}
m_EnableTreeColliders: 1
--- !u!218 &703243864
Terrain:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 703243862}
m_Enabled: 1
serializedVersion: 6
m_TerrainData: {fileID: 15600000, guid: 4bb44296574a34e65a441df8c0a0e66a, type: 2}
m_TreeDistance: 5000
m_TreeBillboardDistance: 50
m_TreeCrossFadeLength: 5
m_TreeMaximumFullLODCount: 50
m_DetailObjectDistance: 80
m_DetailObjectDensity: 1
m_HeightmapPixelError: 5
m_SplatMapDistance: 1000
m_HeightmapMaximumLOD: 0
m_ShadowCastingMode: 2
m_DrawHeightmap: 1
m_DrawInstanced: 0
m_DrawTreesAndFoliage: 1
m_ReflectionProbeUsage: 1
m_MaterialTemplate: {fileID: 2100000, guid: 22ff8771d87ef27429e670136399094b, type: 2}
m_BakeLightProbesForTrees: 1
m_PreserveTreePrototypeLayers: 0
m_DeringLightProbesForTrees: 1
m_ScaleInLightmap: 0.0256
m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0}
m_GroupingID: 0
m_RenderingLayerMask: 257
m_AllowAutoConnect: 1
--- !u!4 &703243865
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 703243862}
m_LocalRotation: {x: -0, y: -0.07853227, z: -0, w: 0.9969116}
m_LocalPosition: {x: -604.5, y: 65.1, z: -902.3}
m_LocalScale: {x: 0.95858, y: 0.95858, z: 0.95858}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: -9.008, z: 0}
--- !u!114 &703243866
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 703243862}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b33f0bc2b78db642a758f07826d0dd0, type: 3}
m_Name:
m_EditorClassIdentifier:
labels:
- Terrain
useAutoLabeling: 0
autoLabelingSchemeType:
--- !u!1 &705507993
GameObject:
m_ObjectHideFlags: 0

m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 3.1415927
m_Intensity: 70000
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208

m_RenderingLayerMask: 1
m_Lightmapping: 1
m_LightShadowCasterMode: 2
m_AreaSize: {x: 1, y: 1}
m_AreaSize: {x: 0.5, y: 0.5}
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 1.1418e-41, z: 0, w: 0}
m_UseColorTemperature: 1
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: NaN}
m_UseViewFrustumForShadowCasterCull: 1
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &705507995

m_Script: {fileID: 11500000, guid: 7a68c43fe1f2a47cfa234b5eeaa98012, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 10
m_Version: 11
m_ObsoleteShadowResolutionTier: 1
m_ObsoleteUseShadowQualitySettings: 0
m_ObsoleteCustomShadowResolution: 512

m_AreaLightShape: 0
m_Intensity: 3.1415927
m_EnableSpotReflector: 0
m_Intensity: 70000
m_EnableSpotReflector: 1
m_SpotIESCutoffPercent: 100
m_VolumetricFadeDistance: 10000
m_AffectDiffuse: 1
m_AffectSpecular: 1
m_NonLightmappedOnly: 0

m_ShapeRadius: 0
m_ShapeRadius: 0.025
m_SoftnessScale: 1
m_UseCustomSpotLightShadowCone: 0
m_CustomSpotLightShadowCone: 30

m_AreaLightCookie: {fileID: 0}
m_IESPoint: {fileID: 0}
m_IESSpot: {fileID: 0}
m_IncludeForRayTracing: 1
m_AngularDiameter: 0
m_AngularDiameter: 0.5
m_Distance: 150000000
m_Distance: 1.5e+11
m_UseRayTracedShadows: 0
m_NumRayTracingSamples: 4
m_FilterTracedShadow: 1

m_SemiTransparentShadow: 0
m_ColorShadow: 1
m_DistanceBasedFiltering: 0
m_EvsmExponent: 15
m_EvsmLightLeakBias: 0
m_EvsmVarianceBias: 0.00001

m_ShadowNearPlane: 0.1
m_BlockerSampleCount: 24
m_FilterSampleCount: 16
m_MinFilterSize: 0.01
m_MinFilterSize: 0.1
m_KernelSize: 5
m_LightAngle: 1
m_MaxDepthBias: 0.001

m_NormalBias: 0.75
m_SlopeBias: 0.5
m_ShadowUpdateMode: 0
m_AlwaysDrawDynamicShadows: 0
m_UpdateShadowOnLightMovement: 0
m_CachedShadowTranslationThreshold: 0.01
m_CachedShadowAngularThreshold: 0.5
m_preserveCachedShadow: 0
m_ShadowCascadeRatios:
- 0.05
- 0.2

showAdditionalSettings: 0
m_AreaLightEmissiveMeshShadowCastingMode: 0
m_AreaLightEmissiveMeshMotionVectorGenerationMode: 0
m_AreaLightEmissiveMeshLayer: -1
--- !u!1 &934158981
GameObject:
m_ObjectHideFlags: 0

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &934158986
MeshFilter:
m_ObjectHideFlags: 0

- component: {fileID: 963194228}
- component: {fileID: 963194227}
- component: {fileID: 963194226}
- component: {fileID: 963194230}
- component: {fileID: 963194230}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera

dithering: 0
stopNaNs: 0
taaSharpenStrength: 0.6
TAAQuality: 1
taaHistorySharpening: 0.35
taaAntiFlicker: 0.5
taaMotionVectorRejection: 0
taaAntiHistoryRinging: 0
physicalParameters:
m_Iso: 200
m_ShutterSpeed: 0.005

m_BarrelClipping: 0.25
m_Anamorphism: 0
flipYMode: 0
xrRendering: 1
fullscreenPassthrough: 0
allowDynamicResolution: 0
customRenderingSettings: 0

m_Bits: 4294967295
hasPersistentHistory: 0
exposureTarget: {fileID: 0}
data1: 70280697347933
data2: 4539628424926265344
data1: 72198262773251917
data2: 13763000468760363032
lodBias: 1
lodBiasMode: 0
lodBiasQualityLevel: 0

sssQualityMode: 0
sssQualityLevel: 0
sssCustomSampleBudget: 20
materialQuality: 0
renderingPathCustomFrameSettingsOverrideMask:
mask:

m_Script: {fileID: 11500000, guid: 4467405dbcbd3d64ab4363e9ae8bb813, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Labelers:
- id: 0
- id: 1
- id: 2
- id: 3
description: The main camera
captureRgbImages: 1
firstCaptureFrame: 0

framesBetweenCaptures: 0
m_Labelers:
- id: 0
- id: 1
- id: 2
- id: 3
showVisualizations: 1
references:
version: 1

objectInfoMetricId: 5ba92024-b3b7-41a7-9d3f-c03a6a8ddd01
idLabelConfig: {fileID: 11400000, guid: 258de5b48703743468d34fc5bbdfa3aa,
type: 2}
--- !u!1 &1321518866
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1321518869}
- component: {fileID: 1321518868}
- component: {fileID: 1321518867}
- component: {fileID: 1321518870}
m_Layer: 0
m_Name: Terrain
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 4294967295
m_IsActive: 1
--- !u!154 &1321518867
TerrainCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1321518866}
m_Material: {fileID: 0}
m_Enabled: 1
m_TerrainData: {fileID: 15600000, guid: 15ded0116bd9f864f80b9813d4f4477f, type: 2}
m_EnableTreeColliders: 1
--- !u!218 &1321518868
Terrain:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1321518866}
m_Enabled: 1
serializedVersion: 6
m_TerrainData: {fileID: 15600000, guid: 15ded0116bd9f864f80b9813d4f4477f, type: 2}
m_TreeDistance: 5000
m_TreeBillboardDistance: 50
m_TreeCrossFadeLength: 5
m_TreeMaximumFullLODCount: 50
m_DetailObjectDistance: 80
m_DetailObjectDensity: 1
m_HeightmapPixelError: 5
m_SplatMapDistance: 1000
m_HeightmapMaximumLOD: 0
m_ShadowCastingMode: 2
m_DrawHeightmap: 1
m_DrawInstanced: 0
m_DrawTreesAndFoliage: 1
m_ReflectionProbeUsage: 1
m_MaterialTemplate: {fileID: 2100000, guid: 22ff8771d87ef27429e670136399094b, type: 2}
m_BakeLightProbesForTrees: 1
m_PreserveTreePrototypeLayers: 0
m_DeringLightProbesForTrees: 1
m_ScaleInLightmap: 0.0256
m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0}
m_GroupingID: 0
m_RenderingLayerMask: 1
m_AllowAutoConnect: 1
--- !u!4 &1321518869
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1321518866}
m_LocalRotation: {x: -0, y: -0.07853227, z: -0, w: 0.9969116}
m_LocalPosition: {x: -604.5, y: 65.1, z: -902.3}
m_LocalScale: {x: 0.95858, y: 0.95858, z: 0.95858}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: -9.008, z: 0}
--- !u!114 &1321518870
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1321518866}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b33f0bc2b78db642a758f07826d0dd0, type: 3}
m_Name:
m_EditorClassIdentifier:
labels:
- Terrain
useAutoLabeling: 0
autoLabelingSchemeType:
--- !u!1 &1640252278
GameObject:
m_ObjectHideFlags: 0

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1640252282
MeshFilter:
m_ObjectHideFlags: 0

2
TestProjects/PerceptionHDRP/Assets/Scenes/SampleScene.unity.meta


fileFormatVersion: 2
guid: 9fc0d4010bbf28b4594072e72b8655ab
guid: 83d9294a5a62343ecb4e3a8d79196f39
DefaultImporter:
externalObjects: {}
userData:

73
TestProjects/PerceptionHDRP/Assets/Scenes/SampleSceneLensDistortion.unity


--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
serializedVersion: 12
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2

m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2

manualTileSize: 0
tileSize: 256
accuratePlacement: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &411238280
MeshFilter:
m_ObjectHideFlags: 0

m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 411238276}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalRotation: {x: 0, y: 0.3065261, z: 0, w: 0.9518623}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 35.7, z: 0}
--- !u!114 &411238282
MonoBehaviour:
m_ObjectHideFlags: 0

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &464025708
MeshFilter:
m_ObjectHideFlags: 0

m_LocalScale: {x: 36.249973, y: 36.249973, z: 36.249973}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &464025710
MonoBehaviour:

m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 3.1415927
m_Intensity: 15000
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208

m_RenderingLayerMask: 1
m_Lightmapping: 1
m_LightShadowCasterMode: 2
m_AreaSize: {x: 1, y: 1}
m_AreaSize: {x: 0.5, y: 0.5}
m_UseViewFrustumForShadowCasterCull: 1
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &705507995

m_LocalScale: {x: 36.249973, y: 36.249977, z: 36.249973}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!114 &705507996
MonoBehaviour:

m_Script: {fileID: 11500000, guid: 7a68c43fe1f2a47cfa234b5eeaa98012, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 10
m_Version: 11
m_ObsoleteShadowResolutionTier: 1
m_ObsoleteUseShadowQualitySettings: 0
m_ObsoleteCustomShadowResolution: 512

m_AreaLightShape: 0
m_Intensity: 3.1415927
m_Intensity: 15000
m_SpotIESCutoffPercent: 100
m_VolumetricFadeDistance: 10000
m_AffectDiffuse: 1
m_AffectSpecular: 1
m_NonLightmappedOnly: 0

m_ApplyRangeAttenuation: 1
m_DisplayAreaLightEmissiveMesh: 0
m_AreaLightCookie: {fileID: 0}
m_IESPoint: {fileID: 0}
m_IESSpot: {fileID: 0}
m_IncludeForRayTracing: 1
m_AreaLightShadowCone: 120
m_UseScreenSpaceShadows: 0
m_InteractsWithSky: 1

m_LightShadowRadius: 0.5
m_SemiTransparentShadow: 0
m_ColorShadow: 1
m_DistanceBasedFiltering: 0
m_EvsmExponent: 15
m_EvsmLightLeakBias: 0
m_EvsmVarianceBias: 0.00001

m_NormalBias: 0.75
m_SlopeBias: 0.5
m_ShadowUpdateMode: 0
m_AlwaysDrawDynamicShadows: 0
m_UpdateShadowOnLightMovement: 0
m_CachedShadowTranslationThreshold: 0.01
m_CachedShadowAngularThreshold: 0.5
m_preserveCachedShadow: 0
m_ShadowCascadeRatios:
- 0.05
- 0.2

showAdditionalSettings: 0
m_AreaLightEmissiveMeshShadowCastingMode: 0
m_AreaLightEmissiveMeshMotionVectorGenerationMode: 0
m_AreaLightEmissiveMeshLayer: -1
--- !u!1 &746670481
GameObject:
m_ObjectHideFlags: 1

m_EditorClassIdentifier:
m_Profile: {fileID: 0}
m_StaticLightingSkyUniqueID: 0
m_SkySettings: {fileID: 0}
m_SkySettingsFromProfile: {fileID: 0}
--- !u!4 &746670483
Transform:
m_ObjectHideFlags: 1

m_LocalScale: {x: 36.249973, y: 36.249973, z: 36.249973}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 4
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: -36.337, z: 0}
--- !u!114 &963194229
MonoBehaviour:

dithering: 0
stopNaNs: 0
taaSharpenStrength: 0.6
TAAQuality: 1
taaHistorySharpening: 0.35
taaAntiFlicker: 0.5
taaMotionVectorRejection: 0
taaAntiHistoryRinging: 0
physicalParameters:
m_Iso: 200
m_ShutterSpeed: 0.005

m_BarrelClipping: 0.25
m_Anamorphism: 0
flipYMode: 0
xrRendering: 1
fullscreenPassthrough: 0
allowDynamicResolution: 0
customRenderingSettings: 0

m_Bits: 4294967295
hasPersistentHistory: 0
exposureTarget: {fileID: 0}
m_RenderingPathCustomFrameSettings:
bitDatas:
data1: 70280697347933

maximumLODLevel: 0
maximumLODLevelMode: 0
maximumLODLevelQualityLevel: 0
sssQualityMode: 0
sssQualityLevel: 0
sssCustomSampleBudget: 20
materialQuality: 0
renderingPathCustomFrameSettingsOverrideMask:
mask:

m_Script: {fileID: 11500000, guid: 4467405dbcbd3d64ab4363e9ae8bb813, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Labelers:
- id: 0
- id: 1
- id: 2
- id: 3
description: The main camera
captureRgbImages: 1
firstCaptureFrame: 0

framesBetweenCaptures: 0
m_Labelers:
- id: 0
- id: 1
- id: 2
- id: 3
showVisualizations: 1
references:
version: 1

priority: 0
blendDistance: 0
weight: 1
sharedProfile: {fileID: 0}
sharedProfile: {fileID: 11400000, guid: 7f049716039273740bc26d8376320039, type: 2}
--- !u!4 &1562495300
Transform:
m_ObjectHideFlags: 0

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 5
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1640252278
GameObject:

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1640252282
MeshFilter:
m_ObjectHideFlags: 0

m_LocalScale: {x: 36.249973, y: 100, z: 36.249973}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1640252284
MonoBehaviour:

5
TestProjects/PerceptionHDRP/ProjectSettings/EditorBuildSettings.asset


guid: 290fafafd5ac84d4388b8a6b129c6f20
- enabled: 1
path: Assets/Scenes/SampleScene.unity
guid: 9fc0d4010bbf28b4594072e72b8655ab
guid: 83d9294a5a62343ecb4e3a8d79196f39
- enabled: 1
path: Assets/Scenes/SampleSceneLensDistortion.unity
guid: 626a1164e53022d4c93345d4666a6713
m_configObjects: {}

79
TestProjects/PerceptionHDRP/ProjectSettings/ProjectSettings.asset


--- !u!129 &1
PlayerSettings:
m_ObjectHideFlags: 0
serializedVersion: 22
serializedVersion: 20
productGUID: 57f77c262a9af434b9423af9c6b04c37
AndroidProfiler: 0
AndroidFilterTouchesWhenObscured: 0

m_StereoRenderingPath: 0
m_ActiveColorSpace: 1
m_MTRendering: 1
mipStripping: 0
numberOfMipsStripped: 0
m_StackTraceTypes: 010000000100000001000000010000000100000001000000
iosShowActivityIndicatorOnLoading: -1
androidShowActivityIndicatorOnLoading: -1

stadiaTargetFramerate: 0
vulkanNumSwapchainBuffers: 2
vulkanEnableSetSRGBWrite: 0
vulkanEnablePreTransform: 0
vulkanEnableLateAcquireNextImage: 0
m_SupportedAspectRatios:
4:3: 1

xboxOneDisableKinectGpuReservation: 1
xboxOneEnable7thCore: 1
vrSettings:
cardboard:
depthFormat: 0
enableTransitionView: 0
daydream:
depthFormat: 0
useSustainedPerformanceMode: 0
enableVideoLayer: 0
useProtectedVideoMemory: 0
minimumSupportedHeadTracking: 0
maximumSupportedHeadTracking: 1
hololens:
depthFormat: 1
depthBufferSharingEnabled: 1
lumin:
depthFormat: 0
frameTiming: 2
enableGLCache: 0
glCacheMaxBlobSize: 524288
glCacheMaxFileSize: 8388608
oculus:
sharedDepthBuffer: 1
dashSupport: 1
lowOverheadMode: 0
protectedContext: 0
v2Signing: 1
enable360StereoCapture: 0
isWsaHolographicRemotingEnabled: 0
enableFrameTimingStats: 0

Standalone: 0
iPhone: 0
tvOS: 0
overrideDefaultApplicationIdentifier: 0
AndroidBundleVersionCode: 1
AndroidMinSdkVersion: 19
AndroidTargetSdkVersion: 0

iOSLaunchScreeniPadFillPct: 100
iOSLaunchScreeniPadSize: 100
iOSLaunchScreeniPadCustomXibPath:
iOSUseLaunchScreenStoryboard: 0
iOSLaunchScreeniPadCustomStoryboardPath:
iOSDeviceRequirements: []
iOSURLSchemes: []
iOSBackgroundModes: 0

iOSRequireARKit: 0
iOSAutomaticallyDetectAndAddCapabilities: 1
appleEnableProMotion: 0
shaderPrecisionModel: 0
useCustomMainManifest: 0
useCustomLauncherManifest: 0
useCustomMainGradleTemplate: 0
useCustomLauncherGradleManifest: 0
useCustomBaseGradleTemplate: 0
useCustomGradlePropertiesTemplate: 0
useCustomProguardFile: 0
AndroidTargetArchitectures: 1
AndroidSplashScreenScale: 0
androidSplashScreen: {fileID: 0}

height: 180
banner: {fileID: 0}
androidGamepadSupportLevel: 0
AndroidMinifyWithR8: 0
AndroidMinifyRelease: 0
AndroidMinifyDebug: 0
AndroidValidateAppBundleSize: 1
AndroidAppBundleSizeToValidate: 150
m_BuildTargetIcons: []

tvOS: 1
m_BuildTargetGroupLightmapEncodingQuality: []
m_BuildTargetGroupLightmapSettings: []
m_BuildTargetNormalMapEncoding: []
playModeTestRunnerEnabled: 0
runPlayModeTestAsEditModeTest: 0
actionOnDotNetUnhandledException: 1

cameraUsageDescription:
locationUsageDescription:
microphoneUsageDescription:
switchNMETAOverride:
switchNetLibKey:
switchSocketMemoryPoolSize: 6144
switchSocketAllocatorPoolSize: 128

switchUseGOLDLinker: 0
switchApplicationID: 0x01004b9000490000
switchNSODependencies:
switchTitleNames_0:

switchTitleNames_12:
switchTitleNames_13:
switchTitleNames_14:
switchTitleNames_15:
switchPublisherNames_0:
switchPublisherNames_1:
switchPublisherNames_2:

switchPublisherNames_12:
switchPublisherNames_13:
switchPublisherNames_14:
switchPublisherNames_15:
switchIcons_0: {fileID: 0}
switchIcons_1: {fileID: 0}
switchIcons_2: {fileID: 0}

switchIcons_12: {fileID: 0}
switchIcons_13: {fileID: 0}
switchIcons_14: {fileID: 0}
switchIcons_15: {fileID: 0}
switchSmallIcons_0: {fileID: 0}
switchSmallIcons_1: {fileID: 0}
switchSmallIcons_2: {fileID: 0}

switchSmallIcons_12: {fileID: 0}
switchSmallIcons_13: {fileID: 0}
switchSmallIcons_14: {fileID: 0}
switchSmallIcons_15: {fileID: 0}
switchManualHTML:
switchAccessibleURLs:
switchLegalInformation:

switchSocketInitializeEnabled: 1
switchNetworkInterfaceManagerInitializeEnabled: 1
switchPlayerConnectionEnabled: 1
switchUseNewStyleFilepaths: 0
switchUseMicroSleepForYield: 1
switchMicroSleepForYieldTime: 25
ps4NPAgeRating: 12
ps4NPTitleSecret:
ps4NPTrophyPackPath:

ps4videoRecordingFeaturesUsed: 0
ps4contentSearchFeaturesUsed: 0
ps4CompatibilityPS5: 0
ps4AllowPS5Detection: 0
ps4GPU800MHz: 1
ps4attribEyeToEyeDistanceSettingVR: 0
ps4IncludedModules: []

webGLAnalyzeBuildSize: 0
webGLUseEmbeddedResources: 0
webGLCompressionFormat: 0
webGLWasmArithmeticExceptions: 0
webGLDecompressionFallback: 0
webGLWasmStreaming: 0
additionalCompilerArguments: {}
platformArchitecture: {}
scriptingBackend:
Standalone: 0

suppressCommonWarnings: 1
useDeterministicCompilation: 1
useReferenceAssemblies: 1
enableRoslynAnalyzers: 1
additionalIl2CppArgs:
scriptingRuntimeVersion: 1
gcIncremental: 0

XboxOneXTitleMemory: 8
XboxOneOverrideIdentityName:
XboxOneOverrideIdentityPublisher:
vrEditorSettings: {}
vrEditorSettings:
daydream:
daydreamIconForeground: {fileID: 0}
daydreamIconBackground: {fileID: 0}
cloudServicesEnabled: {}
luminIcon:
m_Name:

m_VersionCode: 1
m_VersionName:
apiCompatibilityLevel: 6
activeInputHandler: 0
cloudProjectId: 8defcb31-8c8c-49c0-a50b-c0928c5c07e4
cloudProjectId: 6904a6f4-0e0a-4d1e-a022-397acf285301
qualitySettingsNames: []
projectName: SimViz Test
organizationId: jonhunity
projectName: PerceptionHDRP
organizationId: unity_f2umfnzvuduika
enableNativePlatformBackendsForNewInputSystem: 0
disableOldInputManagerSupport: 0
virtualTexturingSupportEnabled: 0

4
TestProjects/PerceptionHDRP/ProjectSettings/ProjectVersion.txt


m_EditorVersion: 2020.3.16f1
m_EditorVersionWithRevision: 2020.3.16f1 (049d6eca3c44)
m_EditorVersion: 2020.3.19f1
m_EditorVersionWithRevision: 2020.3.19f1 (68f137dc9bbe)

16
TestProjects/PerceptionHDRP/UserSettings/EditorUserSettings.asset


m_ObjectHideFlags: 0
serializedVersion: 4
m_ConfigSettings:
RecentlyUsedScenePath-0:
value: 22424703114646680e0b0227036c6c111b07142f1f2b233e28061137acf53a31f6fe
flags: 0
RecentlyUsedScenePath-1:
value: 22424703114646680e0b0227036c6f1f05122b2b21382a35633c133af6f9
flags: 0
RecentlyUsedScenePath-2:
value: 22424703114646680e0b0227036c6c111b07142f1f2b233e2867083debf42d
flags: 0
RecentlyUsedScenePath-3:
value: 22424703114646680e0b0227036c6c111b07142f1f2b233e2805183df1c43d2bf6e824fdee3531722c0ce6281d
flags: 0
vcSharedLogLevel:
value: 0d5e400f0650
flags: 0

m_SemanticMergeMode: 2
m_VCShowFailedCheckout: 1
m_VCOverwriteFailedCheckoutAssets: 1
m_VCOverlayIcons: 1
m_VCProjectOverlayIcons: 1
m_VCHierarchyOverlayIcons: 1
m_VCOtherOverlayIcons: 1
m_VCAllowAsyncUpdate: 0

12
TestProjects/PerceptionHDRP/Packages/manifest.json


{
"dependencies": {
"com.unity.collab-proxy": "1.7.1",
"com.unity.collab-proxy": "1.9.0",
"com.unity.ide.vscode": "1.2.3",
"com.unity.ide.vscode": "1.2.4",
"com.unity.render-pipelines.core": "10.5.1",
"com.unity.render-pipelines.high-definition": "10.5.1",
"com.unity.simulation.capture": "0.0.10-preview.23",
"com.unity.render-pipelines.core": "10.6.0",
"com.unity.render-pipelines.high-definition": "10.6.0",
"com.unity.simulation.capture": "0.0.10-preview.24",
"com.unity.test-framework": "1.1.27",
"com.unity.test-framework": "1.1.29",
"com.unity.testtools.codecoverage": "1.1.0",
"com.unity.textmeshpro": "3.0.6",
"com.unity.toolchain.win-x86_64-linux-x86_64": "0.1.21-preview",

44
TestProjects/PerceptionHDRP/Packages/packages-lock.json


"url": "https://packages.unity.com"
},
"com.unity.collab-proxy": {
"version": "1.7.1",
"version": "1.9.0",
"dependencies": {
"com.unity.nuget.newtonsoft-json": "2.0.0"
},
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.collections": {

"url": "https://packages.unity.com"
},
"com.unity.ide.vscode": {
"version": "1.2.3",
"version": "1.2.4",
"depth": 0,
"source": "registry",
"dependencies": {},

"url": "https://packages.unity.com"
},
"com.unity.nuget.newtonsoft-json": {
"version": "2.0.0",
"version": "2.0.0-preview",
"depth": 1,
"source": "registry",
"dependencies": {},

"com.unity.collections": "0.9.0-preview.6",
"com.unity.nuget.newtonsoft-json": "1.1.2",
"com.unity.render-pipelines.core": "7.1.6",
"com.unity.simulation.capture": "0.0.10-preview.20",
"com.unity.simulation.capture": "0.0.10-preview.24",
"com.unity.simulation.core": "0.0.10-preview.22"
"com.unity.simulation.core": "0.0.10-preview.25"
"version": "10.5.1",
"version": "10.6.0",
"depth": 0,
"source": "registry",
"dependencies": {

},
"com.unity.render-pipelines.high-definition": {
"version": "10.5.1",
"version": "10.6.0",
"com.unity.render-pipelines.core": "10.5.1",
"com.unity.shadergraph": "10.5.1",
"com.unity.visualeffectgraph": "10.5.1",
"com.unity.render-pipelines.high-definition-config": "10.5.1"
"com.unity.render-pipelines.core": "10.6.0",
"com.unity.shadergraph": "10.6.0",
"com.unity.visualeffectgraph": "10.6.0",
"com.unity.render-pipelines.high-definition-config": "10.6.0"
"version": "10.5.1",
"version": "10.6.0",
"com.unity.render-pipelines.core": "10.5.1"
"com.unity.render-pipelines.core": "10.6.0"
},
"url": "https://packages.unity.com"
},

"url": "https://packages.unity.com"
},
"com.unity.shadergraph": {
"version": "10.5.1",
"version": "10.6.0",
"com.unity.render-pipelines.core": "10.5.1",
"com.unity.render-pipelines.core": "10.6.0",
"version": "0.0.10-preview.23",
"version": "0.0.10-preview.24",
"depth": 0,
"source": "registry",
"dependencies": {

"url": "https://packages.unity.com"
},
"com.unity.test-framework": {
"version": "1.1.27",
"version": "1.1.29",
"depth": 0,
"source": "registry",
"dependencies": {

}
},
"com.unity.visualeffectgraph": {
"version": "10.5.1",
"version": "10.6.0",
"com.unity.shadergraph": "10.5.1",
"com.unity.render-pipelines.core": "10.5.1"
"com.unity.shadergraph": "10.6.0",
"com.unity.render-pipelines.core": "10.6.0"
},
"url": "https://packages.unity.com"
},

10
TestProjects/PerceptionURP/Packages/manifest.json


{
"dependencies": {
"com.unity.collab-proxy": "1.7.1",
"com.unity.ide.rider": "2.0.7",
"com.unity.ide.rider": "3.0.7",
"com.unity.render-pipelines.universal": "10.6.0",
"com.unity.simulation.capture": "0.0.10-preview.16",
"com.unity.simulation.core": "0.0.10-preview.21",
"com.unity.render-pipelines.universal": "10.7.0",
"com.unity.simulation.capture": "0.0.10-preview.24",
"com.unity.simulation.core": "0.0.10-preview.26",
"com.unity.timeline": "1.4.8",
"com.unity.timeline": "1.5.6",
"com.unity.toolchain.linux-x86_64": "0.1.19-preview",
"com.unity.ugui": "1.0.0",
"nuget.moq": "1.0.0",

34
TestProjects/PerceptionURP/Packages/packages-lock.json


"url": "https://packages.unity.com"
},
"com.unity.ide.rider": {
"version": "2.0.7",
"version": "3.0.7",
"com.unity.test-framework": "1.1.1"
"com.unity.ext.nunit": "1.0.6"
},
"url": "https://packages.unity.com"
},

"com.unity.collections": "0.9.0-preview.6",
"com.unity.nuget.newtonsoft-json": "1.1.2",
"com.unity.render-pipelines.core": "7.1.6",
"com.unity.simulation.capture": "0.0.10-preview.23",
"com.unity.simulation.capture": "0.0.10-preview.24",
"com.unity.simulation.core": "0.0.10-preview.22"
"com.unity.simulation.core": "0.0.10-preview.25"
"version": "10.6.0",
"version": "10.7.0",
"com.unity.ugui": "1.0.0"
"com.unity.ugui": "1.0.0",
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0"
"version": "10.6.0",
"version": "10.7.0",
"com.unity.render-pipelines.core": "10.6.0",
"com.unity.shadergraph": "10.6.0"
"com.unity.render-pipelines.core": "10.7.0",
"com.unity.shadergraph": "10.7.0"
},
"url": "https://packages.unity.com"
},

"url": "https://packages.unity.com"
},
"com.unity.shadergraph": {
"version": "10.6.0",
"version": "10.7.0",
"com.unity.render-pipelines.core": "10.6.0",
"com.unity.render-pipelines.core": "10.7.0",
"version": "0.0.10-preview.23",
"depth": 1,
"version": "0.0.10-preview.24",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.simulation.core": "0.0.10-preview.25"

"url": "https://packages.unity.com"
},
"com.unity.simulation.core": {
"version": "0.0.10-preview.25",
"depth": 2,
"version": "0.0.10-preview.26",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.nuget.newtonsoft-json": "2.0.0-preview"

"url": "https://packages.unity.com"
},
"com.unity.timeline": {
"version": "1.4.8",
"version": "1.5.6",
"depth": 0,
"source": "registry",
"dependencies": {

4
TestProjects/PerceptionURP/ProjectSettings/ProjectVersion.txt


m_EditorVersion: 2020.3.17f1
m_EditorVersionWithRevision: 2020.3.17f1 (a4537701e4ab)
m_EditorVersion: 2020.3.19f1
m_EditorVersionWithRevision: 2020.3.19f1 (68f137dc9bbe)

9
TestProjects/PerceptionURP/ProjectSettings/VersionControlSettings.asset


� 2020.1.17f1�����$5�����w���6����):\7����������H������1�1�����@���Q�j�3�L�J@VersionControlSettingsm_ModeCollabEditorSettingsm_CollabEditorSettingsinProgressEnabled Visible Meta Files
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!890905787 &1
VersionControlSettings:
m_ObjectHideFlags: 0
m_Mode: Visible Meta Files
m_CollabEditorSettings:
inProgressEnabled: 1

2
TestProjects/PerceptionURP/ProjectSettings/QualitySettings.asset


skinWeights: 2
textureQuality: 0
anisotropicTextures: 1
antiAliasing: 2
antiAliasing: 0
softParticles: 0
softVegetation: 1
realtimeReflectionProbes: 1

13
TestProjects/PerceptionURP/UserSettings/EditorUserSettings.asset


m_ObjectHideFlags: 0
serializedVersion: 4
m_ConfigSettings:
RecentlyUsedScenePath-0:
value: 22424703114646680e0b0227036c6f1f05122b2b21382a35633c133af6f9
flags: 0
RecentlyUsedScenePath-1:
value: 22424703114646680e0b0227036c6c111b07142f1f2b233e2867083debf42d
flags: 0
RecentlyUsedScenePath-2:
value: 22424703114646680e0b0227036c6c111b07142f1f2b233e2805183df1c43d2bf6e824fdee3531722c0ce6281d
flags: 0
vcSharedLogLevel:
value: 0d5e400f0650
flags: 0

m_SemanticMergeMode: 2
m_VCShowFailedCheckout: 1
m_VCOverwriteFailedCheckoutAssets: 1
m_VCOverlayIcons: 1
m_VCProjectOverlayIcons: 1
m_VCHierarchyOverlayIcons: 1
m_VCOtherOverlayIcons: 1
m_VCAllowAsyncUpdate: 0

258
TestProjects/PerceptionURP/Assets/Scenes/PoseSample.unity


--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
serializedVersion: 12
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2

m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2

manualTileSize: 0
tileSize: 256
accuratePlacement: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}

- component: {fileID: 613667320}
- component: {fileID: 613667321}
m_Layer: 0
m_Name: KeypointCube
m_Name: Keypoint Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0

m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 613667316}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalPosition: {x: -1.65, y: 0, z: 0}
m_RootOrder: 6
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &613667321
MonoBehaviour:

- Crate
useAutoLabeling: 0
autoLabelingSchemeType:
--- !u!1 &622079292 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3710685714995308732, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
m_PrefabInstance: {fileID: 1329445977}
m_PrefabAsset: {fileID: 0}
--- !u!114 &622079293
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 622079292}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 673a227032a8e4940b9828c5b6f852ab, type: 3}
m_Name:
m_EditorClassIdentifier:
yDegreesPerSecond: 60
--- !u!1 &920657917
GameObject:
m_ObjectHideFlags: 0

templateInformation: []
labels:
- FrontBottomLeft
selfOcclusionDistanceSource: 0
overrideSelfOcclusionDistance: 0
selfOcclusionDistance: 0.98
--- !u!1 &963194225
GameObject:

height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 59.991566
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1

m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.074, y: 0, z: -2.715}
m_LocalRotation: {x: 0.11265974, y: -0.26002038, z: 0.030561477, w: 0.95852137}
m_LocalPosition: {x: 1.929, y: 1.123, z: -3.057}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 13.407, y: -30.355, z: 0}
--- !u!114 &963194230
MonoBehaviour:
m_ObjectHideFlags: 0

00000000:
type: {class: KeypointLabeler, ns: UnityEngine.Perception.GroundTruth, asm: Unity.Perception.Runtime}
data:
enabled: 0
enabled: 1
activeTemplate: {fileID: 11400000, guid: a29b79d8ce98945a0855b1addec08d86,
type: 2}
annotationId: 8b3ef246-daa7-4dd5-a0e8-a943f6e7f8c2

selfOcclusionDistance: 0.15
animationPoseConfigs: []
00000001:
type: {class: KeypointLabeler, ns: UnityEngine.Perception.GroundTruth, asm: Unity.Perception.Runtime}

idLabelConfig: {fileID: 11400000, guid: cedcacfb1d9beb34fbbb231166c472fe,
type: 2}
objectFilter: 0
selfOcclusionDistance: 0.15
animationPoseConfigs: []
--- !u!114 &963194231
MonoBehaviour:

serializedVersion: 2
m_Bits: 1
m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 0
m_Antialiasing: 0
m_AntialiasingQuality: 2

m_AllowXRRendering: 1
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_Version: 2

- component: {fileID: 1190242052}
- component: {fileID: 1190242051}
m_Layer: 0
m_Name: GameObject
m_Name: Scenario
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0

m_EditorClassIdentifier:
m_Randomizers:
- id: 0
configuration: {fileID: 0}
constants:
randomSeed: 539662031
totalIterations: 2000

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_RootOrder: 0
--- !u!1001 &1329445977
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_RootOrder
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalScale.x
value: 0.65749
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalScale.y
value: 0.6706398
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalScale.z
value: 0.65749
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalPosition.x
value: -0.671
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalPosition.y
value: -0.338
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalPosition.z
value: 0.08
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalRotation.w
value: 0.93963635
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalRotation.x
value: 0.2947149
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalRotation.y
value: -0.16589014
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalRotation.z
value: 0.052031077
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 34.828003
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: -20.024
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308720, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308732, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_Name
value: KeypointCube (1)
objectReference: {fileID: 0}
- target: {fileID: 3710685714995308732, guid: da3b4cd41011c1b488592ed975cbb467,
type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: da3b4cd41011c1b488592ed975cbb467, type: 3}
--- !u!1 &1414656266
GameObject:
m_ObjectHideFlags: 0

templateInformation: []
labels:
- right_ear
selfOcclusionDistanceSource: 0
overrideSelfOcclusionDistance: 0
selfOcclusionDistance: 0.15
--- !u!1 &1427719271
GameObject:

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 4
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1488440284
GameObject:

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 &1488440286

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 5
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1001 &1667437134
PrefabInstance:

- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}
propertyPath: m_RootOrder
value: 2
value: 3
objectReference: {fileID: 0}
- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}

- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
value: -0.75
objectReference: {fileID: 0}
- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}

- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}
propertyPath: m_LocalRotation.w
value: -0.041973293
value: 0
value: -0
value: 0
value: 0.9991188
value: 1
value: -0
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}

- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 184.81099
value: 180
objectReference: {fileID: 0}
- target: {fileID: 8109026111838458973, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}

- target: {fileID: 8917933090883489511, guid: 09c632a4eeff8204c87fa56b8632d9ba,
type: 3}
propertyPath: m_Name
value: LabeledAndRandomized
value: Keypoint Person
value: 0
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 09c632a4eeff8204c87fa56b8632d9ba, type: 3}

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &6572869352796365448
GameObject:
m_ObjectHideFlags: 0

m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &7514402373541572135 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1775053615941697064, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
m_PrefabInstance: {fileID: 8136532274770743311}
m_PrefabAsset: {fileID: 0}
--- !u!114 &7514402373541572136
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7514402373541572135}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 673a227032a8e4940b9828c5b6f852ab, type: 3}
m_Name:
m_EditorClassIdentifier:
yDegreesPerSecond: 60
--- !u!1001 &8136532274770743311
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 1775053615941697064, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_Name
value: Rotating Keypoint Cube
objectReference: {fileID: 0}
- target: {fileID: 4653067277972803271, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_RootOrder
value: 4
objectReference: {fileID: 0}
- target: {fileID: 4653067277972803271, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_LocalPosition.x
value: 1.348
objectReference: {fileID: 0}
- target: {fileID: 4653067277972803271, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_LocalPosition.y
value: 0.027999997
objectReference: {fileID: 0}
- target: {fileID: 4653067277972803271, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_LocalPosition.z
value: -0.06700003
objectReference: {fileID: 0}
- target: {fileID: 4653067277972803271, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4653067277972803271, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4653067277972803271, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4653067277972803271, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4653067277972803271, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4653067277972803271, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4653067277972803271, guid: d82961566177d4108b5f0d67dc97fd62,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: d82961566177d4108b5f0d67dc97fd62, type: 3}

35
TestProjects/PerceptionURP/Assets/Scenes/SampleScene.unity


--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
serializedVersion: 12
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2

m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2

manualTileSize: 0
tileSize: 256
accuratePlacement: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}

m_Name:
m_EditorClassIdentifier:
m_Randomizers: []
quitOnComplete: 1
serializedConstantsFileName: constants
configuration: {fileID: 0}
randomSeed: 539662031
totalIterations: 100
instanceCount: 1
instanceIndex: 0

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 6
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &411238276
GameObject:

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &411238280
MeshFilter:
m_ObjectHideFlags: 0

m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 3.1415927
m_Intensity: 1.9
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208

m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 1.1418e-41, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &705507995

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &934158986
MeshFilter:
m_ObjectHideFlags: 0

m_Script: {fileID: 11500000, guid: 4467405dbcbd3d64ab4363e9ae8bb813, type: 3}
m_Name:
m_EditorClassIdentifier:
description: The main camera
period: 0.0166
startTime: 0
captureRgbImages: 1
description: The main camera
captureRgbImages: 1
firstCaptureFrame: 0
captureTriggerMode: 0
manualSensorAffectSimulationTiming: 0
simulationDeltaTime: 0.0166
framesBetweenCaptures: 0
showVisualizations: 1
references:
version: 1

m_StopNaN: 0
m_Dithering: 0
m_ClearDepth: 1
m_AllowXRRendering: 1
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_Version: 2

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1640252282
MeshFilter:
m_ObjectHideFlags: 0

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 5
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1800622453
MonoBehaviour:

70
TestProjects/PerceptionURP/Assets/Scenes/SampleSceneLensDistortion.unity


--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
serializedVersion: 12
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2

m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2

manualTileSize: 0
tileSize: 256
accuratePlacement: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}

m_EditorClassIdentifier:
labels:
- Crate
useAutoLabeling: 0
autoLabelingSchemeType:
--- !u!65 &411238278
BoxCollider:
m_ObjectHideFlags: 0

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &411238280
MeshFilter:
m_ObjectHideFlags: 0

m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 411238276}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 155.99806, y: 83.926025, z: -149.97618}
m_LocalScale: {x: 36.249973, y: 36.249973, z: 36.249973}
m_LocalRotation: {x: 0, y: 0.3065261, z: 0, w: 0.9518623}
m_LocalPosition: {x: 187.1, y: 83.926025, z: -137.7}
m_LocalScale: {x: 36.249973, y: 100, z: 36.249973}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 35.7, z: 0}
--- !u!114 &411238282
MonoBehaviour:
m_ObjectHideFlags: 0

m_EditorClassIdentifier:
labels:
- Cube
useAutoLabeling: 0
autoLabelingSchemeType:
--- !u!65 &464025706
BoxCollider:
m_ObjectHideFlags: 0

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &464025708
MeshFilter:
m_ObjectHideFlags: 0

m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 464025704}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 92.92311, y: 83.926025, z: -136.20119}
m_LocalPosition: {x: 43.9, y: 83.926025, z: -71.3}
m_RootOrder: 3
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &464025710
MonoBehaviour:

m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 4.7e-43, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &705507995

m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705507993}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalRotation: {x: -0.56893516, y: 0.08103172, z: -0.36893815, w: -0.73050076}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 63, y: 41.6, z: -280.2}
--- !u!114 &705507996
MonoBehaviour:
m_ObjectHideFlags: 0

serializedVersion: 2
m_Bits: 1
m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 1
m_Antialiasing: 0
m_AntialiasingQuality: 2

m_AllowXRRendering: 1
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_Version: 2

m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_LocalRotation: {x: -0.17179534, y: 0.30667058, z: -0.056378223, w: -0.93448436}
m_LocalPosition: {x: 198.01884, y: 126.545494, z: -267.4195}
m_LocalRotation: {x: 0, y: -0.3118126, z: 0, w: 0.95014364}
m_LocalPosition: {x: 199.7, y: 87, z: -289}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: -36.337, z: 0}
--- !u!20 &963194229
Camera:
m_ObjectHideFlags: 0

m_Script: {fileID: 11500000, guid: 4467405dbcbd3d64ab4363e9ae8bb813, type: 3}
m_Name:
m_EditorClassIdentifier:
description: The main camera
period: 0.0166
startTime: 0
captureRgbImages: 1
m_LensDistortion: {fileID: 0}
description: The main camera
captureRgbImages: 1
firstCaptureFrame: 0
captureTriggerMode: 0
manualSensorAffectSimulationTiming: 0
simulationDeltaTime: 0.0166
framesBetweenCaptures: 0
showVisualizations: 1
references:
version: 1

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1257403329
MonoBehaviour:

- component: {fileID: 1640252284}
- component: {fileID: 1640252280}
m_Layer: 0
m_Name: Box1234
m_Name: Box
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0

m_EditorClassIdentifier:
labels:
- Box
useAutoLabeling: 0
autoLabelingSchemeType:
--- !u!137 &1640252280
SkinnedMeshRenderer:
m_ObjectHideFlags: 0

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1640252278}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 96.1856, y: 83.926025, z: -193.83864}
m_LocalScale: {x: 36.249973, y: 36.249973, z: 36.249973}
m_LocalPosition: {x: 65.9, y: 83.926025, z: -212.4}
m_LocalScale: {x: 36.249973, y: 100, z: 36.249973}
m_RootOrder: 4
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1640252284
MonoBehaviour:

11
TestProjects/PerceptionURP/Assets/Settings/UniversalRPAsset.asset


m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3}
m_Name: UniversalRPAsset
m_EditorClassIdentifier:
k_AssetVersion: 5
k_AssetVersion: 6
k_AssetPreviousVersion: 5
m_RendererType: 1
m_RendererData: {fileID: 0}

m_OpaqueDownsampling: 1
m_SupportsTerrainHoles: 1
m_SupportsHDR: 1
m_MSAA: 2
m_MSAA: 1
m_RenderScale: 1
m_MainLightRenderingMode: 1
m_MainLightShadowsSupported: 1

m_AdditionalLightShadowsSupported: 1
m_AdditionalLightsShadowmapResolution: 512
m_ShadowDistance: 50
m_ShadowCascades: 1
m_ShadowCascadeCount: 2
m_Cascade3Split: {x: 0.1, y: 0.3}
m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467}
m_ShadowDepthBias: 1
m_ShadowNormalBias: 1

m_MixedLightingSupported: 1
m_DebugLevel: 0
m_PostProcessingFeatureSet: 0
m_UseAdaptivePerformance: 1
m_ColorGradingMode: 0
m_ColorGradingLutSize: 32
m_ShadowType: 1

m_ShadowAtlasResolution: 256
m_ShaderVariantLogLevel: 0
m_VolumeFrameworkUpdateMode: 0
m_ShadowCascades: 1

16
TestProjects/PerceptionURP/Assets/Settings/ForwardRenderer.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-2415090886241764546
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: 780f1bb8e775c4245b86116069a82828, type: 3}
m_Name: Ground Truth
m_EditorClassIdentifier:
m_Active: 1
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0

m_EditorClassIdentifier:
m_RendererFeatures:
- {fileID: 5741507687788441411}
m_RendererFeatureMap:
- {fileID: -2415090886241764546}
m_RendererFeatureMap: 3ebb4679a2df7bde
postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2}
xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2}
shaders:

11
README.md


[![license badge](https://img.shields.io/badge/license-Apache--2.0-green.svg)](LICENSE.md)
<img src="https://img.shields.io/badge/unity-2019.4-green.svg?style=flat-square" alt="unity 2019.4">
<img src="https://img.shields.io/badge/unity-2020.2-green.svg?style=flat-square" alt="unity 2020.3">
<img src="https://img.shields.io/badge/unity-2020.3-green.svg?style=flat-square" alt="unity 2020.3">
<img src="https://img.shields.io/badge/unity-2021.2-green.svg?style=flat-square" alt="unity 2021.2">
> `com.unity.perception` is in active development. Its features and API are subject to significant change as development progresses.

**[FAQ](com.unity.perception/Documentation~/FAQ/FAQ.md)**
Check out our FAQ for a list of common questions, tips, tricks, and some sample code.
**[Verifying Datasets with Dataset Insights](com.unity.perception/Documentation~/Tutorial/DatasetInsights.md)**
Introduction to Unity's [Dataset Insights](https://github.com/Unity-Technologies/datasetinsights) – a python package for downloading, parsing and analyzing synthetic datasets.
## Documentation
In-depth documentation on individual components of the package.

* To allow navigating to code in all packages included in your project, in your Unity Editor, navigate to `Edit -> Preferences... -> External Tools` and check `Generate all .csproj files.`
## Known issues
* The Linux Editor 2019.4.7f1 and 2019.4.8f1 might hang when importing HDRP-based Perception projects. For Linux Editor support, use 2019.4.6f1 or 2020.1
* The Linux Editor 2019.4.7f1 and 2019.4.8f1 might hang when importing HDRP-based Perception projects. For Linux Editor support, use 2020.3 or 2021.2.
* Projects that use the Perception package on Windows or OS X will have a dependency for Python for Unity added to their manifest, in order for the new Dataset Visualizer tool to work. This tool and Python for Unity are not supported on Linux, therefore this dependency should be removed from the project's manifest file if the project is saved on Windows or OSX and opened on Linux.
## License
* [License](com.unity.perception/LICENSE.md)

3
com.unity.perception/Tests/Runtime/Unity.Perception.Runtime.Tests.asmdef


"Unity.Perception.Runtime",
"Unity.Perception.Editor",
"Unity.Simulation.Core",
"Unity.Simulation.Capture",
"Unity.RenderPipelines.HighDefinition.Runtime",
"Unity.RenderPipelines.Universal.Runtime"
],

}
],
"noEngineReferences": false
}
}

54
com.unity.perception/Tests/Runtime/GroundTruthTests/SegmentationGroundTruthTests.cs


Assert.AreEqual(1, timesSegmentationImageReceived);
}
[UnityTest]
public IEnumerator SegmentationPass_WithMultiplePerceptionCameras_ProducesCorrectValues(
[Values(SegmentationKind.Instance, SegmentationKind.Semantic)] SegmentationKind segmentationKind)
{
int timesSegmentationImageReceived = 0;
var color1 = segmentationKind == SegmentationKind.Instance ?
k_InstanceSegmentationPixelValue :
k_SemanticPixelValue;
var color2 = segmentationKind == SegmentationKind.Instance ?
new Color32(0, 74, Byte.MaxValue, Byte.MaxValue) :
new Color32(0, 0, 0, Byte.MaxValue);
void OnCam1SegmentationImageReceived(NativeArray<Color32> data)
{
CollectionAssert.AreEqual(Enumerable.Repeat(color1, data.Length), data);
timesSegmentationImageReceived++;
}
void OnCam2SegmentationImageReceived(NativeArray<Color32> data)
{
Assert.AreEqual(color1, data[data.Length / 4]);
Assert.AreEqual(color2, data[data.Length * 3 / 4]);
timesSegmentationImageReceived++;
}
GameObject cameraObject;
GameObject cameraObject2;
if (segmentationKind == SegmentationKind.Instance)
{
cameraObject = SetupCameraInstanceSegmentation((frame, data, renderTexture) => OnCam1SegmentationImageReceived(data));
cameraObject2 = SetupCameraInstanceSegmentation((frame, data, renderTexture) => OnCam2SegmentationImageReceived(data));
}
else
{
cameraObject = SetupCameraSemanticSegmentation((args) => OnCam1SegmentationImageReceived(args.data), false);
cameraObject2 = SetupCameraSemanticSegmentation((args) => OnCam2SegmentationImageReceived(args.data), false);
}
//position camera to point straight at the top edge of plane1, such that plane1 takes up the bottom half of
//the image and plane2 takes up the top half
cameraObject2.transform.localPosition = Vector3.up * 2.5f;
var plane1 = TestHelper.CreateLabeledPlane(.5f);
var plane2 = TestHelper.CreateLabeledPlane(.5f, "label2");
plane2.transform.localPosition = plane2.transform.localPosition + Vector3.up * 5f;
AddTestObjectForCleanup(plane1);
AddTestObjectForCleanup(plane2);
yield return null;
//destroy the object to force all pending segmented image readbacks to finish and events to be fired.
DestroyTestObject(cameraObject);
DestroyTestObject(cameraObject2);
Assert.AreEqual(2, timesSegmentationImageReceived);
}
[UnityTest]
public IEnumerator SegmentationPassProducesCorrectValuesEachFrame(
[Values(SegmentationKind.Instance, SegmentationKind.Semantic)] SegmentationKind segmentationKind)

28
com.unity.perception/Tests/Runtime/Randomization/RandomizerTests/RandomizerTests.cs


using System.Collections;
using NUnit.Framework;
using RandomizationTests.ScenarioTests;
using UnityEngine.Perception.GroundTruth;
using UnityEngine.Perception.Randomization.Randomizers;
using UnityEngine.Perception.Randomization.Scenarios;
using UnityEngine.TestTools;

}
// TODO: update this function once the perception camera doesn't skip the first frame
IEnumerator CreateNewScenario(int totalIterations, int framesPerIteration)
IEnumerator CreateNewScenario(int totalIterations, int framesPerIteration, Randomizer[] randomizers = null)
yield return null; // Skip first frame
if (randomizers != null)
{
foreach (var rnd in randomizers)
{
m_Scenario.AddRandomizer(rnd);
}
}
if (PerceptionCamera.captureFrameCount < 0)
{
yield return null;
}
}
[Test]

[UnityTest]
public IEnumerator OnUpdateExecutesEveryFrame()
{
yield return CreateNewScenario(10, 1);
m_Scenario.AddRandomizer(new ExampleTransformRandomizer());
yield return CreateNewScenario(10, 1, new Randomizer[] { new ExampleTransformRandomizer() });
var transform = m_TestObject.transform;
var initialPosition = Vector3.zero;
transform.position = initialPosition;

[UnityTest]
public IEnumerator OnIterationStartExecutesEveryIteration()
{
yield return CreateNewScenario(10, 2);
m_Scenario.AddRandomizer(new ExampleTransformRandomizer());
yield return CreateNewScenario(10, 2, new Randomizer[] { new ExampleTransformRandomizer() });
// Wait one frame so the next iteration can begin
yield return null;
yield return null;
Assert.AreNotEqual(initialRotation, transform.rotation);

307
com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/ScenarioTests.cs


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Unity.Collections;
using UnityEngine.Perception.Analytics;
using UnityEngine.Perception.RandomizationTests.ScenarioTests;
using UnityEngine.TestTools;
using Object = UnityEngine.Object;

{
GameObject m_TestObject;
TestFixedLengthScenario m_Scenario;
static string RemoveWhitespace(string str) =>
string.Join("", str.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries));
[SetUp]
public void Setup()

}
}
yield return null; // Skip first frame
yield return null; // Skip first Update() frame
if (PerceptionCamera.captureFrameCount < 0)
{
yield return null;
}
}
[Test]

m_Scenario = m_TestObject.AddComponent<TestFixedLengthScenario>();
m_Scenario.AddRandomizer(new RotationRandomizer());
string RemoveWhitespace(string str) =>
string.Join("", str.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries));
var expectedConfigAsset = (TextAsset)Resources.Load("SampleScenarioConfiguration");
var expectedText = RemoveWhitespace(expectedConfigAsset.text);
var scenarioJson = RemoveWhitespace(m_Scenario.SerializeToJson());

Assert.AreEqual(0, m_Scenario.currentIteration);
yield return null;
}
Assert.AreEqual(1, m_Scenario.currentIteration);
}

Assert.True(m_Scenario.state == ScenarioBase.State.Playing);
yield return null;
}
Assert.True(m_Scenario.state == ScenarioBase.State.Idle);
}

for (var i = 0; i < 3; i++)
Assert.AreNotEqual(seeds[i], SamplerState.NextRandomState());
}
[UnityTest]
public IEnumerator IterationCorrectlyDelays()

// State: currentIteration = 0
Assert.AreEqual(0, m_Scenario.currentIteration);
yield return null;
}
[UnityTest]
public IEnumerator ScenarioCompletedAnalyticsSerializesCorrectly()
{
// Perception Camera Serialization
var perceptionCamera = m_TestObject.AddComponent<PerceptionCamera>();
perceptionCamera.captureTriggerMode = CaptureTriggerMode.Scheduled;
perceptionCamera.firstCaptureFrame = 2;
perceptionCamera.framesBetweenCaptures = 10;
// Labeler serialization
var sampleIdLabelConfig = Resources.Load<IdLabelConfig>("sampleIdLabelConfig");
var sampleAnimationPoseConfig = Resources.Load<AnimationPoseConfig>("sampleAnimationPoseConfig");
var emptyKeypointTemplate = ScriptableObject.CreateInstance<KeypointTemplate>();
emptyKeypointTemplate.keypoints = new KeypointDefinition[] { };
emptyKeypointTemplate.skeleton = new SkeletonDefinition[] { };
perceptionCamera.AddLabeler(new BoundingBox2DLabeler(sampleIdLabelConfig));
perceptionCamera.AddLabeler(new RenderedObjectInfoLabeler(sampleIdLabelConfig));
perceptionCamera.AddLabeler(new KeypointLabeler()
{
idLabelConfig = sampleIdLabelConfig,
objectFilter = KeypointObjectFilter.Visible,
activeTemplate = emptyKeypointTemplate,
animationPoseConfigs = new List<AnimationPoseConfig>()
{
sampleAnimationPoseConfig, sampleAnimationPoseConfig
}
});
// Randomizer Serialization
var randomizers = new List<Randomizer>();
var testRandomizer = new AllMembersAndParametersTestRandomizer();
testRandomizer.colorRgbCategoricalParam.SetOptions(new (Color, float)[]
{
(Color.black, 0.4f),
(Color.blue, 0.93f),
(Color.red, 0.23f)
});
randomizers.Add(testRandomizer);
yield return null;
// Scenario Completed Serialization
var scenarioCompletedData = ScenarioCompletedData.FromCameraAndRandomizers(perceptionCamera, randomizers);
#region expectedRandomizerJson
var expectedRandomizerJson = RemoveWhitespace($@"
{{
""platform"": ""{Application.platform}"",
""perceptionCamera"": {{
""captureTriggerMode"": ""Scheduled"",
""startAtFrame"": 2,
""framesBetweenCaptures"": 10
}},
""labelers"": [
{{ ""name"": ""BoundingBox2DLabeler"", ""labelConfigCount"": 3, ""objectFilter"": """", ""animationPoseCount"": 0 }},
{{ ""name"": ""RenderedObjectInfoLabeler"", ""labelConfigCount"": 3, ""objectFilter"": """", ""animationPoseCount"": 0 }},
{{ ""name"": ""KeypointLabeler"", ""labelConfigCount"": 3, ""objectFilter"": ""Visible"", ""animationPoseCount"": 2 }}
],
""randomizers"": [
{{
""name"": ""AllMembersAndParametersTestRandomizer"",
""members"": [
{{
""name"": ""booleanMember"",
""value"": ""False"",
""type"": ""System.Boolean""
}},
{{
""name"": ""intMember"",
""value"": ""4"",
""type"": ""System.Int32""
}},
{{
""name"": ""uintMember"",
""value"": ""2"",
""type"": ""System.UInt32""
}},
{{
""name"": ""floatMember"",
""value"": ""5"",
""type"": ""System.Single""
}},
{{
""name"": ""vector2Member"",
""value"": ""(4.0, 7.0)"",
""type"": ""UnityEngine.Vector2""
}},
{{
""name"": ""unsupportedMember"",
""value"": ""UnityEngine.Perception.Randomization.Samplers.UniformSampler"",
""type"": ""UnityEngine.Perception.Randomization.Samplers.UniformSampler""
}}
],
""parameters"": [
{{
""name"": ""booleanParam"",
""type"": ""BooleanParameter"",
""fields"": [
{{
""name"": ""value"",
""distribution"": ""Constant"",
""value"": 1.0,
""rangeMinimum"": 0.0,
""rangeMaximum"": 0.0,
""mean"": 0.0,
""stdDev"": 0.0,
""categoricalParameterCount"": 0
}}
]
}},
{{
""name"": ""floatParam"",
""type"": ""FloatParameter"",
""fields"": [
{{
""name"": ""value"",
""distribution"": ""AnimationCurve"",
""value"": 0.0,
""rangeMinimum"": 0.0,
""rangeMaximum"": 0.0,
""mean"": 0.0,
""stdDev"": 0.0,
""categoricalParameterCount"": 0
}}
]
}},
{{
""name"": ""integerParam"",
""type"": ""IntegerParameter"",
""fields"": [
{{
""name"": ""value"",
""distribution"": ""Uniform"",
""value"": 0.0,
""rangeMinimum"": -3.0,
""rangeMaximum"": 7.0,
""mean"": 0.0,
""stdDev"": 0.0,
""categoricalParameterCount"": 0
}}
]
}},
{{
""name"": ""vector2Param"",
""type"": ""Vector2Parameter"",
""fields"": [
{{
""name"": ""x"",
""distribution"": ""Constant"",
""value"": 2.0,
""rangeMinimum"": 0.0,
""rangeMaximum"": 0.0,
""mean"": 0.0,
""stdDev"": 0.0,
""categoricalParameterCount"": 0
}},
{{
""name"": ""y"",
""distribution"": ""Uniform"",
""value"": 0.0,
""rangeMinimum"": -4.0,
""rangeMaximum"": 8.0,
""mean"": 0.0,
""stdDev"": 0.0,
""categoricalParameterCount"": 0
}}
]
}},
{{
""name"": ""vector3Param"",
""type"": ""Vector3Parameter"",
""fields"": [
{{
""name"": ""x"",
""distribution"": ""Normal"",
""value"": 0.0,
""rangeMinimum"": -5.0,
""rangeMaximum"": 9.0,
""mean"": 4.0,
""stdDev"": 2.0,
""categoricalParameterCount"": 0
}},
{{
""name"": ""y"",
""distribution"": ""Constant"",
""value"": 3.0,
""rangeMinimum"": 0.0,
""rangeMaximum"": 0.0,
""mean"": 0.0,
""stdDev"": 0.0,
""categoricalParameterCount"": 0
}},
{{
""name"": ""z"",
""distribution"": ""AnimationCurve"",
""value"": 0.0,
""rangeMinimum"": 0.0,
""rangeMaximum"": 0.0,
""mean"": 0.0,
""stdDev"": 0.0,
""categoricalParameterCount"": 0
}}
]
}},
{{
""name"": ""vector4Param"",
""type"": ""Vector4Parameter"",
""fields"": [
{{
""name"": ""x"",
""distribution"": ""Normal"",
""value"": 0.0,
""rangeMinimum"": -5.0,
""rangeMaximum"": 9.0,
""mean"": 4.0,
""stdDev"": 2.0,
""categoricalParameterCount"": 0
}},
{{
""name"": ""y"",
""distribution"": ""Constant"",
""value"": 3.0,
""rangeMinimum"": 0.0,
""rangeMaximum"": 0.0,
""mean"": 0.0,
""stdDev"": 0.0,
""categoricalParameterCount"": 0
}},
{{
""name"": ""z"",
""distribution"": ""AnimationCurve"",
""value"": 0.0,
""rangeMinimum"": 0.0,
""rangeMaximum"": 0.0,
""mean"": 0.0,
""stdDev"": 0.0,
""categoricalParameterCount"": 0
}},
{{
""name"": ""w"",
""distribution"": ""Uniform"",
""value"": 0.0,
""rangeMinimum"": -12.0,
""rangeMaximum"": 42.0,
""mean"": 0.0,
""stdDev"": 0.0,
""categoricalParameterCount"": 0
}}
]
}},
{{
""name"": ""colorRgbCategoricalParam"",
""type"": ""ColorRgbCategoricalParameter"",
""fields"": [
{{
""name"": ""values"",
""distribution"": ""Categorical"",
""value"": 0.0,
""rangeMinimum"": 0.0,
""rangeMaximum"": 0.0,
""mean"": 0.0,
""stdDev"": 0.0,
""categoricalParameterCount"": 3
}}
]
}}
]
}}
]
}}
");
#endregion
var actualRandomizerJson = RemoveWhitespace(JsonConvert.SerializeObject(scenarioCompletedData));
Assert.AreEqual(expectedRandomizerJson, actualRandomizerJson);
Object.DestroyImmediate(emptyKeypointTemplate);
}
PerceptionCamera SetupPerceptionCamera()

11
com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/Resources/SampleScenarioConfiguration.json


"randomSeed": 539662031
},
"randomizers": {
"groups": {
"RotationRandomizer": {
"randomizerGroups": [
{
"randomizerId": "RotationRandomizer",
},
"state": {
"enabled": true,
"canBeSwitchedByUser": true
},
"items": {
"rotation": {

}
}
}
}
]
}
}

9
com.unity.perception/Editor/Randomization/Utilities/UIElementsEditorUtilities.cs


if (originalField == null)
return null;
var tooltipAttribute = originalField.GetCustomAttributes(true)
.ToList().Find(att => att.GetType() == typeof(TooltipAttribute));
var attributes = originalField.GetCustomAttributes(true).ToList();
var tooltipAttribute = attributes.Find(att => att is TooltipAttribute);
var hideInspectorAttribute = attributes.Find(att => att is HideInInspector);
if (hideInspectorAttribute != null)
propertyField.style.display = DisplayStyle.None;
return propertyField;
}
}

8
com.unity.perception/Editor/Randomization/Editors/RunInUnitySimulationWindow.cs


using UnityEditor.Build.Reporting;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.Perception;
using UnityEngine.Perception.Analytics;
using UnityEngine.Perception.Randomization.Samplers;
using UnityEngine.Perception.Randomization.Scenarios;
using UnityEngine.SceneManagement;

currentScenario = FindObjectOfType<ScenarioBase>()
};
var runGuid = Guid.NewGuid();
PerceptionEditorAnalytics.ReportRunInUnitySimulationStarted(
PerceptionAnalytics.ReportRunInUnitySimulationStarted(
runGuid,
m_RunParameters.totalIterations,
m_RunParameters.instanceCount,

}
catch (Exception e)
{
PerceptionEditorAnalytics.ReportRunInUnitySimulationFailed(runGuid, e.Message);
PerceptionAnalytics.ReportRunInUnitySimulationFailed(runGuid, e.Message);
throw;
}
finally

run.Execute();
// Cleanup
PerceptionEditorAnalytics.ReportRunInUnitySimulationSucceeded(runGuid, run.executionId);
PerceptionAnalytics.ReportRunInUnitySimulationSucceeded(runGuid, run.executionId);
// Set new Player Preferences
PlayerPrefs.SetString("SimWindow/runName", m_RunParameters.runName);

2
com.unity.perception/Editor/Randomization/PropertyDrawers/AssetSourceDrawer.cs


using Editor.Randomization.VisualElements.AssetSource;
using UnityEditor.Perception.Randomization.VisualElements.AssetSource;
using UnityEngine;
using UnityEngine.Perception.Randomization;
using UnityEngine.UIElements;

4
com.unity.perception/Editor/Randomization/VisualElements/AssetSource/AssetListElement.cs


using System;
using System.Collections;
using UnityEditor;
using UnityEditor.Perception.Randomization;
namespace Editor.Randomization.VisualElements.AssetSource
namespace UnityEditor.Perception.Randomization.VisualElements.AssetSource
{
class AssetListElement : VisualElement
{

2
com.unity.perception/Editor/Randomization/VisualElements/AssetSource/AssetListItemElement.cs


using UnityEditor.UIElements;
using UnityEngine.UIElements;
namespace Editor.Randomization.VisualElements.AssetSource
namespace UnityEditor.Perception.Randomization.VisualElements.AssetSource
{
class AssetListItemElement : VisualElement
{

2
com.unity.perception/Editor/Randomization/VisualElements/AssetSource/AssetSourceElement.cs


using UnityEngine.Perception.Randomization;
using UnityEngine.UIElements;
namespace Editor.Randomization.VisualElements.AssetSource
namespace UnityEditor.Perception.Randomization.VisualElements.AssetSource
{
class AssetSourceElement : VisualElement
{

6
com.unity.perception/Runtime/GroundTruth/RenderPasses/CrossPipelinePasses/SemanticSegmentationCrossPipelinePass.cs


const string k_ShaderName = "Perception/SemanticSegmentation";
static readonly int k_LabelingId = Shader.PropertyToID("LabelingId");
static int s_LastFrameExecuted = -1;
int lastFrameExecuted = -1;
SemanticSegmentationLabelConfig m_LabelConfig;

protected override void ExecutePass(
ScriptableRenderContext renderContext, CommandBuffer cmd, Camera camera, CullingResults cullingResult)
{
if (s_LastFrameExecuted == Time.frameCount)
if (lastFrameExecuted == Time.frameCount)
s_LastFrameExecuted = Time.frameCount;
lastFrameExecuted = Time.frameCount;
var renderList = CreateRendererListDesc(camera, cullingResult, "FirstPass", 0, m_OverrideMaterial, -1);
cmd.ClearRenderTarget(true, true, m_LabelConfig.skyColor);
DrawRendererList(renderContext, cmd, RendererList.Create(renderList));

3
com.unity.perception/Runtime/GroundTruth/RenderPasses/HdrpPasses/InstanceSegmentationPass.cs


protected override void Execute(ScriptableRenderContext renderContext, CommandBuffer cmd, HDCamera hdCamera, CullingResults cullingResult)
{
#endif
if (targetCamera != hdCamera.camera)
return;
CoreUtils.SetRenderTarget(cmd, targetTexture, ClearFlag.All);
m_InstanceSegmentationCrossPipelinePass.Execute(renderContext, cmd, hdCamera.camera, cullingResult);
}

3
com.unity.perception/Runtime/GroundTruth/RenderPasses/HdrpPasses/SemanticSegmentationPass.cs


protected override void Execute(ScriptableRenderContext renderContext, CommandBuffer cmd, HDCamera hdCamera, CullingResults cullingResult)
{
#endif
if (targetCamera != hdCamera.camera)
return;
CoreUtils.SetRenderTarget(cmd, targetTexture);
m_SemanticSegmentationCrossPipelinePass.Execute(renderContext, cmd, hdCamera.camera, cullingResult);
}

1
com.unity.perception/Runtime/GroundTruth/RenderPasses/UrpPasses/InstanceSegmentationUrpPass.cs


{
m_InstanceSegmentationPass = new InstanceSegmentationCrossPipelinePass(camera);
ConfigureTarget(targetTexture, targetTexture.depthBuffer);
ConfigureClear(ClearFlag.None, Color.black);
m_InstanceSegmentationPass.Setup();
}

1
com.unity.perception/Runtime/GroundTruth/RenderPasses/UrpPasses/SemanticSegmentationUrpPass.cs


{
m_SemanticSegmentationCrossPipelinePass = new SemanticSegmentationCrossPipelinePass(camera, labelConfig);
ConfigureTarget(targetTexture, targetTexture.depthBuffer);
ConfigureClear(ClearFlag.None, Color.black);
m_SemanticSegmentationCrossPipelinePass.Setup();
}

17
com.unity.perception/Runtime/GroundTruth/PerceptionCamera.cs


static PerceptionCamera s_VisualizedPerceptionCamera;
/// <summary>
/// The number of capture-able frames that have been generated
/// </summary>
#if UNITY_EDITOR
public static int captureFrameCount => Time.frameCount - 2;
#else
public static int captureFrameCount => Time.frameCount - 1;
#endif
//TODO: Remove the Guid path when we have proper dataset merging in Unity Simulation and Thea
internal string rgbDirectory { get; } = $"RGB{Guid.NewGuid()}";
internal HUDPanel hudPanel;

Ego m_EgoMarker;
SensorHandle m_SensorHandle;
Vector2 m_ScrollPosition;
internal Action<AsyncRequest<CaptureCamera.CaptureState>> RgbCaptureReadback = null;
#if URP_PRESENT
// only used to confirm that GroundTruthRendererFeature is present in URP

}
};
AsyncRequest<CaptureCamera.CaptureState> request;
CaptureCamera.Capture(cam, colorFunctor, forceFlip: ForceFlip.None);
request = CaptureCamera.Capture(cam, colorFunctor, forceFlip: ForceFlip.None);
CaptureCamera.Capture(cam, colorFunctor, flipY: flipY);
request = CaptureCamera.Capture(cam, colorFunctor, flipY: flipY);
RgbCaptureReadback?.Invoke(request);
Profiler.EndSample();
}

6
com.unity.perception/Runtime/GroundTruth/Labelers/InstanceSegmentationLabeler.cs


/// <inheritdoc/>
protected override bool supportsVisualization => true;
static readonly string k_Directory = "InstanceSegmentation" + Guid.NewGuid().ToString();
string directory = "InstanceSegmentation" + Guid.NewGuid().ToString();
const string k_FilePrefix = "Instance_";
/// <summary>

{
m_CurrentTexture = renderTexture;
m_InstancePath = $"{k_Directory}/{k_FilePrefix}{frameCount}.png";
var localPath = $"{Manager.Instance.GetDirectoryFor(k_Directory)}/{k_FilePrefix}{frameCount}.png";
m_InstancePath = $"{directory}/{k_FilePrefix}{frameCount}.png";
var localPath = $"{Manager.Instance.GetDirectoryFor(directory)}/{k_FilePrefix}{frameCount}.png";
var colors = new NativeArray<Color32>(data, Allocator.Persistent);

4
com.unity.perception/Runtime/GroundTruth/Labelers/KeypointLabeler.cs


m_AnnotationDefinition = DatasetCapture.RegisterAnnotationDefinition("keypoints", new []{TemplateToJson(activeTemplate)},
"pixel coordinates of keypoints in a model, along with skeletal connectivity data", id: new Guid(annotationId));
visualizationEnabled = supportsVisualization;
// Texture to use in case the template does not contain a texture for the joints or the skeletal connections
m_MissingTexture = new Texture2D(1, 1);

return json;
}
}
}
}

20
com.unity.perception/Runtime/Randomization/Samplers/ISampler.cs


/// Validates that the sampler is configured properly
/// </summary>
void Validate();
/// <summary>
/// Check that the provided values adhere to the <see cref="minAllowed"/> and <see cref="maxAllowed"/> outputs for this sampler.
/// </summary>
public void CheckAgainstValidRange();
/// <summary>
/// Whether the provided <see cref="minAllowed"/> and <see cref="maxAllowed"/> values should be used to validate this sampler.
/// </summary>
public bool shouldCheckValidRange { get; set; }
/// <summary>
/// The smallest value this sampler should output
/// </summary>
public float minAllowed { get; set; }
/// <summary>
/// The largest value this sampler should output
/// </summary>
public float maxAllowed { get; set; }
}
}

20
com.unity.perception/Runtime/Randomization/Samplers/SamplerTypes/AnimationCurveSampler.cs


using System;
using UnityEngine.Assertions;
namespace UnityEngine.Perception.Randomization.Samplers
{

/// </summary>
[Tooltip("Probability distribution curve used for this sampler. The X axis corresponds to the values this sampler will pick from, and the Y axis corresponds to the relative probability of the values. The relative probabilities (Y axis) do not need to max out at 1 as only the shape of the curve matters. The Y values cannot however be negative.")]
public AnimationCurve distributionCurve;
public void CheckAgainstValidRange()
{
throw new NotImplementedException();
//no range check currently performed for this sampler
}
///<inheritdoc/>
[field: HideInInspector]
[field: SerializeField]
public float minAllowed { get; set; }
///<inheritdoc/>
[field: HideInInspector]
[field: SerializeField]
public float maxAllowed { get; set; }
///<inheritdoc/>
[field: HideInInspector]
[field: SerializeField]
public bool shouldCheckValidRange { get; set; }
/// <summary>
/// Number of samples used for integrating over the provided AnimationCurve.

42
com.unity.perception/Runtime/Randomization/Samplers/SamplerTypes/ConstantSampler.cs


using System;
using UnityEngine.Assertions;
namespace UnityEngine.Perception.Randomization.Samplers
{

/// </summary>
public float value;
///<inheritdoc/>
#if !SCENARIO_CONFIG_POWER_USER
[field: HideInInspector]
#endif
[field: SerializeField]
public float minAllowed { get; set; }
///<inheritdoc/>
#if !SCENARIO_CONFIG_POWER_USER
[field: HideInInspector]
#endif
[field: SerializeField]
public float maxAllowed { get; set; }
///<inheritdoc/>
#if !SCENARIO_CONFIG_POWER_USER
[field: HideInInspector]
#endif
[field: SerializeField]
public bool shouldCheckValidRange { get; set; }
/// <summary>
/// Constructs a ConstantSampler
/// </summary>

/// Constructs a new ConstantSampler
/// </summary>
/// <param name="value">The value from which samples will be generated</param>
public ConstantSampler(float value)
/// <param name="shouldCheckValidRange">Whether the provided <see cref="minAllowed"/> and <see cref="maxAllowed"/> values should be used to validate the <see cref="value"/> provided</param>
/// <param name="minAllowed">The smallest min value allowed for this range</param>
/// <param name="maxAllowed">The largest max value allowed for this range</param>
public ConstantSampler(float value, bool shouldCheckValidRange = false, float minAllowed = 0, float maxAllowed = 0)
this.shouldCheckValidRange = shouldCheckValidRange;
this.minAllowed = minAllowed;
this.maxAllowed = maxAllowed;
}
/// <summary>

/// <summary>
/// Validates that the sampler is configured properly
/// </summary>
public void Validate() {}
public void Validate()
{
CheckAgainstValidRange();
}
public void CheckAgainstValidRange()
{
if (shouldCheckValidRange && (value < minAllowed || value > maxAllowed))
{
Debug.LogError($"The value a {GetType().Name} exceeds the allowed valid range. Clamping to valid range.");
value = Mathf.Clamp(value, minAllowed, maxAllowed);
}
}
}
}

39
com.unity.perception/Runtime/Randomization/Samplers/SamplerTypes/NormalSampler.cs


using System;
using UnityEngine.Assertions;
namespace UnityEngine.Perception.Randomization.Samplers
{

mean = 0;
standardDeviation = 1;
}
///<inheritdoc/>
#if !SCENARIO_CONFIG_POWER_USER
[field: HideInInspector]
#endif
[field: SerializeField]
public float minAllowed { get; set; }
///<inheritdoc/>
#if !SCENARIO_CONFIG_POWER_USER
[field: HideInInspector]
#endif
[field: SerializeField]
public float maxAllowed { get; set; }
///<inheritdoc/>
#if !SCENARIO_CONFIG_POWER_USER
[field: HideInInspector]
#endif
[field: SerializeField]
public bool shouldCheckValidRange { get; set; }
/// <summary>
/// Constructs a normal distribution sampler

/// <param name="mean">The mean of the normal distribution to sample from</param>
/// <param name="standardDeviation">The standard deviation of the normal distribution to sample from</param>
/// <param name="shouldCheckValidRange">Whether the provided <see cref="minAllowed"/> and <see cref="maxAllowed"/> values should be used to validate the range provided with <see cref="minimum"/> and <see cref="maximum"/></param>
/// <param name="minAllowed">The smallest min value allowed for this range</param>
/// <param name="maxAllowed">The largest max value allowed for this range</param>
float min, float max, float mean, float standardDeviation)
float min, float max, float mean, float standardDeviation, bool shouldCheckValidRange = false, float minAllowed = 0, float maxAllowed = 0)
this.shouldCheckValidRange = shouldCheckValidRange;
this.minAllowed = minAllowed;
this.maxAllowed = maxAllowed;
}
/// <summary>

public void Validate()
{
range.Validate();
CheckAgainstValidRange();
}
public void CheckAgainstValidRange()
{
if (shouldCheckValidRange && (range.minimum < minAllowed || range.maximum > maxAllowed))
{
Debug.LogError($"The provided min and max values for a {GetType().Name} exceed the allowed valid range. Clamping to valid range.");
range.minimum = Mathf.Clamp(range.minimum, minAllowed, maxAllowed);
range.maximum = Mathf.Clamp(range.maximum, minAllowed, maxAllowed);
}
}
}
}

39
com.unity.perception/Runtime/Randomization/Samplers/SamplerTypes/UniformSampler.cs


using System;
using UnityEngine.Assertions;
namespace UnityEngine.Perception.Randomization.Samplers
{

/// A range bounding the values generated by this sampler
/// </summary>
public FloatRange range;
///<inheritdoc/>
#if !SCENARIO_CONFIG_POWER_USER
[field: HideInInspector]
#endif
[field: SerializeField]
public float minAllowed { get; set; }
///<inheritdoc/>
#if !SCENARIO_CONFIG_POWER_USER
[field: HideInInspector]
#endif
[field: SerializeField]
public float maxAllowed { get; set; }
///<inheritdoc/>
#if !SCENARIO_CONFIG_POWER_USER
[field: HideInInspector]
#endif
[field: SerializeField]
public bool shouldCheckValidRange { get; set; }
/// <summary>
/// Constructs a UniformSampler

/// </summary>
/// <param name="min">The smallest value contained within the range</param>
/// <param name="max">The largest value contained within the range</param>
public UniformSampler(float min, float max)
/// <param name="shouldCheckValidRange">Whether the provided <see cref="minAllowed"/> and <see cref="maxAllowed"/> values should be used to validate the range provided with <see cref="minimum"/> and <see cref="maximum"/></param>
/// <param name="minAllowed">The smallest min value allowed for this range</param>
/// <param name="maxAllowed">The largest max value allowed for this range</param>
public UniformSampler(float min, float max, bool shouldCheckValidRange = false, float minAllowed = 0, float maxAllowed = 0)
this.shouldCheckValidRange = shouldCheckValidRange;
this.minAllowed = minAllowed;
this.maxAllowed = maxAllowed;
}
/// <summary>

public void Validate()
{
range.Validate();
CheckAgainstValidRange();
}
public void CheckAgainstValidRange()
{
if (shouldCheckValidRange && (range.minimum < minAllowed || range.maximum > maxAllowed))
{
Debug.LogError($"The provided min and max values for a {GetType().Name} exceed the allowed valid range. Clamping to valid range.");
range.minimum = Mathf.Clamp(range.minimum, minAllowed, maxAllowed);
range.maximum = Mathf.Clamp(range.maximum, minAllowed, maxAllowed);
}
}
}
}

9
com.unity.perception/Runtime/Randomization/Randomizers/Randomizer.cs


}
/// <summary>
/// Some Randomizers should not be disabled by the user as they are critical to the project. E.g. We might want to mark this as false for a foreground objects placement randomizer in some projects
/// </summary>
#if !SCENARIO_CONFIG_POWER_USER
[field: HideInInspector]
#endif
[field: SerializeField]
public bool enabledStateCanBeSwitchedByUser { get; set; } = true;
/// <summary>
/// Returns the scenario containing this Randomizer
/// </summary>
public ScenarioBase scenario => ScenarioBase.activeScenario;

19
com.unity.perception/Runtime/Randomization/Scenarios/PerceptionScenario.cs


/// </summary>
MetricDefinition m_IterationMetricDefinition;
/// <summary>
/// The scriptable render pipeline hook used to capture perception data skips the first frame of the simulation
/// when running locally, so this flag is used to track whether the first frame has been skipped yet.
/// </summary>
protected bool m_SkippedFirstFrame;
protected override bool isScenarioReadyToStart
{
get
{
if (!m_SkippedFirstFrame)
{
m_SkippedFirstFrame = true;
return false;
}
return true;
}
}
protected override bool isScenarioReadyToStart => PerceptionCamera.captureFrameCount >= 0;
/// <inheritdoc/>
protected override void OnAwake()

13
com.unity.perception/Runtime/Randomization/Scenarios/UnitySimulationScenario.cs


public abstract class UnitySimulationScenario<T> : PerceptionScenario<T>
where T : UnitySimulationScenarioConstants, new()
{
/// <inheritdoc/>
protected override bool isScenarioReadyToStart
{
get
{
if (!Configuration.Instance.IsSimulationRunningInCloud() && !m_SkippedFirstFrame)
{
m_SkippedFirstFrame = true;
return false;
}
return true;
}
}
/// <inheritdoc/>
protected sealed override bool isScenarioComplete => currentIteration >= constants.totalIterations;

6
com.unity.perception/Runtime/Randomization/Scenarios/ScenarioBase.cs


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Unity.Simulation;
using UnityEngine.Perception.Analytics;
using UnityEngine.Perception.GroundTruth;
using UnityEngine.SceneManagement;
namespace UnityEngine.Perception.Randomization.Scenarios
{

{
foreach (var randomizer in activeRandomizers)
randomizer.ScenarioComplete();
OnComplete();
state = State.Idle;
OnIdle();

14
com.unity.perception/Runtime/Randomization/Scenarios/Serialization/JsonConverters.cs


if (itemValue is Parameter)
newObj["param"] = JObject.FromObject(itemValue);
else
newObj["scalar"] = JObject.FromObject(itemValue);
newObj["scalar"] = JObject.FromObject(itemValue, new JsonSerializer { NullValueHandling = NullValueHandling.Ignore });
output[itemKey] = newObj;
}
output.WriteTo(writer);

key = "normal";
else
throw new TypeAccessException($"Cannot serialize type ${options.defaultSampler.GetType()}");
output[key] = JObject.FromObject(options.defaultSampler);
output[key] = JObject.FromObject(options.defaultSampler, new JsonSerializer { NullValueHandling = NullValueHandling.Ignore });
output.WriteTo(writer);
}

if (value.ContainsKey("str"))
scalar.value = new StringScalarValue { str = value["str"].Value<string>() };
else if (value.ContainsKey("num"))
scalar.value = new DoubleScalarValue { num = value["num"].Value<double>() };
{
Limits limits = null;
if (value.ContainsKey("limits"))
{
limits = value["limits"].ToObject<Limits>();
}
scalar.value = new DoubleScalarValue { num = value["num"].Value<double>(), limits = limits};
}
return scalar;
}
}

20
com.unity.perception/Runtime/Randomization/Scenarios/Serialization/SerializationStructures.cs


#region GroupedObjects
class TemplateConfigurationOptions
{
public Dictionary<string, Group> groups = new Dictionary<string, Group>();
public List<Group> randomizerGroups = new List<Group>();
}
class StandardMetadata

public string imageLink = string.Empty;
}
class RandomizerStateData
{
public bool enabled;
public bool canBeSwitchedByUser;
}
class Limits
{
public double min;
public double max;
}
public string randomizerId;
public RandomizerStateData state = null;
[JsonConverter(typeof(GroupItemsConverter))]
public Dictionary<string, IGroupItem> items = new Dictionary<string, IGroupItem>();
}

{
public double min;
public double max;
public Limits limits;
}
class NormalSampler : ISamplerOption

public double mean;
public double stddev;
public Limits limits;
public Limits limits;
}
#endregion

class DoubleScalarValue : IScalarValue
{
public double num;
public Limits limits;
}
class BooleanScalarValue : IScalarValue

156
com.unity.perception/Runtime/Randomization/Scenarios/Serialization/ScenarioSerializer.cs


{
return new TemplateConfigurationOptions
{
groups = SerializeRandomizers(scenario.randomizers)
randomizerGroups = SerializeRandomizers(scenario.randomizers)
static Dictionary<string, Group> SerializeRandomizers(IEnumerable<Randomizer> randomizers)
static List<Group> SerializeRandomizers(IEnumerable<Randomizer> randomizers)
var serializedRandomizers = new Dictionary<string, Group>();
var serializedRandomizers = new List<Group>();
if (randomizerData.items.Count == 0)
if (randomizerData.items.Count == 0 && !randomizerData.state.canBeSwitchedByUser)
serializedRandomizers.Add(randomizer.GetType().Name, randomizerData);
serializedRandomizers.Add(randomizerData);
}
return serializedRandomizers;
}

var randomizerData = new Group();
randomizerData.state = new RandomizerStateData
{
enabled = randomizer.enabled,
canBeSwitchedByUser = randomizer.enabledStateCanBeSwitchedByUser
};
randomizerData.randomizerId = randomizer.GetType().Name;
foreach (var field in fields)
{
if (field.FieldType.IsSubclassOf(typeof(Randomization.Parameters.Parameter)))

if (sampler is Samplers.ConstantSampler constantSampler)
samplerData.defaultSampler = new ConstantSampler
{
value = constantSampler.value
value = constantSampler.value,
limits = constantSampler.shouldCheckValidRange? new Limits {
min = constantSampler.minAllowed,
max = constantSampler.maxAllowed,
} : null
max = uniformSampler.range.maximum
max = uniformSampler.range.maximum,
limits = uniformSampler.shouldCheckValidRange? new Limits {
min = uniformSampler.minAllowed,
max = uniformSampler.maxAllowed,
} : null
};
else if (sampler is Samplers.NormalSampler normalSampler)
samplerData.defaultSampler = new NormalSampler

mean = normalSampler.mean,
stddev = normalSampler.standardDeviation
stddev = normalSampler.standardDeviation,
limits = normalSampler.shouldCheckValidRange? new Limits {
min = normalSampler.minAllowed,
max = normalSampler.maxAllowed,
} : null
};
else
throw new ArgumentException($"Invalid sampler type ({sampler.GetType()})");

if (field.FieldType == typeof(bool))
return new BooleanScalarValue { boolean = (bool)field.GetValue(obj) };
if (field.FieldType == typeof(float) || field.FieldType == typeof(double) || field.FieldType == typeof(int))
return new DoubleScalarValue { num = Convert.ToDouble(field.GetValue(obj)) };
{
var minAllowed = 0f;
var maxAllowed = 0f;
var shouldCheckValidRange = false;
var rangeAttributes = field.GetCustomAttributes(typeof(RangeAttribute));
if (rangeAttributes.Any())
{
var rangeAttribute = (RangeAttribute)rangeAttributes.First();
minAllowed = rangeAttribute.min;
maxAllowed = rangeAttribute.max;
shouldCheckValidRange = true;
}
return new DoubleScalarValue
{
num = Convert.ToDouble(field.GetValue(obj)),
limits = shouldCheckValidRange? new Limits {
min = minAllowed,
max = maxAllowed,
} : null
};
}
return null;
}
#endregion

static void DeserializeTemplateIntoScenario(ScenarioBase scenario, TemplateConfigurationOptions template)
{
DeserializeRandomizers(scenario.randomizers, template.groups);
DeserializeRandomizers(scenario.randomizers, template.randomizerGroups);
static void DeserializeRandomizers(IEnumerable<Randomizer> randomizers, Dictionary<string, Group> groups)
static void DeserializeRandomizers(IEnumerable<Randomizer> randomizers, List<Group> groups)
foreach (var randomizerPair in groups)
foreach (var randomizerData in groups)
if (!randomizerTypeMap.ContainsKey(randomizerPair.Key))
if (!randomizerTypeMap.ContainsKey(randomizerData.randomizerId))
var randomizer = randomizerTypeMap[randomizerPair.Key];
DeserializeRandomizer(randomizer, randomizerPair.Value);
var randomizer = randomizerTypeMap[randomizerData.randomizerId];
DeserializeRandomizer(randomizer, randomizerData);
if (randomizerData.state != null)
{
randomizer.enabled = randomizerData.state.enabled;
randomizer.enabledStateCanBeSwitchedByUser = randomizerData.state.canBeSwitchedByUser;
}
foreach (var pair in randomizerData.items)
{
var field = randomizer.GetType().GetField(pair.Key);

if (samplerOption is ConstantSampler constantSampler)
return new Samplers.ConstantSampler
{
value = (float)constantSampler.value
value = (float)constantSampler.value,
minAllowed = constantSampler.limits != null ? (float)constantSampler.limits.min : 0,
maxAllowed = constantSampler.limits != null ? (float)constantSampler.limits.max : 0,
shouldCheckValidRange = constantSampler.limits != null
};
if (samplerOption is UniformSampler uniformSampler)
return new Samplers.UniformSampler

minimum = (float)uniformSampler.min,
maximum = (float)uniformSampler.max
}
maximum = (float)uniformSampler.max,
},
minAllowed = uniformSampler.limits != null ? (float)uniformSampler.limits.min : 0,
maxAllowed = uniformSampler.limits != null ? (float)uniformSampler.limits.max : 0,
shouldCheckValidRange = uniformSampler.limits != null
};
if (samplerOption is NormalSampler normalSampler)
return new Samplers.NormalSampler

maximum = (float)normalSampler.max
},
mean = (float)normalSampler.mean,
standardDeviation = (float)normalSampler.stddev
standardDeviation = (float)normalSampler.stddev,
minAllowed = normalSampler.limits != null ? (float)normalSampler.limits.min : 0,
maxAllowed = normalSampler.limits != null ? (float)normalSampler.limits.max : 0,
shouldCheckValidRange = normalSampler.limits != null
};
throw new ArgumentException($"Cannot deserialize unsupported sampler type {samplerOption.GetType()}");
}

var rangeAttributes = field.GetCustomAttributes(typeof(RangeAttribute));
RangeAttribute rangeAttribute = null;
if (rangeAttributes.Any())
{
rangeAttribute = (RangeAttribute) rangeAttributes.First();
}
var readScalar = ReadScalarValue(obj, scalar);
var tolerance = 0.00001f;
if (readScalar.Item1 is double num)
{
if (rangeAttribute != null)
{
if (readScalar.Item2 != null &&
(Math.Abs(rangeAttribute.min - readScalar.Item2.min) > tolerance || Math.Abs(rangeAttribute.max - readScalar.Item2.max) > tolerance))
{
//the field has a range attribute and the json has a limits block for this field, but the numbers don't match
Debug.LogError($"The limits provided in the Scenario JSON for the field \"{field.Name}\" of \"{obj.GetType().Name}\" do not match this field's range set in the code. Ranges for scalar fields can only be set in code using the Range attribute and not from the Scenario JSON.");
}
else if (readScalar.Item2 == null)
{
//the field has a range attribute but the json has no limits block for this field
Debug.LogError($"The provided Scenario JSON specifies limits for the field \"{field.Name}\" of \"{obj.GetType().Name}\", while the field has no Range attribute in the code. Ranges for scalar fields can only be set in code using the Range attribute and not from the Scenario JSON.");
}
if (num < rangeAttribute.min || num > rangeAttribute.max)
{
Debug.LogError($"The provided value for the field \"{field.Name}\" of \"{obj.GetType().Name}\" exceeds the allowed valid range. Clamping to valid range.");
var clamped = Mathf.Clamp((float)num, rangeAttribute.min, rangeAttribute.max);
field.SetValue(obj, Convert.ChangeType(clamped, field.FieldType));
}
else
field.SetValue(obj, Convert.ChangeType(readScalar.Item1, field.FieldType));
}
else
{
if (readScalar.Item2 != null)
//the field does not have a range attribute but the json has a limits block for this field
Debug.LogError($"The provided Scenario JSON specifies limits for the field \"{field.Name}\" of \"{obj.GetType().Name}\", but the field has no Range attribute in code. Ranges for scalar fields can only be set in code using the Range attribute and not from the Scenario JSON.");
field.SetValue(obj, Convert.ChangeType(readScalar.Item1, field.FieldType));
}
}
else
{
field.SetValue(obj, Convert.ChangeType(readScalar.Item1, field.FieldType));
}
}
static (object, Limits) ReadScalarValue(object obj, Scalar scalar)
{
Limits limits = null;
{
limits = doubleValue.limits;
}
field.SetValue(obj, Convert.ChangeType(value, field.FieldType));
return (value, limits);
}
#endregion

20
com.unity.perception/CHANGELOG.md


The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## Unreleased
## [0.9.0-preview.2] - 2021-11-01
Scenario JSON configurations that were generated using previous versions will need to be manually updated due to updates to serialization and deserialization of scenarios.
The user can now choose the base folder location to store their generated datasets.
Added support for multiple cameras capturing simultaneously (visualization not yet supported)
Added the AssetSource class for loading assets from generic sources inside randomizers.
Users can now delay the current iteration for one frame from within randomizers by calling the `DelayIteration` function of the active scenario.
Added new configuration options to the Scenario JSON configuration. These include a `limits` block on numerical Scalars and Samplers to denote a valid range, and a `state` block on the Randomizers for enabling/disabling them from the config.
Added the AssetSource class for loading assets from generic sources inside randomizers.
Users can now delay the current iteration for one frame from within randomizers by calling the `DelayIteration` function of the active scenario.
Added usage analytics for the scenario configuration. For more information, refer to the Release Notes for package version 0.9.0.preview.2.
Changed the JSON serialization key of Normal Sampler's standard deviation property from "standardDeviation" to "stddev". Scneario JSON configurations that were generated using previous versions will need to be manually updated to reflect this change.
Upgraded capture package dependency to 0.0.10-preview.24. This fixes an issue where RGB images were blank on OSX when MSAA was enabled & post-processing was disabled.
Changed the JSON serialization key of Normal Sampler's standard deviation property from "standardDeviation" to "stddev".
Changed the JSON serialization of Randomizers in a scenario to an array of groups rather than a dictionary.
### Deprecated

2
com.unity.perception/Documentation~/SetupSteps.md


Note that although the Perception package is compatible with both URP and HDRP, Unity Simulation currently only supports URP projects, therefore a URP project is recommended.
If you want a specific version of the package, append the version to the end of the "git URL". Ex. `com.unity.perception@0.8.0-preview.1`
If you want a specific version of the package, append the version to the end of the "git URL". Ex. `com.unity.perception@0.8.0-preview.4`
To install from a local clone of the repository, see [installing a local package](https://docs.unity3d.com/Manual/upm-ui-local.html) in the Unity manual.

78
com.unity.perception/Documentation~/Tutorial/Phase3.md


* [Step 1: Setup Unity Account, Unity Simulation, and Cloud Project](#step-1)
* [Step 2: Run Project on Unity Simulation](#step-2)
* [Step 3: Keep Track of Your Runs Using the Unity Simulation Command-Line Interface](#step-3)
* [Step 4: Analyze the Dataset using Dataset Insights](#step-4)
### <a name="step-1">Step 1: Setup Unity Account, Unity Simulation, and Cloud Project</a>

* **:green_circle: Action**: Open the manifest file to check it. Make sure there are links to various types of output and check a few of the links to see if they work.
### <a name="step-4">Step 4: Analyze the Dataset using Dataset Insights</a>
In order to download the actual data from your run, we will now use Dataset Insights again. This time though, we will utilize some of the lines that were commented in our previous use with locally generated data.
* **:green_circle: Action**: Open the Dataset Insights Jupyter notebook again, using the command below:
`docker run -p 8888:8888 -v <download path>/data:/data -t unitytechnologies/datasetinsights:latest`
> :information_source: If you get an error about the format of the command, try the command again **with quotation marks** around the folder mapping argument, i.e. `"<download path>/data:/data"`.
In the above command, replace `<download path>` with the location on your computer in which you wish to download your data.
Once the Docker image is running, the rest of the workflow is quite similar to what we did in Phase 1, with certain differences caused by the need to download the data from Unity Simulation.
* **:green_circle: Action**: Open a web browser and navigate to `http://localhost:8888` to open the Jupyter notebook.
* **:green_circle: Action**: Navigate to the `datasetinsights/notebooks` folder and open `Perception_Statistics.ipynb`.
* **:green_circle: Action**: In the `data_root = /data/<GUID>` line, the `<GUID>` part will be the location inside your `<download path>` where the data will be downloaded. Therefore, you can just remove it so as to have data downloaded directly to the path you previously specified:
<p align="center">
<img src="Images/di_usim_1.png" width="900"/>
</p>
The next few lines of code pertain to setting up your notebook for downloading data from Unity Simulation.
* **:green_circle: Action**: In the block of code titled "Unity Simulation [Optional]", uncomment the lines that assign values to variables, and insert the correct values, based on information from your Unity Simulation run.
We have previously learned how to obtain the `run_execution_id` and `project_id`. You can remove the value already present for `annotation_definition_id` and leave it blank. What's left is the `access_token`.
* **:green_circle: Action**: Return to your command-line interface and run the `usim inspect auth` command.
MacOS:
`USimCLI/mac/usim inspect auth`
If you receive errors regarding authentication, your token might have timed out. Repeat the login step (`usim login auth`) to login again and fix this issue.
A sample output from `usim inspect auth` will look like below:
```
Protect your credentials. They may be used to impersonate your requests.
access token: Bearer 0CfQbhJ6gjYIHjC6BaP5gkYn1x5xtAp7ZA9I003fTNT1sFp
expires in: 2:00:05.236227
expired: False
refresh token: FW4c3YRD4IXi6qQHv3Y9W-rwg59K7k0Te9myKe7Zo6M003f.k4Dqo0tuoBdf-ncm003fX2RAHQ
updated: 2020-10-02 14:50:11.412979
```
The `access_token` you need for your Dataset Insights notebook is the access token shown by the above command, minus the `'Bearer '` part. So, in this case, we should input `0CfQbhJ6gjYIHjC6BaP5gkYn1x5xtAp7ZA9I003fTNT1sFp` in the notebook.
* **:green_circle: Action**: Copy the access token excluding the `'Bearer '` part to the corresponding field in the Dataset Insights notebook.
Once you have entered all the information, the block of code should look like the screenshot below (the actual values you input will be different):
<p align="center">
<img src="Images/di_usim_2.png" width="800"/>
</p>
* **:green_circle: Action**: Continue to the next code block and run it to download all the metadata files from the generated dataset. This includes JSON files and logs but does not include images (which will be downloaded later).
You will see a progress bar while the data downloads:
<p align="center">
<img src="Images/di_usim_3.png" width="800"/>
</p>
The next couple of code blocks (under "Load dataset metadata") analyze the downloaded metadata and display a table containing annotation-definition-ids for the various metrics defined in the dataset.
* **:green_circle: Action**: Once you reach the code block titled "Built-in Statistics", make sure the value assigned to the field `rendered_object_info_definition_id` matches the id displayed for this metric in the table output by the code block immediately before it. The screenshot below demonstrates this (note that your ids might differ from the ones here):
<p align="center">
<img src="Images/di_usim_4.png" width="800"/>
</p>
Follow the rest of the steps inside the notebook to generate a variety of plots and stats. Keep in mind that this notebook is provided just as an example, and you can modify and extend it according to your own needs using the tools provided by the [Dataset Insights framework](https://datasetinsights.readthedocs.io/en/latest/).
Once the run execution is complete, you can use Unity's [Datasets Insights](https://github.com/Unity-Technologies/datasetinsights) framework to download your dataset and analyze it. This is covered in the Unity Simulation section of the [Dataset Insights](DatasetInsights.md) guide.
The next step in this workflow, which is out of the scope of this tutorial, is to train an object-detection model using our synthetic dataset. It is important to note that the 1000 large dataset we generated here is probably not sufficiently large for training most models. We chose this number here so that the Unity Simulation run would finish quickly, allowing us to move on to learning how to analyze the statistics of the dataset. In order to generate data for training, we recommend a minimum dataset size of around 50,000 captures with a large degree of randomization.

2
com.unity.perception/Documentation~/Tutorial/Phase2.md


}
```
Notice how we now utilize the `SetIntensity` fucntion of `MyLightRandomizerTag` components of the tagged objects, instead of directly setting the intensity of the `Light` components.
Notice how we now utilize the `SetIntensity` function of `MyLightRandomizerTag` components of the tagged objects, instead of directly setting the intensity of the `Light` components.
* **:green_circle: Action**: Run your simulation, then pause it. Go to the _**Scene**_ view and inspect the color and intensity of each of the lights. Try turning each on and off to see how they affect the current frame.

97
com.unity.perception/Documentation~/Tutorial/Phase1.md


# Perception Tutorial
## Phase 1: Setup and Basic Randomizations
In this phase of the Perception tutorial, you will start from downloading and installing Unity Editor and the Perception package. You will then use our sample assets and provided components to easily generate a synthetic dataset for training an object-detection model.
In this phase of the Perception tutorial, you will start by downloading and installing Unity Editor and the Perception package. You will then use our sample assets and provided components to easily generate a synthetic dataset for training an object-detection model.
Through-out the tutorial, lines starting with bullet points followed by **":green_circle: Action:"** denote the individual actions you will need to perform in order to progress through the tutorial. This is while the rest of the text will provide additional context and explanation around the actions. If in a hurry, you can just follow the actions!
Throughout the tutorial, lines starting with bullet points followed by **":green_circle: Action:"** denote the individual actions you will need to perform in order to progress through the tutorial. This is while the rest of the text will provide additional context and explanation around the actions. If in a hurry, you can just follow the actions!
Steps included in this phase of the tutorial:

* [Step 5: Set Up Background Randomizers](#step-5)
* [Step 6: Set Up Foreground Randomizers](#step-6)
* [Step 7: Inspect Generated Synthetic Data](#step-7)
* [Step 8: Verify Data Using Dataset Insights](#step-8)
* [Step 8: Explore and Visualize Your Dataset](#step-8)
> :information_source: If you face any problems while following this tutorial, please create a post on the **[Unity Computer Vision forum](https://forum.unity.com/forums/computer-vision.626/)** or the **[GitHub issues](https://github.com/Unity-Technologies/com.unity.perception/issues)** page and include as much detail as possible.

* **:green_circle: Action**: Make sure the _**Linux Build Support (Mono)**_ and _**Visual Studio**_ installation options are checked when selecting modules during installation.
When you first run Unity, you will be asked to open an existing project, or create a new one.
When you first run Unity, you will be asked to open an existing project or create a new one.
* **:green_circle: Action**: Open Unity and create a new project using the Universal Render Pipeline. Name your new project _**Perception Tutorial**_, and specify a desired location as shown below.
* **:green_circle: Action**: Open Unity and create a new project using the Universal Render Pipeline. Name your new project _**Perception Tutorial**_, and specify the desired location as shown below.
<p align="center">
<img src="Images/create_new_project.png" align="center" width="800"/>

* **:green_circle: Action**: Click on the _**+**_ sign at the top-left corner of the _**Package Manager**_ window and then choose the option _**Add package from git URL...**_.
* **:green_circle: Action**: Enter the address `com.unity.perception` and click _**Add**_.
> :information_source: If you would like to install a specific version of the package, you can append the version to the end of the url. For example `com.unity.perception@0.8.0-preview.1`. For this tutorial, **we do not need to add a version**. You can also install the package from a local clone of the Perception repository. More information on installing local packages is available [here](https://docs.unity3d.com/Manual/upm-ui-local.html).
> :information_source: If you would like to install a specific version of the package, you can append the version to the end of the url. For example `com.unity.perception@0.8.0-preview.4`. For this tutorial, **we do not need to add a version**. You can also install the package from a local clone of the Perception repository. More information on installing local packages is available [here](https://docs.unity3d.com/Manual/upm-ui-local.html).
It will take some time for the manager to download and import the package. Once the operation finishes, you will see the newly downloaded Perception package automatically selected in the _**Package Manager**_, as depicted below:

<img src="Images/perc_comp.png" width="400"/>
</p>
If you hover your mouse pointer over each of the fields shown (e.g. `Simulation Delta Time`), you will see a tooltip popup with an explanation on what the item controls.
If you hover your mouse pointer over each of the fields shown (e.g. `Simulation Delta Time`), you will see a tooltip popup with an explanation of what the item controls.
As seen in the UI for `Perception Camera`, the list of `Camera Labelers` is currently empty. For each type of ground-truth you wish to generate along-side your captured frames (e.g. 2D bounding boxes around objects), you will need to add a corresponding `Camera Labeler` to this list.
As seen in the UI for `Perception Camera`, the list of `Camera Labelers` is currently empty. For each type of ground-truth you wish to generate alongside your captured frames (e.g. 2D bounding boxes around objects), you will need to add a corresponding `Camera Labeler` to this list.
To speed-up your workflow, the Perception package comes with seven common Labelers for object-detection and human keypoint labeling tasks; however, if you are comfortable with code, you can also add your own custom Labelers. The Labelers that come with the Perception package cover **keypoint labeling, 3D bounding boxes, 2D bounding boxes, object counts, object information (pixel counts and ids), instance segmentation, and semantic segmentation**. We will use four of these in this tutorial.
To speed up your workflow, the Perception package comes with seven common Labelers for object-detection and human keypoint labeling tasks; however, if you are comfortable with code, you can also add your own custom Labelers. The Labelers that come with the Perception package cover **keypoint labeling, 3D bounding boxes, 2D bounding boxes, object counts, object information (pixel counts and ids), instance segmentation, and semantic segmentation**. We will use four of these in this tutorial.
* **:green_circle: Action**: Click on the _**+**_ button at the bottom right corner of the empty labeler list and select `BoundingBox2DLabeler`.
* **:green_circle: Action**: Repeat the above step to add `ObjectCountLabeler`, `RenderedObjectInfoLabeler`, `SemanticSegmentationLabeler`.

Click on this asset to bring up its _**Inspector**_ view. In there, you can specify the labels that this config will keep track of. You can type in labels, add any labels defined in the project (through being added to prefabs), and import/export this label config as a JSON file. A new label config like this one contains an empty list of labels.
In this tutorial, we will generate synthetic data intended for detecting 10 everyday grocery items. These grocery items were imported into your project when you imported the tutorial files from the _**Package Manager**_, and are located in the folder `Assets/Samples/Perception/0.8.0-preview.1/Tutorial Files/Foreground Objects/Phase 1/Prefabs`.
In this tutorial, we will generate synthetic data intended for detecting 10 everyday grocery items. These grocery items were imported into your project when you imported the tutorial files from the _**Package Manager**_, and are located in the folder `Assets/Samples/Perception/0.9.0-preview.2/Tutorial Files/Foreground Objects/Phase 1/Prefabs`.
The label configuration we have created (`TutorialIdLabelConfig`) is of type `IdLabelConfig`, and is compatible with three of the four labelers we have attached to our `Perception Camera`. This type of label configuration carries a unique numerical ID for each label. However, `SemanticSegmentationLabeler` requires a different kind of label configuration which includes unique colors for each label instead of numerical IDs. This is because the output of this labeler is a set of images in which each visible foreground object is painted in a unique color.

<img src="Images/pclabelconfigsadded.png" width="400"/>
</p>
It is now time to assign labels to the objects that are supposed to be detected by an eventual object-detection model, and add those labels to both of the label configurations we have created. As mentioned above, these objects are located at `Assets/Samples/Perception/0.8.0-preview.1/Tutorial Files/Foreground Objects/Phase 1/Prefabs`.
It is now time to assign labels to the objects that are supposed to be detected by an eventual object-detection model, and add those labels to both of the label configurations we have created. As mentioned above, these objects are located at `Assets/Samples/Perception/0.9.0-preview.2/Tutorial Files/Foreground Objects/Phase 1/Prefabs`.
* **:green_circle: Action**: In the _**Project**_ tab, navigate to `Assets/Samples/Perception/0.8.0-preview.1/Tutorial Files/Foreground Objects/Phase 1/Prefabs`
* **:green_circle: Action**: In the _**Project**_ tab, navigate to `Assets/Samples/Perception/0.9.0-preview.2/Tutorial Files/Foreground Objects/Phase 1/Prefabs`
* **:green_circle: Action**: Double click the file named `drink_whippingcream_lucerne.prefab` to open the Prefab asset.
When you open the Prefab asset, you will see the object shown in the Scene tab and its components shown on the right side of the editor, in the _**Inspector**_ tab:

</p>
The Prefab contains a number of components, including a `Transform`, a `Mesh Filter`, a `Mesh Renderer` and a `Labeling` component (highlighted in the image above). While the first three of these are common Unity components, the fourth one is specific to the Perception package, and is used for assigning labels to objects. You can see here that the Prefab has one label already added, displayed in the list of `Added Labels`. The UI here provides a multitude of ways for you to assign labels to the object. You can either choose to have the asset automatically labeled (by enabling `Use Automatic Labeling`), or add labels manually. In case of automatic labeling, you can choose from a number of labeling schemes, e.g. the asset's name or folder name. If you go the manual route, you can type in labels, add labels from any of the label configurations included in the project, or add from lists of suggested labels based on the Prefab's name and path.
The Prefab contains a number of components, including a `Transform`, a `Mesh Filter`, a `Mesh Renderer` and a `Labeling` component (highlighted in the image above). While the first three of these are common Unity components, the fourth one is specific to the Perception package and is used for assigning labels to objects. You can see here that the Prefab has one label already added, displayed in the list of `Added Labels`. The UI here provides a multitude of ways for you to assign labels to the object. You can either choose to have the asset automatically labeled (by enabling `Use Automatic Labeling`), or add labels manually. In case of automatic labeling, you can choose from a number of labeling schemes, e.g. the asset's name or folder name. If you go the manual route, you can type in labels, add labels from any of the label configurations included in the project, or add from lists of suggested labels based on the Prefab's name and path.
Note that each object can have multiple labels assigned, and thus appear as different objects to Labelers with different label configurations. For instance, you may want your semantic segmentation Labeler to detect all cream cartons as `dairy_product`, while your bounding box Labeler still distinguishes between different types of dairy product. To achieve this, you can add a `dairy_product` label to all your dairy products, and then in your label configuration for semantic segmentation, only add the `dairy_product` label, and not any specific products or brand names.
Note that each object can have multiple labels assigned, and thus appear as different objects to Labelers with different label configurations. For instance, you may want your semantic segmentation Labeler to detect all cream cartons as `dairy_product`, while your Bounding Box Labeler still distinguishes between different types of dairy products. To achieve this, you can add a `dairy_product` label to all your dairy products, and then in your label configuration for semantic segmentation, only add the `dairy_product` label, and not any specific products or brand names.
For this tutorial, we have already prepared the foreground Prefabs for you and added the `Labeling` component to all of them. These Prefabs were based on 3D scans of the actual grocery items. If you are making your own Prefabs, you can easily add a `Labeling` component to them using the _**Add Component**_ button visible in the bottom right corner of the screenshot above.

* **:green_circle: Action**: Select **all the files** inside the `Assets/Samples/Perception/0.8.0-preview.1/Tutorial Files/Foreground Objects/Phase 1/Prefabs` folder.
* **:green_circle: Action**: Select **all the files** inside the `Assets/Samples/Perception/0.9.0-preview.2/Tutorial Files/Foreground Objects/Phase 1/Prefabs` folder.
* **:green_circle: Action**: From the _**Inspector**_ tab, enable `Use Automatic Labeling for All Selected Items`, and then select `Use asset name` as the labeling scheme.
<p align="center">

> :information_source: Since we used automatic labels here and added them to our configurations, we are confident that the labels in the configurations match the labels of our objects. In cases where you decide to add manual labels to objects and configurations, make sure you use the exact same labels, otherwise, the objects for which a matching label is not found in your configurations will not be detected by the Labelers that are using those configurations.
Now that we have labelled all our foreground objects and setup our label configurations, let's briefly test things.
Now that we have labeled all our foreground objects and set up our label configurations, let's briefly test things.
* **:green_circle: Action**: In the _**Project**_ tab, navigate to `Assets/Samples/Perception/0.8.0-preview.1/Tutorial Files/Foreground Objects/Phase 1/Prefabs`.
* **:green_circle: Action**: In the _**Project**_ tab, navigate to `Assets/Samples/Perception/0.9.0-preview.2/Tutorial Files/Foreground Objects/Phase 1/Prefabs`.
* **:green_circle: Action**: Drag and drop any of the Prefabs inside this folder into the Scene.
* **:green_circle: Action**: Click on the **▷** (play) button located at the top middle section of the editor to run your simulation.

As mentioned earlier, one of the core ingredients of the perception workflow is the randomization of various aspects of the simulation, in order to introduce sufficient variation into the generated data.
To start randomizing your simulation you will first need to add a `Scenario` to your scene. Scenarios control the execution flow of your simulation by coordinating all `Randomizer` components added to them. The Perception package comes with a useful set of Randomizers that let you quickly place your foreground objects in the Scene, generate varied backgrounds, as well as randomize various parameters of the simulation over time, including things such as position, scale, and rotation of objects, number of objects within the camera's view, and so on. Randomizers achieve this through coordinating a number of `Parameter`s, which essentially define the most granular randomization behaviors. For instance, for continuous variable types such as floats, vectors, and colors, Parameters can define the range and sampling distribution for randomization. This is while another class of Parameters let you randomly select one out of a number of categorical options.
To start randomizing your simulation you will first need to add a `Scenario` to your scene. Scenarios control the execution flow of your simulation by coordinating all `Randomizer` components added to them. The Perception package comes with a useful set of Randomizers that let you quickly place your foreground objects in the Scene, generate varied backgrounds, as well as randomize various parameters of the simulation over time such as position, scale, and rotation of objects, number of objects within the camera's view, and so on. Randomizers achieve this through coordinating a number of `Parameter`s, which essentially define the most granular randomization behaviors. For instance, for continuous variable types such as floats, vectors, and colors, Parameters can define the range and sampling distribution for randomization. While another class of Parameters let you randomly select one out of a number of categorical options.
To summarize, a sample `Scenario` could look like this:

This Randomizer uses Poisson-Disk sampling to select random positions from a given area, and spawn copies of randomly selected Prefabs (from a given list) at the chosen positions. We will use this component to generate a background that will act as a distraction for our eventual object-detection machine learning model.
* **:green_circle: Action**: Click _**Add Folder**_, and from the file explorer window that opens, choose the folder `Assets/Samples/Perception/0.8.0-preview.1/Tutorial Files/Background Objects/Prefabs`.
* **:green_circle: Action**: Click _**Add Folder**_, and from the file explorer window that opens, choose the folder `Assets/Samples/Perception/0.9.0-preview.2/Tutorial Files/Background Objects/Prefabs`.
The background Prefabs are primitive shapes devoid of color or texture. Later Randomizers will take care of those aspects.

`TextureRandomizer` will have the task of attaching random textures to our colorless background objects at each Iteration of the Scenario. Similarly, `HueOffsetRandomizer` will alter the color of the objects, and `RotationRandomizer` will give the objects a new random rotation each Iteration.
* **:green_circle: Action**: In the UI snippet for `TextureRandomizer`, click _**Add Folder**_ and choose `Assets/Samples/Perception/0.8.0-preview.1/Tutorial Files/Background Textures`.
* **:green_circle: Action**: In the UI snippet for `TextureRandomizer`, click _**Add Folder**_ and choose `Assets/Samples/Perception/0.9.0-preview.2/Tutorial Files/Background Textures`.
* **:green_circle: Action**: In the UI snippet for `RotationRandomizer`, verify that all the minimum values for the three ranges are `0` and that maximum values are `360`.

<img src="Images/all_back_rands.png" width = "400"/>
</p>
There is one more important thing left to do, in order to make sure all the above Randomizers operate as expected. Since `BackgroundObjectPlacementRandomizer` spawns objects, it already knows which objects in the Scene it is dealing with; however, the rest of the Randomizers we added are not yet aware of what objects they should target because they don't spawn their own objects.
There is one more important thing left to do, in order to make sure all the above Randomizers operate as expected. Since `BackgroundObjectPlacementRandomizer` spawns objects, it already knows which objects in the Scene it is dealing with; however, the rest of the Randomizers we added are not yet aware of what objects they should target because they don't spawn their own objects.
* **:green_circle: Action**: In the _**Project**_ tab, navigate to `Assets/Samples/Perception/0.8.0-preview.1/Tutorial Files/Background Objects/Prefabs`.
* **:green_circle: Action**: In the _**Project**_ tab, navigate to `Assets/Samples/Perception/0.9.0-preview.2/Tutorial Files/Background Objects/Prefabs`.
* **:green_circle: Action**: Select all the files inside and from the _**Inspector**_ tab add a `TextureRandomizerTag` to them. This will add the component to all the selected files.
* **:green_circle: Action**: Repeat the above step to add `HueOffsetRandomizerTag` and `RotationRandomizerTag` to all selected Prefabs.

It is now time to spawn and randomize our foreground objects.
* **:green_circle: Action**: Add `ForegroundObjectPlacementRandomizer` to your list of Randomizers. Click _**Add Folder**_ and select `Assets/Samples/Perception/0.8.0-preview.1/Tutorial Files/Foreground Objects/Phase 1/Prefabs`.
* **:green_circle: Action**: Add `ForegroundObjectPlacementRandomizer` to your list of Randomizers. Click _**Add Folder**_ and select `Assets/Samples/Perception/0.9.0-preview.2/Tutorial Files/Foreground Objects/Phase 1/Prefabs`.
* **:green_circle: Action**: Set these values for the above Randomizer: `Depth = -3, Separation Distance = 1.5, Placement Area = (5,5)`.
This Randomizer uses the same algorithm as the one we used for backgrounds; however, it is defined in a separate C# class because you can only have **one of each type of Randomizer added to your Scenario**. Therefore, this is our way of differentiating between how background and foreground objects are treated.

* **:green_circle: Action**: From the _**Project**_ tab select all the foreground Prefabs located in `Assets/Samples/Perception/0.8.0-preview.1/Tutorial Files/Foreground Objects/Phase 1/Prefabs`, and add a `RotationRandomizerTag` component to them.
* **:green_circle: Action**: From the _**Project**_ tab select all the foreground Prefabs located in `Assets/Samples/Perception/0.9.0-preview.2/Tutorial Files/Foreground Objects/Phase 1/Prefabs`, and add a `RotationRandomizerTag` component to them.
* **:green_circle: Action**: Drag `ForegroundObjectPlacementRandomizer` using the striped handle bar (on its left side) and drop it above `RotationRandomizer`.
* **:green_circle: Action**: Drag `ForegroundObjectPlacementRandomizer` using the striped handlebar (on its left side) and drop it above `RotationRandomizer`.
Your full list of Randomizers should now look like the screenshot below:

In this folder, you will find a few types of data, depending on your `Perception Camera` settings. These can include:
- Logs
- JSON data
- RGB images (raw camera output) (if the `Save Camera Output to Disk` check mark is enabled on `Perception Camera`)
- RGB images (raw camera output) (if the `Save Camera Output to Disk` checkmark is enabled on `Perception Camera`)
The output dataset includes a variety of information about different aspects of the active sensors in the Scene (currently only one), as well as the ground-truth generated by all active Labelers. [This page](https://github.com/Unity-Technologies/com.unity.perception/blob/master/com.unity.perception/Documentation%7E/Schema/Synthetic_Dataset_Schema.md) provides a comprehensive explanation on the schema of this dataset. We strongly recommend having a look at the page once you have completed this tutorial.
> :information_source: Are the RGB images blank? This may be a bug. When using URP in OSX, having MSAA enabled on the camera may cause the output RGB images to be blank. As a workaround, you can disable MSAA and use FXAA instead, until the issue is fixed. To do this, select `Main Camera`, and in the ***Inspector*** view of the Camera component, in the ***Output*** section, set MSAA to `Off`. If you would like to use FXAA, in the ***Rendering*** section, set the Anti-aliasing option to `Fast Approximate Anti-aliasing (FXAA)`.
The output dataset includes a variety of information about different aspects of the active sensors in the Scene (currently only one), as well as the ground-truth generated by all active Labelers. [This page](https://github.com/Unity-Technologies/com.unity.perception/blob/master/com.unity.perception/Documentation%7E/Schema/Synthetic_Dataset_Schema.md) provides a comprehensive explanation of the schema of this dataset. We strongly recommend having a look at the page once you have completed this tutorial.
* **:green_circle: Action**: To get a quick feel of how the data is stored, open the folder whose name starts with `Dataset`, then open the file named `captures_000.json`. This file contains the output from `BoundingBox2DLabeler`. The `captures` array contains the position and rotation of the sensor (camera), the position and rotation of the ego (sensor group, currently only one), and the annotations made by `BoundingBox2DLabeler` for all visible objects defined in its label configuration. For each visible object, the annotations include:
* `label_id`: The numerical id assigned to this object's label in the Labeler's label configuration

* **:green_circle: Action**: Review the JSON meta-data and the images captured for the first annotated frame, and verify that the objects within them match.
### <a name="step-8">Step 8: Verify Data Using Dataset Insights</a>
To verify and analyze a variety of metrics for the generated data, such as number of foreground objects in each frame and degree of representation for each foreground object (label), we will now use Unity's Dataset Insights framework. This will involve running a Jupyter notebook which is conveniently packaged within a Docker file that you can download from Unity.
### <a name="step-8">Step 8: Explore and Visualize Your Dataset</a>
* **:green_circle: Action**: Download and install [Docker Desktop](https://www.docker.com/products/docker-desktop)
* **:green_circle: Action**: Open a command line interface (Command Prompt on Windows, Terminal on Mac OS, etc.) and type the following command to run the Dataset Insights Docker image:
`docker run -p 8888:8888 -v <path to synthetic data>:/data -t unitytechnologies/datasetinsights:latest`, where the path to data is what we looked at earlier. You can copy the path using the _**Copy Path**_ button in the `Perception Camera` UI.
Reviewing individual files in the dataset can be tedious and error-prone. Instead, you can use our Dataset Visualizer to efficiently visualize the captured frames along with Labeler outputs overlaid on them, as well as inspect the JSON data attached to each frame.
> :information_source: If you get an error about the format of the command, try the command again **with quotation marks** around the folder mapping argument, i.e. `"<path to synthetic data>:/data"`.
* **:green_circle: Action**: Open _**Window**_ -> _**Dataset Visualizer**_ -> _**Open**_. (This is also accessible from the `Perception Camera`)
This will download a Docker image from Unity. If you get an error regarding the path to your dataset, make sure you have not included the enclosing `<` and `>` in the path and that the spaces are properly escaped.
This will first install the visualizer and then run it. The visualizer is a Python-based tool that runs in the browser. It may take a few minutes to install the tool for the first time. Once it is installed, a browser window will open to the address `http://localhost:8501/`.
* **:green_circle: Action**: The image is now running on your computer. Open a web browser and navigate to `http://localhost:8888` to open the Jupyter notebook:
In certain circumstances, the tool may run but the browser window may not open. To alleviate this, once the tool is running you will get a prompt in Unity Editor, asking whether the browser window opened successfully. If it did not, you can force it to open by clicking **Manually Open**.
<img src="Images/jupyter1.png" width="800"/>
<img src="Images/did_visualizer_open.png" width = "300"/>
* **:green_circle: Action**: To make sure your data is properly mounted, navigate to the `data` folder. If you see the dataset's folders there, we are good to go.
* **:green_circle: Action**: Navigate to the `datasetinsights/notebooks` folder and open `Perception_Statistics.ipynb`.
* **:green_circle: Action**: Once in the notebook, remove the `/<GUID>` part of the `data_root = /data/<GUID>` path. Since the dataset root is already mapped to `/data`, you can use this path directly.
> :information_source: The visualizer is a standalone tool that may be updated outside of the normal release cycles of the Perception package. You can use _**Window**_ -> _**Dataset Visualizer**_ -> _**Check For Updates**_ to check for and install updates.
<p align="center">
<img src="Images/jupyter2.png" width="800"/>
</p>
Once the browser window is open, the tool will automatically try to open the latest dataset generated using the Unity project from which you opened the visualizer. You can also open other datasets using the ***Open Dataset*** button on the left side of the screen.
This notebook contains a variety of functions for generating plots, tables, and bounding box images that help you analyze your generated dataset. Certain parts of this notebook are currently not of use to us, such as the code meant for downloading data generated through Unity Simulation (coming later in this tutorial).
The left sidebar also contains switches for enabling the visualization of each Labeler in the dataset. The image below shows a sample dataset opened in the visualizer, with the 2D bounding boxes overlay enabled.
Each of the code blocks in this notebook can be executed by clicking on them to select them, and then clicking the _**Run**_ button at the top of the notebook. When you run a code block, an **asterisk (\*)** will be shown next to it on the left side, until the code finishes executing.
<p align="center">
<img src="Images/visualizer_sample_synthdet.png" width = "800"/>
</p>
Below, you can see a sample plot generated by the Dataset Insights notebook, depicting the number of times each of the 10 foreground objects appeared in the dataset. As shown in the histogram, there is a high level of uniformity between the labels, which is a desirable outcome.
* **:green_circle: Action**: Click _**Expand Frame**_ for the first image.
In expanded mode, the image is enlarged and the JSON data attached to it are displayed, as seen in the screenshot below.
<img src="Images/object_count_plot.png" width="600"/>
<img src="Images/vis_expanded.png" width = "800"/>
* **:green_circle: Action**: Follow the instructions laid out in the notebook and run each code block to view its outputs.
To further analyze your dataset and verify statistics such as the number of objects in each frame and more, you can use Unity's Dataset Insights, which is a Python package created for processing Perception datasets. [This guide](DatasetInsights.md) can get you started.
This concludes Phase 1 of the Perception Tutorial. In the next phase, you will dive a little bit into randomization code and learn how to build your own custom Randomizer.
This concludes Phase 1 of the Perception Tutorial. In the next phase, we will dive a little bit into randomization code and learn how to build custom Randomizers.
**[Continue to Phase 2: Custom Randomizations](Phase2.md)**

6
com.unity.perception/package.json


"com.unity.collections": "0.9.0-preview.6",
"com.unity.nuget.newtonsoft-json": "1.1.2",
"com.unity.render-pipelines.core": "7.1.6",
"com.unity.simulation.capture": "0.0.10-preview.23",
"com.unity.simulation.capture": "0.0.10-preview.24",
"com.unity.simulation.core": "0.0.10-preview.22"
"com.unity.simulation.core": "0.0.10-preview.25"
"version": "0.8.0-preview.4",
"version": "0.9.0-preview.2",
"samples": [
{
"displayName": "Tutorial Files",

4
TestProjects/PerceptionHDRP/Assets/New Terrain.asset
文件差异内容过多而无法显示
查看文件

8
TestProjects/PerceptionHDRP/Assets/New Terrain.asset.meta


fileFormatVersion: 2
guid: 4bb44296574a34e65a441df8c0a0e66a
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 15600000
userData:
assetBundleName:
assetBundleVariant:

1001
TestProjects/PerceptionHDRP/Assets/Scenes/MultiCameraExample.unity
文件差异内容过多而无法显示
查看文件

7
TestProjects/PerceptionHDRP/Assets/Scenes/MultiCameraExample.unity.meta


fileFormatVersion: 2
guid: c422f81d640566845a68cab39c36e776
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1
TestProjects/PerceptionURP/UserSettings/Search.settings


{}

492
TestProjects/PerceptionURP/Assets/Prefabs/Rotating Keypoint Cube.prefab


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1775053615941697064
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4653067277972803271}
- component: {fileID: 1523182801768527585}
- component: {fileID: 1719736268068563442}
- component: {fileID: 1775053615941697063}
m_Layer: 0
m_Name: Rotating Keypoint Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4653067277972803271
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1775053615941697064}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 1.348, y: 0.027999997, z: -0.06700003}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 4870014084929497336}
- {fileID: 4870014084866263457}
- {fileID: 4870014084099113822}
- {fileID: 4870014083856539663}
- {fileID: 4870014084516904605}
- {fileID: 4870014082993669116}
- {fileID: 4870014084809462286}
- {fileID: 4870014082886133399}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &1523182801768527585
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1775053615941697064}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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: 1
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
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1719736268068563442
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1775053615941697064}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &1775053615941697063
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1775053615941697064}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b33f0bc2b78db642a758f07826d0dd0, type: 3}
m_Name:
m_EditorClassIdentifier:
labels:
- Crate
useAutoLabeling: 0
autoLabelingSchemeType:
--- !u!1 &4870014082886133398
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4870014082886133399}
- component: {fileID: 4870014082886133400}
m_Layer: 0
m_Name: BackBottomRight
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4870014082886133399
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014082886133398}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.5, y: -0.5, z: -0.5}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4653067277972803271}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4870014082886133400
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014082886133398}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- BackBottomRight
overrideSelfOcclusionDistance: 0
selfOcclusionDistance: 0.1
--- !u!1 &4870014082993669115
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4870014082993669116}
- component: {fileID: 4870014082993669117}
m_Layer: 0
m_Name: BackTopRight
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4870014082993669116
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014082993669115}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.5, y: 0.5, z: -0.5}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4653067277972803271}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4870014082993669117
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014082993669115}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- BackTopRight
overrideSelfOcclusionDistance: 0
selfOcclusionDistance: 0.1
--- !u!1 &4870014083856539662
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4870014083856539663}
- component: {fileID: 4870014083856539664}
m_Layer: 0
m_Name: FrontBottomRight
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4870014083856539663
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014083856539662}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.5, y: -0.5, z: 0.5}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4653067277972803271}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4870014083856539664
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014083856539662}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- FrontBottomRight
overrideSelfOcclusionDistance: 0
selfOcclusionDistance: 0.1
--- !u!1 &4870014084099113821
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4870014084099113822}
- component: {fileID: 4870014084099113823}
m_Layer: 0
m_Name: FrontBottomLeft
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4870014084099113822
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014084099113821}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.5, y: -0.5, z: 0.5}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4653067277972803271}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4870014084099113823
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014084099113821}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- FrontBottomLeft
overrideSelfOcclusionDistance: 0
selfOcclusionDistance: 0.08
--- !u!1 &4870014084516904604
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4870014084516904605}
- component: {fileID: 4870014084516904606}
m_Layer: 0
m_Name: BackTopLeft
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4870014084516904605
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014084516904604}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.5, y: 0.5, z: -0.5}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4653067277972803271}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4870014084516904606
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014084516904604}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- BackTopLeft
overrideSelfOcclusionDistance: 0
selfOcclusionDistance: 0.08
--- !u!1 &4870014084809462285
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4870014084809462286}
- component: {fileID: 4870014084809462287}
m_Layer: 0
m_Name: BackBottomLeft
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4870014084809462286
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014084809462285}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.5, y: -0.5, z: -0.5}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4653067277972803271}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4870014084809462287
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014084809462285}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- BackBottomLeft
overrideSelfOcclusionDistance: 0
selfOcclusionDistance: 0.08
--- !u!1 &4870014084866263456
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4870014084866263457}
- component: {fileID: 4870014084866263458}
m_Layer: 0
m_Name: FrontTopRight
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4870014084866263457
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014084866263456}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.5, y: 0.5, z: 0.5}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4653067277972803271}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4870014084866263458
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014084866263456}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- FrontTopRight
overrideSelfOcclusionDistance: 0
selfOcclusionDistance: 0.1
--- !u!1 &4870014084929497335
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4870014084929497336}
- component: {fileID: 4870014084929497337}
m_Layer: 0
m_Name: FrontTopLeft
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4870014084929497336
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014084929497335}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.5, y: 0.5, z: 0.5}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4653067277972803271}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4870014084929497337
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4870014084929497335}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- FrontTopLeft
overrideSelfOcclusionDistance: 0
selfOcclusionDistance: 0.08

7
TestProjects/PerceptionURP/Assets/Prefabs/Rotating Keypoint Cube.prefab.meta


fileFormatVersion: 2
guid: d82961566177d4108b5f0d67dc97fd62
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
TestProjects/PerceptionURP/Assets/Scenes/MultiCamera.unity
文件差异内容过多而无法显示
查看文件

7
TestProjects/PerceptionURP/Assets/Scenes/MultiCamera.unity.meta


fileFormatVersion: 2
guid: dedd985999ab74747b95df66909e8029
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

63
TestProjects/PerceptionURP/Assets/Scenes/MultiCameraSettings.lighting


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!850595691 &4890085278179872738
LightingSettings:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: MultiCameraSettings
serializedVersion: 3
m_GIWorkflowMode: 1
m_EnableBakedLightmaps: 0
m_EnableRealtimeLightmaps: 1
m_RealtimeEnvironmentLighting: 1
m_BounceScale: 1
m_AlbedoBoost: 1
m_IndirectOutputScale: 1
m_UsingShadowmask: 1
m_BakeBackend: 1
m_LightmapMaxSize: 1024
m_BakeResolution: 40
m_Padding: 2
m_TextureCompression: 1
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAO: 0
m_MixedBakeMode: 2
m_LightmapsBakeMode: 1
m_FilterMode: 1
m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0}
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_RealtimeResolution: 2
m_ForceWhiteAlbedo: 0
m_ForceUpdates: 0
m_FinalGather: 0
m_FinalGatherRayCount: 256
m_FinalGatherFiltering: 1
m_PVRCulling: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVREnvironmentSampleCount: 500
m_PVREnvironmentReferencePointCount: 2048
m_LightProbeSampleCountMultiplier: 4
m_PVRBounces: 2
m_PVRMinBounces: 2
m_PVREnvironmentMIS: 0
m_PVRFilteringMode: 2
m_PVRDenoiserTypeDirect: 0
m_PVRDenoiserTypeIndirect: 0
m_PVRDenoiserTypeAO: 0
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1

8
TestProjects/PerceptionURP/Assets/Scenes/MultiCameraSettings.lighting.meta


fileFormatVersion: 2
guid: 75bbcdcbda2820b4a933657ce3456134
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 4890085278179872738
userData:
assetBundleName:
assetBundleVariant:

8
TestProjects/PerceptionURP/Assets/Scenes/SampleScene.meta


fileFormatVersion: 2
guid: bce914f0f01b5644c9e61e46a023e596
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

198
com.unity.perception/Tests/Runtime/GroundTruthTests/RgbOutputTests.cs


using System;
using System.Collections;
using NUnit.Framework;
using Unity.Simulation;
using UnityEngine;
using UnityEngine.Perception.GroundTruth;
using UnityEngine.Rendering;
using UnityEngine.TestTools;
#if URP_PRESENT
using UnityEngine.Rendering.Universal;
#endif
#if HDRP_PRESENT
using UnityEngine.Rendering.HighDefinition;
#endif
namespace GroundTruthTests.RgbOutputTests
{
public abstract class RgbOutputTestBase : GroundTruthTestBase
{
internal static readonly Color32 clearPixelValue = new Color32(0, 0, 0, 0);
internal PerceptionCamera perceptionCamera;
[UnityTearDown]
public IEnumerator Teardown()
{
base.TearDown();
yield return new WaitForSeconds(2f);
}
internal IEnumerator GenerateRgbOutputAndValidateData(
Action<AsyncRequest<CaptureCamera.CaptureState>> validator = null
)
{
// Setup the readback
AsyncRequest<CaptureCamera.CaptureState> captureState = null;
void RgbCaptureReadback(AsyncRequest<CaptureCamera.CaptureState> request)
{
captureState = request;
}
perceptionCamera.RgbCaptureReadback += RgbCaptureReadback;
// Initialize camera and request a frame for readback
perceptionCamera.RequestCapture();
yield return null;
// perceptionCamera.RgbCaptureReadback -= RgbCaptureReadback;
// Preliminary check on capture
Assert.IsTrue(captureState.error == false, "Capture Request had an error.");
// Custom validation of the readback data
validator?.Invoke(captureState);
}
internal static int ImageToColorDistance(Color32 exemplar, byte[] inputs, int deviation)
{
var numItems = ArrayUtilities.Count(inputs);
var count = 0;
for (var i = 0; i < numItems; i += 4)
{
Color32 c;
c.r = inputs[i + 0];
c.g = inputs[i + 1];
c.b = inputs[i + 2];
c.a = inputs[i + 3];
var redDelta = Math.Abs(exemplar.r - c.r);
var greenDelta = Math.Abs(exemplar.g - c.g);
var blueDelta = Math.Abs(exemplar.b - c.b);
var alphaDelta = Math.Abs(exemplar.a - c.a);
if (redDelta > deviation || greenDelta > deviation || blueDelta > deviation || alphaDelta > deviation)
++count;
}
return count;
}
}
#if URP_PRESENT
public class UrpRgbOutputTests : RgbOutputTestBase
{
static UniversalRenderPipelineAsset urpAsset => GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
// Initial Project Settings
static int s_InitialMsaaSampleCount;
[OneTimeSetUp]
public void OneTimeSetup()
{
s_InitialMsaaSampleCount = urpAsset.msaaSampleCount;
}
[UnityTearDown]
public IEnumerator UrpTeardown()
{
base.TearDown();
// Reset project settings
urpAsset.msaaSampleCount = s_InitialMsaaSampleCount;
DatasetCapture.ResetSimulation();
yield return null;
}
#region MSAA Test
static MsaaQuality[] s_MSAAVariations = {
MsaaQuality.Disabled,
MsaaQuality._2x,
MsaaQuality._8x
};
[UnityTest]
public IEnumerator RgbOutput_MsaaVariation_IsNotEmpty(
[ValueSource(nameof(s_MSAAVariations))]
MsaaQuality msaa
)
{
// Setup the camera and scene
var camera = SetupCamera((cam =>
{
cam.captureRgbImages = true;
cam.captureTriggerMode = CaptureTriggerMode.Manual;
perceptionCamera = cam;
// Change the MSAA Graphics setting
urpAsset.msaaSampleCount = (int)msaa;
}));
AddTestObjectForCleanup(camera);
AddTestObjectForCleanup(TestHelper.CreateLabeledCube());
// Validate RGB output image by checking if its empty
yield return GenerateRgbOutputAndValidateData(
validator: (captureState) =>
{
// Check if color buffer is all zeros
var colorBuffer = ArrayUtilities.Cast<byte>(captureState.data.colorBuffer as Array);
var imageToColorDistance = ImageToColorDistance(clearPixelValue, colorBuffer, 0);
Assert.IsFalse(imageToColorDistance == 0, $"[URP] RGB Output was empty for MSAA (${msaa.ToString()})");
}
);
}
#endregion
}
#endif
#if HDRP_PRESENT
public class HdrpRgbOutputTests : RgbOutputTestBase
{
static HDRenderPipelineAsset urpAsset => GraphicsSettings.currentRenderPipeline as HDRenderPipelineAsset;
// Initial Project Settings
[OneTimeSetUp]
public void OneTimeSetup()
{
}
[UnityTearDown]
public IEnumerator UrpTeardown()
{
base.TearDown();
// Reset project settings
DatasetCapture.ResetSimulation();
yield return null;
}
#region Blank Image Test
[UnityTest]
public IEnumerator RgbOutput_DefaultProjectSettings_IsNotEmpty()
{
// Setup the camera and scene
var camera = SetupCamera((cam =>
{
cam.captureRgbImages = true;
cam.captureTriggerMode = CaptureTriggerMode.Manual;
perceptionCamera = cam;
}));
AddTestObjectForCleanup(camera);
AddTestObjectForCleanup(TestHelper.CreateLabeledCube());
// Validate RGB output image by checking if its empty
yield return GenerateRgbOutputAndValidateData(
validator: (captureState) =>
{
// Check if color buffer is all zeros
var colorBuffer = ArrayUtilities.Cast<byte>(captureState.data.colorBuffer as Array);
var imageToColorDistance = ImageToColorDistance(clearPixelValue, colorBuffer, 0);
Assert.IsFalse(imageToColorDistance == 0, $"[HDRP] RGB Output was empty for default project settings.");
}
);
}
#endregion
}
#endif
}

11
com.unity.perception/Tests/Runtime/GroundTruthTests/RgbOutputTests.cs.meta


fileFormatVersion: 2
guid: e1fdf6e94ce954f2f9af3f32c1a33810
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

50
com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/AllMembersAndParametersTestRandomizer.cs


using UnityEngine.Perception.Randomization.Parameters;
using UnityEngine.Perception.Randomization.Randomizers;
using UnityEngine.Perception.Randomization.Samplers;
namespace UnityEngine.Perception.RandomizationTests.ScenarioTests
{
public class AllMembersAndParametersTestRandomizer: Randomizer
{
// Members
public bool booleanMember = false;
public int intMember = 4;
public uint uintMember = 2;
public float floatMember = 5;
public Vector2 vector2Member = new Vector2(4, 7);
public UniformSampler unsupportedMember = new UniformSampler();
// Parameters
public BooleanParameter booleanParam = new BooleanParameter()
{
value = new ConstantSampler(1)
};
public FloatParameter floatParam = new FloatParameter()
{
value = new AnimationCurveSampler()
};
public IntegerParameter integerParam = new IntegerParameter()
{
value = new UniformSampler(-3, 7)
};
public Vector2Parameter vector2Param = new Vector2Parameter()
{
x = new ConstantSampler(2),
y = new UniformSampler(-4, 8)
};
public Vector3Parameter vector3Param = new Vector3Parameter()
{
x = new NormalSampler(-5, 9, 4, 2),
y = new ConstantSampler(3),
z = new AnimationCurveSampler()
};
public Vector4Parameter vector4Param = new Vector4Parameter()
{
x = new NormalSampler(-5, 9, 4, 2),
y = new ConstantSampler(3),
z = new AnimationCurveSampler(),
w = new UniformSampler(-12, 42)
};
public ColorRgbCategoricalParameter colorRgbCategoricalParam = new ColorRgbCategoricalParameter();
};
}

11
com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/AllMembersAndParametersTestRandomizer.cs.meta


fileFormatVersion: 2
guid: 5dcdd497a48d3405489861ef856a8495
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

24
com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/Resources/sampleAnimationPoseConfig.asset


%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: 4c69656f5dd14516a3a18e42b3b43a4e, type: 3}
m_Name: sampleAnimationPoseConfig
m_EditorClassIdentifier:
animationClip: {fileID: 0}
m_Timestamps:
- startOffsetPercent: 0
poseLabel: a
- startOffsetPercent: 24
poseLabel: b
- startOffsetPercent: 45
poseLabel: c
- startOffsetPercent: 89
poseLabel: d

8
com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/Resources/sampleAnimationPoseConfig.asset.meta


fileFormatVersion: 2
guid: 92646dbc24d95413084b0787214fdcb3
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

23
com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/Resources/sampleIdLabelConfig.asset


%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: 2f09f279848e42cea259348b13bce4c5, type: 3}
m_Name: sampleIdLabelConfig
m_EditorClassIdentifier:
m_LabelEntries:
- label: Test 1
id: 1
- label: Test 2
id: 2
- label: Test 3
id: 3
autoAssignIds: 1
startingLabelId: 1

8
com.unity.perception/Tests/Runtime/Randomization/ScenarioTests/Resources/sampleIdLabelConfig.asset.meta


fileFormatVersion: 2
guid: c3dce9f8036624486bdc1e97f0934aa1
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

210
com.unity.perception/Runtime/PerceptionAnalytics.cs


using System;
using System.Collections.Generic;
using System.Linq;
using Unity.Simulation;
using UnityEngine.Analytics;
using UnityEngine;
using UnityEngine.Perception.GroundTruth;
using UnityEngine.Perception.Randomization.Randomizers;
using UnityEngine.Perception.Randomization.Scenarios;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace UnityEngine.Perception.Analytics
{
/// <summary>
/// Editor and Runtime analytics for the Perception package.
/// </summary>
/// <remarks>
/// To add an event:
/// 1. Create a constant with the name of the event (eg: <see cref="k_EventScenarioInformation"/>)
/// 2. Add the constant to <see cref="allEvents" />
/// 3. Create a function that will report data for the event and at the start of it call
/// <see cref="TryRegisterPerceptionAnalyticsEvent" /> with the event name defined in step 1.
/// Note: Remember to use the conditional "#if UNITY_EDITOR" if adding editor analytics.
/// </remarks>
public static class PerceptionAnalytics
{
const string k_VendorKey = "unity.perception";
const int k_MaxElementsInStruct = 100;
const int k_MaxEventsPerHour = 100;
#region Setup
[RuntimeInitializeOnLoadMethod]
static void OnInitializeOnLoad()
{
Manager.Instance.ShutdownNotification += OnSimulationShutdown;
}
static void OnSimulationShutdown()
{
var perceptionCamera = Object.FindObjectOfType<PerceptionCamera>();
ReportScenarioInformation(
perceptionCamera,
ScenarioBase.activeScenario
);
}
#endregion
/// <summary>
/// Stores whether each event has been registered successfully or not.
/// </summary>
static Dictionary<AnalyticsEvent, bool> s_EventRegistrationStatus = new Dictionary<AnalyticsEvent, bool>();
#region Event Definitions
static readonly AnalyticsEvent k_EventScenarioInformation = new AnalyticsEvent(
"perceptionScenarioInformation", AnalyticsEventType.RuntimeAndEditor, 1
);
static readonly AnalyticsEvent k_EventRunInUnitySimulation = new AnalyticsEvent(
"runinunitysimulation", AnalyticsEventType.Editor, 1
);
/// <summary>
/// All supported events. If an event does not exist in this list, an error will be thrown during
/// <see cref="TryRegisterPerceptionAnalyticsEvent" />.
/// </summary>
static IEnumerable<AnalyticsEvent> allEvents => new[]
{
k_EventScenarioInformation,
k_EventRunInUnitySimulation
};
#endregion
#region Helpers
/// <summary>
/// Tries to register an event and returns whether it was registered successfully. The result is also cached in
/// the <see cref="s_EventRegistrationStatus" /> dictionary.
/// </summary>
/// <param name="theEvent">The name of the event.</param>
/// <returns>Whether the event was successfully registered/</returns>
static bool TryRegisterPerceptionAnalyticsEvent(AnalyticsEvent theEvent)
{
// Make sure the event exists in the dictionary
if (!s_EventRegistrationStatus.ContainsKey(theEvent))
{
if (allEvents.Contains(theEvent))
s_EventRegistrationStatus[theEvent] = false;
else
throw new NotSupportedException($"Unrecognized event {theEvent} not included in {nameof(allEvents)}.");
}
// If registered previously, return true
if (s_EventRegistrationStatus[theEvent])
return true;
// Try registering the event and update the dictionary accordingly
s_EventRegistrationStatus[theEvent] = true;
#if UNITY_EDITOR
var status = EditorAnalytics.RegisterEventWithLimit(theEvent.name, k_MaxEventsPerHour, k_MaxElementsInStruct, k_VendorKey);
#else
var status = UnityEngine.Analytics.Analytics.RegisterEvent(theEvent.name, k_MaxEventsPerHour, k_MaxElementsInStruct, k_VendorKey);
#endif
s_EventRegistrationStatus[theEvent] &= status == AnalyticsResult.Ok;
return s_EventRegistrationStatus[theEvent];
}
/// <summary>
/// Based on the value of type for <see cref="theEvent" />, sends an Editor Analytics event,
/// a Runtime Analytics event, or both.
/// </summary>
/// <param name="theEvent">The analytics event.</param>
/// <param name="data">Payload of the event.</param>
static void SendPerceptionAnalyticsEvent(AnalyticsEvent theEvent, object data)
{
#if UNITY_EDITOR
if (theEvent.type == AnalyticsEventType.Editor || theEvent.type == AnalyticsEventType.RuntimeAndEditor)
{
EditorAnalytics.SendEventWithLimit(theEvent.name, data, theEvent.versionId);
}
#else
if (theEvent.type == AnalyticsEventType.Runtime || theEvent.type == AnalyticsEventType.RuntimeAndEditor)
{
UnityEngine.Analytics.Analytics.SendEvent(theEvent.name, data, theEvent.versionId, theEvent.prefix);
}
#endif
}
#endregion
#region Event: Scenario Information
/// <summary>
/// Which labelers will be identified and included in the analytics information.
/// </summary>
public static readonly string[] labelerAllowList = new[]
{
"BoundingBox3DLabeler", "BoundingBox2DLabeler", "InstanceSegmentationLabeler",
"KeypointLabeler", "ObjectCountLabeler", "SemanticSegmentationLabeler", "RenderedObjectInfoLabeler"
};
static void ReportScenarioInformation(
PerceptionCamera cam,
ScenarioBase scenario
)
{
if (!TryRegisterPerceptionAnalyticsEvent(k_EventScenarioInformation))
return;
var randomizers = scenario ? scenario.activeRandomizers : new List<Randomizer>();
var data = ScenarioCompletedData.FromCameraAndRandomizers(cam, randomizers);
SendPerceptionAnalyticsEvent(k_EventScenarioInformation, data);
}
#endregion
#region Event: Run In Unity Simulation
public static void ReportRunInUnitySimulationStarted(Guid runId, int totalIterations, int instanceCount, string existingBuildId)
{
if (!TryRegisterPerceptionAnalyticsEvent(k_EventRunInUnitySimulation))
return;
var data = new RunInUnitySimulationData
{
runId = runId.ToString(),
totalIterations = totalIterations,
instanceCount = instanceCount,
existingBuildId = existingBuildId,
runStatus = RunStatus.Started.ToString()
};
SendPerceptionAnalyticsEvent(k_EventRunInUnitySimulation, data);
}
public static void ReportRunInUnitySimulationFailed(Guid runId, string errorMessage)
{
if (!TryRegisterPerceptionAnalyticsEvent(k_EventRunInUnitySimulation))
return;
var data = new RunInUnitySimulationData
{
runId = runId.ToString(),
errorMessage = errorMessage,
runStatus = RunStatus.Failed.ToString()
};
SendPerceptionAnalyticsEvent(k_EventRunInUnitySimulation, data);
}
public static void ReportRunInUnitySimulationSucceeded(Guid runId, string runExecutionId)
{
if (!TryRegisterPerceptionAnalyticsEvent(k_EventRunInUnitySimulation))
return;
var data = new RunInUnitySimulationData
{
runId = runId.ToString(),
runExecutionId = runExecutionId,
runStatus = RunStatus.Succeeded.ToString()
};
SendPerceptionAnalyticsEvent(k_EventRunInUnitySimulation, data);
}
#endregion
}
}

3
com.unity.perception/Runtime/PerceptionAnalytics.cs.meta


fileFormatVersion: 2
guid: 38657354e82b4c9b8370c9c55a39b1e3
timeCreated: 1629939608

360
com.unity.perception/Runtime/PerceptionAnalyticsStructs.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Unity.Simulation;
using UnityEngine.Assertions;
using UnityEngine.Perception.GroundTruth;
using UnityEngine.Perception.Randomization.Parameters;
using UnityEngine.Perception.Randomization.Randomizers;
using UnityEngine.Perception.Randomization.Samplers;
namespace UnityEngine.Perception.Analytics
{
#region Common
enum AnalyticsEventType
{
Runtime,
Editor,
RuntimeAndEditor
}
struct AnalyticsEvent
{
public string name { get; private set; }
public AnalyticsEventType type { get; private set; }
public int versionId { get; private set; }
public string prefix { get; private set; }
public AnalyticsEvent(string name, AnalyticsEventType type, int versionId, string prefix = "")
{
this.name = name;
this.type = type;
this.versionId = versionId;
this.prefix = prefix;
}
}
#endregion
#region Run In Unity Simulation
[Serializable]
enum RunStatus
{
Started,
Failed,
Succeeded
}
[Serializable]
struct RunInUnitySimulationData
{
public string runId;
public int totalIterations;
public int instanceCount;
public string existingBuildId;
public string errorMessage;
public string runExecutionId;
public string runStatus;
}
#endregion
#region Scenario Information
[Serializable]
public class PerceptionCameraData
{
public string captureTriggerMode;
// same as "firstCaptureFrame" of the Perception Camera
public int startAtFrame;
public int framesBetweenCaptures;
}
[Serializable]
public class LabelerData
{
public string name;
public int labelConfigCount;
public string objectFilter = "";
public int animationPoseCount;
public static LabelerData FromLabeler(CameraLabeler labeler)
{
var labelerType = labeler.GetType();
var labelerName = labelerType.Name;
if (!PerceptionAnalytics.labelerAllowList.Contains(labelerName))
return null;
var labelerData = new LabelerData()
{
name = labelerName
};
switch (labeler)
{
case BoundingBox3DLabeler bb3dl:
labelerData.labelConfigCount = bb3dl.idLabelConfig.labelEntries.Count;
break;
case BoundingBox2DLabeler bb2dl:
labelerData.labelConfigCount = bb2dl.idLabelConfig.labelEntries.Count;
break;
case InstanceSegmentationLabeler isl:
labelerData.labelConfigCount = isl.idLabelConfig.labelEntries.Count;
break;
case KeypointLabeler kpl:
labelerData.labelConfigCount = kpl.idLabelConfig.labelEntries.Count;
labelerData.objectFilter = kpl.objectFilter.ToString();
labelerData.animationPoseCount = kpl.animationPoseConfigs.Count;
break;
case ObjectCountLabeler ocl:
labelerData.labelConfigCount = ocl.labelConfig.labelEntries.Count;
break;
case SemanticSegmentationLabeler ssl:
labelerData.labelConfigCount = ssl.labelConfig.labelEntries.Count;
break;
case RenderedObjectInfoLabeler rol:
labelerData.labelConfigCount = rol.idLabelConfig.labelEntries.Count;
break;
default:
labelerData = null;
break;
}
return labelerData;
}
}
[Serializable]
public class MemberData
{
public string name;
public string value;
public string type;
}
[Serializable]
public class ParameterField
{
public string name;
public string distribution;
public float value;
public float rangeMinimum;
public float rangeMaximum;
public float mean;
public float stdDev;
public int categoricalParameterCount;
public static ParameterField ExtractSamplerInformation(ISampler sampler, string fieldName = "value")
{
switch (sampler)
{
case AnimationCurveSampler _:
return new ParameterField()
{
name = fieldName,
distribution = "AnimationCurve"
};
case ConstantSampler cs:
return new ParameterField()
{
name = fieldName,
distribution = "Constant",
value = cs.value
};
case NormalSampler ns:
return new ParameterField()
{
name = fieldName,
distribution = "Normal",
mean = ns.mean,
stdDev = ns.standardDeviation,
rangeMinimum = ns.range.minimum,
rangeMaximum = ns.range.maximum
};
case UniformSampler us:
return new ParameterField()
{
name = fieldName,
distribution = "Uniform",
rangeMinimum = us.range.minimum,
rangeMaximum = us.range.maximum
};
default:
return null;
}
}
public static List<ParameterField> ExtractSamplersInformation(IEnumerable<ISampler> samplers, IEnumerable<string> indexToNameMapping)
{
var samplersList = samplers.ToList();
var indexToNameMappingList = indexToNameMapping.ToList();
if (samplersList.Count > indexToNameMappingList.Count)
throw new Exception("Insufficient names provided for mapping ParameterFields");
return samplersList.Select((t, i) => ExtractSamplerInformation(t, indexToNameMappingList[i])).ToList();
}
}
[Serializable]
public class ParameterData
{
public string name;
public string type;
public List<ParameterField> fields;
}
[Serializable]
public class RandomizerData
{
public string name;
public MemberData[] members;
public ParameterData[] parameters;
public static RandomizerData FromRandomizer(Randomizer randomizer)
{
if (randomizer == null)
return null;
var data = new RandomizerData()
{
name = randomizer.GetType().Name,
};
var randomizerType = randomizer.GetType();
// Filter out randomizers which could be considered personally identifiable.
if (randomizerType.Namespace == null || !randomizerType.Namespace.StartsWith("UnityEngine.Perception"))
return null;
// Naming configuration
var vectorFieldNames = new[] { "x", "y", "z", "w" };
var hsvaFieldNames = new[] { "hue", "saturation", "value", "alpha" };
var rgbFieldNames = new[] { "red", "green", "blue" };
// Add member fields and parameters separately
var members = new List<MemberData>();
var parameters = new List<ParameterData>();
foreach (var field in randomizerType.GetFields(BindingFlags.Public | BindingFlags.Instance))
{
var member = field.GetValue(randomizer);
var memberType = member.GetType();
// If member is either a categorical or numeric parameter
if (memberType.IsSubclassOf(typeof(Parameter)))
{
var pd = new ParameterData()
{
name = field.Name,
type = memberType.Name,
fields = new List<ParameterField>()
};
// All included parameter types
switch (member)
{
case CategoricalParameterBase cp:
pd.fields.Add(new ParameterField()
{
name = "values",
distribution = "Categorical",
categoricalParameterCount = cp.probabilities.Count
});
break;
case BooleanParameter bP:
pd.fields.Add(ParameterField.ExtractSamplerInformation(bP.value));
break;
case FloatParameter fP:
pd.fields.Add(ParameterField.ExtractSamplerInformation(fP.value));
break;
case IntegerParameter iP:
pd.fields.Add(ParameterField.ExtractSamplerInformation(iP.value));
break;
case Vector2Parameter v2P:
pd.fields.AddRange(ParameterField.ExtractSamplersInformation(v2P.samplers, vectorFieldNames));
break;
case Vector3Parameter v3P:
pd.fields.AddRange(ParameterField.ExtractSamplersInformation(v3P.samplers, vectorFieldNames));
break;
case Vector4Parameter v4P:
pd.fields.AddRange(ParameterField.ExtractSamplersInformation(v4P.samplers, vectorFieldNames));
break;
case ColorHsvaParameter hsvaP:
pd.fields.AddRange(ParameterField.ExtractSamplersInformation(hsvaP.samplers, hsvaFieldNames));
break;
case ColorRgbParameter rgbP:
pd.fields.AddRange(ParameterField.ExtractSamplersInformation(rgbP.samplers, rgbFieldNames));
break;
}
parameters.Add(pd);
}
else
{
members.Add(new MemberData()
{
name = field.Name,
type = memberType.FullName,
value = member.ToString()
});
}
}
data.members = members.ToArray();
data.parameters = parameters.ToArray();
return data;
}
}
[Serializable]
public class ScenarioCompletedData
{
public string platform;
public PerceptionCameraData perceptionCamera;
public LabelerData[] labelers;
public RandomizerData[] randomizers;
internal static ScenarioCompletedData FromCameraAndRandomizers(
PerceptionCamera cam,
IEnumerable<Randomizer> randomizers
)
{
var data = new ScenarioCompletedData()
{
platform = (Configuration.Instance.IsSimulationRunningInCloud()) ? "USim": Application.platform.ToString()
};
if (cam != null)
{
// Perception Camera Data
data.perceptionCamera = new PerceptionCameraData()
{
captureTriggerMode = cam.captureTriggerMode.ToString(),
startAtFrame = cam.firstCaptureFrame,
framesBetweenCaptures = cam.framesBetweenCaptures
};
// Labeler Data
data.labelers = cam.labelers
.Select(LabelerData.FromLabeler)
.Where(labeler => labeler != null).ToArray();
}
var randomizerList = randomizers.ToArray();
if (randomizerList.Any())
{
data.randomizers = randomizerList
.Select(RandomizerData.FromRandomizer)
.Where(x => x != null).ToArray();
}
else
{
data.randomizers = new RandomizerData[] { };
}
return data;
}
}
#endregion
}

3
com.unity.perception/Runtime/PerceptionAnalyticsStructs.cs.meta


fileFormatVersion: 2
guid: 78500bfc6066482ca6af77c3586dcbd2
timeCreated: 1632680191

725
com.unity.perception/Documentation~/Tutorial/Images/did_visualizer_open.png

之前 之后
宽度: 656  |  高度: 754  |  大小: 186 KiB

1001
com.unity.perception/Documentation~/Tutorial/Images/visualizer_sample_synthdet.png
文件差异内容过多而无法显示
查看文件

119
com.unity.perception/Documentation~/Tutorial/DatasetInsights.md


# Verifying and Analyzing Perception Datasets with Dataset Insights
Unity's [Datasets Insights](https://github.com/Unity-Technologies/datasetinsights) is a Python package that provides a variety of tools for downloading, processing, and analyzing datasets generated using the Perception package. In addition to a Python library, the package comes with a sample Jupyter notebook that helps you load datasets and verify some of their most commonly needed statistics.
In this guide, we will go through the steps involved in opening Perception datasets and verifying them using the provided Jupyter notebook. This includes both datasets that are generated locally and those generated with Unity Simulation. To learn how to generate datasets locally follow [Phase 1](Tutorial/../Phase1.md) of the Perception Tutorial. For the Unity Simulation workflow, follow [Phase 3](Tutorial/../Phase3.md) of the tutorial.
* **:green_circle: Action**: Download and install [Docker Desktop](https://www.docker.com/products/docker-desktop)
## Locally generated datasets
* **:green_circle: Action**: Open a command line interface (Command Prompt on Windows, Terminal on Mac OS, etc.) and type the following command to run the Dataset Insights Docker image:
`docker run -p 8888:8888 -v <path to synthetic data>:/data -t unitytechnologies/datasetinsights:latest`, where the path to data is what we looked at earlier. You can copy the path using the _**Copy Path**_ button in the `Perception Camera` UI.
> :information_source: If you get an error about the format of the command, try the command again **with quotation marks** around the folder mapping argument, i.e. `"<path to synthetic data>:/data"`.
This will download a Docker image from Unity. If you get an error regarding the path to your dataset, make sure you have not included the enclosing `<` and `>` in the path and that the spaces are properly escaped.
* **:green_circle: Action**: The image is now running on your computer. Open a web browser and navigate to `http://localhost:8888` to open the Jupyter notebook:
<p align="center">
<img src="Images/jupyter1.png" width="800"/>
</p>
* **:green_circle: Action**: To make sure your data is properly mounted, navigate to the `data` folder. If you see the dataset's folders there, we are good to go.
* **:green_circle: Action**: Navigate to the `datasetinsights/notebooks` folder and open `Perception_Statistics.ipynb`.
* **:green_circle: Action**: Once in the notebook, remove the `/<GUID>` part of the `data_root = /data/<GUID>` path. Since the dataset root is already mapped to `/data`, you can use this path directly.
<p align="center">
<img src="Images/jupyter2.png" width="800"/>
</p>
This notebook contains a variety of functions for generating plots, tables, and bounding box images that help you analyze your generated dataset. Certain parts of this notebook are currently not of use to us, such as the code meant for downloading data generated through Unity Simulation (coming later in this tutorial).
Each of the code blocks in this notebook can be executed by clicking on them to select them, and then clicking the _**Run**_ button at the top of the notebook. When you run a code block, an **asterisk (\*)** will be shown next to it on the left side, until the code finishes executing.
Below, you can see a sample plot generated by the Dataset Insights notebook, depicting the number of times each of the 10 foreground objects appeared in the dataset. As shown in the histogram, there is a high level of uniformity between the labels, which is a desirable outcome.
<p align="center">
<img src="Images/object_count_plot.png" width="600"/>
</p>
* **:green_circle: Action**: Follow the instructions laid out in the notebook and run each code block to view its outputs.
## Datasets generated with Unity Simulation
For these datasets we recommend using a slightly different command to open the notebook, as we do not need to mount a specific dataset folder. Instead, we mount a folder which will hold our downloaded datasets.
* **:green_circle: Action**: Open the notebook using the command below:
`docker run -p 8888:8888 -v <download path>/data:/data -t unitytechnologies/datasetinsights:latest`
In the above command, replace `<download path>` with the location on your computer in which you wish to download your data.
Once the Docker image is running, the rest of the workflow is quite similar to what we did for locally generated data. The only difference is that we need to uncomment certain lines of code from the notebook to download the dataset.
* **:green_circle: Action**: Open a web browser and navigate to `http://localhost:8888` to open the notebook.
* **:green_circle: Action**: Navigate to the `datasetinsights/notebooks` folder and open `Perception_Statistics.ipynb`.
* **:green_circle: Action**: In the `data_root = /data/<GUID>` line, the `<GUID>` part will be the location inside your `<download path>` where the data will be downloaded. Therefore, you can just remove it so as to have data downloaded directly to the path you previously specified:
<p align="center">
<img src="Images/di_usim_1.png" width="900"/>
</p>
* **:green_circle: Action**: In the block of code titled "Unity Simulation [Optional]", uncomment the lines that assign values to variables, and insert the correct values, based on information from your Unity Simulation run.
We have previously learned how to obtain the `run_execution_id` and `project_id`. You can remove the value already present for `annotation_definition_id` and leave it blank. What's left is the `access_token`.
* **:green_circle: Action**: Return to your command-line interface and run the `usim inspect auth` command.
MacOS:
`USimCLI/mac/usim inspect auth`
If you receive errors regarding authentication, your token might have timed out. Repeat the login step (`usim login auth`) to login again and fix this issue.
A sample output from `usim inspect auth` will look like below:
```
Protect your credentials. They may be used to impersonate your requests.
access token: Bearer 0CfQbhJ6gjYIHjC6BaP5gkYn1x5xtAp7ZA9I003fTNT1sFp
expires in: 2:00:05.236227
expired: False
refresh token: FW4c3YRD4IXi6qQHv3Y9W-rwg59K7k0Te9myKe7Zo6M003f.k4Dqo0tuoBdf-ncm003fX2RAHQ
updated: 2020-10-02 14:50:11.412979
```
The `access_token` you need for your Dataset Insights notebook is the access token shown by the above command, minus the `'Bearer '` part. So, in this case, we should copy `0CfQbhJ6gjYIHjC6BaP5gkYn1x5xtAp7ZA9I003fTNT1sFp` into the notebook.
* **:green_circle: Action**: Copy the access token excluding the `'Bearer '` part to the corresponding field in the notebook.
Once you have entered all the information, the block of code should look like the screenshot below (the actual values you input will be different):
<p align="center">
<img src="Images/di_usim_2.png" width="800"/>
</p>
* **:green_circle: Action**: Continue to the next code block and run it to download all the metadata files from the generated dataset. This includes JSON files and logs but does not include images (which will be downloaded later).
You will see a progress bar while the data downloads:
<p align="center">
<img src="Images/di_usim_3.png" width="800"/>
</p>
The next couple of code blocks (under "Load dataset metadata") analyze the downloaded metadata and display a table containing annotation-definition-ids for the various metrics defined in the dataset.
* **:green_circle: Action**: Once you reach the code block titled "Built-in Statistics", make sure the value assigned to the field `rendered_object_info_definition_id` matches the id displayed for this metric in the table output by the code block immediately before it. The screenshot below demonstrates this (note that your ids might differ from the ones here):
<p align="center">
<img src="Images/di_usim_4.png" width="800"/>
</p>
Follow the rest of the steps inside the notebook to generate a variety of plots and stats.
Keep in mind that this notebook is provided just as an example, and you can modify and extend it according to your own needs using the tools provided by the [Dataset Insights framework](https://datasetinsights.readthedocs.io/en/latest/).

8
TestProjects/PerceptionHDRP/Assets/Scenes/SampleScene.meta


fileFormatVersion: 2
guid: 26f408242584f494cae23179f77b81ad
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

63
TestProjects/PerceptionHDRP/Assets/Scenes/PoseSampleSettings.lighting


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!850595691 &4890085278179872738
LightingSettings:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: PoseSampleSettings
serializedVersion: 2
m_GIWorkflowMode: 0
m_EnableBakedLightmaps: 0
m_EnableRealtimeLightmaps: 1
m_RealtimeEnvironmentLighting: 1
m_BounceScale: 1
m_AlbedoBoost: 1
m_IndirectOutputScale: 1
m_UsingShadowmask: 1
m_BakeBackend: 1
m_LightmapMaxSize: 1024
m_BakeResolution: 40
m_Padding: 2
m_TextureCompression: 1
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAO: 0
m_MixedBakeMode: 2
m_LightmapsBakeMode: 1
m_FilterMode: 1
m_LightmapParameters: {fileID: 0}
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_RealtimeResolution: 2
m_ForceWhiteAlbedo: 0
m_ForceUpdates: 0
m_FinalGather: 0
m_FinalGatherRayCount: 256
m_FinalGatherFiltering: 1
m_PVRCulling: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVREnvironmentSampleCount: 500
m_PVREnvironmentReferencePointCount: 2048
m_LightProbeSampleCountMultiplier: 4
m_PVRBounces: 2
m_PVRRussianRouletteStartBounce: 2
m_PVREnvironmentMIS: 0
m_PVRFilteringMode: 2
m_PVRDenoiserTypeDirect: 0
m_PVRDenoiserTypeIndirect: 0
m_PVRDenoiserTypeAO: 0
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1

8
TestProjects/PerceptionHDRP/Assets/Scenes/PoseSampleSettings.lighting.meta


fileFormatVersion: 2
guid: eb57ebdf6f5d99d6fbce6972a2916ca8
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

8
TestProjects/PerceptionHDRP/Assets/Scenes.meta


fileFormatVersion: 2
guid: 98cfbce5bd48d9d4d99e5c8b8a1ee97b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
TestProjects/PerceptionHDRP/Assets/StreamingAssets.meta


fileFormatVersion: 2
guid: 253c8b404a216fa4898bcc0fcc5c58b1
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

3
TestProjects/PerceptionHDRP/Assets/Terrain Data.asset
文件差异内容过多而无法显示
查看文件

8
TestProjects/PerceptionHDRP/Assets/Terrain Data.asset.meta


fileFormatVersion: 2
guid: 15ded0116bd9f864f80b9813d4f4477f
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

8
TestProjects/PerceptionHDRP/Assets/Resources.meta


fileFormatVersion: 2
guid: 84124422de45a3326b14584597f95f58
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

7
TestProjects/PerceptionURP/Assets/Prefabs/KeypointCube.prefab.meta


fileFormatVersion: 2
guid: da3b4cd41011c1b488592ed975cbb467
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

521
TestProjects/PerceptionURP/Assets/Prefabs/KeypointCube.prefab


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3710685713387292134
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3710685713387292135}
- component: {fileID: 3710685713387292152}
m_Layer: 0
m_Name: FrontBottomRight
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3710685713387292135
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685713387292134}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.628, y: 0.031000003, z: -0.7900001}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3710685714995308720}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3710685713387292152
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685713387292134}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- FrontBottomRight
selfOcclusionDistanceSource: 0
selfOcclusionDistance: 0.1
--- !u!1 &3710685714022253438
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3710685714022253439}
- component: {fileID: 3710685714022253424}
m_Layer: 0
m_Name: BackBottomRight
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3710685714022253439
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714022253438}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.628, y: 0.031000003, z: -0.997}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3710685714995308720}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3710685714022253424
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714022253438}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- BackBottomRight
selfOcclusionDistanceSource: 0
selfOcclusionDistance: 0.1
--- !u!1 &3710685714250655251
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3710685714250655252}
- component: {fileID: 3710685714250655253}
m_Layer: 0
m_Name: BackTopRight
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3710685714250655252
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714250655251}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.628, y: 1.031, z: -0.997}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3710685714995308720}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3710685714250655253
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714250655251}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- BackTopRight
selfOcclusionDistanceSource: 0
selfOcclusionDistance: 0.1
--- !u!1 &3710685714462346527
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3710685714462346512}
- component: {fileID: 3710685714462346513}
m_Layer: 0
m_Name: FrontTopLeft
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3710685714462346512
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714462346527}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.925, y: 1.031, z: -0.7900001}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3710685714995308720}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3710685714462346513
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714462346527}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- FrontTopLeft
selfOcclusionDistanceSource: 0
selfOcclusionDistance: 0.08
--- !u!1 &3710685714481788901
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3710685714481788902}
- component: {fileID: 3710685714481788903}
m_Layer: 0
m_Name: BackBottomLeft
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3710685714481788902
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714481788901}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.925, y: 0.031000003, z: -0.997}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3710685714995308720}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3710685714481788903
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714481788901}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- BackBottomLeft
selfOcclusionDistanceSource: 0
selfOcclusionDistance: 0.08
--- !u!1 &3710685714524957768
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3710685714524957769}
- component: {fileID: 3710685714524957770}
m_Layer: 0
m_Name: FrontTopRight
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3710685714524957769
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714524957768}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.628, y: 1.031, z: -0.7900001}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3710685714995308720}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3710685714524957770
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714524957768}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- FrontTopRight
selfOcclusionDistanceSource: 0
selfOcclusionDistance: 0.1
--- !u!1 &3710685714572991348
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3710685714572991349}
- component: {fileID: 3710685714572991350}
m_Layer: 0
m_Name: BackTopLeft
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3710685714572991349
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714572991348}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.925, y: 1.031, z: -0.997}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3710685714995308720}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3710685714572991350
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714572991348}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- BackTopLeft
selfOcclusionDistanceSource: 0
selfOcclusionDistance: 0.08
--- !u!1 &3710685714995308732
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3710685714995308720}
- component: {fileID: 3710685714995308721}
m_Layer: 0
m_Name: KeypointCube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3710685714995308720
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714995308732}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1.02, z: 1}
m_Children:
- {fileID: 3710685714462346512}
- {fileID: 3710685714524957769}
- {fileID: 3710685715225028278}
- {fileID: 3710685713387292135}
- {fileID: 3710685714572991349}
- {fileID: 3710685714250655252}
- {fileID: 3710685714481788902}
- {fileID: 3710685714022253439}
- {fileID: 3493035157377133359}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3710685714995308721
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685714995308732}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b33f0bc2b78db642a758f07826d0dd0, type: 3}
m_Name:
m_EditorClassIdentifier:
labels:
- Crate
useAutoLabeling: 0
autoLabelingSchemeType:
--- !u!1 &3710685715225028277
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3710685715225028278}
- component: {fileID: 3710685715225028279}
m_Layer: 0
m_Name: FrontBottomLeft
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3710685715225028278
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685715225028277}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.925, y: 0.031, z: -0.79}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 3710685714995308720}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3710685715225028279
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3710685715225028277}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8cf4fa374b134b1680755f8280ae8e7d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateInformation: []
labels:
- FrontBottomLeft
selfOcclusionDistanceSource: 0
selfOcclusionDistance: 0.08
--- !u!1 &7514402373830187968
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3493035157377133359}
- component: {fileID: 7334580722677551881}
- component: {fileID: 7437554014925818906}
m_Layer: 0
m_Name: Object
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3493035157377133359
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7514402373830187968}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.152, y: 0.528, z: -0.897}
m_LocalScale: {x: 1.559239, y: 1.0357355, z: 0.20697539}
m_Children: []
m_Father: {fileID: 3710685714995308720}
m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &7334580722677551881
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7514402373830187968}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
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: 31321ba15b8f8eb4c954353edc038b1d, 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: 1
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!33 &7437554014925818906
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7514402373830187968}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}

3
com.unity.perception/Editor/Randomization/Editors/PerceptionEditorAnalytics.cs.meta


fileFormatVersion: 2
guid: 3216e9e700a34acc8ac808ffccb8297c
timeCreated: 1607709612

部分文件因为文件数量过多而无法显示

正在加载...
取消
保存