FiEctro писал: Сейчас даже в мобильных играх объектов в десятки раз больше
Давай конкретику всё же. Одно дело нарисовать десять тысяч спрайтовых монстров и совсем другое - сотню аликс, в каждой по сто тысяч полигонов.
Цитата:
FiEctro писал: Сколько объектов в Сталкере? Или например в локации уровня GTA VC ?
Так я спрашивал - мне так толком никто и не ответил. Но там естественно сделаны допущения - аномалии это один изолированный класс, айтемы - другой, монстры - третий. Если так делать, то конечно можно много чего соптимизировать.
Цитата:
FiEctro писал: Ты автора Годота особо не цитируй
Я же написал "из забавного". Не по глазам?
Цитата:
FiEctro писал: Да и там это больше архитектурная проблема, чем идеалогическая.
С этого момента пожалуйста поподробнее. Про Годот я знаю только то, что он вылупился из 2D движка.
Цитата:
FiEctro писал: Мы как то ради интереса забивали мешрендер треугольниками
Не путай полигоны с сущностями. В ксаше тоже можно засадить поляну травой до горизонта и это израсходует ноль энтить.
Цитата:
FiEctro писал: Всем кому показывал пример, говорили что это АнгелСкрипт
Ну значит то, что им показывал не несло Шото-специфичных вещей, которые невозможны больше нигде. Тот же dynamic_call или virtual_new.
Добавлено 22-08-2024 в 13:27:
Цитата:
Unit писал: Если Вам показать AngelScript Вы скажите что это C++
Но на АнгелСкрипт нельзя впрямую портировать C++ код, а на Shot можно.
Дядя Миша писал: Так я спрашивал - мне так толком никто и не ответил.
Если интересно касаемо GTA VC, там используют пулы объектов, поделены на разные типы. Рокстарвская аналогия entity'ям в то время это 450 на пул, для машин и зданий свои пулы, около 64 машин на пул и ~5000 зданий и прочей статики. Для консолей лимиты уменьшались.
Unit писал: Если Вам показать AngelScript Вы скажите что это C++
Пожалуйста, давай уже без этой клоунады.
Цитата:
Дядя Миша писал: Давай конкретику всё же. Одно дело нарисовать десять тысяч спрайтовых монстров и совсем другое - сотню аликс, в каждой по сто тысяч полигонов.
Регдоллы теже, целая куча связаных между собой костей, колайдеров и ригидбодей. Ну и много их уместится с лимитом 100 объектов?
Цитата:
Дядя Миша писал: Так я спрашивал - мне так толком никто и не ответил. Но там естественно сделаны допущения - аномалии это один изолированный класс, айтемы - другой, монстры - третий. Если так делать, то конечно можно много чего соптимизировать.
Так может сделать тоже какую то возможность разбивать объекты по категориям/слоям?
Цитата:
Дядя Миша писал: С этого момента пожалуйста поподробнее. Про Годот я знаю только то, что он вылупился из 2D движка.
Но к слову на ютубе находил сравнение производительности Юнити и Годота, и Юнити всё же был быстрее, несмотря на все красивые статьи о том что так красивее и оптимизированее вроде этой: https://godotengine.org/article/why...ed-game-engine/
Думаю лучше спросить здесь кого то кто работает непосредственно с этим движком. Они больше в курсе того срача с ECS.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Unit писал: Если интересно касаемо GTA VC, там используют пулы объектов, поделены на разные типы
Так вот мне очень не хочется специализировать объекты. Потому что сразу пойдет заточка под конкретный сценарий.
Цитата:
FiEctro писал: Так может сделать тоже какую то возможность разбивать объекты по категориям/слоям?
Не нравится мне эта затея. Ровно по той же причине, по которой объекты в голдсорсе рендерились группами, вследствие чего их невозможно было отсортировать по дальности для полупрозрачных объектов. Здесь будет ровно такая же ситуация - когда какие-то объекты из одной группы должны будут обновляться перед объектами из другой группы, но это будет физически невозможно, т.к. порядок их обновления уже жёстко задан и изменить его нельзя никоим образом. Да и слои эти - точно такая же абстракция, которая ограничивает функционал на ровном месте.
Добавлено 22-08-2024 в 15:33:
В утешение могу вам сказать, что даже несмотря на тот факт, что у меня физика полностью реализована на Шоте, в самой высоконагруженной сцене из первого Quake (интермиссия после победы над Чтоном, когда спавнятся куски шамблеров с кровищей в большом кол-ве), на Ксаше эта сцена по фпс проседает намного меньше чем во всех известных мне форках первого Квейка. На моей GTX650 там идёт проседание порядка до 180 фпс, на ксаше - до 500. Но всё равно это ненадёжный критерий, т.к. производительность падает экспоненциально, а не линейно.
Но у меня есть ещё в запасе одна интересная идея, которая на первый взгляд не имеет минусов, сплошные плюсы.
Дядя Миша писал: В утешение могу вам сказать, что даже несмотря на тот факт, что у меня физика полностью реализована на Шоте, в самой высоконагруженной сцене из первого Quake (интермиссия после победы над Чтоном, когда спавнятся куски шамблеров с кровищей в большом кол-ве), на Ксаше эта сцена по фпс проседает намного меньше чем во всех известных мне форках первого Квейка. На моей GTX650 там идёт проседание порядка до 180 фпс, на ксаше - до 500. Но всё равно это ненадёжный критерий, т.к. производительность падает экспоненциально, а не линейно.
А разве в кваке были ригидбоди? Там вообще физика какая то сильно упрощенная. А рейкасты, бокс касты, сфер касты, пересечения и т.д. тоже на шоте?
Цитата:
Дядя Миша писал: Здесь будет ровно такая же ситуация - когда какие-то объекты из одной группы должны будут обновляться перед объектами из другой группы, но это будет физически невозможно, т.к. порядок их обновления уже жёстко задан и изменить его нельзя никоим образом. Да и слои эти - точно такая же абстракция, которая ограничивает функционал на ровном месте.
Не очень понял, у тебя рендер пайплайн как устроен?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: А рейкасты, бокс касты, сфер касты, пересечения и т.д. тоже на шоте?
Сам обсчёт столкновений на С++, но перебор объектов и физика - на Шоте.
Мне всегда хотелось это реализовать на скриптовом языке, чего больше никто не делает в здравом уме. Ежели это запихать обратно в движок, то будет +1000 буст к производительности. Но так не интересно.
Цитата:
FiEctro писал: Не очень понял, у тебя рендер пайплайн как устроен?
Два списка из прозрачных и непрозрачных материалов. Там мешы идут из всех типов энтить и не только энтить. Но при этом сортировка полупрозрачных мешей сквозная для всех примитивов. Это именно то, чего мне так не хватало в той же P2 и насколько я знаю, этого там так никто и не реализовал. Ну потому что вот такие вот на первый взгляд простейшие вещи в реализации дико сложные. Точнее сама формулировка задания простая.
Аналогично как - наложить лайтмапу на произвольную геометрию. Вроде звучит просто, а пока сделаешь, так запотеешь.
Unit писал: А что используете G-Buffer или прямой рендеринг?
Система материалов не диктует использование какой-то одной технологии.
Можно отложку, можно директ, можно прямо на скриптах реализовать оба типа рендера и переключать их на лету. На данный момент пока что реализован однопроходный форвард.
ЗЫ. у нас тут за годы общения сформировался стиль обращения на "ты", так что не стесняйся.
Добавлено 22-08-2024 в 22:43:
За г-буффер, если интересно, могу подробнее рассказать.
Идея отложки базируется на двух очень стрёмных допущениях:
1. все динамические источники света имеют линейное затухание
2. по возможности это должны быть источники, которые не перекрывают друг друга и занимают как можно меньшую площадь на экране.
Если взять любую демку deferred мы с большой долей вероятности увидим там сотни маленьких лампочек и всё это не тормозит даже. Неплохо. Осталось только применить к реальной игровой ситуации. Мало того, что я себе слабо представляю ситуацию в которой понадобится такая куча маленьких источников, так ещё не будем забывать про тени, которые гарантированно убьют весь перф ещё до начала рендеринга основного кадра. То есть отложка это про кучу маленьких источников света без теней. У меня движок исторически близок к играм, так или иначе имеющим связь с ИД Течем. В частности той же Халфы. А в халфе у нас что? Квадратичное затухание света. Это значит любой из источников гарантированно светит через весь уровень. Если рендерить эти источники так, как предлагается в классическом пейпере - т.е. проецировать окружность лайта на плоскость экрана, у нас получается такой чудовищный овердроу, что форвард отдыхает просто.
Поэтому лайты с квадратичным затуханием придётся выбросить сразу.
Но это неспортивно. Я рассудил иначе - большинство лайтов всё равно статично и своего места не покидает. Значит мы можем прямо в компиляторе рассчитать визлайт-матрицу (название моё), пробросить биты видимости лайтов в G-буффер и для каждого экранного пикселя выполнить цикл освещения теми или иными лайтами. Сами лайты записаны во флоат-текстуру, а в G-буффере в одном из слоёв хранятся их номера.
Как я быстро убедился - даже на довольно тёмных картах из P2 Savior мне зачастую не хватало восьми лайтов на пиксель. Т.е. это два RGBA-слоя с индексами лайтов. И отсюда же вытекает ограничение на 255 источников света всего. Конечно в дальнейшем можно было бы использовать 16-битные текстуры, но мне для моих исследований хватило и восьмибитных, благо на картах паранои кол-ва лампочек на уровне редко когда превышает сотню (а вот на один сурфейс иногда может светить до десятка).
Подобный подход полностью решил проблему с овердро, фпс стал приемлимым. Второй момент, который меня интерисовал - можно ли как-нибудь обойтись без карт теней. Разумеется я мог бы их сделать тоже, но так неинтересно. К тому же в первой кваке был BSP, у которого все поверхности лежали на ноде - готовая ускоряющая структура для рейтрейсера. Я просто сдампил эти ноды и лифы в очередную флоат-текстуру и написал простенький нерекурсивный рейтрейсер. Видеокарты не поддерживают рекурсию. Впрочем у меня всё равно были некоторые проблемы с глубиной стека, но технология прекрасно заработала.
Получилась отложка с рейтрейсинговыми тенями. Результат можно посмотреть в последней версии P2 Savior, поставив консольную переменную gl_deferred в 1.
А теперь самое интересное. Пока я всем этим занимался, я фактически прокидывал номера лайтов из препасса в г-буффер. И тут я спросил себя, а какого чёрта? Зачем мне г-буффер, если я могу посчитать освещение прямо в этом препассе и тут же сохранить финальный цвет в экранный буффер. Именно этот подход я и применил в XashNT. Он всегда рендерит в один проход, но при этом может рисовать сколько угодно динамических источников света. Это не forward+, это чисто моя придумка. Впрочем я полагаю что не я один до этого додумался, просто больше мне это нигде не попадалось.
Дядя Миша интересный подход. Я пока курю в G-buffer по гайдам из GitHub (ничего раньше такого не приходилось делать) посмотрю что из этого выйдет.
Вопрос не по теме может, но мне интересно) Как удаётся совмещать основную работу/вид деятельности и работу над движком, это же уйму времени отнимает, или основная деятельность позволяет параллельно работать на движком. У меня несколько часов в день выделяется, за выходные вообще забываю на чем остановился, стараюсь отдыхать от монитора. А тут захожу, читаю, сегодня скриптовая часть готова, через день сеть допилина.
Unit писал: Вопрос не по теме может, но мне интересно) Как удаётся совмещать основную работу/вид деятельности и работу над движком, это же уйму времени отнимает, или основная деятельность позволяет параллельно работать на движком. У меня несколько часов в день выделяется, за выходные вообще забываю на чем остановился, стараюсь отдыхать от монитора. А тут захожу, читаю, сегодня скриптовая часть готова, через день сеть допилина.
Надо ещё умудриться не выгореть от этого
Цитата:
Дядя Миша писал: написал простенький нерекурсивный рейтрейсер. Видеокарты не поддерживают рекурсию. Впрочем у меня всё равно были некоторые проблемы с глубиной стека, но технология прекрасно заработала.
Получилась отложка с рейтрейсинговыми тенями.
Патчтрейсер в ку2 довольно шустро работает, к нему бы деноизер какой нибудь и готовый RTX с красивым освещением и отражениями
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша писал: Мало того, что я себе слабо представляю ситуацию в которой понадобится такая куча маленьких источников
Декоративные лампочки в коридоре на стене, на уровне потолка, пола, или посередине.
Цитата:
Дядя Миша писал: Квадратичное затухание света. Это значит любой из источников гарантированно светит через весь уровень.
Падажжи. Квадратичное по определению затухает быстрее линейного. Быстрее затухает только какое-нибудь кубичное. Как ты делаешь вывод что квадратичное светит через весь уровень?
Цитата:
Дядя Миша писал: Видеокарты не поддерживают рекурсию.