linebender / bevy_vello

An integration to render with Vello in Bevy game engine.
https://linebender.org/bevy_vello/
Apache License 2.0
117 stars 12 forks source link

SVG/Lottie: Some elements are drawn in wrong locations #28

Open johanhelsing opened 6 months ago

johanhelsing commented 6 months ago

Not sure if this is something known... short on time, sorry if it's a duplicate

rendered by bevy_vello: image

svg in inkscape: image

johanhelsing commented 6 months ago

to be clear it's the grass straws that are in the wrong locations image

simbleau commented 6 months ago

Good issue!

Bevy-Vello uses 2 backends for rendering.

Lottie: vellottie SVG: vello-svg

The Lottie is significantly further in development than the SVG counterpart and because SVG is a monster, there's still a lot of work to get the entire SVG spec working. I could prioritize the entire SVG spec, but that would take years.

A better solution is to provide a simplified SVG that doesn't use advanced features - e.g. Use a tool to translate strokes to paths, resolve relative transforms to absolute positions, etc.

Some ways to produce a simpler file:

I haven't found a perfect solution yet.

kristoff3r commented 6 months ago

I have a similar issue with a simpler file:

dead_player image

simbleau commented 6 months ago

I forgot to mention another technique I commonly do, if all else fails.

You can use the Lottiefiles.com tool to convert SVG to Lottie: https://lottiefiles.com/svg-to-lottie. The lottie backend is more mature as mentioned and should work better.

simbleau commented 6 months ago

I have a similar issue with a simpler file:

dead_player image

Please send the SVG string so I can see what SVG features are being used

kristoff3r commented 6 months ago

Wow github really wants to render it. I've uploaded it here: https://gist.github.com/kristoff3r/b1e510635363e95caa5511534277d6ba

simbleau commented 6 months ago

Wow github really wants to render it. I've uploaded it here: https://gist.github.com/kristoff3r/b1e510635363e95caa5511534277d6ba

If I was to guess, I think transform="rotate(-45)" isn't handled by vello-svg, but should be. I'll work on that.