Сергей Клименко (Moonlight Mouse) - Разработка RTS игры на Unity DOTS
ฝัง
- เผยแพร่เมื่อ 20 ต.ค. 2024
- Появление DOTS стало новой вехой в развитии Unity. Жаркие споры не утихают до сих пор. Год назад Сергей рассказывал об опыте использования ранних версий в продакшене. В этом году он рассмотрит, как изменился этот стек технологий и на примере конкретной игры покажет решение присущих жанру RTS задач при помощи Unity DOTS.
#MadeWithUnity
Презентация: www.slideshare...
Доклады Сергея:
Опыт внедрения Unity ECS и Job System в продакшне - • Сергей Клименко (Moonl...
...отдельно хочется докопаться :) до вычисления видимости через постоянный расчёт дистанции от клетки карты до объекта. Т.е. это у нас (под капотом функции) квадратный корень, когда можно было:
а) сравнивать квадрат расстояния с квадратом радиуса видимости, без квадратного корня.
б) использовать заранее посчитаный массив-маску видимости для заданного радиуса
в) вообще весь туман кинуть на GPU: текстурка 1000*1000 (по размеру нашего массива), дальше рендерим туда круги для каждого объекта, дающего видимость. Забираем отрисованую текстуру: любой цвет выше чёрного - клетка видима.
Вот почему в 90х это было, а сейчас - исчезло? )))
Не думаю, что забирать у GPU текстуру будет дешевле, чем посчитать видимость на CPU. Но вообще выслушал бы мнения, сам разными способами писал, причем изначально абсолютно убогими. Вообще, первый туман войны делал с помощью рендера ТЕНЕЙ от кубов висящих над картой много лет назад, это жесть))
P.S.: Видос полностью не смотрел. Мне части с двумя камерами хватило)
Занулять массив тумана войны не обязательно. Например, помечать видимые ячейки значением из счётчика, который увеличивается на 1 при каждом обновлении тумана: тогда всё, что, меньше этого текущего значения - считается невидимым. Раз в сто лет проверять, чтобы счётчик не ворпнулся.
Записывать, не зануляя - придумано не вчера. Ещё Джон Кармарк это вовсю применял в своих движках. Давайте хотя-бы из уважения к Кармарку хороший код писать :)
кармак сказал, я сделал!
А бывало ли у вас такое, что жобы систем выполнялись быстрее, чем их запуск/инициализация? Просто интересно насколько хорошо будет юнитевская ECS работать с большим количеством систем.
Если job работает на небольшом количестве сущностей, то асинхронный запуск через Schedule() почти всегда будет давать больший оверхед, чем если выполнить job в главном потоке через Run(), который также может запускать Burst-скомпилированный код
По поводу количества систем есть хороший тред на форуме, где обсуждаются варианты на несколько тысяч систем
forum.unity.com/threads/performance-overhead-of-dots-systems.751823/
В общем там есть опасения что оверхед на Schedule() приличный, но с апдейтами его уменьшают и скоро должны подвезти возможность вообще отключать группы систем, если они не используются в конкретный момент в игре
18:00 path finding