Как мы можем получить поведение Rigidbody в Unity3D Entity Component System? - PullRequest
0 голосов
/ 30 апреля 2019

Я играю с ECS.Я хотел бы знать, возможно ли иметь много кубов с твердыми телами, созданными в виде сущностей, чтобы получить их побольше?

Мне нужны десятки тысяч (если не больше) простых (Mesh)+ Collider + Rigidbody) объекты в сцене только для пассивного взаимодействия со сценой.

1 Ответ

0 голосов
/ 23 мая 2019

ECS - это шаблон архитектуры , который обозначает сущность-компонент-система.В ответ на ваш вопрос;Да.Можно иметь много экземпляров простых сущностей ячеисто-жестких тел-коллайдеров, если вы разрабатываете свой код таким образом, чтобы удовлетворить это техническое требование.Остальная часть этого ответа продвигается вперед с предположением, что вы имеете в виду разработку собственного игрового движка (поскольку в вопросе не хватает деталей)

Из моего опыта (я разработал 2 физических движка и 3 пользовательских игровых движка)Ниже перечислены основные узкие места:

  1. Реализация графики. Неважно, используете ли вы OpenGL или DirectX, неопытные или устаревшие графические реализации являются огромным источником узких мест в узлах движка.Чтобы исправить это, я предлагаю использовать современные учебные пособия по OpenGL , специально для таких вещей, как отложенный рендеринг.В DirectX реализации могут быть довольно сложными, так как для бесплатного онлайн-доступа доступно меньше учебных ресурсов (отчасти из-за того, что подробности реализации сильно различаются от версии к версии в DirectX).Самое новое, что я услышал в последней версии DirectX, это то, что называется сетевые шейдеры , которые, по-видимому, "упрощают" процесс. Исследования будут вашим другом на этом этапе

  2. Физика - это может снизить частоту кадров, особенно при большом количестве столкновений.Если вы не хотите быть программистом по физике, я предлагаю использовать доступные реализации с открытым исходным кодом, такие как Bullet Physics , превосходный физический движок C ++.PhysX является альтернативой, однако реализация может быть сложной, и обе библиотеки страдают от неполной или краткой документации.Эти библиотеки могут быть легко интегрированы (с точки зрения проектирования) в стандартную среду ECS.Если вы настаиваете на разработке своего собственного, я предлагаю прочитать презентации GDC от таких людей, как Эрин Катто, Эрвин Куменс, Джино Ван ден Берген , Дирк Грегориус и т. Д.

Что касается «десятков тысяч», я могу почти гарантировать, что если они не являются сферами, десятки тысяч пассивных коллайдеров будут абсолютно замедлять работу вашего движка с помощью специальной реализации физики.Вы можете тривиально многопоточным пользовательским физическим движком с итерационным решателем в двух областях;Обновление геометрии внутреннего коллайдера (как их ограничивающего объема, так и геометрии мира), а также узкая фаза обнаружения столкновений.Если ваше широкофазное обнаружение столкновений выдает уникальные пары потенциальных столкновений, вы можете легко распараллелить фактическое тестирование столкновений, если ваша геометрия обновляется до этого этапа, так как обнаружение столкновений может считаться задачей только для чтения.Последней простой оптимизацией для физики было бы использовать острова столкновений (см. Оптимизацию в нижней части страницы) , что по существу разделяет столкновения на независимые группы, то есть две башни Джанга будут представлены двумя островками столкновений, икаждый из них может быть решен в отдельном потоке из-за зависимостей данных и природы итерационных решателей.

Для десятков тысяч вы можете даже поэкспериментировать с вычислительными шейдерами , так как они отлично подходят для пассивного моделирования большого количества объектов.Предоставленная ссылка на самом деле включает в себя простые столкновения при обучении использованию этих шейдеров.

...