Пятница, 29 Марта 2024, 15:32

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Оптимизация сцены где очень много объектов (Игры с кубическим миром)
Оптимизация сцены где очень много объектов
fanfal87Дата: Четверг, 24 Октября 2013, 20:26 | Сообщение # 41
частый гость
Сейчас нет на сайте
cool горе игроделы, еще комерческий проект...
PixelfoxДата: Четверг, 24 Октября 2013, 21:17 | Сообщение # 42
был не раз
Сейчас нет на сайте
Цитата robertono ()
Делаю игру похожую на battlefield 4 только в кубическом мире! Доделаю ли...

Не в тему, но я поцталом. Кубы, кубы!? Ахахах lol
KamiRoninДата: Четверг, 24 Октября 2013, 22:10 | Сообщение # 43
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
Поэтому я сделал свой скрипт из примера документации mesh.combinemeshes, и скрипт впихнул 60 % здания в меш. Остальное отказался, наверно потому что больше 65к вершин , хотя не понимаю как может быть 65к (в кубе одном из юнити, сколько вершин ? 12 ?).

ошибка которую он выдает - это превышение Int16 smile просто в Unity не ждали что ты есть. и что захочешь вливать в один меш больше чем 16-значное целое частей! smile
я у себя разбил твое здание на 8 этажный кусок и все прошло.
но! нужно ОТКАЗЫВАТЬСЯ ОТ КУБОВ!! совсем! нужно делать как в MinePckge - виртуальные объекты куба. и вешать на них все что тебе нужно.
да, разбираться НАДО! да, потребуется легкая доработка - но это будет НОРМАЛЬНЫЙ проект кубового мира. только так.

Цитата robertono ()
А можно делать combinemeshes в ассинхронном потоке (или как он там, может я опять что то напутал, вообщем мульти-ядерно) ?


да, батчинг привествуется. но все таки это нужно делать только на старте. потом все равно обрабатывать это правильным способом! (Декоратор).

Добавлено (24.10.2013, 22:10)
---------------------------------------------
Цитата fanfal87 ()
горе игроделы, еще комерческий проект...

о. еще один усталый мегагеймдевер мимо проходил.. сил и опыта хватило только поохать по стариковски. smile


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Четверг, 24 Октября 2013, 22:11
robertonoДата: Четверг, 24 Октября 2013, 22:47 | Сообщение # 44
Чокнутый Кот
Сейчас нет на сайте
Цитата KamiRonin ()

о. еще один усталый мегагеймдевер мимо проходил.. сил и опыта хватило только поохать по стариковски.

и ещё один .. Pixelfox

KamiRonin, Спасибо за активность в теме. Только Вы тут даёте хорошие ответы которые соответствуют моей теме и потребностям.
Вы говорите нужно отказываться от кубов. Ведь в minepackage я так понял это просто мешы , 16 на 16, где просто меняются точки на меше из за которых образуются кубы , а на самом деле это просто меш с точками на разной высоте? И всё?

Ещё добавлю одну важную вещь. Игра делается как бы в кубическом стиле, но не всё будет состоять из кубов. В зданиях будут отдельные модели : столы, стулья, компьютеры и другая мебель. Поэтому делать как в minepckg (если я правильно понимаю что это так там делается) я думаю нельзя, потому что здесь уже не просто точки а целые модели. Я не упомянул это ранее так как речь шла больше о создании целого меша из кучи мелких объектов.
PixelfoxДата: Четверг, 24 Октября 2013, 22:59 | Сообщение # 45
был не раз
Сейчас нет на сайте
Каким же нужно быть отбитым чтобы делать игру про квадраты. bag
robertonoДата: Пятница, 25 Октября 2013, 00:03 | Сообщение # 46
Чокнутый Кот
Сейчас нет на сайте
Pixelfox, покажи что сделал ты, мастер игростроя?
ArchidoДата: Пятница, 25 Октября 2013, 08:08 | Сообщение # 47
Сэнсэй
Сейчас нет на сайте
Цитата KamiRonin ()
у меня - нет. как был 68 fps так и остался.

Раз у тебя кол-во вертексов сильно не изменилось, то ты поменял шило на мыло. Забей один этаж в "префаб" (в "один кусок геометрии") и собери из него такое же здание, как и из кубов. И сравни производительность, для пущего эффекта можно кол-во зданий увеличить до нескольких десятков.

Цитата KamiRonin ()
оклюжн для того и создан чтобы исключать. он быстро работает и оверхеда здесь не вижу никакого. тем более жестокого.

Твой "оклюжн" захлебнется, когда таких зданий из 5К кубов будут десятки и больше. Особенно когда процессор будет занят просчетом физики или игровой логики.

Цитата KamiRonin ()
на здоровье! (зачем буковки разводить про то что с самого начала было отвергнуто за ненадобностью?)

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

Цитата KamiRonin ()
при загрузке - это для тебя реалтайм?

Реалтайм - во время "апдейта" или "рендера". Все, что происходит до запуска игрового цикла - это оффлайн.

Цитата KamiRonin ()
то они просто - один кусок геометрии! и нет там кубов!

Я рад, что ты понял хотя бы это. Там есть кубы, они просто только визуальные:)

Цитата KamiRonin ()
как потом найти место для второго сверху на два вглубине?!? пересчитывать все координаты?!?!

Омг, ты действительно через пару строчек читаешь или не способен думать.
У тебя есть "один кусок геометрии" в виде одного объекта, у него есть позиция и Bounding Box, с которым можно "взаимодействовать" при необходимости. И есть большая пачка кубов-объектов (визуально они выглядят в точности как "один кусок геометрии"), которые объедены в иерархию и у них один объект родитель (Node), который тоже имеет свою позицию. В результате, когда какой-то игровой объект или игрок "взаимодействует" с Bouinding Box "куска геометрии" (коллизии, raycast, да что угодно), то ты просто подставляешь в позицию этого "куска" - объект Node с пачкой объектов-кубов и уже им делегируешь конкретное "взаимодействие" конкретного игрового объекта. Ферштейн?

Хотя, все равно ничего не взлетит. Если в здании 4300 кубов, то это 4300 * 12 = 51600 трианглов на модель. Столько даже на игровых персонажей редко позволяют тратить:)

Xakep
Мою идею действительно так сложно понять?:) Хотя может я чего-то не понимаю и на Unity подобное сделать мегасложно, но в таком случае Unity немного уныл:)


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
XakepДата: Пятница, 25 Октября 2013, 08:54 | Сообщение # 48
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Archido ()
Мою идею действительно так сложно понять?:) Хотя может я чего-то не понимаю и на Unity подобное сделать мегасложно, но в таком случае Unity немного уныл:)

ну мне все понятно, но я давно с этим разбираюсь ) но вот как раз упаковывать все в одну геометрию есть смысл, если у тебя статическая геометрия, а если все эти упакованные геометрии динамические и могут взаимодействовать с миром, то лучше наверное псевдо инстансинг, вообще можно это комбинировать, например рисовать все как статическую геометрию, а при взаимодействии уже начать рисовать через инстансинг )
с Unity никогда не работал, так что не в курсе что там можно, а что нельзя )
KamiRoninДата: Пятница, 25 Октября 2013, 09:29 | Сообщение # 49
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
Вы говорите нужно отказываться от кубов. Ведь в minepackage я так понял это просто мешы , 16 на 16, где просто меняются точки на меше из за которых образуются кубы , а на самом деле это просто меш с точками на разной высоте? И всё?

там даже не меши, а просто виртуальные объекты, которые хранятся в матрице, привязанной к координатам по сетке.
Цитата robertono ()
В зданиях будут отдельные модели : столы, стулья, компьютеры и другая мебель.

да сразу было понятно что ты затеял разрушаемый мир так фигачить! smile
я думаю если сделать основные блоки мира механизмом minePck то потом стулья не будут так уж грузить систему, если их конечно тоже не будет 50к в каждом доме! :)) а так, то что ты задумал - это решается только комбинированной "высшей математикой" игростроя (геом.инстансинг, псевдо инстансинг, оклюжен, батчинг, лод и прочее). даже с кубами.


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
White9Дата: Пятница, 25 Октября 2013, 09:32 | Сообщение # 50
заслуженный участник
Сейчас нет на сайте
Цитата Xakep ()
вообще можно это комбинировать, например рисовать все как статическую геометрию, а при взаимодействии уже начать рисовать через инстансинг )

Мне кажется он уже несколько сообщений пытается объяснить именно это )))
1) Есть просто низкополигональный меш в одном префабе (Пр1) и куча кубов, повторяющих форму этого меша (Пр2), в другом.
2) Если игрок ударит/выстрелит/разобьёт вдребезги Пр1, то вместо него появится (из пула или просто созданием) Пр2.
Способ хороший ,но чем дольше длится игра, тем больше станет лагов, так как количество кубов постепенно будет увеличиваться. Есть ещё похожий вариант (не знаю насколько он реализуем с точки зрения производительности).
1) На этом шаге всё как в предыдущем пункте, но Пр1 - это не меш, а куча статичных кубов, объединённых combined children или чем-то ещё.
2) После каждого взаимодействия мы заменяем Пр1 на Пр2, но спустя некоторое время (после окончания эффекта взаимодействия) закидываем получившийся Пр2 в новый префаб (точнее заменяем старый), а тот Пр2, что остаётся на сцене, делаем полностью статичным и объединённым в один меш. Таким образом мы получили новый Пр1.
3) Если же игрок взаимодействует с ним, то на сцену вызывается новый Пр2 и дальше повторяется предыдущий пункт.

Немного криво получилось объяснить, но весь смысл в постоянной подмене объединённой статики (которая также создаётся в процессе игры, а не только присутствует в начале) на динамический аналог при взаимодействии с игроком и обратно после взаимодействия
KamiRoninДата: Пятница, 25 Октября 2013, 11:29 | Сообщение # 51
почти ветеран
Сейчас нет на сайте
Цитата Archido ()
Раз у тебя кол-во вертексов сильно не изменилось, то ты поменял шило на мыло. Забей один этаж в "префаб" (в "один кусок геометрии") и собери из него такое же здание, как и из кубов.

млиин, ну по русски пишу вроде!! драв коллов стало 8 вместо 1840! тебе это ХОТЬ О ЧЕМ ТО говорит?!?!

Цитата Archido ()
Твой "оклюжн" захлебнется, когда таких зданий из 5К кубов будут десятки и больше.

умник пипец просто. оклюжен работает на мат модели с ассемблерным кодом. он не захлебнется и при полмиллиона 5к кубов-моделей. просто загрузка перед стартом будет высокой. тем более, сто раз говорил - не должно быть там кубов!! НЕ ДОЛЖНО!! там будут виртуализации если сделать правильно!! сам вякаешь про чтение, а после третьего повтора мог хотя бы просто - обратить внимание на то, что второй и третий разу уже специально для тебя писали!

Цитата Archido ()
Дык, если бы ты все понял с первого раза, то мне бы и не пришлось бы "буковки разводить", лол.

тебе, ..., с самого НАЧАЛА СКАЗАЛИ что не будет цельных моделей, ты свое талдычишь - "сделай цельную модель и тогда все полетит".. это либо врожденное, либо ты просто проспал смысл темы.. уж не знаю.

Цитата Archido ()
Реалтайм - во время "апдейта" или "рендера".

значит тебе вразумительно написали - ПРИ ЗАГРУЗКЕ! т.е. ДО рендера!

Цитата Archido ()
Омг, ты действительно через пару строчек читаешь или не способен думать.

судя по твоим постам тут кроме тебя реально никто не способен думать.
Цитата Archido ()
И есть большая пачка кубов-объектов (визуально они выглядят в точности как "один кусок геометрии"),

кому нужно "визуально"??? когда делаешь литой кусок, и тоскаешь за ним "node" с полностью идентичным количеством кубов, то смысл такой херни может быть доступен только тебе, чтобы подставить его когда сам не поймешь зачем опять написал то же самое только как яица - вид сбоку!
итак: либо ты имеешь к "цельной" модели ВИРТУАЛЬНУЮ карту позиций блоков и таскаешь ее с моделью, то накой ты вообще затеял общение в этой теме если советуешь такую бредятину?! эт первый вопрос. а второй - даже если сделать это - то виртуальную сетку "из выглядящих в точности как целая модель" блоков - как строить? и прикреплять? и потом узнавать в какую точку ВИРТУАЛЬНОЙ модели произошло воздействие? и почему ты советуешь ДВОЙНУЮ работу делать, когда уже все объяснили и получили отличный результат (1600 фпс было у человека!). Wakatta?
и ты конечно потряс своими особенностями - когда не знаешь Unity - столько всего написать в ветке по Юнити!! smile

Добавлено (25.10.2013, 11:29)
---------------------------------------------
Цитата White9 ()
Немного криво получилось объяснить, но весь смысл в постоянной подмене объединённой статики (которая также создаётся в процессе игры, а не только присутствует в начале) на динамический аналог при взаимодействии с игроком и обратно после взаимодействия

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

в общем я думаю что тема бодро переходит во флуд!! sad


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Пятница, 25 Октября 2013, 11:29
XakepДата: Пятница, 25 Октября 2013, 13:32 | Сообщение # 52
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата White9 ()
Способ хороший ,но чем дольше длится игра, тем больше станет лагов, так как количество кубов постепенно будет увеличиваться. Есть ещё похожий вариант (не знаю насколько он реализуем с точки зрения производительности).

если Пр2 рисовать через инстансинг, то производительность не сильно упадет, ну и тем более не все же кубы которые есть на сцене нужно рисовать и просчитывать для них физику.

Цитата KamiRonin ()
нет, ты правильно его идею выразил! я просто уже ответил - что это будет полный пиндык, а не функционал!! эти подмены убьют весь выигрыш от монолитной первоначальной модели.

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

Цитата KamiRonin ()
умник пипец просто. оклюжен работает на мат модели с ассемблерным кодом. он не захлебнется и при полмиллиона 5к кубов-моделей. просто загрузка перед стартом будет высокой. тем более, сто раз говорил - не должно быть там кубов!! НЕ ДОЛЖНО!! там будут виртуализации если сделать правильно!! сам вякаешь про чтение, а после третьего повтора мог хотя бы просто - обратить внимание на то, что второй и третий разу уже специально для тебя писали!

ну и что, пусть работает хоть с машинном кодом, у тебя 5к кубов, пока ты пройдешь все кубы, и проверишь их на пересечение с лучем, пройдет какое-то время, если это один лучь, то ладно, но если их уже 512 это уже проблема, с этим тоже можно бороться, но выйгрыша особо ты не получишь, а можешь сделать только хуже. но это если делать через лучи, может есть еще способы, типа аппаратный оклюжн кулинг.
robertonoДата: Пятница, 25 Октября 2013, 15:54 | Сообщение # 53
Чокнутый Кот
Сейчас нет на сайте
Хватит спорить между собой у кого идея лучше!
Я даже и не думал что всем так понравится тема про кубы...

Хотелось бы больше узнать про инстансинг. Ввел в гугл unity3d instancing а он мне предлагает gpu instancing, mesh instancing , hardware instancing... Что по моей теме больше подходит? Меш инстансинг?

Цитата KamiRonin ()
в общем я думаю что тема бодро переходит во флуд!!

Я всё равно уже выбрал пару способов какие я точно смогу сделать сам. Так что тема то не очень долго ещё будет длиться.

Добавлено (25.10.2013, 15:38)
---------------------------------------------
Цитата KamiRonin ()
(1600 фпс было у человека!)

combinemeshes очень крутая вещь...

Добавлено (25.10.2013, 15:54)
---------------------------------------------
Я даже покажу ( biggrin )
Вот тут где то 2000 кубов, без комбинирования. 90 фпс с тенями.

А вот тут те же примерно 2000 кубов, только скомбинированные с добавленным mesh collider

2000 фпс. Выглядят полностью одинаково smile
Но комбинирование было не при старте а при нажатии определённой кнопки (тест). Пауза всё таки небольшая была. Я вот никогда с потоками не работал.. Если выполнять в потоках (вообще незнаю как делается), то будет ли опять небольшой лаг на пол секунды?


Сообщение отредактировал robertono - Пятница, 25 Октября 2013, 15:54
XakepДата: Пятница, 25 Октября 2013, 18:01 | Сообщение # 54
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата robertono ()
Но комбинирование было не при старте а при нажатии определённой кнопки (тест). Пауза всё таки небольшая была. Я вот никогда с потоками не работал.. Если выполнять в потоках (вообще незнаю как делается), то будет ли опять небольшой лаг на пол секунды?

не будет
KamiRoninДата: Пятница, 25 Октября 2013, 18:10 | Сообщение # 55
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
Ввел в гугл unity3d instancing а он мне предлагает gpu instancing, mesh instancing , hardware instancing... Что по моей теме больше подходит? Меш инстансинг?

в сети по большей части под юнити инстансингом подразумевают... Instantiate!! smile т.е. программное размещение префаба в игре в реалтайме (мало ли, мож забыл кто! smile ).

правильное понятие Geometry Instancing, он может быть хардварным или программным (тогда его некоторые называют псевдо г.-инстансингом).
GPU инстансинг - это тоже самое что г.-инстансинг. он не поддерживается старыми видяхами.
меш-инстансинг наверняка имеют в виду то же самое - просто более ближе к телу. т.к. "заменяется" как раз меш у клонов.

в CryEngine, как говорят в ссылке, c 2004 года он поддерживается.. а вот для Unity я так и не нашел на официальном сайте ничего кроме "ждите в 4 версии будет включен!" во всех форумах. sad
и это млин угнетает!!! sad
уже две ключевые технологии ждем - uGUI и G.-Instancing.

а так, программно - люди уже все реализовали!! smile респектуха им! и не сочтите рекламой!!! за NGUI (но там кстати тоже все гуи за 2 DC рисуется! и есть механизм для этого) и за MinePackage и за потрясный ProBuilder в котором можно быстро, управляя на уровне граней и вертексов, лепить уровни, навешивать текстуры с UV прямо в редакторе юньки и еще несколько вещей!

я к тому, robertono, что не нужно бегать от создания своего г.инстансинга! это возможно и реально решает вопросы! smile


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Пятница, 25 Октября 2013, 18:14
robertonoДата: Пятница, 25 Октября 2013, 18:22 | Сообщение # 56
Чокнутый Кот
Сейчас нет на сайте
Цитата Xakep ()
не будет

а может кто то покажет простой пример с использованием потоков ? Статьи с нормальным описанием использования потоков в шарпе приветствуются!

KamiRonin, ну тогда будем ждать.. Пока я игру доведу до бетки может и инстансинг внедряд biggrin
KamiRoninДата: Пятница, 25 Октября 2013, 18:36 | Сообщение # 57
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
а может кто то покажет простой пример с использованием потоков ? Статьи с нормальным описанием использования потоков в шарпе приветствуются!

в самом MinePck (заездил я его тут уже! smile ) - скрипт BatchProcessor. (просто микроскопический для такого функционала).
пример его использования в скрипте WordGameObject, функция Start и из нее по цепочке смотри.. там конструкторы спецобъектов запускаются в батче.


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Пятница, 25 Октября 2013, 18:38
robertonoДата: Пятница, 25 Октября 2013, 20:12 | Сообщение # 58
Чокнутый Кот
Сейчас нет на сайте
KamiRonin, походу combinemeshes невозможно использовать в threadах... sad
Это ведь Unity API , а функции юнити нельзя использовать так в потоках. Я хотел
Код
go.GetComponent<MeshFilter> ().mesh.CombineMeshes (combine);

Сделать в потоках.
Но пишет что GetComponent can only be called from the main thread, а та строчка самая тяжелая из всего скрипта...
KamiRoninДата: Пятница, 25 Октября 2013, 21:24 | Сообщение # 59
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
Но пишет что GetComponent can only be called from the main thread, а та строчка самая тяжелая из всего скрипта...

smile
раздели строку на две части - в одной геткомпонент в переменную, а в другой из переменной уже combine.
вторую толкни в поток.


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
robertonoДата: Пятница, 25 Октября 2013, 23:43 | Сообщение # 60
Чокнутый Кот
Сейчас нет на сайте
KamiRonin, я сделал гет компонент в перменную, и получилось comp(название переменной).mesh.combi...
Жалуется на get_mesh

Добавлено (25.10.2013, 22:22)
---------------------------------------------
Короче про потоки и функции можно СРАЗУ ЗАБЫТЬ, НО я нашёл другое решение. Как бы это не смотрелось.. Это IENumerator! Просто создаём нумератор, и запускаем его где он уже сделает combine.
+ комбайнинг меша происходит с намного меньшей задержкой
+ иенумератор походу работает не на основном потоке, что позволяет не зависнуть игре при его работе
+ хороший способ вызвать функцию без лага

А что скажите вы?

Добавлено (25.10.2013, 23:43)
---------------------------------------------
Короче я точно буду использовать комбинирование в меш используя ienumerator. Кстати я попробовал поставить 16к - 22к кубов примерно, это здания , без комбинирования 10 фпс! Врубаю в короутайне, даже и секунды не проходит и все здания цельные меши и становится 800 фпс! Поразительно!

KamiRonin спасибо огромное smile

Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Оптимизация сцены где очень много объектов (Игры с кубическим миром)
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг