Войти
ПрограммированиеФорумГрафика

Как реализовать отрыв частей тела игрового персонажа?

#0
8:09, 29 июля 2014

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

Поскольку оторванная от персонажа рука продолжает независимое существование, нужно при рендере персонажа запрещать вывод полигонов, относящихся к оторванной руке. Также нужно добавить вместо оторванной руки меш окровавленной культяпки - ведь на месте среза руки образуется дыра и ее надо закрыть.

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

Я пока вижу следующий способ - разделить скин меша персонажа на части, по которым его можно разорвать. Отдельно замоделить заглушки-культяпки.
То есть будет столько вызовов DrawIndexedPrimitive, сколько частей, из которых сшит скин персонажа. Для отрыва части, нужно просто не вызывать DrawIndexedPrimitive для группы полигонов части, а также обнулить и скорректировать веса вершин, на которые влияла оторванная кость (отрывается кость с группой вершин и полигонов).

Какие еще есть методы?


#1
10:56, 29 июля 2014

graveman
Смотри.
У тебя допустим от юнита отрубается рука.
Без изменений остаются скелетки отрубленной руки, а вот сам меш обычной оторванной руки местами подменяется на деформированный.

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

#2
10:58, 29 июля 2014

Даже не помню чтобы это еще кто-то делал со времен Blade of Darkness.

#3
11:03, 29 июля 2014

nes
> Даже не помню чтобы это еще кто-то делал со времен Blade of Darkness.
Painkiller (2004)
Dead Island Riptide (2013)

#4
11:05, 29 июля 2014

CasDev
> Без изменений остаются скелетки отрубленной руки, а вот сам меш обычной
> оторванной руки местами подменяется на деформированный.
Ну меня больше интересует то, что осталось ходить и пугать игрока.

#5
11:14, 29 июля 2014

graveman
Ну ты же понимаешь что чудес не бывает, верно?
Самый просто вариант, который я вижу - создаем два меша:
- первый сплошной и наложен на цельный скелет.
- второй разбит на части (да, именно все возможные варианты расчленения).
Когда рубим какую-то часть тела - подменяем сплошной меш на составной.
Это первое что пришло на ум.

#6
11:28, 29 июля 2014

nes
> Когда рубим какую-то часть тела - подменяем сплошной меш на составной.
Почему сразу не использовать составной - зачем хранить два меша?

#7
11:33, 29 июля 2014

graveman
>Почему сразу не использовать составной - зачем хранить два меша?
Экономим на DrawCall-ах, хотя если сцена не сильно сложная, то конечно проще сразу юзать порубленный меш.
Кстати именно так было сделано в Morrowind, правда там части тела представляли собой части доспехов и одежды.

#8
11:36, 29 июля 2014

nes
> Даже не помню чтобы это еще кто-то делал со времен Blade of Darkness.
l4d еще

#9
11:44, 29 июля 2014

graveman
затем же зачем и лоды делают.

#10
11:51, 29 июля 2014

nes
> Экономим на DrawCall-ах
А, дошло. Не всех же сразу зарубить можно. Те, что зарублены раньше, могут быть превращены в рагдолл трупаки, которые не обновляются, пока их не запинает в фарш игрок-некровандал.

#11
12:38, 29 июля 2014

Вертексы оторванной руки собираеш в одну кучку и прячешь в культяпку :)

#12
13:21, 29 июля 2014

Если память не изменяет в metal gear rising можно было отрубать конечности в произвольных местах и персонаж оставался анимированным

#13
0:37, 30 июля 2014

В том же DeadSpace расчлененка ГГ сплош и рядом (после попадания в неприятные ситуации).
Скелет остается без изменений, а вот меш заменяется на "ампутанта". Этих разновидностей ампутантов у них целая куча (все на один скелет нацеплены, соотв-но и набор анимаций). Оторванные конечности без скелетов вообще и шевелиться априори не могут.

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

Я думаю промежуточный подход был бы само то. Т.е. булевые операции на модель. Один скелет на "главную" часть, "огрызки" же просто рэгдоллятся. Но здесь анимация оставшегося "неполного" персонажа должна быть соот-венно модифицирована. Нельзя же так же здраво бегать будучи без ноги, или махать несуществующей рукой, в которой тем не менее будет прикреплено оружие (точнее к точке в пространстве). Да, во время отладки подобных фишек чего только не насмотришься. Раньше по поводу таких нелепостей не особо даже заморачивались. А сейчас подавай суперреализм и качество. Поэтому без статыщ анимаций различных видов "инвалидов" просто не обойтись.

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

#14
6:36, 30 июля 2014

Dexus
> Это только большие высокобюджетные студии могут нагенерить 150 вариантов
> расчлененных персов с соответствующими красивыми реалистичными текстурами, и
> соответствующих им красивых анимаций, самых разных комбинаций "травм", но это ж
> не для инди
Мне нужно выстроить интерфейс в движке с учетом того. что нужна расчлененка. Отсюда и мой вопрос.

ПрограммированиеФорумГрафика

Тема в архиве.