Пре-релиз 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?
Да
Нет
Блядская птица это заслужила
1212 показов
4.7K4.7K открытий
69 комментариев

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

Ответить

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

Ответить

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

Ответить

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

Ответить

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

Ответить

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

Ответить

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

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

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

Ответить