**Vertex Animation Textures (VAT)** — это метод передачи анимации для мешей в игровых движках, основанный на текстурах. Он особенно полезен для оптимизации анимации в проектах, где важны производительность и экономия ресурсов, например, в реальном времени для массовых сцен или на устройствах с ограниченными возможностями (мобильные телефоны). - Анимация по прежнему делается в blender, но нужно написать конвертор на C#, который преобразовывает анимацию с костями в текстуру. - Нужно написать код в игре, которые вопроизводит анимацию, прочитав текстуру. - Анимация вопроизводится на GPU. Прямо в шейдере будет читаться текстура и меняться позиция вершин. Если выбрать данное решение: - Будет отсутствовать Animator, соотвественно, никакой нагрузки от него. - Не будет перерасчёта каждый кадр позиции вершин в CPU (skinning), который происходит даже когда никакой анимации не воспроизводится. https://stoyan3d.wordpress.com/2021/07/23/vertex-animation-texture-vat/ - Рассказывается как реализовать VAT. https://github.com/Delt06/animation-texture-baking - Проект Владислава, в котором есть инструменты и пример шейдера для реализации VAT. Владислав не советует использовать VAT для всего и вся, а только там, где анимация сложная (например, гуманоиды). А простую анимацию лучше всего более простыми способами (например, Поделить меш с костями на дочерние меши.) - Потому что VAT будет занимать видеопамять (основная причина) (на моб. устройствах это общая память) и усложнит вершинный шейдер (будут дополнительные расчёты на видеокарте, по сравнению с тем, если просто крутить transform в коде, но дешевле, чем затраты связанные с костями) Размер текстуры-анимации 355 кб. ![[Pasted image 20241225215748.png]] В то время как та же анимация через кости весила бы примерно ~150кб (разница в 2,36 раза разница) Как выглядит сама анимация: ![[0_LYuFfPSiJtYb5L1I.gif]] [Источник](https://medium.com/tech-at-wildlife-studios/texture-animation-techniques-1daecb316657) **GPU Resident Drawer** в Unity — это подход, используемый для рендеринга большого количества объектов или данных с минимальной нагрузкой на процессор. Он основан на концепции размещения данных для рендеринга (например, позиции, цвета, трансформации) в видеопамяти (GPU memory) и выполнения всех операций непосредственно на графическом процессоре. - Подход имеет под капотом в том числе `GPU Instancing`, который позволяет за один Draw Call нарисовать все объекты, которые имеют один и тот же меш, материал, текстуру, шейдер. - Если использовать `GPU Instancing` можно и в Unity 2022, но придётся писать аналог `GPU Resident Drawer`. - GPU Resident Drawer работает из коробки. - Она присутствует начиная с Unity 6. Буквально в pipeline URP нажать одну кнопку. - Меши должны быть без костей (без Skinned Mesh Renderer) - GPU Resident Drawer не работает с: - VFX Graph - Material Property Block - Particle System - В **GPU Resident Drawer** есть Occlusion Culling. - В **GPU Resident Drawer** нет ограничений на то, должны ли объекты быть статическими. https://docs.unity3d.com/6000.0/Documentation/Manual/urp/gpu-resident-drawer.html - Как включить **GPU Resident Drawer** в Unity 6 ##### Поделить меш с костями на дочерние меши. Можно вместо использования костей поделить меш X на части, которые будут дочерними объектами и так же (как если бы они были просто костями) - будут анимироваться с помощью Animator. - Простые анимации можно реализовать кодом (например, падение дерева); - Сильное увеличение количества объектов можно компенсировать использованием GPU Resident Drawer, если у меша X много дубликатов. Минусы: - Однако, нужно учитывать, что Animator даёт ощутимую нагрузку. - Как альтеративу можно рассмотреть компонент Animation (предшественник Animator (Legacy)), так как она работает быстрее, чем Animator - Придется первоначально созданную анимацию на костями с нуля передывать. - Либо найти подход адаптации скелетной анимации под отдельные меши. - Решение может не подойти для сложной анимации например, если используется анимация для гуманоидов. Так как могут быть видны места соединения между разделёнными мешами во время воспроизведения анимации. План действий 1. попробовать решение Поделить меш с костями на дочерние меши. - 1. посомтреть в. Asset Store готовые решения для VAT 2. Самый лучший вариант - это вопроизводить анимацию без Animator и без костей. Потом идёт - VAT