I’m assuming this is going to always be an issue, because interpolation, floating points and so on. But it would be neat if you could have areas that are completely adjacent to each other that — when filled with the same color — show as completely filled without gaps. Here I’m trying to make a heart container from Zelda that I’m trying to prep for Variable Color. You can see the rendering gap around on the inside of the outline and the horizontal center.
Definitely not a biggie, and I’m going to work around it with a gap between the containers.
Would you mind sharing that file with me, that I can use as a test case? (It’s not the same one as the one you shared for the top-of-heart bug, right?)
Sent it to you with e-mail again.
I’m having a bit of trouble working out the correct thing to do here.
The issue is that adjacent shapes are anti-aliased separately when rendererd, producing the hairline gap. In your test file we have two situations:
-
in the primary variant, you’ve got a filled shape with an ‘outside’ stroke. Since the fill colour is different to the stroke colour in hierarchical mode (but the same colour in monochrome), they have to be separate SF Symbol layers on export. Thus, in monochrome, the stroke and fill are anti-aliased separately and produce hairlines.
-
In the “containers.edgetoedge” variant, the four quadrants also have to export as separate layers, because that’s how the “variable rendering” gets applied. So we have the same issue with anti-aliasing producing a hairline.
For situations where one of the layers is fully opaque in every mode (eg the stroke of your heart in the primary variant), I could do something like expand the fill slightly so the edge sits under the stroke. However, suppose the stroke and fill were both transparent colours (eg secondary and tertiary respectively), this wouldn’t work as it’d make an even more obvious line.
For the heart quarters, given that in hierarchical mode they’re all secondary, I also can’t modify the geometry to add an overlap, without the join becoming even more obvious. And I can’t union them on export, because that’d break the variable rendering.
I don’t think I can do anything to minimise the impact of anti-aliasing, since we don’t know what pixel size the user is going to render the symbols at.
If you have any suggestions on how I could help here, I’m all ears!
No, I don’t have any suggestions on how to go here. I suspected this would be unsolvable, precisely because hairline like this are very common in edge to edge renderings.
I’d keep it as is. I think people that are very deep into this stuff will accept such a limitation.