кароч, тривиальный алгоритм такой:
0. чистим стенсил отключаем backface culling, включаем стенсил тест, отключаем запись в глубину
1. цикл по всем источникам света
1.0. ставим inc wrap для front face, dec wrap для back для zfail если камера внутри объёма или zpass если вне его
1.1. отключаем запись в цвет, отключаем блендинг, включаем тест глубины
1.2. рендерим объём
1.3. включаем запись в цвет, аддитивный блендинг и отключаем тест глубины
1.4. переключаем стенсил в not equal значению которым чистили изначально и replace для stencil pass
1.5. считаем и выставляем scissor rect для объёма
1.6. рендерим fullscreen quad с шейдером шейдинга