Вы не можете сделать это, если оригинал имеет полностью прозрачную форму - по причинам - но вы можете сделать это, начиная с почти полностью прозрачной формы оригинала и заканчивая полностью прозрачной формой, окруженной нормальной тенью.
Нарисуйте свои фигуры с непрозрачностью 1%.Когда вы вытягиваете их в фильтр, умножьте их альфа на 100, используя цветовую матрицу - и используйте это в качестве основы для вашей тени.Вы не будете использовать исходную форму непрозрачности 1% в своей окончательной версии, потому что если вы используете оператор «out» - это отбрасывает содержимое всего, что перекрывается с исходной (обработанной) формой.
svg {
background: #33D;
}
<svg width="500px" height="400px">
<defs>
<filter id="trans-shadow">
<feColorMatrix type="matrix" values="1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 100 0"
result="boostedInput"/>
<feGaussianBlur stdDeviation="5"/>
<feComposite operator="out" in2="boostedInput"/>
</filter>
</defs>
<circle filter="url(#trans-shadow)" x="100" y="100" r="050" cx="150" cy="150" fill="black" fill-opacity="0.01" />
</svg>
Я предполагаю, что эти формы не всегда затенены, поэтому вы хотите, чтобы их версии без затенения были максимально прозрачными.Если эти фигуры никогда не отображаются без тени, то вы можете пропустить шаг и просто нарисовать эти фигуры черным цветом, а затем использовать "out", чтобы отбросить их.Вот так:
svg {
background: #33D;
}
<svg width="500px" height="400px">
<defs>
<filter id="trans-shadow">
<feGaussianBlur stdDeviation="5"/>
<feComposite operator="out" in2="SourceGraphic"/>
</filter>
</defs>
<circle filter="url(#trans-shadow)" x="100" y="100" r="050" cx="150" cy="150" fill="black" />
</svg>