Человеческий глаз создает ощущение движения через визуальный остаток динамической графики, поэтому возникает динамический эффект.
Динамическая графика
Будь то в AE & Animate при создании графики,
Отрегулируйте функцию изменения настройки ключевого кадра;
Или используйте PS для рисования и экспорта GIF кадр за кадром,
По сути, все они создают связную последовательность изображений.
Графика движения также включена.
SVGA должен снизить для нас первоначальную стоимость анимационной последовательности.
SVGA описывает основные элементы (растровые и векторные), из которых состоит анимация.
И экспортируйте его производительность на временную шкалу (альфа и матрица) кадр за кадром.
Логика воспроизведения очень проста, достаточно объединить производительность каждого кадра анимации и визуализировать элементы анимации один за другим.
При восстановлении динамического эффекта элементы анимации максимально повторно используются, тем самым снижая стоимость динамического эффекта со всех сторон.
О чем именно мы говорим, когда говорим о SVGA?
"它是个转换插件,把设计师做的动画导出来,放到设备上去播放。"
"它是一个客户端播放器,一种播放动效的方式,酱紫我们就不用手撸动画,可以早点下班。"
"它是一套协议,降低设计师与技术在动效方面的沟通成本"
"它是一份解决方案,本质上解决的是图形效果与实现成本之间的矛盾问题。"
Как клиентский игрок, мы можем обсуждать SVGA с двух точек зрения:
Animation(Player)
Content(Frames)
Tickers(FPS)
.svga(Parser)
序列化
反序列化
SVGA
Animation(Player)
С точки зрения игрока это SVGA(оптимизировано)анимация кадра последовательности,
Протолкните кадр последовательности через тикер с заданным интервалом.
В это время некоторые студенты хотят спросить,
"所以 SVGA 与我们常见的序列帧动画有什么区别呢?"
На него можно ответить из двух измерений:
-
Детализация элементов анимации (Оптимизировать 1):
Частицы SVGA очень мелкие и управляемые.
Кадры последовательности имеют только один слой. -
Содержимое анимированного элемента (Оптимизация 2):
SVGA может быть использованвектора такжебитовая картаОбъединено для балансировки накладных расходов ЦП и ГП.
Кадры последовательности могут использовать только растровые изображения.
Хотя кадры векторной последовательности также существуют, они менее распространены и здесь не обсуждаются.
Та же анимация, форма организации контента следующая:
СВГА:
Последовательность кадров:
Лотти:
То же самое и при игре:
Разделяйте анимацию на отдельные элементы, рендерите анимацию каждого элемента покадрово, и не нужно повторно рендерить, если он не движется.
.svga(Parser)
Компьютеры Designer часто экспортируют множество файлов .svga, которые невозможно просмотреть напрямую.
"这些个不可预览的文件,里面装的到底是什么东西呢?"
Я думал об этом два года назад.
Исходя из принципа "все можно распаковать",
右键-打开方式-The Unarchiver
(╯‵□′)╯︵┻━┻z
Какое к черту решение, скрипт так не написан!
Это потому, что распакованная .svga 2x,
Если вам интересно, вы можете использовать файл 1.x, чтобы разархивировать его.
2.x 的 .svga 是一个船新的版本,
使用的是当下最流行的 Protocol Buffers 来做序列化,
将素材和动效描述文件储存成二进制格式,自然无法直接解压。
Насколько быстрее удаляется файл SVGA, анализирующий JSON,
См. Сравнение 1.x и 2.x ниже.
Сериализовать и десериализировать
通过某种协议(Proto)
  把对象转换为字节序列的过程称为对象的序列化(Serialize)。
   把字节序列恢复为对象的过程称为对象的反序列化(Deserialize)。
   对象的序列化主要有两种用途:
  1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
  2) 在网络上传送对象的字节序列。
