public override float IntensityAt(Vector3 position, Vector3 surfaceNormal, Scene scene, out Color color) { color = _color; Vector3 direction = position - _position; float distance = direction.Length(); var ray = new Ray(_position, direction); bool visible = scene.IsVisible(ray, distance); if (!visible) return 0; float intensity = _intensity * _rangeSquared / (_rangeSquared + distance * distance); float normalAdjustedIntensity = intensity * Vector3.Dot(surfaceNormal, Vector3.Zero - direction.Normalized()); return Math.Max(normalAdjustedIntensity, 0); }