Binary space partitioning with random offset

Hey guys!

I’m currently working on binary space partionioning. It works so far. Now I need to add a random offset to make the resulting grid more procedural looking. I’ve been trying a few different approaches, but non of them seem to work. I am using bounds for that.

Here’s the method that splits the bounds:

    private Tuple<Bounds, Bounds> SplitOne(Bounds bounds, GlobalConfig.SplitType splitType)
    {
        Bounds boundsOne, boundsTwo;

        float rnd;

        do
        {
            rnd = UnityEngine.Random.Range(-GlobalConfig.RandomSizeOffset, GlobalConfig.RandomSizeOffset);
        } while (rnd == 0);

        if (splitType == GlobalConfig.SplitType.Vertical)
        {
            boundsOne = new(
                new Vector3(bounds.center.x - bounds.size.x / 4f, bounds.center.y, bounds.center.z),
                new Vector3(bounds.size.x / 2f, bounds.size.y, bounds.size.z));

            boundsTwo = new(
                new Vector3(bounds.center.x + bounds.size.x / 4f, bounds.center.y, bounds.center.z),
                new Vector3(bounds.size.x / 2f, bounds.size.y, bounds.size.z));

            boundsOne.max = new(boundsOne.max.x + rnd, boundsOne.max.y, boundsOne.max.z);

            boundsTwo.min = new(boundsTwo.min.x - rnd, boundsTwo.min.y, boundsTwo.min.z);
        }
        else
        {
            boundsOne = new(
                new Vector3(bounds.center.x, bounds.center.y, bounds.center.z - bounds.size.z / 4f),
                new Vector3(bounds.size.x, bounds.size.y, bounds.size.z / 2f));

            boundsTwo = new(
                new Vector3(bounds.center.x, bounds.center.y, bounds.center.z + bounds.size.z / 4f),
                new Vector3(bounds.size.x, bounds.size.y, bounds.size.z / 2f));

            boundsOne.min = new(boundsOne.min.x, boundsOne.min.y, boundsOne.min.z - rnd);

            boundsTwo.max = new(boundsTwo.max.x, boundsTwo.max.y, boundsTwo.max.z - rnd);
        }

        return new(boundsOne, boundsTwo);
    }

And here is the result:

As you can see, they are offset, but not connected and overlap each other.
This is what it looks like if I remove the random offset:

Do you guys have an idea how I can use the random offset without them overlapping? Like so:
grafik
Image source: How to Use BSP Trees to Generate Game Maps

Any help would be appreciated!

I solved it by creating my own Room struct. Unity’s bounds recalculate all sides and the center everytime you change any field.