private static SimulationSceneDescription CreateIncrementalClimbingScene()
        {
            int stepCount  = 4000;
            var structures = new IStructure[stepCount + 1];

            var flatGroundPos       = new Vector3(0.476771f, -4.8f, -2.61f);
            var flatGroundScale     = new Vector3(1000000f, 9.56f, 29.8f);
            var flatGroundTransform = new Transform(flatGroundPos, flatGroundScale);
            var flatGround          = new Ground(flatGroundTransform);

            // var groundPos = new Vector3(14.6f, -4.8f, -2.61f);
            // var groundScale = new Vector3(1000000, 30f, 29.8f);
            // var ground = new Ground(new Transform(groundPos, 45f, groundScale));

            structures[0] = flatGround;


            // var distanceMarkerSpawner = new DistanceMarkerSpawner(
            //     new Transform(new Vector3(-0.45f, 5.5f, 0), 45f),
            //     5f * Mathf.Sin((float)Math.PI * 0.25f),
            //     1f / Mathf.Sin((float)Math.PI * 0.25f)
            // );
            // structures[1] = distanceMarkerSpawner;

            var   spawnPosition = new Vector3(0.46f, 0.99243f, -1.8f);
            var   stepDistance  = 1.5f;
            float maxAngle      = Mathf.PI * 0.5f;
            int   maxAngleIndex = 500;

            var stepScale = new Vector3(3f, 3f, 30f);

            // spawnPosition -= spawnDistance * (stepCount / 2);
            spawnPosition += new Vector3(2, -2.5f);
            for (int i = 0; i < stepCount; i++)
            {
                float percentageOfMax = (float)Math.Min(i, maxAngleIndex) / maxAngleIndex;
                var   angle           = Mathf.Sin(percentageOfMax * maxAngle) * stepDistance;
                var   spawnDistance   = new Vector3(stepDistance, angle, 0);
                spawnPosition    += spawnDistance;
                structures[i + 1] = new Stairstep(new Transform(spawnPosition, 16f * (percentageOfMax - 0.2f), stepScale));
            }

            return(new SimulationSceneDescription {
                Version = 1,
                Structures = structures,
                DropHeight = 1f,
                CameraControlPoints = new [] {
                    new CameraControlPoint(0, 0, 0.11f),
                    new CameraControlPoint(50, 0.05f, 0.12f),
                    new CameraControlPoint(200, 0.4f, 0.14f),
                    new CameraControlPoint(1000, 2f, 0.4f)
                }
            });
        }
        private static SimulationSceneDescription CreateClimbingScene()
        {
            int stepCount  = 4000;
            var structures = new IStructure[stepCount + 2];

            var groundPos   = new Vector3(14.6f, -4.8f, -2.61f);
            var groundScale = new Vector3(1000000, 30f, 29.8f);
            var ground      = new Ground(new Transform(groundPos, 45f, groundScale));

            structures[0] = ground;

            var distanceMarkerSpawner = new DistanceMarkerSpawner(
                new Transform(new Vector3(-0.45f, 5.5f, 0), 45f),
                5f * Mathf.Sin((float)Math.PI * 0.25f),
                1f / Mathf.Sin((float)Math.PI * 0.25f)
                );

            structures[1] = distanceMarkerSpawner;

            var spawnPosition = new Vector3(0.46f, 0.99243f, -1.8f);
            var stepDistance  = 1.5f;
            var spawnDistance = new Vector3(stepDistance, Mathf.Sin(Mathf.PI / 2) * stepDistance, 0);
            var stepScale     = new Vector3(3f, 3f, 30f);

            spawnPosition -= spawnDistance * (stepCount / 2);
            for (int i = 0; i < stepCount; i++)
            {
                spawnPosition    += spawnDistance;
                structures[i + 2] = new Stairstep(new Transform(spawnPosition, -16f, stepScale));
            }

            return(new SimulationSceneDescription {
                Version = 1,
                Structures = structures,
                DropHeight = 1f,
                CameraControlPoints = new [] {
                    new CameraControlPoint(0, 9, 0.5f), new CameraControlPoint(1, 10, 0.5f)
                }
            });
        }