Ok, I just tried things out with a circular visibility modifier (every 0.5 seconds) and I encountered no lag. However, I think it would be more efficient just using the unit's sight radius against the fog-of-war to simulate a circle of light. It would certainly be more efficient if you could get away with it.
My test map simply created a footy in the middle of the map that you can move around. The sight range modifier followed him around.
Test code, for reference:
[jass]
function Trig_init_Actions takes nothing returns nothing
local location p1 = GetRectCenter(GetPlayableMapRect())
local location p2
call CreateNUnitsAtLoc( 1, 'hfoo', Player(0), p1, bj_UNIT_FACING )
set udg_footy = GetLastCreatedUnit()
set p2 = GetUnitLoc(udg_footy)
set udg_vmod = CreateFogModifierRadiusLocBJ( true, Player(0), FOG_OF_WAR_VISIBLE, p2, 2000.00 )
call RemoveLocation(p1)
set p1 = null
call RemoveLocation(p2)
set p2 = null
endfunction
//===========================================================================
function InitTrig_init takes nothing returns nothing
set gg_trg_init = CreateTrigger( )
call TriggerAddAction( gg_trg_init, function Trig_init_Actions )
endfunction
[/jass]
[jass]
function Trig_test_Actions takes nothing returns nothing
local location p = GetUnitLoc(udg_footy)
call DestroyFogModifier( udg_vmod )
set udg_vmod = CreateFogModifierRadiusLocBJ( true, Player(0), FOG_OF_WAR_VISIBLE, p, 2000.00 )
call RemoveLocation(p)
set p = null
endfunction
//===========================================================================
function InitTrig_test takes nothing returns nothing
set gg_trg_test = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_test, 0.50 )
call TriggerAddAction( gg_trg_test, function Trig_test_Actions )
endfunction
[/jass]
Using two variables:
udg_footy = unit
udg_vmod = visibility modifier
This is just test code, which is not really mean for use in a map. I'm just posting it here for reference.