Destruction System for FPS Shooter in Unity 5

Post on 16-Apr-2017

356 views 11 download

Transcript of Destruction System for FPS Shooter in Unity 5

Destruction System for FPS Shooter in

Unity 5Устрой Destroy!

Чувак, ты кто вообще?

Слава ‘gnoblin’ Панкратов Люблю Unity 7 летvc.ru/p/problem-10081habrahabr.ru/post/112444/

Кто играл в сидж?

о чем референс-игра

Что хотим?

Что хотим?

Разрушать уровень в Unity,

как парни из Ubisoft в Rainbow Six: Siege.

(disclaimer)

Special Thanks

•Roman Chehowski•Volodymyr Dotsenko (defaxer)•Артем Нетягин

Team

•Вадим Янтбелидзе (код).•Александр Горячев (арт) https://allien.carbonmade.com/.

•Слава Панкратов (просто какой-то чел)

План

интро (н.у.) и сам алгоритм (в.м., с.), 20 мин, вопросы

Задача

•Хотим в реалтайме из 16 стволов рушить 200-300 стен на 30-45 тысяч кусков (2-3 млн треугольников).

•Оставляем возможность задавать произвольную форму для кусков (чанков).

Какие варианты (раньше)?

Конец 2014го года - на ассет сторе нету подходящих решений с прицелом на высокую производительность.

Какие варианты (сейчас)?

1. Fracturing & Destruction (автонарезка) assetstore.unity3d.com/en/#!/content/9411.

2. DestroyIt (круто!) assetstore.unity3d.com/en/#!/content/18811.

3. Fragmented Objects (прикольно!) assetstore.unity3d.com/en/#!/content/25699 (но алгоритм пригодится все равно)

DestroyIT

Fragmented Objects

Assetstore

Пишем велосипед

Внешний вид уровня

модульный дом, три этажа, десятки комнат

Внешний вид уровня

Внешний вид уровня

Префаб стены

Разрушение

скрины разрушенного дома

Разрушение

скрины разрушенного дома

Разрушение

скрины разрушенного дома

Pipeline (суть)

• Художник предварительно готовит ассеты.• Хитро запекаем и прокрашиваем геометрию

эдитор скриптами.• В рантайме синкаем изменения по сети,

(передавая айди стены и айди чанка), размазываем нагрузку по кадрам, ведем себя хитро и рушим стенку способом,

похожим на прогрессивный jpeg.=> Получаем стабильный фпс и возможность

разрушать весь уровень с приемлемой детализацией.

Pipeline (арт)

• Художник готовит чанки (неразрушенный вариант, 9 лоуполи чанка, 144 хайполи чанка) для каждого вида “стены” (стена, пол, дверные проемы, баррикады).

• заготовленные варианты под взрыв стены• перегородки

Pipeline (Editor scripts)

• Запекаем chunkID эдитор скриптом в uv2.• Cоздаем кеш треугольников (список туплей с

информацией про чанки).• комбайним чанки в цельные меши.• одеваем везде лодгруппы с упрощенными

материалами.• Программно дублируем префаб и входящие в

него меши, прокрашиваем 14 комбинаций цветов обоев в vertex color.

• на каждую “стену” на уровне ставим закрытый портал.

Pipeline (Runtime)

• uv2 chunk id для определения куда мы попали (когда есть геометрия), виртуальная сетка на кубе когда не разрушена

• два отдельных скрипта с chunk HP (под целую и покоцанную стену)

• триангл кеш, убирание треугольников• стандартный occlusion culling (закрытый портал на целой

стене, при появлении дырки портал открывается). SECTR VIS.• передаем айди стены и айди чанка в стене по сети, чтобы

засинкать изменения на других клиентах.• размазываем нагрузку по кадрам, если в один момент

времени надо разрушить много чанков.

Устрой destroy!

Вопросы?

skypeid: madkust