internal static void ExtractPlanes(PlaneExtractionSettings settings)
        {
            using (var undoBlock = new UndoBlock("Extract Planes"))
            {
                var prefabRoot = settings.gameObject;
                undoBlock.RecordObject(prefabRoot);
                var voxelGenerationParams = settings.VoxelGenerationParams;
                var planeExtractionParams = settings.PlaneFindingParams;
                var voxelSize             = voxelGenerationParams.voxelSize;
                if ((int)(planeExtractionParams.minPointsPerSqMeter * (voxelSize * voxelSize)) <= 0)
                {
                    Debug.LogWarning("Minimum points per voxel is not greater than 0. " +
                                     "Increase either the voxel size or the minimum points per square meter.");
                    return;
                }

                if (!PlaneGenerationModule.TryDestroyPreviousPlanes(prefabRoot, "Extracting Planes", undoBlock))
                {
                    return;
                }

                GenerateVoxelGrids(prefabRoot, voxelGenerationParams, planeExtractionParams);
                FindPlanesInGrids(prefabRoot, undoBlock);
            }
        }
        static void FindPlanesInGrids(GameObject prefabRoot, UndoBlock undoBlock)
        {
            k_ExtractedPlanes.Clear();
            s_UpVoxelGrid.ExtractPlanes(k_ExtractedPlanes);
            s_DownVoxelGrid.ExtractPlanes(k_ExtractedPlanes);
            s_ForwardVoxelGrid.ExtractPlanes(k_ExtractedPlanes);
            s_BackVoxelGrid.ExtractPlanes(k_ExtractedPlanes);
            s_RightVoxelGrid.ExtractPlanes(k_ExtractedPlanes);
            s_LeftVoxelGrid.ExtractPlanes(k_ExtractedPlanes);

            var planesRoot     = PlaneGenerationModule.CreateGeneratedPlanesRoot(prefabRoot.transform, undoBlock);
            var simPlanePrefab = MarsObjectCreationResources.instance.GeneratedSimulatedPlanePrefab;

            foreach (var plane in k_ExtractedPlanes)
            {
                var synthPlane = UnityObject.Instantiate(simPlanePrefab, planesRoot);
                synthPlane.transform.SetWorldPose(plane.pose);
                synthPlane.SetMRPlaneData(plane.vertices, plane.center, plane.extents);
            }

            planesRoot.gameObject.SetLayerRecursively(SimulationConstants.SimulatedEnvironmentLayerIndex);
        }