Commit graph

179 commits

Author SHA1 Message Date
Hermet Park
2b32c24712 lottie: corrected drop-shadow handling
opacity value type should be float with range 0 ~ 256
2024-11-08 00:47:46 +09:00
Hermet Park
2ad6753680 lottie: support drop shadow effect
issue: https://github.com/thorvg/thorvg/issues/2153
issue: https://github.com/thorvg/thorvg/issues/2718
2024-11-06 00:56:11 +09:00
Hermet Park
c75ec0f333 lottie: code clean up 2024-11-01 22:44:39 +09:00
Jinny You
4f2e725da0 lottie/text: Support text alignment options
Introduced new properties:
- group alignment
- text grouping (words, line)

Issue: #2178
2024-11-01 22:11:45 +09:00
Mira Grudzinska
144fecc3a1 lottie: fix text range selector translation
Scaling the entire scene caused unintended scaling
of the translation in the text range selector.
2024-10-30 11:37:43 +09:00
Mira Grudzinska
d9be58d4b7 lottie: fix transformations in text range selector
Since the translate API was used while text updating,
the subsequent range selector transformations gets overwritten
when updating the shape (scale and rotate, adding another
translation will persist). This caused unexpected results.
Fixed by using the transform API when additional transformations
are needed - also fixes applying more than one range selector.
2024-10-29 11:23:22 +09:00
Mira Grudzinska
dfd7693158 lottie: offset does not depend on shape direction
According to tests in AE, the offset direction should
not depend on the direction of the shape. A positive
offset value expands the shape, while a negative value
contracts it. Fixed.
2024-10-18 18:02:35 +09:00
Hermet Park
f5af7b13a5 lottie: multiply opacity to the fill alpha value,
opacity of a shape may bring a composition
when it has both stroke and fill
2024-10-17 17:07:36 +09:00
Hermet Park
0a16152d75 api: renamed the composite with mask.
Since we've separated ClipPath and Masking,
Masking now has a distinct and independent purpose.

API Modification:
 - enum class CompositeMethod -> enum class MaskMethod
 - Result Paint::composite(std::unique_ptr<Paint> target, CompositeMethod method) -> Result Paint::mask(std::unique_ptr<Paint> target, MaskMethod method)
 - CompositeMethod Paint::mask(const Paint** target) const -> MaskMethod Paint::mask(const Paint** target) const

issue: https://github.com/thorvg/thorvg/issues/1372
2024-10-16 14:41:26 +09:00
Hermet Park
6a45e6e494 api: revise the api for v1.0
API Modification:
- Matrix Paint::transform() -> Matrix& Paint::transform()

issue: https://github.com/thorvg/thorvg/issues/1372
2024-10-14 17:22:20 +09:00
Mira Grudzinska
3fd095e947 lottie: add support for mask expansion
Implemented the mask attribute 'x' - expand mask.
Enforced rounded lines join according to tests in AE.

@Issue: https://github.com/thorvg/thorvg/issues/2832
2024-10-10 14:39:10 +09:00
Hermet Park
8cdc0da1e2 lottie: Fine-tune for post-processing effect.
reduce quality for the post-processing effect to
improve general performance, while fine-tuning the quality
for lower resolutions.
2024-10-09 20:41:52 +09:00
Hermet Park
155d4a2aa2 lottie: optimization++
Use a clipper instead of masking when the condition is satisfied.
Generally, clipping is cheaper than masking in fps & memory usage.

issue: https://github.com/thorvg/thorvg/issues/2647
2024-09-30 12:29:54 +09:00
Hermet Park
f08d7aa037 lottie: support layer effect & gaussian blur
issue: https://github.com/thorvg/thorvg/issues/2718
2024-09-29 15:04:22 +09:00
Hermet Park
6712861154 lottie: --type casting warning in MSVC 2024-09-19 23:23:29 +09:00
Jinny You
d70ddcd67c lottie/text: Fix incorrect text range without end condition
Improving text render compatibility by fixing wrong Text Range.

When lottie doesn't have `end` prop in the range, system must ignore condition regarding to `end`.

