<svg id="svg-root" width="100%" height="100%"
  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs>
      <filter id="light-primobjbbox" primitiveUnits="objectBoundingBox">
          <feSpecularLighting lighting-color="blue" surfaceScale="5" specularConstant="10" specularExponent="6">
            <!-- Note: for z this assumes that the scalefactor is 
                       sqrt(bbox.width*bbox.width + bbox.height*bbox.height)/sqrt(2) -->
            <fePointLight x="0.5" y="0.5" z="-0.0625"/>
          </feSpecularLighting>
          <feComposite operator="in" in2="SourceGraphic"/>
      </filter>
    </defs>

      <circle r="50" cx="50" cy="50" stroke-width="10" filter="url(#light-primobjbbox)" fill="black"/>
      <circle r="50" cx="100" cy="100" stroke-width="10" filter="url(#light-primobjbbox)" fill="black"/>
      <circle r="50" cx="100" cy="200" stroke-width="10" filter="url(#light-primobjbbox)" fill="black"/>
      <circle r="50" cx="100" cy="300" stroke-width="10" filter="url(#light-primobjbbox)" fill="black"/>
</svg>
