An alpha matte and a feathered mask
A soft-edged shape cut from a layer: mask-image with a gradient from opaque to transparent, whose width is the feather; a disc here, grown by a maskSize track until it clears the frame.
For any other shape with a feather, an SVG image is the mask, with the shape blurred by a filter inside the image, since a filter works in an image used this way, where an SVG <mask> referenced by id is not drawn in a render.
.disc { mask-image: radial-gradient(circle, #000 40%, transparent 70%); mask-position: center; mask-repeat: no-repeat; }
.cut { mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='b'><feGaussianBlur stdDeviation='10'/></filter><path d='M 30 100 L 100 20 L 170 100 L 100 180 Z' fill='white' filter='url(%23b)'/></svg>");
mask-size: 100% 100%; }
scene('iris', {
keyframes: {
disc: { maskSize: { at: [0.3, 1.5], to: ['20% 20%', '300% 300%'], ease: 'power2.in' } },
},
});
No demo uses this pattern yet.