I was pointed to here from a duplicate thread. There, I did some rambling about GLSL math that could be used to implement this sort of feature in WebGL. Reposting it here: This would be yet another thing that could get done if Roll20 had that Canvas/WebGL developer they've been looking for. It wouldn't be too hard for them to do using some mathemagic with some lights in a GLSL shader. Just associate each light source with a color instead of using pure white light, then multiply the shaded pixel colors by the normalized light source color with scaling for dim light. In the case of areas where multiple light sources overlap, the light's colors are additive to each other. The darkvision is yet another thing that would be somewhat easy to do in a GLSL shader. Just have a boolean uniform (really a uint with a value of either 0 or 1) to turn it on or off. If it's on, then for pixels not in bright light, compute the grayscale color G for that pixel. Then let alpha = the dim lighting coefficient as a value in the range [0, 1], where 1 indicates bright light and 0 indicates darkness. Let C be the shaded color for that pixel. Finally, let the final color F = (1.0 - alpha) * G + C.