public void VisualizeVoxels <T>(
            Matrix4x4 vesselLocalToWorldMatrix,
            PartTint tint,
            DebugVoxelMesh voxelMesh,
            T builder
            ) where T : IDebugVoxelMeshBuilder <DebugVoxel>
        {
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    for (int k = 0; k < 8; k++)
                    {
                        PartSizePair pair = voxelPoints[i + 8 * j + 64 * k];
                        if (pair.part is null)
                        {
                            continue;
                        }
                        double elementSize = pair.GetSize();
                        if (elementSize > 1)
                        {
                            elementSize = 1;
                        }

                        elementSize *= _size * 0.5f;
                        var vx =
                            new DebugVoxel(vesselLocalToWorldMatrix.MultiplyPoint3x4(lowerCorner +
                                                                                     new Vector3d(i, j, k) * _size),
                                           (float)elementSize,
                                           tint.GetOrAdd(pair.part));
                        voxelMesh.Add(builder, vx);
                    }
                }
            }
        }
        public static DebugVoxelMesh Create(Transform parent = null)
        {
            var            go   = new GameObject("DebugVoxelMesh", typeof(DebugVoxelMesh));
            DebugVoxelMesh mesh = go.GetComponent <DebugVoxelMesh>();

            if (parent != null)
            {
                go.transform.SetParent(parent);
            }

            go.SetActive(true);
            return(mesh);
        }