private void gatherLights(ref CubeBuffer cube)
    {
        ps.lights = new Color[cube.pixels.Length];
        CubeBuffer.pixelCopy(ref ps.lights, 0, cube.pixels, 0, cube.pixels.Length);

        ps.lightCount = (ulong)ps.lights.LongLength;
        ulong faceSize = (ulong)cube.faceSize;

        ps.lightDirs = new DirLookup[ps.lightCount];
        Vector3 vec = new Vector3();

        for (ulong face = 0; face < 6; ++face)
        {
            for (ulong y = 0; y < faceSize; ++y)
            {
                for (ulong x = 0; x < faceSize; ++x)
                {
                    ulong i = face * faceSize * faceSize + y * faceSize + x;
                    Util.invCubeLookup(ref vec, ref ps.lightDirs[i].weight, face, x, y, faceSize);
                    ps.lights[i]          *= ps.lightDirs[i].weight;
                    ps.lightDirs[i].weight = 1f;
                    ps.lightDirs[i].x      = vec.x;
                    ps.lightDirs[i].y      = vec.y;
                    ps.lightDirs[i].z      = vec.z;
                }
            }
        }
    }