Cascadeur — зачем аниматорам физика?

    В предыдущем посте “Cascadeur — можно ли заменить каскадеров?” мы обещали подробнее рассказать про концепцию программы и про инструменты, позволяющие аниматорам создавать физически корректные движения персонажей.

    image

    В классической анимации законы физики нарушаются ради усиления эффекта и выразительности. Свободное обращение с законами физики и даже создание своих законов, к которым зритель привыкает — это важный инструмент анимации. Но такой стиль воспринимается зрителем как “мультяшный”.

    А что будет, если в анимации строго соблюдать законы Ньютона и использовать только те анимационные приемы, которые не противоречат этим законам? Такая физическая корректность сама по себе не даст реализма, но может дать эффект целостности. Ведь в этом случае персонаж движется в пространстве строго в соответствии с нашими законами физики, он обладает массой, инерцией и все его движения обусловлены силами.

    Уже давно физическое моделирование используется для реалистичной анимации пассивных конструкций: столкновение твердых тел, движение тканей, волос и т.д. Вряд ли кто-то поспорит с тем, что делать анимацию ткани вручную неоправданно сложно. Логично было бы применять физическое моделирование и в анимации тела персонажей.

    Но как рассчитывать реалистичное движение персонажа, который, в отличие от пассивных конструкций, сам порождает силы, приводящие части тела в движение? Как аниматору добиться того, чтобы это движение не противоречило законам физики?

    При изучении этого вопроса удалось выделить 3 понятия, правильное обращение с которыми гарантирует соблюдение законов Ньютона:

    • Точки опоры
    • Центр масс
    • Момент импульса

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

    Так как в большинстве движений сопротивлением воздуха можно пренебречь, то правила можно сформулировать следующим образом:

    1) Если у персонажа нет точек опоры, то:

    • Центр масс движется по баллистической кривой (параболе), независимо от того какие движения совершает персонаж.
    • Момент импульса сохраняется постоянным, независимо от того, какие движения совершает персонаж. То есть ни ось вращения, ни количество вращения не могут измениться, пока у персонажа нет точек опоры.

    2) Если же точки опоры есть, то:

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

    Соблюдение этих правил превращается в непростую задачу для каждого движения. Обычно приходится изучать движение, чтобы понять, как оно делается в реальности.

    Но даже если решение найдено, то напрашивается специальный инструмент, позволяющий управлять центром масс и моментом импульса напрямую, а это уже обратная задача динамики, и она требует итерационных методов решения. На итерационных методах и построены все алгоритмы в Cascadeur’е.

    Основной итерационный метод, используемый для моделирования физики и большинства инструментов — численное интегрирование Верле. Главная особенность метода — возможность накладывать несколько различных ограничений на систему и итерационно находить решения, удовлетворяющие всем ограничениям. На этом мы, возможно, остановимся подробнее в одном из следующих постов.

    Персонаж в нашей системе состоит из вершин, обладающих массой, и связей, соединяющих вершины. При редактировании кадра любые манипуляции с персонажем похожи на действия с физическим объектом в вязкой среде.

    Этот подход позволил нам реализовать следующие возможности и инструменты в Cascadeur’е:

    • Можно двигать персонажа за любую вершину, при этом положение связанных вершин будет меняться, так как они являются частью общей системы.
    • Вершину можно закрепить, тогда манипуляции с соседними вершинами не повлияют на ее положение.
    • Центр масс можно двигать — тогда сдвигаются все вершины, которые не закреплены. Если есть закрепленные вершины, то поза персонажа изменится.
    • Центр масс можно закрепить — тогда движение любой вершины приводит к такому движению незакрепленных вершин, при котором центр масс останется на месте.
    • Для центра масс можно автоматически построить баллистическую траекторию исходя из начальной и конечной позиции.
    • Момент импульса можно “сглаживать” и делать неизменным на интервале. Это меняет положение и позу персонажа в каждом кадре.
    • Момент импульса можно закрепить. Тогда сдвиг любой вершины приведет к такому повороту всего персонажа относительно центра масс, при котором момент импульса останется неизменным.
    • У вершин центра масс и момента импульса траектории движения унифицированы (заданы простыми массивами координат) и к ним можно применять различные фильтры.
    • Можно рассчитать необходимое напряжение мышц на каждом кадре и отобразить эти напряжения градацией цвета мышц. Возможность видеть распределение нагрузки на персонаже помогает оценить правильность движения.
    • Можно рассчитать и отобразить вектор силы в каждой точке опоры. Это также помогает оценить правильность движения.

    Как эти инструменты применяются в работе на примере простого прыжка можно посмотреть в этом видео:



    Плюсы такого подхода:

    • Анимированный персонаж воспринимается зрителем как объект с массой, а значит более реальный. В итоге легче достичь реализма.
    • Движения получаются более целостными и совместимыми друг с другом, даже если сделаны разными людьми (даже с разным качеством).
    • Такие движения лучше совместимы с движениями, полученными с помощью motion capture.
    • Фантазия аниматора не так сильно ограничена, как при использовании motion capture. Ничто не мешает сделать движения, которые не может сделать ни один каскадер в мире.

    Мы пока только развиваем этот подход и исследуем его возможности, придумываем и пробуем новые инструменты. Будем держать вас в курсе результатов наших исследований.
    Метки:
    Nekki 37,46
    Компания
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Похожие публикации
    Комментарии 25
    • +5
      Вау! Это реально круто!

      Я сейчас пишу курсач примерно на ту же тему, на «сопротивление материалов». Пытаюсь высчитать изгиб балки при действии на него сил. У меня это все в 2D, а у вас так в 3D. И я реально вас уважаю :)

      Насчет скелета вопрос — у вас заданное число точек в скелете?
      И как вы встраиваете анимации трюков в игры? Вы их записываете в каскадере, или в игре прямо вся физика реализована?

      • +1
        Насчет скелета вопрос — у вас заданное число точек в скелете?
        Не совсем понимаю вопрос. Количество точек любое, какое потребуется при создании скелета

        И как вы встраиваете анимации трюков в игры? Вы их записываете в каскадере, или в игре прямо вся физика реализована?
        Мы записываем координаты вершин каждого кадра в файл (в нашем формате), а в игре еще дополнительно интерполируем (до 60 кадров в секунду). Физика в игре тоже есть, но только когда персонаж падает
        • +1
          Что там рассчитывать — ручками за пять минут любой знающий сопромат посчитает
        • 0
          Очень понравилось, еще с предыдущего поста.
          Несколько вопросов:
          1) Будете ли в дальнейшем добавлять в cascadeur захват движения? Если да, то какой?
          2) Все связи жесткие?
          3) Какие платформы планируете поддерживать?
          • +2
            1) Будете ли в дальнейшем добавлять в cascadeur захват движения? Если да, то какой?
            Планируем добавить импорт motion capture, но сейчас нет никакого экспорта и импорта в известные форматы

            2) Все связи жесткие?
            Жесткость связей зависит от количества итераций при моделировании. Чем больше итераций — тем жестче.

            3) Какие платформы планируете поддерживать?
            Пока только Windows

          • +1
            Вызывает восторг, анимацию боя можно сделать?
            • 0
              Ага, было бы круто самому махать мечом с помощью мыши в реальном времени.
              • 0
                До реального времени нам пока далеко
              • +2
                Анимация боев в игре «Shadow Fight» сделана в Cascadeur
                • +1
                  Конечно, хотя моделирование удара мы еще не доделали. Я взялся за эту идею, чтобы когда-нибудь сделать крутую анимацию боя, так что можно будет)
                • 0
                  Не думал, что подобные расчеты возможно делать в риалтайме. Вы молодцы!
                  • 0
                    Это не риалтайм. Расчеты сильно нагружают CPU и делать это в игре в реальном времени не получится. К тому же это просто инструмент помогающий аниматору, и он не сделает анимацию автоматически.
                    • 0
                      Такая физика отлично распараллеливается в GPU, может выйдет на нём добиться реалтайма?
                      • 0
                        Может быть, но пока такую задачу перед собой не ставили. Да и программа пока не приспособлена работать автономно без аниматора)
                      • +1
                        Я чуть неправильно выразился. Под «риалтайм» имел ввиду, что не надо расставлять точки, после чего жать кнопку «просчитать анимацию» и идти пить кофе. У вас же возможно редактировать в реальном времени.
                        • 0
                          В таком случае да, все работает относительно быстро. К тому же есть параметр «количество итераций», который позволяет пожертвовать точностью в пользу скорости, если вдруг понадобится.
                    • 0
                      Навороченный инструмент получается для одной, двух игрушек. Не думаете выпустить его отдельным продуктом?
                      • +5
                        Пока планируем сделать общедоступным и бесплатным, а также планируем создать комьюнити, где будем обучать, помогать, выкладывать уроки и т.д.
                        • +2
                          отлично. Жду с нетерпением! дедлайн для себя ставили?
                          • +1
                            Пока нет, т.к. не удается выделять под проект достаточно рабочего времени. А на свободное время дедлайн совсем не хочется ставить)
                          • 0
                            Если не секрет, можете написать про платформу разработки движка? Какой язык программирования, физический движок?
                            • +4
                              Delphi. Физический движок свой (как раз основанный на численном интегрировании Верле). Пока даже отрисовка своя (MoveTo, LineTo и т.д.)
                              Планирую переписать отрисовку на OpenGL
                            • +1
                              А планируется ли сделать продукт опенсорсным?
                        • 0
                          что-то давно не слышно о проекте, если сами не хотите развивать его, откройте исходники!

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое