Cheb's Game Engine

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Re: Cheb's Game Engine

Сообщение Alex2013 » 29.01.2023 02:01:20

Cheb писал(а):З.З.Ы. Ёлку демонтировал, упаковал, убрал на антресоль.

У меня живая но сосна (+ подставка с ведерком ) так что разбирать аккурат завтра буду .

Немного ближе к теме ... Всю неделю провозился сам себе выбирая себе подарок на др . С "горя" ( ничего из более дорогих хотелок в "бюджет осадного положения" не влезло ) выбрал себе совсем уж копеечный проектор Everycom M7 Plus (Матрица 1280×720 )( Проектора у меня ни разу не было, а тут оказывается что подешевели, вообщем завтра должен приехать. Опасаюсь что подложат свинью (есть модели с матрицей 800×480 а это "только для кино" )) Вообще хотелось добыть что-то с автономным питанием ( блэкауты по прежнему доставляют ) но глянув на реально доступный асортимент пико-проекторов не впечатлился, лазерных вообще недостать, а все прочие "в сувенирном исполнении".


Вообще, проекторы это так сказать "не мой путь". Я если и хочу заменить монитор так чем-то VR/AR/MR

( Кстати в пределах "разумной достижимости" появились ДР очки Nreal Air о которых я писал ТУТ Функционал с точки зрения железа и софта достаточно убогий ( Уровня примерно древнего Окулус Гоу), но форм-фактор и плотность изображения весьма радуют.)

Однако, проектор хорош тем что можно дополнительно не вкладывая ни копейки посмотреть как будет смотреться прога на мониторе практически любого размера . ( Разрешение конечно предать на дешевом проекторе точно не получится но вот например масштабирование элементов управления можно "подсмотреть " ) В VR это как-бы тоже возможно но "привязка к реальности" там всегда довольно условная. Ну и возможность дешевого "плазмо-заменителя " с коллективным просмотром даже банальных "отпускных роликов и фоток" или фото архивов признаюсь тоже привлекают .
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение Alex2013 » 31.01.2023 00:00:00

В догонку: помотав два дня нервы проектор все же до меня добрался.
ИзображениеИзображениеИзображениеИзображение
Как "дополнительный монитор" увы не слишком впечатляет ( Яркости достаточно но разрешение и четкость хромают )
Жалко что я давно совсем не игроман... Игры смотрятся довольно неплохо ( Даже старенькая PS2 заиграла новыми красками )
Работать "как на мониторе" в принципе при наличии нормального экрана* наверное можно но только в отсутствии альтернативы разрешение у этой поделки хромает (1280х720) да и оптика дешевая .
*( сейчас проецирую на обои бо семейный "легаси" экран хоть и "радиально белый" но от старости пошел волнами да и "рубчатый" то есть не рассчитан на сколько нибудь высокое разрешение )
Ps
Извиняюсь за оффтоп
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение Cheb » 01.02.2023 09:13:09

Alex2013 писал(а): проектор все же до меня добрался.

:) с прибавлением :)

Alex2013 писал(а):можно дополнительно не вкладывая ни копейки посмотреть как будет смотреться прога на мониторе практически любого размера

То есть, фактически, прототипирование.
Хм.
У меня начинает зарождаться смутное подозрение, что моя парадигма виртуального разрешения несколько... несовершенна.
Друг работает в геймдеве - так у него 4к монитор... И эти штуки *здоровые*. Дюймов тридцать по ощущениям. А смотрят на них с того же расстояния... То есть, нельзя просто взять и войти в мордор - в смысле, растянуть интерфейс пропорционально - и надеяться, что это будет работать.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Alex2013 » 01.02.2023 20:38:46

Cheb писал(а):
Alex2013 писал(а): проектор все же до меня добрался.

:) с прибавлением :)

Спасибо ... Как там? "Я в своем стальном лесу гордо голову несу !" :wink:

Alex2013 писал(а):можно дополнительно не вкладывая ни копейки посмотреть как будет смотреться прога на мониторе практически любого размера

То есть, фактически, прототипирование.
Хм.
У меня начинает зарождаться смутное подозрение, что моя парадигма виртуального разрешения несколько... несовершенна.
Друг работает в геймдеве - так у него 4к монитор... И эти штуки *здоровые*. Дюймов тридцать по ощущениям. А смотрят на них с того же расстояния... То есть, нельзя просто взять и войти в мордор - в смысле, растянуть интерфейс пропорционально - и надеяться, что это будет работать.


