Всем привет. Подскажите по поводу многопотока в движках. Я хочу

сделать по стандарту game thread (физика, анимации, игровая логика...) и render thread (куллинг, подготовка данных к отрисовки, отрисовка). И получается например в game у меня есть сцена, которая использует ecs и там я уже посчитал мировые позиции. Как мне их передавать в render? Получается нужно делать что то вроде сигнала семафора из game, например на той стадии рендера, где мне нужно будет рисовать мэши? Я видел подходы по типу делают PhysicsWorld, RenderWorld и там по сути дублируют данные и обновляют их своевременно. Может можно где почитать, как лучше делать?

10 ответов

28 просмотров

Ничего лучше иммутабельного подхода не придумано

а почему на рассматриваешь вариант с fork-join для многопоточки?

adamfull- Автор вопроса
disba1ancer
а почему на рассматриваешь вариант с fork-join для...

Я вообще думаю делать два потока, game и render, каждый из которых делает свою работу и не сильно друг от друга зависит, синхронизируясь только в конце кадра. fork-join вроде как больше для другого рода задач

Геймтред энтити создаёт рендертред энтити, в которую копирует все нужные данные, одновременно обрабатываешь геймтред на текущем фрейме и рендертред на прошлом. Этот подход рабочий, но лочить большую логику в один тред - плохо.

adamfull- Автор вопроса

Ну я в итоге так и думал делать

adamfull
Ну я в итоге так и думал делать

Норм, но вместо геймтреда и рендертреда лучше таск систему взять, если логики много. Пайплайн получается такой: миллион геймплейных тасок->синхронизация->копируем энтити для рендера->миллион рендер тасок->презент

https://logins.github.io/programming/2020/12/31/RenderThreadJobification.html В части статьи описывается, как это работает в UE, что такое прокси объекты и как происходит синхронизация

adamfull
Это как?

создавать копии данных для рендер треда

Похожие вопросы

Обсуждают сегодня

у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
8
У них там что-то своё же вроде!?
Евгений Данилов
5
Кастомные эмодзи для ботов доступны только элите, верно?
山 | Bobby | 山
3
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Второй вопрос: снимаются ли эти ограничения при покупке на fragment хрени за кучу денег? (до 4096 / 2048)
Артем Уколов
3
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
здравствуйте, братья, кто-нибудь знает, как работать с Swift.com или Swift.net?
Ozzy
6
Я вот тут задался риторическим вопросом. Уже как пару дней я пытаюсь присовокупить к Vapor jemalloc, мало того что топиков, как это вставлять в Vapor нет, так еще и хер поймеш...
Евгений Данилов
39
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Карта сайта