Как устроены технологии графики в современных играх
Gamedev
Владимир Семыкин

Делаем процедурные повороты тела — краткий гайд Статьи редакции

Чтобы голова, туловище и ноги поворачивались последовательно.

Разработчик из Moon Studios Джейкоб Уолберг опубликовал в твиттере тред, в котором рассказал про создание процедурной анимации поворота тела для прямоходящих существ. Это свойство позволяет сделать передвижение более реалистичным. Автор не только показал эффект, но и представил код, который можно использовать в своей работе.

У такой анимации очень простой риг — базовые gameObjects ведут себя как кости. Они, в свою очередь, выполняют родительскую функцию для примитивов, из которых собран объект.

Ниже представлены глобальные переменные, которые нужны для проекта. Здесь есть сериализуемый класс AnimatedPart, который понадобится для анимирования частей тела. Для этого нужно использовать скорость (в данном случае Rigidbody) и yawDelta (разницу между текущим вращением по Y и последним вращением по Y).

Ниже представлена логика, которая нужна для анимирования фигуры.

Позже Уолберг заметил ошибку и добавил исправление к коду.

Нужно включить кватернион с именем startRotation в класс AnimatedPart и установить его в начале. А затем добавить процедурное вращение к начальному вращению
Это настройки в самом редакторе

Эту технику можно применить и к анимированным персонажам. Просто умножьте процедурное вращение на текущее вращение кости.

Более плавный вариант
{ "author_name": "Владимир Семыкин", "author_type": "editor", "tags": ["\u043e\u043f\u044b\u0442","\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f"], "comments": 16, "likes": 288, "favorites": 610, "is_advertisement": false, "subsite_label": "gamedev", "id": 749878, "is_wide": true, "is_ugc": false, "date": "Sat, 19 Jun 2021 19:13:58 +0300", "is_special": false }
(function (w, d, css, imgs) { var teaser = d.querySelector('.' + css.root); var isFeed = d.querySelector('[air-module="module.feed"]'); if (teaser) { teaser.classList.add(css.sitename); if (isFeed) { teaser.classList.add(css.index); } else { teaser.classList.add(css.entry); } loadImages(imgs).then(function () { teaser.classList.add(css.loaded); }); } function loadImages(urls) { return Promise.all(urls.map(function (url) { return new Promise(function (resolve) { var img = d.createElement('img'); img.onload = resolve; img.onerror = resolve; img.src = url; }); })); }; }(window, document, { root: 'pixonic-banner', index: 'pixonic-banner--index', entry: 'pixonic-banner--entry', loaded: 'pixonic-banner--loaded', sitename: 'pixonic-banner--' + (window.__codename || 'vc') }, [ 'https://leonardo.osnova.io/f78d51cb-71d0-5ce2-90de-b2c88340b6b6/', ]));
0
16 комментариев
Популярные
По порядку
Написать комментарий...

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

13

Более подробно и интересно о приемах процедурной анимации можно посмотреть здесь. 
https://youtu.be/LNidsMesxSE

Ответить
3

И вот текстовая версия на всякий случай: https://dtf.ru/79680

Ответить
9

Блин, вот вроде и спасибо, что принёс такое, но оформлять код картинками... За такое бить надо.

Ответить
4

Спасибо, очень годно. Надеюсь в будущем пригодится ;3

Ответить
–21

Юнити

Спасибо, не надо.(без негатива)

Ответить

Дурной жар

T3H
8

Лол, там метод применим к любому движку, если тебе это непонятно, то и правда не надо :)

Ответить
–3

Нихуя ты умный.

Ответить

Комментарий удален

3

Чтобы голова, туловище и ноги поворачивались последовательно

Сразу вспоминается Soulbringer - отец процедуральных поворотов частей тела.

Ответить
1

Только я откровенно не понимаю, зачем нужно столько публичных полей

Ответить

Дурной жар

Иван
1

Чтобы в инспекторе установить значения потом, потыкать в рантайме разные значения 🤔

Ответить
2

"[SerializableField] private"🤔?

Ответить
0

Почему в играх делают "шаблонную" анимацию? Чувство как будто не людьми управляешь, а куклами.

Ответить
1

В каком смысле?

Ответить
0

А ты бы хотел что бы у каждого NPC была своя анимация? 

Ответить
0

Да. Каждый НПС имеет уникальную анимацию на основе своего архетипа. Имеет свой разум, который развивается, может поступить в университет, или построить свой бизнес, или создать свою игру, или выбраться наружу и захватить разум игрока, или написать свою симфонию. Что в этом плохого?

Ответить

Комментарий удален

Читать все 16 комментариев
null