Пре-релиз Unity DOTS Entities 1.0

Многострадальный DOTS (data-oriented tech stack) продолжает ползти на свет, несмотря на удары судьбы.

Пре-релиз Unity DOTS Entities 1.0

Предыстория

Для тех, кто пропустил предыдущие этапы сериала (или просто хочет позлорадствовать) , концептуально, DOTS — это попытка переписать ядро Unity исходя из новых архитектурных принципов.

Высокоуровнево предлагалось массовое использование паттерна ECS. Это такой архитектурный паттерн, который в основном используется в играх (иногда в онлайн-сервисах) для представления объектов игрового мира. ECS говорит, что сущности (entity) состоят из компонентов данных (component) , а управляют ими системы (system) . Для примера, если ты делаешь полоску здоровья, то entity — это айдишник этой полоски, component — это какая-то структура для хранения инфы о здоровье, system содержит код который обрабатывает эффекты добавления и удаления. Если полностью забыть про ООП, выбросить все MonoBehavior-ы и переписать игру в таком стиле — она должна резко ускориться. Да и писать в таком стиле гораздо проще — ты режешь задачу на очень четкие понятные срезы и не отвлекаешься на глобальное состояние. Особенно должно помочь для мультиплеера.

С точки зрения оптимизаций, самая большая фича — автоматическое использование Burst Compiler, который позволяет транслировать обычный тормозной C# в высокопроизводительный нативный код, с помощью мэйнстримного LLVM (это такая вундервафля, на которой пишется большинство новых современных компиляторов) . Отдельная технология — это C# Job System, которую впрочем сдизайнили чтобы использовать совместно с Burst Compiler. Повсеместное использование этих штук позволило бы играм на Unity перестать тормозить и упираться в проц раз и навсегда.

Компания Far North Entertainment заявила 2250-кратное ускорение их кода! Если раньше их код выдавал всего 0.013 FPS, то сейчас это почти стабильные 30! (просто шучу, прочитать подробней можно здесь).

Кстати, когда-то очень давно в прошлой жизни я брал интервью у одного из создателей Burst Compiler для Хабра. Там есть эпические моменты, когда чувак так выгорел от работы в банке, что пошел ухаживать за бомжами. Там не очень много платили — пришлось идти разрабатывать Юнити. Это действительно хороший, очень добрый человек. Минутка саморекламы закончена: )

Разработчики Unity обещали всестороннюю поддержку от воркбенча, включая графическое управление сущностями, визуализацию сборки игры из компонентов в дизайн тайме, прямо Star Citizen какой-то. Дорого, богато.

На практике релиз откладывался и откладывался. Оказалось, что нужно переколбасить половину кишков движка, и это работа для разработчиков самого высшего уровня. Избавиться от MonoBehavior-ов не выходило. Разные версии DOTS были намертво прибиты к определенным версиям Unity и код игры требовал серьезного переписывания при апгрейде. Редкий смельчак осмеливался попытаться писать на этом в прод (хотя такие существуют). Люди вообще начали сомневаться — выйдет ли он когда-нибудь, после наблюдений вида «DOTS больше нету в списке приоритетов на 2021», «DOTS выпилили из пакетного менеджера» (объяснение: чтобы кто-нибудь по ошибке не начал его использовать без понимания последствий). Ожидание растянулось на годы.

И вот, счастье не за горами (снова).

Что нас ждет в демке

Разработчики обещают выпустить Entities 1.0 в самое ближайшее время. Ожидается временная совместимость с Unity 2022.2, а вот совсем-совсем уверенным что всё заработает можно будет на релизе 2022 LTS. Годик можно будет попользоваться, а потом… наверное снова всё переписывать?: )

Разработчики признались, что облажались с тем количеством проблем и багов, которое на них свалилось. Им раньше просто не хватало ресурсов всё это разгрести. Entities 1.0 — это то единственное, что они готовы зарелизить. Единственное, но всё равно — большая работа и большая гордость. (Их хотя бы не закрыли! - прим. автора).