Именно. Правда в моем случае внезапно оказалось что есть ограничения по минимальному размеру проекции ( запаса хода линзы не хватает для фокусировки ) но увеличение "в плюс" хоть на всю стену ( то есть с запасом ). Жаль что чуток маловато вариантов "встроенного масштабирования" по сути всего два 4:3 и 16:9 ( но это в принципе решается выбором разрешения источника и режимом "точка в точку" павда с большими потерями проекционной сетки ). Что еще интересного есть просто дикая разница между подключением по VGA и HDMI ( нативное разрешение "до полного удивления" лучше на HDMI, а все остальные лучше на VGA )
VGA
Изображение
HDMI
Изображение
Зы
Прикол: нашел на балконе гнутый лист ламинированной фанеры оп-ля "Привет модный вогнутый монитор!" ( Смотрел нарезку HD из аватаров в том числе и стерео (аниглиф) прикольно ).
Выглядит примерно так ( "сферическое искажение" пришлось делать програмно, но если гуть экран не слишком сильно можно и без него обойтись ):
Изображение
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение Cheb » 02.02.2023 23:27:37

Alex2013 писал(а):Выглядит примерно так

Вот это реально круто!
Смекалка и сподручные материалы - и человек способен прыгнуть выше какого-то там ценового потолка :D

По проекту: ковыряю какан (со стороны апи: сначала переписываю на этот апи код рендеринга, подгоняя, как удобнее - а имплементацию этого апи буду делать потом). Встал вопрос, а зачем мне танцы с использованием фиксед пайплайна на OpenGL ? под GLES ея нету, шейдеры для того же самого по любому, код усложняется и обрастает городушками.
Тогда зачем?
Оказалось - инерция мышления. Учился использовать шейдеры, когда среди тестовых машин ещё числились Gf 5200 FX (январь 2003) и Gf 7025 (июль 2005). А нивидевские карты того времени, ранние и кривые (а эти две - ещё и дно своих модельных линеек) тормозили с GLSL шейдерами так, что не вытягивали FullHD на простой заливке цветом (без овердро, один проход). Поэтому, парадигма была такая: рендерим шейдером в FBO (два разного размера, в этом парадигма не поменялась), потом эти текстуры композим в бек буфер одним проходом фиксед пайплайна. На днищевых видяхах автобалансер сгонит размер текстур для рендера куда-нибудь в район 360p и частота кадров останется 60 - и всё в шоколаде.
Но ископаемых-то я этих уже лишился (5200 не умеет npot и AGPшный гроб под нея - одноядерный, для 7025 из дебиан выкинули драйверы) - короче, давно поднял минималки до Gf 8400 GS / Radeon HD 2600.
Так нафига тогда козе баян?
Поддержка FFP наконец-то упокоится с миром.

З.Ы. Ютуб, 20 Video Games Running On NVIDIA GeForce 7025 - зацените слайд-шоу, как говорится! Фолаут нью вегас аццки тормозит, а скайрим подёргивается на четырёх fps, помаргивая глючащими текстурами. И это в позорно низком разрешении!
Филлрейт - все черепахи делают рукалицо.

З.З.Ы. Вот ещё чей-то крик души от декабря 2004-го: https://community.khronos.org/t/program ... tion/52401 . 5200 в своём репертуаре.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 04.02.2023 15:27:28

Обновил официальный сайт http://chentrah.chebmaster.com приведя все разделы в соответствие с реальностью.

Починил лог разработки http://chentrah.chebmaster.com/?what=log : при сравнении со старым двуязычным http://chebmaster.com/cge/cge.html оказалось, что многие записи имели неполный перевод на английский или вообще отсутствовали.

Однако, https по прежнему не работает: версия certbot , установленная через apt get - старее, чем была вштырена костылями до переустановки ОС. И обновить сертификаты не может, давится несовместимыми конфигами. А с нуля всю эту байду окучивать всё лень.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 10.02.2023 04:33:51

Собирался выкинуть такую сущность, как "фоновые задачи" нафик, но по здравом размышлении, их надо вернуть - иначе впереди боль переделывания, когда они таки понадобятся.
Накодил примитивный FIFO буфер с пузырьковой сортировкой не до победного конца, а на три прохода за кадр, и с приоритетом задач, растущим экспоненциально от времени. Интересно, как это будет работать. Приоритет задачи вычисляется виртуальным методом, он может расти, может падать - и по нулю задача протухнет, может быть вообще статичным, а параллельно этому может быть срок годности, по достижении которого задача протухнет по любому. Ажно 350 строк модуль!

Добавлено спустя 9 минут 49 секунд:
В отличие от прошлого зоопарка с зависимостями между ассетами (задача чтения из пак файла, задача декодирования прочитанной картинки, задача загрузки текстуры, мать, почему всё зависло?), каждая задача - это вещь в себе.
Но есть несколько очередей разного назначения.
А. Чтение из пак файла + декодирование картинки - это фоновая задача для фоновых потоков онли.
Б. Загрузка картинки в текстуру - это каканова задача фазы рендера в основном потоке.
Вижуал "текстура из файла" сначала порождает А), которая может ждать общеприложеньевого флага "все пак файлы распаршены", чем занимается задача Ы), созданная ядром движка при запуске. Но друг о друге задачи *ничего* не знают.
Вижуал, в фазе рендера проверив, что А) завершилась, забирает у ея картинку, удаляет ея. и порождает Б).
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 11.02.2023 20:20:08

Стал ваять скелет для сессии, управления логикой. Понадобилось допильть к базе данных фичу "стереть всё нафик", поскольку теперь не только логика не перезапускается с загрузкой игры - теперь вообще менеждер БД не выгружается/пересоздаётся, как раньше, а остаётся работать. И в длл режима разработчика тоже надо всё чистить, т.к. она использует менеджер памяти екзешника-матки.

..и что бы вы думали? Оказалось, у меня в TChepersyObject.FreeInstance не было вызова CleanupInstance!
Какой позор! Какой выстрел себе в ногу! :oops:

Стереть всё нафик:
Код: Выделить всё
procedure TChepersyMemoryManager.Reset;
begin
  if Assigned(DefaultGraveyard) then DefaultGraveyard.Flush;
  DeallocAllInstances;
end;

procedure TChepersyMemoryManager.DeallocAllInstances;
var
  chunk : TChepersyMemoryManagerChunk;
  ak: TCpsAccFieldKind;
begin
  for chunk in AllChunks do
    if Assigned(chunk)
      then chunk.DeallocAllInstances;

  for ak in Cps.CpsAccFldAllocated do begin // drop them in all surviving empty chunks
    DropAcceleratedField(ak);
    Cps.CpsAccFldAllocated-= [ak];
  end;
end;

procedure TChepersyMemoryManagerChunk.DeallocAllInstances;
var
  p: pointer;
  i, j, i1, i2, j1, j2, k, amh: integer;
begin
  if f_AllocCount = 0 then Exit;

  i1:= f_IdxLow div (8 * sizeof(pointer));
  j1:= f_IdxLow mod (8 * sizeof(pointer));
  i2:= f_IdxHigh div (8 * sizeof(pointer));
  j2:= (8 * sizeof(pointer)) - 1;
  for i:= i1 to i2 do begin
    if f_AllocMask[i] <> 0 then begin
      if i = i2 then j2:= f_IdxHigh mod (8 * sizeof(pointer));
      for j:= j1 to j2 do begin
        k:= j + (i * sizeof(pointer));
        if k > f_IdxHigh then break;
        if (f_AllocMask[i] or (ptruint(1) shl j)) = 0 then continue;
        p:= pointer(Self) + ptruint(k * f_Size);
        TChepersyObject(p).CleanupInstance; // frees arrays and such
      end;
    end;
    j1:= 0;
  end;

  amh:= f_IdxHigh div (8 * sizeof(pointer));
  SetLength(f_AllocMask, 0);
  SetLength(f_AllocMask, amh + 1);
  f_AllocCount:= 0;
  f_FreeCount:= f_IdxHigh - f_IdxLow + 1;

  // One chunk per size category *will* survive, with flags containing trash
  // in case it's this one,..
  DropAcceleratedField(0);

  Cps.MemoryManager.OnChunkBecomingEmpty(Self);
end;
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 13.02.2023 22:23:38

Ай-яй-яй! Когда выбирал бОльшую ширину столбца для кода - пошто я выбрал некошерные 120 символов?
Традиция диктует следовать канону SuperVGA. А какие текстовые режимы были у SuperVGA кроме 80 стобцов?
132 столбца.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Sharfik » 13.02.2023 23:09:06

А как насчет присобачить в движку клиент-серверное p2p решение, и внутренний редактор мира. Чтобы можно было каждому купить по фанере с проектором, и погрузиться в мир вирта, где была комната с дверьми, которые вели на сервера соседей. Получится помесь "черновика" и "лабиринта отражений" у Лукьяненко. Надо еще распознание движений через камеру запилить только, чтобы мимику считывать.. и да знаю, что много хочу))) Но какая перспектива у фанеры!

ПС: А проекторы все так же дико неприятно жужат под ухом?)
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: Cheb's Game Engine

Сообщение Alex2013 » 14.02.2023 07:12:46

Sharfik писал(а):А как насчет присобачить в движку клиент-серверное p2p решение, и внутренний редактор мира. Чтобы можно было каждому купить по фанере с проектором, и погрузиться в мир вирта, где была комната с дверьми, которые вели на сервера соседей. Получится помесь "черновика" и "лабиринта отражений" у Лукьяненко. Надо еще распознание движений через камеру запилить только, чтобы мимику считывать.. и да знаю, что много хочу))) Но какая перспектива у фанеры!

Это примерно то что я хотел добиться в качестве выхлопа от своей ОpenVR технодемки ..
Изображение
( Задумка там как раз такая "демка-с-редактором-демок" (с сетью на основе веб-теха ) сейчас идея отложена до получения возможности писать VR программы для Окулус Кваст 2 и окрестностей (Пико 4 и т.п.) бо просто ОpenVR интересен но не перспективен )

ПС: А проекторы все так же дико неприятно жужат под ухом?)

Жужат куда без этого . Но терпимо ( кулер как на 486-м или первом пне ) удивительно но 40-50 ват лед-лампа почти не греется )
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение Cheb » 16.02.2023 17:29:57

Sharfik писал(а):А как насчет присобачить в движку клиент-серверное p2p решение, и внутренний редактор мира.

Вы, коллега, явно ошиблись не просто дверью, не просто комнатой, а даже городом :D
Совершенно не в моего коня корм. Мне бы до заявленной игры доползти, хотя бы за год разработки - см. диздок сколько-то страниц назад.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 26.02.2023 00:30:21

Отложив на пол-дороге другие механизмы - взялся, наконец, за основы лагокомпенсируемой архитектуры.
Умных указателей решил не городить - ибо и так голова пухнет при взгляде на движок БД.
Все механизмы для построения лагокомпенсации в БД уже есть.

Краткое содержание предыдущий серий: Лагокомпенсация - за счёт "слоёной" реальности, где каждый слой может тикать независимо, и на основе этого - классический локстеп (благо, Паскаль умеет в воспроизводимость, благодаря стандартизованной до бита математике с 32-битными флоатами), где базовый слой тикает на 500мс в прошлом, получая финализованные инпуты всех игроков (не успел дойти - отбросить), а всплывающие слои - тикают ускоренно, собирая доходящие с задержкой инпуты других игроков и донося их влияние на игровую реальность до текущего момента. Слои - краткоживущие, всплывают - и самоликвидируются. "Слой настоящего", в котором шурует локальный игрок - на деле преходящая времянка, верхний из вплывающих слоёв, который ликвидируется, когда его догоняет всплывающий снизу.
"Всплывающий" означает, что он тикает с таким ускорением, на какое у проца лошадиных сил хватит, пока все слои между собой не выжрут целое ядро на 100%. Чем мощнее проц - тем менее дёрганая лагокомпенсация и тем более бессмысленная и беспощадная эта гонка всплывающих. Перегрелся? Вентилятор надо было вовремя чистить.

Система неэпически понтовая и экономичная, и вот как выходит ея имплементация:

1. порождение нового слоя ничего не стоит. Буквально ничего. Все задействованные механизмы - ленивые, выполнить аллокацию ускоренного поля и аллокацию индекса в пространстве из восьми индексов (индекс запихан в три бита маски) - и всё.

2. Слои образуют древовидную структуру. Ориентировочно, у базового Зеро на глубине -500мс - два дитя, глубокий всплывающий А и ближнее дно Б, которое висит на глубине -150мс и спамит мелким всплывающим В (второй элемент цепочки), который, всплывая на поверхность настоящего, заменяет собой настоящее Г, отправляя на свалку истории. Итого: у Зеро два дитяти, А и Б, у Б - тоже два дитяти, В и Г. Это кроме тех случаев, когда А выпинывает Б вверх, заменяя его и становясь Б, а бывший Б становится В. В таком случае, у Зеро - три дитяти: новый А, Б и В, а Г - дитя В. Когда этот редкий всплывающий-всю-дорогу дойдёт доверху и станет Г, случается редкая ситуация: у Зеро, три дитяти, А, Б и Г, а у Б - один, мелкий всплывающий В. Поскольку ближнее дно спамит мелкими всплывающими не по детски. Первым - Г, на скорости 1.0, Потом - задание Какану на рендер, на основе Г. Затем - Зеро и Б, на скорости 1.0, потом В, на скорости 2.0, потом А на скорости 2.0, а потом снова В - на всё оставшееся время кадра, до железки - или пока не упрётся в настоящее, выпнув Г.

