Pour déclarer un filtre en SVG

Vous utilisez le tag "filter" et précisez unités et dimensions de la région concernée

<defs>
<filter id="MyFilter" filterUnits="userSpaceOnUse" x="0" y="0" width="400" height="400">
.........
</filter>
</defs>

Dans le tag "filter", vous mettez les primitives du filtres.
Vous pouvez redéfinir la région, donner un nom au résultat de l'application de la primitive ( result ), précisez les sources ( in et in2 attributs ) resultats d'autres primitives ou SourceGraphic, SourceAlpha, BackgroundImage, BackgroundAlpha, FillPaint, StrokePaint

Exemple:

<filter id="MyFilter" filterUnits="userSpaceOnUse" x="0" y="0" width="400" height="400">
    <feImage xlink:href='#MyImage' result='image'/>
    <feSpecularLighting id="fsl" lighting-color='white' result='spot' specularConstant ='1' specularExponent='16'> 
        <feSpotLight id='fsp' x='200' y='200' z='200' pointsAtX='200' pointsAtY='100' pointsAtZ='0' specularExponent='16' limitingConeAngle='45' />
    </feSpecularLighting>
    <feComposite id='fcp' in='image' in2='spot' operator="arithmetic" k1="0.5" k2="1" k3="1" k4="0"/>
</filter>

Dans cet exemple, nous avons 4 primitives pour créer un éclairage de l'image:
feImage transforme une image externe en "RGBA raster" et prend le nom de "image"
feSpecularLightning utilisant feSpotLight comme source lumineuse crée un "RGBA raster" nommé  "spot"
feComposite mixe les deux images ( "image" et "spot" )