Во-вторых, разработчики открыто говорят, что это не какой-то взгляд на DOTS в целом, а только самое начало пути. Документация, сэмплы, туториалы — всё сосёт. Поэтому основная целевая аудитория — матёрые разработчики, которые своими мощными лапищами могут самостоятельно осознать, как это должно работать.

В-третьих, разработчики уверяют, что учли всю боль и все горящие жопы людей на форумах, и это их основная цель. Entities не решает всех проблем внедрения ECS, он решает только то, что активно обсуждалось. Полностью избавиться от легаси GameObjects нельзя, но они постарались нарисовать нам какой-то мост между двумя мирами — обычным и тем, что внутри ECS.

Вот список конкретных фичей, в релизности которых они могут поклясться на жопе Ричителло:

  • Адаптивная архитектура. Позволяет писать ECS, который круто оптимизирован под постоянно меняющиеся требования к геймплею.
  • Интегрированный процесс разработки. Разработчики на жопе Ричителло клянутся в совместимости с миром GameObjects, что позволит вашим кодерам не сильно-то и переучиваться. (Последнее утверждение, скорей всего, неправда, но замнем для ясности) .
  • Контроль и предсказуемость. Генерируемый код будет учитывать платформу, под которую вы собираете билд — все ограничения, трейдофффы, и тому подобное.
  • Производительность как у нативного C++ кода. Вы пишете обычный управляемый код, а он настолько же силён как нативщина, включая параллелизм и детерминизм исполнения.
  • Удобство тотального стриминга данных. Рендерные пайплайны, помноженные на святую мощь ECS, предлагают избавиться от пиков в паттернах нагрузки, при этом обещая не добавлять много оверхеда по памяти и позволяя рендерить с широким душевным размахом.
  • Доселе невиданный масштаб симуляции. Невероятная feature-rich библиотека физики, масштабируемые средства отладки (что бы это ни значило) , удобный API.
  • Масштабируемый мультиплеер. Будут заложены базовые высокоуровневые блоки для неткода, которые позволят писать мультиплеер даже для средних и больших проектов. Для архитектуры с авторитарными серверами, т. е. обсчет игрового мира делается на сервере, а клиенты посылают заявки.

Разработчики говорят, что будут внимательно следить за нашей обратной связью, и прежде чем снова сгореть до стула, всем стоит посмотреть на роадмап проекта.

Пре-релиз Unity DOTS Entities 1.0
Будете ли вы использовать DOTS?
Да
Нет
Блядская птица это заслужила
4343
69 комментариев

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

8
Ответить

чего стоят создаваемые каждый кадр буферыБлядь скажи что ты шутишь

2
Ответить

У нас программист воет от него. Говорит, что всё нравится, но из-за того, что юнити ОЧЕНЬ медленно его поддерживает, возникают проблемы.

6
Ответить

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

Ответить

Пробовали использовать - откатились через пару дней страданий :) Больше пробовать не будем

6
Ответить

В чем были самые серьезные страдания?

Ответить

Паттерн очень крутой, реализация юнити говно. Пробовал очень давно, может, что-то и поменялось.
- Burst джобы не работают с большими объёмами данных (генерил чанки как в майнкрафте, лютейше тормозило из-за копирования данных в нативный буффер и обратно), пришлось использовать обычный мультитрединг из C# вместо них.
- Поддержка ECS в редакторе рудиментарная (есть/был костыльный компонент ConvertToEntity), "pure ecs" нерабочий из-за того, что в движке очень мало pure систем (емнип систем частиц нет и с коллайдерами какие-то проблемы).

Идея зарефакторить весь движок под корень (project tiny) под ECS хороша, но этим никто не занимается. Проект утонул в хреновом менеджменте.

Бросил играться с Юнькой в итоге из-за кое-какой другой проблемы.

3
Ответить