The original logic unintentionally swaps `start` and `end` prop, because `end` is the zero in this case. Then the text range animation behaves the opposite.
2024-09-19 15:29:38 +09:00
Hermet Park
b0683a26ec api: Introduced Paint::clip() API
Separate clip function from the Composite()
clipping and composition can be used together.

This helps avoid the introduction of nested scenes
when composition and clipping overlap.

Deprecated:
- enum class CompositeMethod::ClipPath
- enum Tvg_Composite_Method::TVG_COMPOSITE_METHOD_CLIP_PATH

Experimental API:
- Result Paint::clip(std::unique_ptr<Paint> clipper)
- Tvg_Result tvg_paint_set_clip(Tvg_Paint* paint, Tvg_Paint* clipper)

Issue: https://github.com/thorvg/thorvg/issues/1496
2024-09-19 14:46:05 +09:00
Jinny You
9c5933a4e5 lottie/text: applied Text Range randomization.
on each parse, if the `randomize` is enabled,
the start and end of the Text Range are redefined
with the same gap as the original range.

issue: https://github.com/thorvg/thorvg/issues/2178
2024-09-19 11:05:24 +09:00
Jinny You
3f67c38c50
lottie/text: Support line spacing
Compute line spacing based on the text range selector, applying the maximum spacing value for each line.
issue: https://github.com/thorvg/thorvg/issues/2178
2024-09-10 11:44:32 +09:00
Jinny You
b59e833c65
lottie/text: Support Text Based
Added support for Text Based of Text Range Selector, by processing further properties:
2. Character Excluding Spaces
3. Words
4. Lines

see: https://github.com/thorvg/thorvg/issues/2178
2024-09-09 12:03:59 +09:00
Mira Grudzinska
bb3c6516e5 lottie: fix trim
The bug caused the trim path to not be applied
when it appeared in a group between different
shapes.
2024-08-29 17:30:41 +09:00
Mira Grudzinska
87d85047aa lottie: add offsetPath support
Due to the lack of an analytical solution for Bezier
curves offsetting, a simple and computationally cheap
approximation has been implemented. The algorithm shifts
the segments connecting control points and determines
new points based on their intersections.

@issue: https://github.com/thorvg/thorvg/issues/2230
2024-08-23 01:18:50 +09:00
Mira Grudzinska
e4ec2a8a0e lottie: roundness refactored based on #2295 2024-08-23 01:18:50 +09:00
Mira Grudzinska
09313ae307 lottie: fix text update
The occurrence of a 'carriage return' (13) or 'end of text' (3)
caused the skipping of the next character check, immediately
searching for it in the list of available characters.
If the next character was also 13 or 3, it led to incorrect
interpretation; however, if it was the last character in the
sequence, a crash occurred.
2024-08-22 21:27:25 +09:00
Mira Grudzinska
7c13da461a lottie: prioritization of roundness in rectangles
Added prioritization of rectangle roundness over
rounded corners, in line with AE results.
2024-08-14 11:16:54 +09:00
Mira Grudzinska
e50bf002de lottie: handle edge case for rounded rect
For rounded rectangles the roundness value should
be determined using to the formula:
r = min(r, max(size.x, size.y)/2)
rather than the previous method:
r = min(size.x/2, size.y/2, r)
2024-08-12 18:52:14 +09:00
Hermet Park
290b52198f lottie: code refactoring
getting too many parameters,
migrated static functions to class member functions,
reducing the binary size by 2KB

no logical changes
2024-08-12 17:41:51 +09:00
Hermet Park
7fb0762454 lottie: ++scene rendering optimization
Apply LottieRenderPooler to RenderContext propagators.
2024-08-12 13:55:31 +09:00
Hermet Park
62f88ec072 lottie: ++scene rendering optimization
Apply LottieRenderPooler to maskings.
2024-08-12 13:55:31 +09:00
Mira Grudzinska
75ed0e4e09 lottie: handle rounded polygons
The implementation of rounded polygons was
mistakenly omitted, now has been added.

@Issue: https://github.com/thorvg/thorvg/issues/2624
2024-08-10 13:40:44 +09:00
Hermet Park
3e78a95b57 lottie: support matte+masking combination
introduced an intermediate scene for embracing
the matte and maskings
2024-08-08 13:55:16 +09:00
Hermet Park
69dccc326a lottie/expressions: rectified fill color support
Assign the fill color value properly.
2024-08-07 19:27:34 +09:00
Hermet Park
45352c9a1f API: introduce a Paint ID member as a reserved field
The "id" is a reserved field to specify a paint instance in a scene.
in this change, it assigns the layer id to the lottie scene as well.
2024-08-07 12:02:22 +09:00
Hermet Park
2edb3abbfb lottie/expressions: add missing expressions property updates
apply expressions to separate x/y transform coordinates.
2024-08-01 19:53:49 +09:00
Hermet Park
036ae3c2af renderer: code refactoring
Replaced the transformation with
a strong associated data field.

This helps to reduce the binary size (-1k).
2024-07-29 23:27:19 +09:00
Hermet Park
3804bbec57 lottie: code refactoring
- removed unnecessary variables.
- migrated the composition methods to the precomp layer.
2024-07-24 11:26:20 +09:00
Hermet Park
18eb465fe8 lottie: ++optimization with object culling
More precisely, culling the render objects by
determining if the group has no renderable objects.

Additionally, check opacity to quickly return
in the rendering process.
2024-07-22 17:17:08 +09:00
Hermet Park
bc30bca366 lottie: hotfix with an intermediate patch merge. 2024-07-22 12:28:17 +09:00
Hermet Park
3181ea660f lottie: ++scene rendering optimization
Apply LottieRenderPooler to texts.
2024-07-22 12:08:27 +09:00
Hermet Park
f06127ab93 lottie: ++scene rendering optimization
Apply LottieRenderPooler to path/rect/ellipse/polystar.

This enhances the animation performance: ~10%
2024-07-14 19:26:51 +09:00
Hermet Park
c20ecbcc58 lottie: introduced LottieRenderPooler
LottieRenderPooler is designed to manages rendering
instances(paints) efficiently through a simple pooling
mechanism to resuse among the animations

This replaces the previous individusal paints implemenations
among solidfill, precomp vierport and pictures,
also fix a potential paints corruption problems.
2024-07-13 19:22:06 +09:00
Mira Grudzinska
8340c1e1d7 lottie: support 'direction' in ellipses 2024-07-12 14:23:27 +09:00
Mira Grudzinska
bedaa909ad lottie: remove unnecessary cast 2024-07-12 13:54:49 +09:00
Hermet Park
22bab117a3 lottie: clarify shape direction.
There are only two options clockwise or counter-clockwise.
2024-07-12 00:39:31 +09:00
Mira Grudzinska
6025635712 lottie: apply direction to rect 2024-07-12 00:05:08 +09:00
Hermet Park
4cb327c9fd lottie: ++ scene composing optimization
retain resuable layer solid paint during animation.
2024-07-11 21:30:31 +09:00
Hermet Park
d95ec72335 lottie: ++ scene composing optimization
retain reusable precomp clipper shapes during animation.
2024-07-11 21:30:31 +09:00
Hermet Park
d6d4839f1a lottie: ++memory access stability
Internal matrix can be null.
This update prevents such cases by using a safer API.
2024-07-11 01:03:50 +09:00
Jinny You
fdc1ad4d2c lottie/text: Support text range selector (Phase 1)
This patch provides initial support for the text range selector. Full support will be added gradually in subsequent steps. This is the first step.

Text range selector with following properties:
1. Text Range Selector (Units)
2. Text Style
- Fill Color
- Fill Opacity
- Stroke Color
- Stroke Width
- Stroke Opacity
- Opacity
- Rotation
- Position
- Scale
2024-07-11 00:49:57 +09:00
Mira Grudzinska
e07ff127dd lottie: improvement 3d rotation
For rotation around the X and Y axes, the transformation
matrix was incorrectly created - elements e12 and e21
were omitted. Now fixed.
2024-07-10 16:58:03 +09:00