DevGang
Авторизоваться

Использование SVG в качестве камеры (Danganronpa Back and Forth)

Мне нравится SVG. Мне нравится Данганронпа. Я попытался воссоздать эффект панорамирования камеры в стиле Danganronpa в SVG.

Мы можем использовать элементы SVG <symbol> и <use> для создания камеры, похожей на те, которые вы можете найти в видеоредакторах, игровых движках и т.п. (After Effects, Unity и Blender, и это лишь некоторые из них).

Целью было воссоздать эффект панорамирования, который можно увидеть в играх или фан-проектах Danganronpa.

PS: Это не пошаговое руководство.

  • В основном это подтверждение концепции.
  • Я предоставлю общий обзор, упомяну конкретные детали реализации и дам ссылку на дополнительную литературу.
  • Я предполагаю, что вы знакомы с анимацией CSS и SVG.

Идея

Эффект панорамирования Данганронпы

В официальных играх Danganronpa и фан-проектах: Danganronpa F: Shattered Hope (сделано в After Effects), Project: Eden's Garden (сделано в Unity) и даже в некоторых мемах/ремиксах.

Если я правильно помню, в Danganronpa 2 происходит следующая последовательность:

  • В начале анимации размойте всех персонажей, кроме активного говорящего.
  • Наведите камеру на активного говорящего.
  • В конце анимации размытие всех персонажей.

Мы могли бы попытаться воссоздать это.

Мы также могли бы сделать его более похожим на Danganronpa F:

  • Сделайте его 2.5D (3D-преобразование 2D-спрайтов).
  • Добавьте эффект глубины видения.
  • Добавьте эффект размытия в движении.

И т. д.

Но давайте сейчас сосредоточимся на панорамировании камеры.

Учебное пособие по Danganronpa F

Danganronpa F: Cancel.

Обратите внимание, что есть две камеры: полный обзор сцены и крупный план активного докладчика (опять та же сцена).

Один из создателей Danganronpa F снял об этом видеоурок.

Они используют After Effects, но их методы можно использовать и в других контекстах, например в веб-технологиях.

См. Панорамирование и камера — Учебное пособие Fanganronpa (AE) | YouTube.

По сути, они:

  • Настройте композицию или мир (фон и персонажей).
  • Используйте камеру (Камера 1), чтобы показать всю композицию, охватывая весь экран.
  • Нарисуйте полупрозрачное наложение.
  • Используйте другую камеру (Камера 2), чтобы показать композицию крупным планом.
  • Обновите положение камеры 2 (x, y и z), чтобы переключать фокус между персонажами... Панорамирование.

Основные слои и основная идея

Danganronpa V3: World.
Danganronpa V3: World.
Danganronpa V3: World + overlay.
Danganronpa V3: World + overlay.
Danganronpa V3: Мир + наложение + камера крупным планом + пользовательский интерфейс.Обратите внимание, что девушка в шляпе (Химико) все еще видна за наложением.

Перевод концепций

Называть вещи сложно. Итак, давайте повторно использовать термины, часто встречающиеся в разработке игр: сцена, пользовательский интерфейс, мир и камера. (Это будут наши переменные или идентификаторы элементов.)

Их можно сравнить с концепциями, используемыми в игровых движках (например, Unity или Ren'Py), программах для редактирования видео (например, After Effects) или программах для 3D-анимации (например, Blender).

Элементы:

  • Сцена – это вся композиция.
  • В мире присутствуют «игровые» объекты (фон, персонажи, предметы и т.п.).
  • Камера определяет область просмотра или перспективу мира.
  • Пользовательский интерфейс действует как наложение поверх мира и включает в себя текстовые поля и многое другое.

Псевдокод

<svg id="scene">
    <g id="world">
        <image id="background" />
        <image id="nagito" />
        <image id="hajime" />
    </g>

    <symbol id="camera" viewBox="...">
        <use href="#world" />
    </symbol>
    <use href="#camera" />

    <rect id="overlay" />

    <g id="ui">
        <text id="speaker">???</text>
        <text id="dialog">No, that's wrong!</text>
    </g>
</svg>

Подробности реализации

Предположим, это наш мир, и мы хотим изменить фокус камеры с Нагито (синий прямоугольник) на Хадзиме (красный прямоугольник):

Чтобы анимировать viewBox символа, мы могли бы использовать GSAP или аналогичную библиотеку, но поскольку анимация является базовой, я решил использовать только элемент <animate>.

Чередование: в SVG нет чего-то похожего на CSS animation-direction: alternate. Чтобы воссоздать его, нам нужно определить две анимации и заставить каждую начинаться в конце другой. Чтобы запустить этот цикл, мы также устанавливаем один из них (toHajime) так, чтобы он начинался с 0 секунд на временной шкале документа (т. е. после загрузки документа).

<!-- From Nagito to Hajime and then back to Nagito -->
<animate id="toHajime" begin="0s; toNagito.end" />
<animate id="toNagito" begin="toHajime.end" />

Задержка: мы хотим, чтобы камера делала небольшую паузу (скажем, 1 секунду) на каждом спрайте, прежде чем перейти к другому.

Оказывается, мы можем написать что-то вроде toNagito.end + 1s, чтобы задержать выполнение анимации относительно другого события.

Мы также используем fill="freeze", чтобы сохранить состояние последнего кадра анимации, аналогично CSS-анимационному режиму заполнения: вперед.

2.5D или 3D-перспектива. К сожалению, SVG не поддерживает 3D-преобразования. Вот почему все в 2D.

Пользовательское замедление: проверьте сообщение дуба.

Используемая функция замедления: easyInOutQuint (cubic-bezier(0.86,0,0.07,1)). См. https://easings.co.

Источник:

Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу