А если писать код на голых malloc и free, вылавливать утечки будет еще одним повседенным занятием. А вот найти, какой именно из пятисот вызовов выделения памяти не получил свой free это задача со звездочкой. Если думаете, что умный GC или умные указатели решают эту проблему, то нет... не решают. Они просто меняют природу утечек и вместо утечки памяти получаем утечку ссылок и какой‑нибудь забытый менеджер сцены продолжает держать ссылку на невидимый объект, а тот по цепочке держит текстуры и звуки.
как мне кажется на С++ зависит от архитектуры... (+ если модули, если удобно настроено иде отловить можно я всё еще думаю), просто, чтобы легаси 10к-100к loc покидать по модулям и сохранить архитектуру времени уйдёт конечно, это понятно конечно....
я щас тоже с этим столкнулся на полигональном движке(не воксель), планомерное создание ворлд менеджера, который я допилил и в мейне вся обвязка, пускай и аккуратные, стали нечитаемым полотном, успокаивает только то, что вся система работает(opengl4.6) не спешите смеяться и минусовать, потомучто альтернатива по низам покачто, мультилаер-хейтмап мир система(бесконечный бесшовный мир, тот самый), пускай и дорого по памяти(чанк система честно рисует только регион-лаеры и это удобный паттерн, 3 слоя, горы, вода, полотно мира, оклюзятся по фрустуму чанка оч удобно, если подобрать размер чанка, статтер есть(если подобраны размеры он малюсенький, соотв нагрузка на трид пул не такая большая, тут задача стоит просто разгрузить поток 3-4 потоками, чтобы микрофриз убрать), но для релиза придётся делать мультипоток на загрузку не сгенерированных местностей бесконечного бесшовного мира если он нужен, если мир не ограничили или он очень большой, например, щас пока что так смотрю ) ), но если сравнить с ААА, то по памяти оптимально, а MDI + texture array (в связке с мультипотоквым бесшовным бесконечным миром) перекрывает всю сложность Вулкана на сегодня покачто.... да на 2026 даже так можно как в 2000 практически(добавились только MDI, texture array, остальные ништяки тогда были известны), а вулкан для меня гемор, я сам мультипоток могу построить )
уровень сгенерировал, пещера сделана на уровне редактора.
а у меня так же, я на пути пока понимал как делать 100 раз разочаровался и теперь просто делаю то, что нравится в 3д, система уровня готова осталось так по удобству и по рефакторингу.
как я понял, в каждой сложной теме свои нюансы, с которыми надо разбираться, будь то работа с памятью, или укладка чанк систем (воксель/невоксель), тут как говориться на сколько хватает терпения, в студиях даже не знаю, начать то можно и с 2д это понятно, но 3д просто интереснее... угасание скорее всего может происходить из-за осознания масштаба проблемы, её как я понял главное локализовать и свести до класса или системы, тогда поидее попроще, но рефакторить всё равно надо будет как я понимаю.
ну тоесть получается на десктопе вся та портянка зависимости получается ляжет в память по счетчику ссылок или только родители/дети, я не знаю как в ембединге вежет себя ява и не до конца понимаю внутрянку языка, но там помойму внутрянка решающая, тоесть это возможно придётся переписать весь язык, ведь нью может запускать каскад нью под капотных типо нетривиальных, они тоже подцепляются на счетчики интересно, если так, то на интрузивном счетчике ссылок на С++ можно целый аналог явы чтоли сварганить ?) мне кажется это было бы проще, хотя то как ява оптимизирована в плане запуска байт-кодов восхищает конеш........ интересно очень, но ничо не понятно )))
вот чо получилось, прикольно что мир бесконечный) - если придумать как дампать его, а так его можно сделать на 10 гигабайт или 1 и там заделать прототип полноценный уже, но пещер пока нету, зато есть ландшафтный генератор, генератор дорог от него можно получить точки город, поселение, хаб и прочие ништяки, ну и есть пресетная жидкость) по сути полноценный движок... )
тут я цель выделил и отвел центр для скрина, попанорамнее, уже батл система простенькая тоже есть, но всё пока на масштабе, я пока механики не прописывал, пока всё грубыми мазками )
ну и тут я не вывел лес, да, могу уже лес поставить, соотв траву посадить, ну и прочее, а у моба уже логика есть тоже, так же он определяет где я может бежать за мной атаковать и отправить меня на спавен ) кароче мега интересно получается и классно, но рефакторить триллионы лет это, а так утечек пока нету )
классный визуал у вас, мне больше нравится сглаженный и такой олдскулл с туманом, тропинками, лесами, опушками, океанами/реками/морями, я щас как раз тоже делаю пет-проект на Opengl4.6 DSA, созрел наконец-то, полноценный мир бесшовный) где есть пещеры и прочее, кароче РПГ игра, пока проект у меня на прогонке теста гипотезы, но вообще там всё работает как в воксельке ), кстати хотел бы вам посоветовать, сделайте воксельный движок(понимаю что мне щас накидают в панамку, но специально хочу минусаторам написать, что воксельный бесконечный мир база для открытого мира, меняется только ситуация, а всё остается как в концепции воксельки, просто оперируем 2д составляющей как в олдскулах, тоесть по-сути это технология 2000 года ) )), он база для вката в такие миры, какой вы показали, в гонках просто подгружать побыстрее надо чанки) и в релиз-релиз билдите ) я уже по некоторым причинам рабочую демку показать не могу, долго сбрасывать тестовые текстуры в цвет ), но у меня уже полноценный 3д редактор мира с дампом на диск ) без анриала, поэтому и советую )
насчет ИИ расуждающих моделей, они уже могут, что-то вам подсказать по концепциям и показать скелет - основу реализации, как и почему другой момент.
момент про что будет никто не знает, потомучто эра агентов даёт сингулярность, разраб если он один тратит деньги и остаётся со скелетом, что сделал рой 1 на 1, и как вы представляете правки в проекте, который равен например 7 летнему проекту, который делала комманда людей на протяжении 7 лет.
"по началу кажется вот щас напишу движок у меня он будет легче, потом почитал то сё, посмотрел там сям.... и вот уже клиент весит 2 гига на диске, а движок стал тяжелым..., поначалу кажется, щас перепишу либу 1 в 1 с нуля снизу вверх и она будет легче, но это тоже иллюзия любое погружение в конкретику родит ту же либу жирности, и возможно родит новые проблемы", но, поучиться возможно да удобно....
если вам так интересен ваш "ps" - рассуждающие модели уже могут показать вам скелет, зависит от промпта как подойти к глобальной сложной теме, чтобы рассуждающая модель подделась и начала вам обьяснять по шагам как делать..... если это прям под ключ, то врятли, проблема в контексте, сложные задачи без декомпозиций, тригерят модель на растекание контекста как я понимаю, и если глубина маленьная, модель или быстро забудет или запутается, или в лучшем случае вы доделаете только скелет, а дальше разраб остаётся 1 на 1 с горой текста ) который как мы понимаем надо рефакторить, кто будет его рефакторить такой)?)
В семидесятых Джордж Акерлоф в своей работе про «рынок лимонов» объяснял, что если покупатель не может визуально отличить качественную б/у машину от «хлама» (lemon), то цена на рынке усредняется, качественные машины уходят, и рынок заполняется теми самыми лимонами.
нельзя исключать сегодня условия в которых мы живём, если условная корпорация или компания создаёт условия для того, чтобы быстро и дешево, но при этом берем только лучших... или условно бумеры, которые стареют или уходят с работы создали условия для топ менеджмента(бам вау) набрав зумеров, а другой бизнес создавал почву для быстрого контента, все эти слои и эпохи живут в одном пространстве и даже тот главный директор тоже живёт в обществе... получается зумеры придут в команду где малое количество бумеров и переделают игру например с путешествия на сессионку ) смотрите какой круговорот получается, бумерам было интересно предположим, предположим они были пользователями винды ), а приходит человек в игру путешествие и он даже не играет не то, что в игры, а в ту игру какую пишет/делает, получается делает от звонка до звонка, да и плюс готов переделать весь непонятный якобы "legacy" получается на выходе игра, которой не было в начале...
туда же можно кинуть в какой-то степени обсуждения (идею Бэтмена, по сути она о том же рынок идёт вперед, ну ты 1 захотел делать такую игру типо... когда игры уже другие типо ))
туда же кинем еще метрики, те люди которые делают игру по метрикам, то что люди в городе стоят или то что есть выход дополнений 5летиями(органично вписывается вообще в ритм человека), человек по метрикам посмотрит ага 70 процентов в городах стоят, он даже не поймёт, что обычно играют в игры люди, и во многих стареньких играх, которые до сих пор поддерживаются постоять в столице сколько хочешь это нормально), или интерфейс по метрикам туда же) метрика показывает человек при X и Y не жмёт кнопку, а сразу выходит, является ли метрика понятным и категоричным носителем достоверной информацией прибыли, а ничо, что человек просто захотел выйти ?) или хочет постоять в стоилце ? или ставит аддон и убирает кнопочку какую-то )
Кодзиму любят, потомучто у него в курьере есть что-то такое типо старых идей, по крайней мере по рекламе мне прям понравилось, например....
а щас еще на подходе ИИ контент игровой наверно и прочие сопуствующие) операторы ИИ наверно и прочее... контент не просто ускорится поидее, а сплющится, вопрос только останется открытым, а ускорение создания влияет ли каким-то обзразом на общество?
читать память игры ради переводчика, это намёк, что внутри игры чат не переводится под зашедшего в игру игрока чтоли?)
круто наверно.... в клиенте есть тактики на сколько помню, и на ресурсах вокруг вова есть обьяснения тактик на сколько помню с какого-то аддона в этом не помню проблем, плюс есть проверка еквипа симуляцией(тоже на сайте каком-то). там с какого-то аддона вообще не помню, чтобы были проблемы, а язык, ну ванила так и начиналась. щас помойму и тактику можно уже не обьяснять - часть в клиенте, часть на специализированных ресурсах на сколько помню...
я заметил в этой игре за столько лет игроки попросили столько от неё, что проще было оставить классику действительно и не трогать игру - концепт вообще... я бы еще полёты у игроков(маунты летающие, бегающих бы оставил) убрал и вернул adventure moments classic client с хардкором по выбору... ) и вообще бы вернул скорость классики, чтобы развитие годами происходило, но при этом в игре можно было делать что-то, а контент клепался в старом интервале 5 летнем, зато качественном с катками из игры и граффикой... )
тоесть я клоню к тому, что игра задумывалась как кооператив... но если многое автоматизировать поидее интерес угаснет, это как молоток с часами или прицелом, вроде молотку этого не хватает, но надо 100 раз подумать, а нужно ли это действительно...
вот демка бесшовная с тестовыми инстансами простыми пока без потоков,
тестовая
эта демка на библиотеках, я нигде не копался, тут одни вектора и хеш мапы как понимаем, суть в том, что под стриминг нужно определенное поведение вектора, да ниже приведу сразу профайл с рендердока чтоб было нагляднее....
можно итак оставить, но под Indirect вектор же не удобен, нужна именно система памяти поудобнее же.... хотя может оно и пофиг конечно не знаю..... я в дилемме, там мне удобно с управлением, а под прототип, всё колбасить своё сложно конечно тут соглашусь....
почему пишут другое поведение вектора, потомучто там идёт снизу вверх управление памятью с трекинком и передаче ссылки на общего владельца более удобным способом, как я понимаю, это нагляднее и удобнее поидее(мини зиг подход, есть аллокатор и аллокации видно явно типо..., с владельцами ресурсов не надо напрягаться в голове держать где копировать где не копировать 1 раз написал считалку и удобно, на анимациях можно будет выдыхать будет 1 владелец ничо не прокопируется ваще красота....), плюс у себя можно сделать так чтобы регионХ9 держался без перевыделений же. на векторе самом с шринк_ту_фит это может быть проблематично, но реально, кстати точно такая же ситуация и с клоном майнкрафта, ровно 1 в 1 ситуация, просто на расте сенд/ресив из коробки, и владелец памяти каналы. Но всё равно там тоже шринк всё портит на скоко помню....
смотрите пример, сразу не рвите на многопоток, подкину вам идейку,
предположим у вас есть буфер частичек, предположим есть окно и перспектива(projection*view)
тогда одна отрисовка пучков будет такой +-, я сейчас террейн рисую как раз так.
Скрытый текст
void BigRegion::render(const Frustum& cameraFrustum,const std::vector<Plane>& sp) {
m_countArray.clear();
m_indicesArray.clear();
m_baseVertexArray.clear();
int count=0;
// Проверяем каждый микро-чанк индивидуально
for (int i = 0; i < 256; ++i) {
// Если коробка микро-чанка пересекает пирамиду видимости камеры
if (cameraFrustum.isAABBInFrustum(m_microChunks[i].getBounds(),sp)) {
count++;
m_countArray.push_back(6144); // Рисуем все 6144 индекса чанка
m_indicesArray.push_back(nullptr); // Общий EBO
m_baseVertexArray.push_back(i * 1089); // Смещение вершин чанка в VBO региона
}
}
// Если весь регион 512х512 остался позади камеры, выходим и экономим Draw Call
if (m_countArray.empty()) return;
// std::cout<<"count chunks: "<<count<<std::endl;
// ОДИН вызов отрисует только то, что игрок реально видит!
glBindVertexArray(m_VAO);
glMultiDrawElementsBaseVertex(
GL_TRIANGLES,
m_countArray.data(),
GL_UNSIGNED_INT,
m_indicesArray.data(),
m_countArray.size(),
m_baseVertexArray.data()
);
}
у меня регион 512х512 он состоит из 32х32(тайлик - 32х32) их таких тайлов 16х16 - это будет равно 512х512 юнитов(квадов(размера 1)), вот вам приближение простейшее к вопросу, ну конечно сюда можно писать в интервал адреса из потоков, вы сами это видите.... наверно
ой тут у меня не индирект, но там до него рукой уже подать на самом .... как раз для индирект для комманд нужно будет смещение индексного буфера и вершинного(и тут как раз поехала основная идея есть строка - буфер предположим её интервалы каждый 4ой а элементов 128) получается такую строку по смещению можно заполнять будет потоками типо(по-сути так и делают, просто задачка со строкой и смещением более так сказать наглядная...)....
я щас вернулся в генерацию мира, предположим мы генерируем мир с шума 2д, тогда наша задача стоит возможность создания пещер в горах, если залететь без коллизии в гору там будет красивый вид, суть пещер, которые на чанках стоят на поверхности чтоб был вход/выход, гора(чем больше тем лучше, а дальше как говорится дело техники), предположим биом или карту местности можно ограничить, и генерировать 2 слоя, тогда мы увидем такое
Скрытый текст
я нашел клевую пещеру и залетел внутрь
а мир образно такой
Скрытый текст
вид мира +- на сиде
ситуация когда пещера имеет вход и уходит вниз вот тут заключается тоже инженерный поиск как такое организовать
тогда получается, я должен иметь возможность сохранить мир, сохранить горы, пометить или запомнить горы которые мне понравились для пещеры, загрузить в бледор сделать вход в модели для потолка, и сделать уступ в мире к пещере, ну и далее должен иметь возможность расстановки предметов в мире, соотв, когда пещера уходит вглубь тут либо руками лепить, либо делать хитру генерацию по сплат карте с указанием высот, ну кароче гемор как не крути, или иметь возможность внутри редактора вставлять-генерировать куски мира, чтобы была идеальная вставка в мир модельки пещеры уходящей вниз.
тоесть пещера внутри будет иметь баундинг бокс получается тоже, просто при генерации она становится вторым слоем(они в 1 буфере со всеми вытикающими тоесть как единый ландшафт, получается статика может быть в буфере чанка/чанков, но как делают крутые студии я не знаю), просто вход математически сложно сгенерировать или возможно, но я такое не умею...
я после раста перешел обратно в С++, и ....... пишу владение памяти ресурсов(для ресурсов)
если дальше всё спрятать под коробку языка, то на поверхности должен быть ультра понятный язык, тоесть что-то ближайшее к промпту, так как это будущая, возможно нереальная крайность, смею предположить реализации того до чего вы додумались аналог памяти владения pmr (если влезло в хранилище размещаем, если кончилось выделяем блоки, если блоки кончились идём в систему, как-то так) по сути одна и та же проблема, это надо исследовать наверно.... сложно сказать
начинайте смотреть по сторонам иногда просто смотрите на описание языков какие выходят, там есть что в зиг интересное например, может в других еще есть кусочки инсайтов ) потом можно собрать все инсайты воедино и попытаться сделать мега-язык будущего )
тоесть возможно это ada zig mojo odin франкенштейн ) из них я смотрел только зиг лично )
если знаете С вы не ограничены, ставьте при компиляции 23/26 стандарт, используйте структуры, деструкторы, классы, лямбды, помните в С управление памятью например в текстовом редакторе? так вот это можно сварганить на С++, или взяв std::vector, или написав свою обертку дженерика по принципу того управления памятью со всеми вытекающими, по сути С++ в базе даёт просто удобство использования стандартных контейнеров и возможность создания своих контейнеров, вопрос для досуга(напишите функцию на С++, которая понимает где const char[] а где const char*), вы задаёте вопрос по-сути правильный тут главное точно понять зачем мы изобретаем всё заново и для чего.... в С++ всё для этого есть, разве что ждём Send/Receive или качаем либу от Nvidia или еще кого )
отвечая на вопрос, С++ имеет возможность уйти от никоуровневости за счет абстракций/библиотек, или можно написать проект снизу вверх, замиксив асм/симд/С/фишки в С++, которые есть в стандартной библиотеке, например всё теже маллок и тп, так же есть возможность заюзать другие аллокаторы mimalloc jemalloc..., это как фишки зиг, посмотрите язык на досуге, какие там фишки(компил тайм, аллокаторы, симд из коробки удобный, синтаксис визуально сишный, свой билдер, так же можно билдить С/С++ проекты. посмотрите может вам этого достаточно будет)
получается у С++ фишки теже, лямбды - анонимные классы, классы/структуры деструкторы фундамент по-сути наверно, есть констекспр тоже, можно написать свои итераторы, есть концепты, конструкторы/операторы перемещения/копирования, возможность обобщенного кода, этого поидее за глаза хватает...
корень вашего вопроса, лежит глубоко на стыке того, как работает сам язык, проще просто следовать его правилам компилятор же пишут другие люди, так или иначе всех фишек, которые может тот или иной компилятор врятли пользователь узнает....
а в эпоху где всё перепроверять и zero trust - это практически нереальная миссия....
да ничего, в 3д если вам интересно, можно начинать с базового бвх в нём коробки ААББ(просто визуализируете коробки эти, делаете физику солверов контактов типо, по началу можно инстансом, потом лучше через ссбо), хотя у вас спатиал это делает, просто я смотрел у себя на бвх, задолго до вызода бкс3д, и смотрел без многопотока, ну кароче там по техникам просто вы настроите MDI+SSBO+multithreading там дорожная карта если попутно читать - вникать в gl всё понятно станет... как я считаю(просто когда приступите к прототипу держите в голове что кусок памяти должен быть 1 через MDI, а подгрузка должна быть многопоточной в него, но пока на момент прототипа тестов ElementsDraw хватает, но поитогу если сидеть с профайлером RenderDoc вы поймёте, что еффективнее рисовать без переключений драйвера и накладных расходов, а это MDI+SSBO, или полностью отрисовка в шейдерах всего - но до сюда доходят только те кто реально знает почему ему надо отрисовывать всё в шейдере. www.scratchapixel.com/index.html - тут тоже что-то есть по инфе...)
вообще как я это узнал, просто сделал клон-майнкрафт многопотоковый бесконечный локальный, вот там реально наглядно видно всю технику около ААА(почему около? потомучто это проверка гипотезы, это компиляция техник и управления памятью.... можете делать ответвление в клон майнкрафта, чтобы понять все техники для около идеальной отрисовки) - отсюда ответ откуда я тейкаю за управление памятью - всё дело в том, что я проверял техники эти на Расте просто.... в С++ просто через время, я вернулся, потомучто с указателями попроще жить чтоли если проще выражаться....
ну можно впринципе и в zig смотреть, как вы знаете там аллокаторы не придётся изобретать, кароче у зиг - аллокаторы и симд из каробки удобные...
может кто-то скажет это переусложнение, но уже хз, и вот кстати когда осознал зачем управлять памятью, сразу все книги по С++ пригодились, а до этого реально не понимал, почему всё это надо(небольшой спойлер - всё вокруг управления ресурсами все эти архитектуры, сложный подход в кодинге и пр.)
вообще этот подход классный все пробросы от системы на самом низу, в файле coreSystem.cppm - это реально удобная магия пирога архитектуры, ну да статичная, но пока пофиг, это не мега крутой релиз для бизнеса, это изучать/исследовать десятилетиями...... этот подход тоже интересен ващето
техника мега-буфера - подразумевает многопоточность в том числе, от вектора можете не избавляться, но как вы предлагаете управлять памятью? автоматически от вектора...
переиспользование(архитектура) - будет подразумевать написание своей архитектуры всё равно, чтобы не писать то, что исследовано по новой. от симда не уйти перемножать матрицы быстрее на ней, от BVH/ускоряющейструктуры не уйти, так что как не крути, чтобы приблизиться к вулкану по скорости это gl4.5+, и управление памятью(модули в проекте это просто удобство для создания кода и ускорения компиляции как не крути).
просто если щас у вас 1-5 хакатонов/прототипов/побыстреесделать, вам категорически запрещается думать об этом, скачайте библиотек или анриал енжин с нанитами проку больше будет...
*(частично, модули всё еще нужны, другие ускорялки тоже наверно, библиотеки всякие или движки как там всё это организовать ) кароче как не крути путь долгий )...
**ну и еще парочка пейперов придётся почитать, потомучто всё это исследовать проверять надо помимо профилирования...
вы показали кстати! 1000-5000, дальше можно отвязаться от stl(vector, hashmap) и попытаться наколбасить своё управление памятью.... я может не прав, но со своим аллокатором(который связан интрузивно с кор подсистемой памяти будет) и подсчетом байт удобнее чем с вектором, но отлаживать гемор(хотя кому как наверно), попробуйте посмотреть в сторону интрузивных счетчиков ссылок, как итог ваши буферы станут чуточку удобнее и тесты можно будет проводить на 10к-100к(тоесть в 3д уходить наверно не знаю в обьём(кубики или другие примитивы, тут я не знаю, но там тоже есть SpatialHashGrid/SpatialGrid/BVH(за счет того что ваши частички вроде не уникальны это можно будет отрисовывать через MultiDrawElementsIndirect закидывая матрицы в ssbo, за 1 вызов типо считайте сами какой прирост...) или еще что поидее)) наверно, плюс можно на С++ наколбасить свой модуль по SIMD(берете спецификацию файла симд по 4.1/4.2 и пишите бинды свои! в модуле именно в модуле .cppm), плавно переходящий в свои расчеты типо.... всё это конечно гемор....
ну и так по мелочи модули(именно модули .cppm). конечно, на любителя, на алгоритмы я последнее время в последнюю очередь смотрю, щас приоритет на архитектуру с кор системы...
Скрытый текст
у меня щас так выглядит все .cppm это модули, и скрипт свой на сборку проекта
как мне кажется на С++ зависит от архитектуры... (+ если модули, если удобно настроено иде отловить можно я всё еще думаю), просто, чтобы легаси 10к-100к loc покидать по модулям и сохранить архитектуру времени уйдёт конечно, это понятно конечно....
я щас тоже с этим столкнулся на полигональном движке(не воксель), планомерное создание ворлд менеджера, который я допилил и в мейне вся обвязка, пускай и аккуратные, стали нечитаемым полотном, успокаивает только то, что вся система работает(opengl4.6) не спешите смеяться и минусовать, потомучто альтернатива по низам покачто, мультилаер-хейтмап мир система(бесконечный бесшовный мир, тот самый), пускай и дорого по памяти(чанк система честно рисует только регион-лаеры и это удобный паттерн, 3 слоя, горы, вода, полотно мира, оклюзятся по фрустуму чанка оч удобно, если подобрать размер чанка, статтер есть(если подобраны размеры он малюсенький, соотв нагрузка на трид пул не такая большая, тут задача стоит просто разгрузить поток 3-4 потоками, чтобы микрофриз убрать), но для релиза придётся делать мультипоток на загрузку не сгенерированных местностей бесконечного бесшовного мира если он нужен, если мир не ограничили или он очень большой, например, щас пока что так смотрю ) ), но если сравнить с ААА, то по памяти оптимально, а MDI + texture array (в связке с мультипотоквым бесшовным бесконечным миром) перекрывает всю сложность Вулкана на сегодня покачто.... да на 2026 даже так можно как в 2000 практически(добавились только MDI, texture array, остальные ништяки тогда были известны), а вулкан для меня гемор, я сам мультипоток могу построить )
- MDI glMultiDrawElementsIndirect
Скрытый текст
уровень сгенерировал, пещера сделана на уровне редактора.
а у меня так же, я на пути пока понимал как делать 100 раз разочаровался и теперь просто делаю то, что нравится в 3д, система уровня готова осталось так по удобству и по рефакторингу.
как я понял, в каждой сложной теме свои нюансы, с которыми надо разбираться, будь то работа с памятью, или укладка чанк систем (воксель/невоксель), тут как говориться на сколько хватает терпения, в студиях даже не знаю, начать то можно и с 2д это понятно, но 3д просто интереснее... угасание скорее всего может происходить из-за осознания масштаба проблемы, её как я понял главное локализовать и свести до класса или системы, тогда поидее попроще, но рефакторить всё равно надо будет как я понимаю.
ну тоесть получается на десктопе вся та портянка зависимости получается ляжет в память по счетчику ссылок или только родители/дети, я не знаю как в ембединге вежет себя ява и не до конца понимаю внутрянку языка, но там помойму внутрянка решающая, тоесть это возможно придётся переписать весь язык, ведь нью может запускать каскад нью под капотных типо нетривиальных, они тоже подцепляются на счетчики интересно, если так, то на интрузивном счетчике ссылок на С++ можно целый аналог явы чтоли сварганить ?) мне кажется это было бы проще, хотя то как ява оптимизирована в плане запуска байт-кодов восхищает конеш........ интересно очень, но ничо не понятно )))
Скрытый текст
вот чо получилось, прикольно что мир бесконечный) - если придумать как дампать его, а так его можно сделать на 10 гигабайт или 1 и там заделать прототип полноценный уже, но пещер пока нету, зато есть ландшафтный генератор, генератор дорог от него можно получить точки город, поселение, хаб и прочие ништяки, ну и есть пресетная жидкость) по сути полноценный движок... )
тут я цель выделил и отвел центр для скрина, попанорамнее, уже батл система простенькая тоже есть, но всё пока на масштабе, я пока механики не прописывал, пока всё грубыми мазками )
ну и тут я не вывел лес, да, могу уже лес поставить, соотв траву посадить, ну и прочее, а у моба уже логика есть тоже, так же он определяет где я может бежать за мной атаковать и отправить меня на спавен ) кароче мега интересно получается и классно, но рефакторить триллионы лет это, а так утечек пока нету )
классный визуал у вас, мне больше нравится сглаженный и такой олдскулл с туманом, тропинками, лесами, опушками, океанами/реками/морями, я щас как раз тоже делаю пет-проект на Opengl4.6 DSA, созрел наконец-то, полноценный мир бесшовный) где есть пещеры и прочее, кароче РПГ игра, пока проект у меня на прогонке теста гипотезы, но вообще там всё работает как в воксельке ), кстати хотел бы вам посоветовать, сделайте воксельный движок(понимаю что мне щас накидают в панамку, но специально хочу минусаторам написать, что воксельный бесконечный мир база для открытого мира, меняется только ситуация, а всё остается как в концепции воксельки, просто оперируем 2д составляющей как в олдскулах, тоесть по-сути это технология 2000 года ) )), он база для вката в такие миры, какой вы показали, в гонках просто подгружать побыстрее надо чанки) и в релиз-релиз билдите ) я уже по некоторым причинам рабочую демку показать не могу, долго сбрасывать тестовые текстуры в цвет ), но у меня уже полноценный 3д редактор мира с дампом на диск ) без анриала, поэтому и советую )
насчет ИИ расуждающих моделей, они уже могут, что-то вам подсказать по концепциям и показать скелет - основу реализации, как и почему другой момент.
момент про что будет никто не знает, потомучто эра агентов даёт сингулярность, разраб если он один тратит деньги и остаётся со скелетом, что сделал рой 1 на 1, и как вы представляете правки в проекте, который равен например 7 летнему проекту, который делала комманда людей на протяжении 7 лет.
"по началу кажется вот щас напишу движок у меня он будет легче, потом почитал то сё, посмотрел там сям.... и вот уже клиент весит 2 гига на диске, а движок стал тяжелым..., поначалу кажется, щас перепишу либу 1 в 1 с нуля снизу вверх и она будет легче, но это тоже иллюзия любое погружение в конкретику родит ту же либу жирности, и возможно родит новые проблемы", но, поучиться возможно да удобно....
если вам так интересен ваш "ps" - рассуждающие модели уже могут показать вам скелет, зависит от промпта как подойти к глобальной сложной теме, чтобы рассуждающая модель подделась и начала вам обьяснять по шагам как делать..... если это прям под ключ, то врятли, проблема в контексте, сложные задачи без декомпозиций, тригерят модель на растекание контекста как я понимаю, и если глубина маленьная, модель или быстро забудет или запутается, или в лучшем случае вы доделаете только скелет, а дальше разраб остаётся 1 на 1 с горой текста ) который как мы понимаем надо рефакторить, кто будет его рефакторить такой)?)
нельзя исключать сегодня условия в которых мы живём, если условная корпорация или компания создаёт условия для того, чтобы быстро и дешево, но при этом берем только лучших... или условно бумеры, которые стареют или уходят с работы создали условия для топ менеджмента(бам вау) набрав зумеров, а другой бизнес создавал почву для быстрого контента, все эти слои и эпохи живут в одном пространстве и даже тот главный директор тоже живёт в обществе... получается зумеры придут в команду где малое количество бумеров и переделают игру например с путешествия на сессионку ) смотрите какой круговорот получается, бумерам было интересно предположим, предположим они были пользователями винды ), а приходит человек в игру путешествие и он даже не играет не то, что в игры, а в ту игру какую пишет/делает, получается делает от звонка до звонка, да и плюс готов переделать весь непонятный якобы "legacy" получается на выходе игра, которой не было в начале...
туда же можно кинуть в какой-то степени обсуждения (идею Бэтмена, по сути она о том же рынок идёт вперед, ну ты 1 захотел делать такую игру типо... когда игры уже другие типо ))
туда же кинем еще метрики, те люди которые делают игру по метрикам, то что люди в городе стоят или то что есть выход дополнений 5летиями(органично вписывается вообще в ритм человека), человек по метрикам посмотрит ага 70 процентов в городах стоят, он даже не поймёт, что обычно играют в игры люди, и во многих стареньких играх, которые до сих пор поддерживаются постоять в столице сколько хочешь это нормально), или интерфейс по метрикам туда же) метрика показывает человек при X и Y не жмёт кнопку, а сразу выходит, является ли метрика понятным и категоричным носителем достоверной информацией прибыли, а ничо, что человек просто захотел выйти ?) или хочет постоять в стоилце ? или ставит аддон и убирает кнопочку какую-то )
Кодзиму любят, потомучто у него в курьере есть что-то такое типо старых идей, по крайней мере по рекламе мне прям понравилось, например....
а щас еще на подходе ИИ контент игровой наверно и прочие сопуствующие) операторы ИИ наверно и прочее... контент не просто ускорится поидее, а сплющится, вопрос только останется открытым, а ускорение создания влияет ли каким-то обзразом на общество?
читать память игры ради переводчика, это намёк, что внутри игры чат не переводится под зашедшего в игру игрока чтоли?)
круто наверно.... в клиенте есть тактики на сколько помню, и на ресурсах вокруг вова есть обьяснения тактик на сколько помню с какого-то аддона в этом не помню проблем, плюс есть проверка еквипа симуляцией(тоже на сайте каком-то). там с какого-то аддона вообще не помню, чтобы были проблемы, а язык, ну ванила так и начиналась. щас помойму и тактику можно уже не обьяснять - часть в клиенте, часть на специализированных ресурсах на сколько помню...
я заметил в этой игре за столько лет игроки попросили столько от неё, что проще было оставить классику действительно и не трогать игру - концепт вообще... я бы еще полёты у игроков(маунты летающие, бегающих бы оставил) убрал и вернул adventure moments classic client с хардкором по выбору... ) и вообще бы вернул скорость классики, чтобы развитие годами происходило, но при этом в игре можно было делать что-то, а контент клепался в старом интервале 5 летнем, зато качественном с катками из игры и граффикой... )
тоесть я клоню к тому, что игра задумывалась как кооператив... но если многое автоматизировать поидее интерес угаснет, это как молоток с часами или прицелом, вроде молотку этого не хватает, но надо 100 раз подумать, а нужно ли это действительно...
круто, но я разочарован после ИИ если честно....
вот демка бесшовная с тестовыми инстансами простыми пока без потоков,
эта демка на библиотеках, я нигде не копался, тут одни вектора и хеш мапы как понимаем, суть в том, что под стриминг нужно определенное поведение вектора, да ниже приведу сразу профайл с рендердока чтоб было нагляднее....
можно итак оставить, но под Indirect вектор же не удобен, нужна именно система памяти поудобнее же.... хотя может оно и пофиг конечно не знаю..... я в дилемме, там мне удобно с управлением, а под прототип, всё колбасить своё сложно конечно тут соглашусь....
почему пишут другое поведение вектора, потомучто там идёт снизу вверх управление памятью с трекинком и передаче ссылки на общего владельца более удобным способом, как я понимаю, это нагляднее и удобнее поидее(мини зиг подход, есть аллокатор и аллокации видно явно типо..., с владельцами ресурсов не надо напрягаться в голове держать где копировать где не копировать 1 раз написал считалку и удобно, на анимациях можно будет выдыхать будет 1 владелец ничо не прокопируется ваще красота....), плюс у себя можно сделать так чтобы регионХ9 держался без перевыделений же. на векторе самом с шринк_ту_фит это может быть проблематично, но реально, кстати точно такая же ситуация и с клоном майнкрафта, ровно 1 в 1 ситуация, просто на расте сенд/ресив из коробки, и владелец памяти каналы. Но всё равно там тоже шринк всё портит на скоко помню....
смотрите пример, сразу не рвите на многопоток, подкину вам идейку,
предположим у вас есть буфер частичек, предположим есть окно и перспектива(projection*view)
тогда одна отрисовка пучков будет такой +-, я сейчас террейн рисую как раз так.
Скрытый текст
у меня регион 512х512 он состоит из 32х32(тайлик - 32х32) их таких тайлов 16х16 - это будет равно 512х512 юнитов(квадов(размера 1)), вот вам приближение простейшее к вопросу, ну конечно сюда можно писать в интервал адреса из потоков, вы сами это видите.... наверно
ой тут у меня не индирект, но там до него рукой уже подать на самом .... как раз для индирект для комманд нужно будет смещение индексного буфера и вершинного(и тут как раз поехала основная идея есть строка - буфер предположим её интервалы каждый 4ой а элементов 128) получается такую строку по смещению можно заполнять будет потоками типо(по-сути так и делают, просто задачка со строкой и смещением более так сказать наглядная...)....
Скрытый текст
я щас вернулся в генерацию мира, предположим мы генерируем мир с шума 2д, тогда наша задача стоит возможность создания пещер в горах, если залететь без коллизии в гору там будет красивый вид, суть пещер, которые на чанках стоят на поверхности чтоб был вход/выход, гора(чем больше тем лучше, а дальше как говорится дело техники), предположим биом или карту местности можно ограничить, и генерировать 2 слоя, тогда мы увидем такое
Скрытый текст
а мир образно такой
Скрытый текст
ситуация когда пещера имеет вход и уходит вниз вот тут заключается тоже инженерный поиск как такое организовать
тогда получается, я должен иметь возможность сохранить мир, сохранить горы, пометить или запомнить горы которые мне понравились для пещеры, загрузить в бледор сделать вход в модели для потолка, и сделать уступ в мире к пещере, ну и далее должен иметь возможность расстановки предметов в мире, соотв, когда пещера уходит вглубь тут либо руками лепить, либо делать хитру генерацию по сплат карте с указанием высот, ну кароче гемор как не крути, или иметь возможность внутри редактора вставлять-генерировать куски мира, чтобы была идеальная вставка в мир модельки пещеры уходящей вниз.
тоесть пещера внутри будет иметь баундинг бокс получается тоже, просто при генерации она становится вторым слоем(они в 1 буфере со всеми вытикающими тоесть как единый ландшафт, получается статика может быть в буфере чанка/чанков, но как делают крутые студии я не знаю), просто вход математически сложно сгенерировать или возможно, но я такое не умею...
я после раста перешел обратно в С++, и ....... пишу владение памяти ресурсов(для ресурсов)
если дальше всё спрятать под коробку языка, то на поверхности должен быть ультра понятный язык, тоесть что-то ближайшее к промпту, так как это будущая, возможно нереальная крайность, смею предположить реализации того до чего вы додумались аналог памяти владения pmr (если влезло в хранилище размещаем, если кончилось выделяем блоки, если блоки кончились идём в систему, как-то так) по сути одна и та же проблема, это надо исследовать наверно.... сложно сказать
начинайте смотреть по сторонам иногда просто смотрите на описание языков какие выходят, там есть что в зиг интересное например, может в других еще есть кусочки инсайтов ) потом можно собрать все инсайты воедино и попытаться сделать мега-язык будущего )
тоесть возможно это ada zig mojo odin франкенштейн ) из них я смотрел только зиг лично )
если знаете С вы не ограничены, ставьте при компиляции 23/26 стандарт, используйте структуры, деструкторы, классы, лямбды, помните в С управление памятью например в текстовом редакторе? так вот это можно сварганить на С++, или взяв std::vector, или написав свою обертку дженерика по принципу того управления памятью со всеми вытекающими, по сути С++ в базе даёт просто удобство использования стандартных контейнеров и возможность создания своих контейнеров, вопрос для досуга(напишите функцию на С++, которая понимает где const char[] а где const char*), вы задаёте вопрос по-сути правильный тут главное точно понять зачем мы изобретаем всё заново и для чего.... в С++ всё для этого есть, разве что ждём Send/Receive или качаем либу от Nvidia или еще кого )
отвечая на вопрос, С++ имеет возможность уйти от никоуровневости за счет абстракций/библиотек, или можно написать проект снизу вверх, замиксив асм/симд/С/фишки в С++, которые есть в стандартной библиотеке, например всё теже маллок и тп, так же есть возможность заюзать другие аллокаторы mimalloc jemalloc..., это как фишки зиг, посмотрите язык на досуге, какие там фишки(компил тайм, аллокаторы, симд из коробки удобный, синтаксис визуально сишный, свой билдер, так же можно билдить С/С++ проекты. посмотрите может вам этого достаточно будет)
получается у С++ фишки теже, лямбды - анонимные классы, классы/структуры деструкторы фундамент по-сути наверно, есть констекспр тоже, можно написать свои итераторы, есть концепты, конструкторы/операторы перемещения/копирования, возможность обобщенного кода, этого поидее за глаза хватает...
корень вашего вопроса, лежит глубоко на стыке того, как работает сам язык, проще просто следовать его правилам компилятор же пишут другие люди, так или иначе всех фишек, которые может тот или иной компилятор врятли пользователь узнает....
а в эпоху где всё перепроверять и zero trust - это практически нереальная миссия....
да ничего, в 3д если вам интересно, можно начинать с базового бвх в нём коробки ААББ(просто визуализируете коробки эти, делаете физику солверов контактов типо, по началу можно инстансом, потом лучше через ссбо), хотя у вас спатиал это делает, просто я смотрел у себя на бвх, задолго до вызода бкс3д, и смотрел без многопотока, ну кароче там по техникам просто вы настроите MDI+SSBO+multithreading там дорожная карта если попутно читать - вникать в gl всё понятно станет... как я считаю(просто когда приступите к прототипу держите в голове что кусок памяти должен быть 1 через MDI, а подгрузка должна быть многопоточной в него, но пока на момент прототипа тестов ElementsDraw хватает, но поитогу если сидеть с профайлером RenderDoc вы поймёте, что еффективнее рисовать без переключений драйвера и накладных расходов, а это MDI+SSBO, или полностью отрисовка в шейдерах всего - но до сюда доходят только те кто реально знает почему ему надо отрисовывать всё в шейдере. www.scratchapixel.com/index.html - тут тоже что-то есть по инфе...)
вообще как я это узнал, просто сделал клон-майнкрафт многопотоковый бесконечный локальный, вот там реально наглядно видно всю технику около ААА(почему около? потомучто это проверка гипотезы, это компиляция техник и управления памятью.... можете делать ответвление в клон майнкрафта, чтобы понять все техники для около идеальной отрисовки) - отсюда ответ откуда я тейкаю за управление памятью - всё дело в том, что я проверял техники эти на Расте просто.... в С++ просто через время, я вернулся, потомучто с указателями попроще жить чтоли если проще выражаться....
ну можно впринципе и в zig смотреть, как вы знаете там аллокаторы не придётся изобретать, кароче у зиг - аллокаторы и симд из каробки удобные...
лично у меня всё вокруг этого закрутилось
Скрытый текст
*так как у меня контроль памяти свой, я делаю нью всё равно да) я до конца не изучил этот нюанс, но трекинг памяти работает...
может кто-то скажет это переусложнение, но уже хз, и вот кстати когда осознал зачем управлять памятью, сразу все книги по С++ пригодились, а до этого реально не понимал, почему всё это надо(небольшой спойлер - всё вокруг управления ресурсами все эти архитектуры, сложный подход в кодинге и пр.)
вообще этот подход классный все пробросы от системы на самом низу, в файле coreSystem.cppm - это реально удобная магия пирога архитектуры, ну да статичная, но пока пофиг, это не мега крутой релиз для бизнеса, это изучать/исследовать десятилетиями...... этот подход тоже интересен ващето
техника мега-буфера - подразумевает многопоточность в том числе, от вектора можете не избавляться, но как вы предлагаете управлять памятью? автоматически от вектора...
переиспользование(архитектура) - будет подразумевать написание своей архитектуры всё равно, чтобы не писать то, что исследовано по новой. от симда не уйти перемножать матрицы быстрее на ней, от BVH/ускоряющейструктуры не уйти, так что как не крути, чтобы приблизиться к вулкану по скорости это gl4.5+, и управление памятью(модули в проекте это просто удобство для создания кода и ускорения компиляции как не крути).
просто если щас у вас 1-5 хакатонов/прототипов/побыстреесделать, вам категорически запрещается думать об этом, скачайте библиотек или анриал енжин с нанитами проку больше будет...
итоги - мои тейки сложно пробить )
~ https://github.com/erincatto/box3d вот получается то*** , что вы хотели частично или движок(Анриал).
*(частично, модули всё еще нужны, другие ускорялки тоже наверно, библиотеки всякие или движки как там всё это организовать ) кароче как не крути путь долгий )...
**ну и еще парочка пейперов придётся почитать, потомучто всё это исследовать проверять надо помимо профилирования...
вы показали кстати! 1000-5000, дальше можно отвязаться от stl(vector, hashmap) и попытаться наколбасить своё управление памятью.... я может не прав, но со своим аллокатором(который связан интрузивно с кор подсистемой памяти будет) и подсчетом байт удобнее чем с вектором, но отлаживать гемор(хотя кому как наверно), попробуйте посмотреть в сторону интрузивных счетчиков ссылок, как итог ваши буферы станут чуточку удобнее и тесты можно будет проводить на 10к-100к(тоесть в 3д уходить наверно не знаю в обьём(кубики или другие примитивы, тут я не знаю, но там тоже есть SpatialHashGrid/SpatialGrid/BVH(за счет того что ваши частички вроде не уникальны это можно будет отрисовывать через MultiDrawElementsIndirect закидывая матрицы в ssbo, за 1 вызов типо считайте сами какой прирост...) или еще что поидее)) наверно, плюс можно на С++ наколбасить свой модуль по SIMD(берете спецификацию файла симд по 4.1/4.2 и пишите бинды свои! в модуле именно в модуле .cppm), плавно переходящий в свои расчеты типо.... всё это конечно гемор....
ну и так по мелочи модули(именно модули .cppm). конечно, на любителя, на алгоритмы я последнее время в последнюю очередь смотрю, щас приоритет на архитектуру с кор системы...
Скрытый текст
у меня щас так выглядит все .cppm это модули, и скрипт свой на сборку проекта
классно у вас получается, на реддите видел и походу какую-то вселенную, и такую вселенную (почему бы нет как визуализация контекстов так сказать ) )
building_foundation_for_future_nanite_like_tech/