В этой статье я покажу и расскажу на примере собранного за пару часов проекта, как работают 2 самые популярные и очевидные механики разрушения в играх.
Статья является дополнением основной статьи :
Эволюция разрушаемости в играх
В роли уничтожителя выступит пушка :
Основанная на физике система разрушения
Разберем обычный для игры момент : уничтожение забора снарядом.
Снаряд обладает физикой твердых тел, значит он может сталкиваться и в моем случае подвержен гравитации. Забор на первый взгляд состоит из 5 досочек, визуально так и есть, но на самом деле он содержит в себе множество кусочков, из которых их получается цельная модель.
Как можно заметить в центре досочек повышенная концентрация кусков, а вернее будет говорить щепок. Я разбил модель таким образом, чтобы она эффектнее ломалась. Сейчас досочки не подвержены гравитации, но в момент соприкосновения с ядром из пушки, гравитация включается и они отлетают.
Менее очевидный, но более зрелищный пример :
В этот раз куб разрезан как попало, не для выстрела из пушки, его маленьким осколкам я настроил меньшую массу, поэтому они улетают далеко.
Вот так выглядит сетка :
А так далеко части разлетаются после выстрела :
Логика работы такая же. Ядро задевает первые куски куба, включается гравитация, ядро их расталкивает, куски расталкивают друг друга и разлетаются далеко.
Деформация модели
Механику деформации модели используют в исключительных случаях, а где-то разработчики идут на хитрости, например воронку от снаряда легче создать отдельным объектом, ведь для деформация ландшафта (обычно одна большая модель) необходимо иметь высокую полигональность, но при этом он не будет очень детализированным. Для того чтобы получить максимально четко деформацию, модели делают высокую детализацию, даже если это просто куб .
Обычный куб :
Куб маминой подруги :
Как можно заметить, каждая вершина модели переместилась глубже внутрь, в зависимости от силы выстрела, такие операции весьма затратны, особенно когда дело касается полноценной игры, которую загружают еще сотни скриптов и операций.
Для демонстрации был использован игровой движок Unity.