Возьмите каштан:
Ставим слона в холодильник через шаги 1, 2, 3.
Он положен в холодильникСериализация,
Из холодильникадесериализовать,
И шаги 1, 2 и 3 - это то, о чем мы договорились.протокол,
Если этот протокол не соблюдается, то из холодильника достают не слона, а
Может придумать что-нибудь странное.
Анимация свойства
Свойства включают масштаб, вращение, смещение, прозрачность, цвет и т. д.
API, связанные с анимацией свойств, совместимы между AE и клиентом.
После экспорта его можно напрямую назначить и использовать.
векторная поддержка
Векторы являются одним из фундаментальных элементов, изучаемых в линейной алгебре.
Если вы думаете о векторе как об отношении между точкой и началом координат,
Тогда задачу исследования линейной алгебры можно понимать так:
«Графические свойства ряда связанных точек в двумерной (x y) или трехмерной (x y z) системе координат».
Связь между рядом точек является функцией.
Полиномиальное уравнение Бесселя является одной из таких функций.
Его графическое отношение, то есть диаграмма отношения ряда точек, таково:
Кривая Безье выглядит следующим образом:
Отсюда видно, что(Что?)(╯‵□′)╯ ┴─┴
Ключевые элементы, определяющие кривую Безье:
- starPoint
- endPoint
- controllerPoint1
- controllerPoint2
По существу, эти точки влияют на полиномиальные коэффициенты уравнения Бесселя.
кривая Безье первого порядка
starPoint: :P0
endPoint :P1
controllerPoint1 :P0 (重合)
controllerPoint2 :P1 (重合)
Кривая Безье второго порядка
starPoint: :P0
endPoint :P2
controllerPoint1 :P1
controllerPoint2 :P1 (重合)
Кривая Безье третьего порядка
starPoint: :P0
endPoint :P3
controllerPoint1 :P1
controllerPoint2 :P2
Таким образом, все строки в компьютере, Оба могут быть использованы:
var curve = new Bezier(
P0.x, P0.y,
P1.x, P1.y,
P2.x, P2.y,
P3.x, P3.y,
);
Создано, все безье!
┬─┬ ノ( ' - 'ノ) {настроить хорошо настроить)
И линии, которые мы обычно видим в компьютере,
Или кривая, нарисованная с помощью [Pen Tool] в инструменте дизайнера:
Вот некоторые осторожные студенты, чтобы спросить:
Как упоминалось выше, кривая имеет только четыре точки.
Но каждый раз, когда мы перетаскиваем линию в AE,
Будет начало и конец,
Эти две точки имеют две контрольные точки соответственно,
В Цзянцзы шесть часов,
что случилось?
При перетаскивании кривой вы можете нажать клавишу Alt, чтобы разделить две контрольные точки,
Тогда вы обнаружите, что единственное, что действительно влияет на текущую кривую, это:
- Контрольная точка вторая исходной точки;
- Контрольная точка одна из конечных точек;
То есть, по сути, в AE он также соответствует правилам, о которых мы говорили выше.
Какие два дополнительных очка?
они соответственно:
- Контрольная точка 2 конечной точки последней кривой;
- Контрольная точка Одна из отправной точки следующей кривой;
Это не влияет на текущую кривую.
Путь в SVG
Если вы откроете файл SVG (XML) в текстовом редакторе,
Вы найдете абзац в SVG:
M153 334
C153 334 151 334 151 334
C151 339 153 344 156 344
C164 344 171 339 171 334
C171 322 164 314 156 314
C142 314 131 322 131 334
C131 350 142 364 156 364
C175 364 191 350 191 334
C191 311 175 294 156 294
C131 294 111 311 111 334
C111 361 131 384 156 384
C186 384 211 361 211 334
C211 300 186 274 156 274
Буква M внутри соответствует методу MoveTo API рисования:
- (void)moveToPoint:(CGPoint)point;
C, соответствующие кривой Безье, рисуется:
- (void)addCurveToPoint:(CGPoint)endPoint
controlPoint1:(CGPoint)controlPoint1
controlPoint2:(CGPoint)controlPoint2;
Отсутствующий здесь starPoint на самом деле является последним endPoint или movePoint,
** Так что трех баллов в C достаточно,
Их порядок таков: endPoint, controlPoint1, controlPoint2;
Приведенные выше два предложения являются основной причиной моей недели на работе.
Путь в SVGA
Эта спецификация пути также используется в SVGA,
Однако в исходном коде конвертера для SVGA обнаружено, что
Порядок C(Curve): controlPoint1, controlPoint2, endPoint;
И точка, заданная M(MoveTo): controlPoint1;
Игрок тоже ошибается и сам меняет порядок разбора C(Curve):
В это время M(MoveTo) использует точку: controlPoint1,
Экспортированная анимация выглядит так:
Пожалуйста, используйте определитель, чтобы найти теневую область психологии Чжан Чжаня...
Исправление, конечно же, заключается в том, чтобы исправить путь в SVGA обратно...
TrimPath в SVGA
TrimPath — это стиль векторной анимации.
TrimPath на самом деле должен называться Trim Bezier,
Все линии в SVGA — это кривые Безье.
Он имеет три связанных свойства:
trimPathStart,
trimPathEnd,
trimPathOffset,
Они указывают, где начинается Путь, где он заканчивается и как далеко от начальной точки.
Что касается того, как его использовать, это зависит от нашего воображения.
В слое формы AE вы можете добавить:
Его можно добавить в свойство Shape или добавить за пределы Shape, чтобы воздействовать на несколько Shapes:
Динамический дисплей:
Анимацию можно разделить на четыре части,
Масштабная анимация внутри круговой заливки
Внешние три контура обводки окружности и добавление анимации обрезки и ширины.
пройти черезSVGA PreviewМы можем ясно понять его структуру:
Затем мы передаем PathMeasure Android (веб слишком сложен для отладки)
для имитации SVGA, чтобы восстановить эффект обрезки этой анимации.
Здесь SVGA используется в бизнесе Amway для восстановления этих эффектов одним щелчком мыши.
(Возьми горшок полностью на продукт и дизайн, мы можем уйти с работы пораньше~😯)
SVGAnimation Demo
TrimPathActivity
PathUtil Подробнее об этом позже.
trimmedPath в SVGA AE Converter
···
маска маска
Маски и маски по сути являются альфа-каналами для направленной обработки нарисованных слоев.
Задайте свойства маски через панель в AE:
Преобразователь получает параметры через,
Настройте сценарии воспроизведения на iOS и Android & Web.
Решение по существу состоит в том, чтобы создать слой маски через полученные параметры,
Замаскируйте несколько слоев содержимого с помощью маскирующего слоя.
Вы также можете установить свойство маски:
управлять альфа-каналом слоя,
Для достижения эффекта отображения только части узора.
Сравнение производительности
«Сначала установила небольшую цель, которая может быть достигнута, например, анимация, достигающая 60 кадров в секунду, анимационный анализ завершен в течение 100 мс».
Накладные расходы на оборудование — это очень общее понятие.Если накладные расходы слишком велики, оборудование будет зависать, пропадать кадры, выделяться тепло, энергопотребление, виновник и корень всех зол.
С точки зрения развития,
Размер файла, трудоемкий синтаксический анализ, использование памяти, ЦП и ГП — все параметры, которые могут измерить стоимость.
Ниже приведен анализ производительности 1.x, 2.x, кадров последовательности и GIF по этим измерениям.
SVGA 1.x
1.x — исходная версия формата SVGA,
Фиг.8 Элемент ресурсов фактически записывается вместе с элементами каждого кадра JSON Performance Performance Data, сжаты по-баллы в ZIP.
SVGA 2.x
SVGA 2.x преобразует файл описания анимации в формате JSON в двоичный файл Protobuf, который значительно улучшает скорость декодирования файла.
Кадры последовательности и GIF-файлы
Кадр последовательности и GIF — это полнокадровые растровые изображения, характеризующиеся тем, что размер файла увеличивается со степенью восстановления движения, и при воспроизведении будет наблюдаться длительное использование памяти.
Сравнение 1.x и 2.x
резюме:
- Протестируйте в относительно чистой демо-среде;
- Тестовый телефон — iPhone 7P 12.3.1 Xiaomi 6 MIUI 9.6;
- Анимация - Shengli (90% растровое изображение) Brithday (вектор 90%);
- Динамическая сложность: шэнли > день рождения;
Сторона iOS:
- 2.x пиковое время декодирования быстрее, чем 1.x, когда имеется больше (90%) растровых текстур движения70%, средне быстро84%;
- 2.x пиковое время декодирования быстрее, чем 1.x, когда есть больше элементов вектора движения (90%)66%, средне быстро104%;
- Другие данные похожи, и логика рендеринга после декодирования одинакова;
Сторона Android:
- 2.x пиковое время декодирования быстрее, чем 1.x, когда есть больше элементов вектора движения (90%)308%, средне быстро276%;
- При длительном времени декодирования загрузка ЦП будет высокой в течение длительного времени в процессе декодирования файлов 1.x.
- Остальные данные аналогичны, и логика рендеринга после декодирования такая же;
Таблица загрузки ЦП анимации Android 1.x:
В заключение:
- Скорость декодирования файлов SVGA 2.x выше, чем у 1.x, средняя высота120%, разница между младшими и средними моделями более очевидна.
- Чем больше векторных элементов, тем больше размер файла описания анимации и тем больше разрыв во времени декодирования.
- Логика последующего рендеринга такая же, да и остальные данные мало чем отличаются.
приложение
Подробный техпаспорт