Optimizing lighting algorithm for a voxel engine
Building upon Vadym's answer - the vector instantiation could probably be eliminated entirely.  It appears they are only created to provide nice groupings of x,y,z coordinates, as they are only ever referenced by pulling the x,y,z values back out.

If performance is really an issue, I would suggest keeping individual values instead for xincreasing, xdecreasing, etc. and using those.  It saves on the object creation and the property getter calls. (edit: and, to me at least, it is a little easier to read)

public void DoLight(int x, int y, int z, float light)
{
    int xDecreasing = x - 1;
    int xIncreasing = x + 1;
    int yDecreasing = y - 1;
    int yIncreasing = y + 1;
    int zDecreasing = z - 1;
    int zIncreasing = z + 1;

    if (light &gt; 0)
    {
        light--;

        world.SetLight(x, y, z, (int)light);
        Blocks.Add(new Vector3(x, y, z));

        if (world.GetLight(x, yDecreasing, z) &lt; light &amp;&amp;
            !world.GetBlock(x, yDecreasing, z).IsSolid &amp;&amp;
            world.InBounds(x, yDecreasing, z))
            DoLight(x, yDecreasing, z, light);
        if (world.GetLight(x, yIncreasing, z) &lt; light &amp;&amp;
            !world.GetBlock(x, yIncreasing, z).IsSolid &amp;&amp;
            world.InBounds(x, yIncreasing, z))
            DoLight(x, yIncreasing, z, light);
        if (world.GetLight(xDecreasing, y, z) &lt; light &amp;&amp;
            !world.GetBlock(xDecreasing, y, z).IsSolid &amp;&amp;
            world.InBounds(xDecreasing, y, z))
            DoLight(xDecreasing, y, z, light);
        if (world.GetLight(xIncreasing, y, z) &lt; light &amp;&amp;
            !world.GetBlock(xIncreasing, y, z).IsSolid &amp;&amp;
            world.InBounds(xIncreasing, y, z))
            DoLight(xIncreasing, y, z, light);
        if (world.GetLight(x, y, zDecreasing) &lt; light &amp;&amp;
            !world.GetBlock(x, y, zDecreasing).IsSolid &amp;&amp;
            world.InBounds(x, y, zDecreasing))
            DoLight(x, y, zDecreasing, light);
        if (world.GetLight(x, y, zIncreasing) &lt; light &amp;&amp;
            !world.GetBlock(x, y, zIncreasing).IsSolid &amp;&amp;
            world.InBounds(x, y, zIncreasing))
            DoLight(x, y, zIncreasing, light);
    }
}