3. обращение одним объектом к другому на чтение его свойств - относительно легковесное, но не бесплатное. Надо при *каждом* обращении к объекту вызывать его метод PeekForRead, который вернёт клон, актуальный именно для текущего слоя. Ну, и в идеале, весь код засран ассертами Assert(not WrongLayer, 'Wrong layer, d00d!'); Потому что, за отсутствием умных указателей, ссылка на объект как была, так и остаётся на экземпляр, актуальный для того слоя, в котором был создан ссылающийся. А объект с тех пор мог расслоиться-расклонироваться. И получение текущего - подняться по всей цепочке наследования слоёв, проверяя "А если найду?". Но не всё так плохо: планируемая длина этой цепочки - ровно два дочерних, а проверка заполненности ускоренного поля - один бит на инстанс.

4. обращение одним объектом к другому на его модификацию - относительно легковесное, *только* посредством передачи события через вызов WakeUp, который сначала склонирует объект в текущий слой, потом прервёт сон раньше запланированного (а спать они у нас могут по 500 тиков, для фаербола, летящего в пустоте между точками А и Б), и, наконец, вернёт актуальный клон. В идеале, у лагокомпенсированной энтити наружу не должны торчать никакие методы, способные её модифицировать, кроме виртуального Подъём(ЖриЭтоСобытие). А если таки торчиа - то уляпаны ассертами, как фонарный столб в девяностые - рекламными объявлениями.

4а. дополнительная цена - события это классы. И каждое взаимодействие - вызов конструктора, а потом освобождение инстанса, задалбывающие штатный менеджер памяти. Классы - потомки TObject, не приндадлежат БД, не сериализуемые.

4б. спящий объект просыпается в нужный тик за счёт отправленного самому себе черед шедулер события-будильника. И вот эти уже - сериализуемые и лагокомпенсируемые. У него ещё ссылка на это событие, отменяет, если разбудили раньше другим способом.

5. налог на всю эту воздушность и легковесность (дарзанебы, бро!): инстанс не может быть освобождён, пока не протухнет последний всплывающий слой, пересекавшийся с ним во времени. Потому что там на него может быть ссылка, по которой кто-нибудь полезет из его ускоренных полей выковыривать ссылки на клоны. То есть, на 500 милисекундных тиков, каждый слой тащит за собой цепочку из 500 кладбищ.
Наклает суровые ограничения на полёт эскадрона мыслей шальных: да не намусоришь ты короткоживущими инстансами. Иначе пямять засрётся только в путь.

Добавлено спустя 11 часов 10 минут 55 секунд:
Терминология
Код: Выделить всё
type
   TLayerRole = (
    lro_Bottom, { Дно.
      In multiplayer, runs at -500ms using perfect inputs finalized by the server. }
    lro_DeepUpwell, { Глубинный восходящий.
      Propagates changes from the bottom to the thermocline, thus lazily correcting for late inputs }
    lro_Thermocline, { Термоклин.
      Holds steady at -150ms, assuming most inputs arrive *above* it }
    lro_FastSurfacing, { Быстрый приповерхностный.
      Bubbles the changes from the thermocline to the surface thus doing the bulk of lag compensation }
    lro_PresentSurface { Поверхность настоящего.
      Runs on local player inputs }
  );
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 01.03.2023 12:01:47

МАССИВНЫЕ правки диздока в процессе перевода на английский - ждите, пока переведу взад.

Работа над кодом приостановилась вследствие дедлайна на работе.

P.S. Мои сайты лежат из-за неудачного апгрейда сервера: SATA контроллер с прошивкой 2006-го года стало сосисть и колбасить при виде новых 4Тб дисков, прочитал самсунг как ASSMNU. А запчасть из магазина шла со скоростью снулой улитки.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение runewalsh » 01.03.2023 23:32:30

Cheb писал(а):благо, Паскаль умеет в воспроизводимость, благодаря стандартизованной до бита математике с 32-битными флоатами

Не умеет, я пробовал сделать функцию LdExp(single) и она в зависимости от платформы могла считать точнее single, и причина, видимо, неизвестна (пример в обратную сторону, где расчёты в 10-байтном extended имеют точность double). Даже если бы всё работало, если ты так уж заинтересован в полной воспроизводимости, иметь свою фиксированную запятую — дело чести...
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25

Пред.След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

Рейтинг@Mail.ru