Четверг, 28 Марта 2024, 16:54

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Оптимизация сцены где очень много объектов (Игры с кубическим миром)
Оптимизация сцены где очень много объектов
robertonoДата: Понедельник, 21 Октября 2013, 00:20 | Сообщение # 1
Чокнутый Кот
Сейчас нет на сайте
Здравствуйте! У меня вопрос по поводу оптимизации игры.
Как это делается в играх где мир состоит из кубов (или просто очень много объектов) ?
Ведь в играх где кубы, это отдельные кубы, ведь каждый можно разрушить, но лагов то нету. А там на камере видно очень много кубов!

Я построил здание из кубов, раскопировал его по сцене. Получилось около 60 к кубов видимых на камере! Но ведь это даже совсем не детализированные здания. При этом на i5 3570 и gtx 770 выдаёт всего то 7 фпс. Как убираются лаги? И почему лагов в других играх нету? Например ace of spades. У меня это просто объекты. А как это делается в других играх и за счёт чего лаги полностью отсутствуют даже на слабых системах ?

Заранее спасибо!

Добавлено (21.10.2013, 00:19)
---------------------------------------------
Немного статистики

Добавлено (21.10.2013, 00:20)
---------------------------------------------
И это очень маленькая локация, в игре планируются локации намного большего масштаба. Только проблема с производительностью..

Andrey_MДата: Понедельник, 21 Октября 2013, 00:38 | Сообщение # 2
старожил
Сейчас нет на сайте
Сделай, чтобы прорисовывались только те кубы, которые видит игрок. Те, которые не видит, пусть не прорисовываются. Я бы так сделал, хотя в юнити не очень понимаю(

ЪЪЪЪ! Лучшая благодарность - плюс в репутацию :-)
H-OДата: Понедельник, 21 Октября 2013, 00:44 | Сообщение # 3
частый гость
Сейчас нет на сайте
robertono, 1. Если каждый куб это отдельный объект, то у вас на каждом кубе по несколько лишних полигонов.
2. Если это объект созданный в Unity3D, а не загруженная модель, то движок будет генерировать каждый полигон самостоятельно, что конечно же несет дополнительную нагрузку.
BarbatosДата: Понедельник, 21 Октября 2013, 01:00 | Сообщение # 4
3D-моделлер/Руководитель
Сейчас нет на сайте
robertono,
9 миллионов полигонов? ОМГ
Один куб это 6 полигона, 900000 полигонов разделить на 6 у тебя в сцене это должно быть 1500000 кубов должно быть, их там нет, логично посмотреть там нет такого количества.
Возьми куб и посмотри на его сетку и выложи сюда, сколько в одном кубе полигонов.

Майнкрафт на планшетах грузится.


Его остатки и на хлеб не намазать. Мой тебе совет Пабло - относись к жизни как к веселухе, но непродолжительной. @Эш

Сообщение отредактировал Barbatos - Понедельник, 21 Октября 2013, 12:12
EpetukДата: Понедельник, 21 Октября 2013, 09:22 | Сообщение # 5
частый гость
Сейчас нет на сайте
1.8 млн. треугольников, 5 тысяч дравколов - а чо оно лагает то?
PoqXertДата: Понедельник, 21 Октября 2013, 10:05 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Epetuk, потому что DC в 10 раз больше чем ты увидел.
robertono, уменьшай DC.
Трисы влияют, но не сильно.
~10M трисов, ~400 DC, 70-80 FPS
~22M трисов, ~850 DC 35-40 FPS
~45M трисов, ~1,3K DC 20-25 FPS


Расширения для Unity3D
Блог программиста - PoqXert.ru
NEBRДата: Понедельник, 21 Октября 2013, 10:31 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
PoqXert, дело говорит. Используй динамический батчинг, его суть в том что два объекта с одинаковым материалом отрисуются как один. В твоем случае 60 к кубов отрисуются как один куб. Ну и, может есть смысл в том чтобы куб сделать самому в 3d редакторе, таким, каким он и должен быть - из 6 полигонов.

Добавлено (21.10.2013, 10:31)
---------------------------------------------
Не обратил внимания, оказывается динамический батчинг уже используется. Заостри внимание на материалах. Чтобы на одном кубе был один материал


King Size #Gamiron12
RangerДата: Понедельник, 21 Октября 2013, 11:27 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
Мне вот интересно, если грохнуть один куб, то кубы сверху "пойдут" вниз, или будут "держаться" за соседей сбоку?

BarbatosДата: Понедельник, 21 Октября 2013, 11:31 | Сообщение # 9
3D-моделлер/Руководитель
Сейчас нет на сайте
Ranger,
Это зависит от настрое физики, должны упасть если на них висит rigidbody или как-то так.


Его остатки и на хлеб не намазать. Мой тебе совет Пабло - относись к жизни как к веселухе, но непродолжительной. @Эш
RangerДата: Понедельник, 21 Октября 2013, 11:35 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
Цитата Barbatos ()
Это зависит от настрое физики, должны упасть если на них висит rigidbody или как-то так.

Да про rigidbody понятно.
Просто при его использовании "в лоб". В здании нельзя будет "насверлить" дырок оружием и оно будет рушиться ненатурально(слоями).
Сам думал об этом, поэтому Автора и спросил.


BizzyДата: Понедельник, 21 Октября 2013, 12:32 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Отключи тени и если про версия то юзай "occlusion culling". Также если будет много текстур, сделай атласс.

robertonoДата: Понедельник, 21 Октября 2013, 16:31 | Сообщение # 12
Чокнутый Кот
Сейчас нет на сайте
Спасибо огромное за ответы конечно.. но всё же
Моя проблема в том что я не сказал что кубы можно будет ломать

Цитата H-O ()
1. Если каждый куб это отдельный объект, то у вас на каждом кубе по несколько лишних полигонов.

Нету смысла создавать куб без всех 6 полигонов, т.к. этот куб можно будет сломать , и если полигонов не будет то это будет уже не куб..

Цитата Barbatos ()
Майнкрафт на планшетах грузится.

Да, потому что там наверняка это делается совсем по другому. Я могу выложить префаб в котором будет все 6 зданий и вы сами всё у себя попробуете.

Цитата Barbatos ()
Возьми куб и посмотри на его сетку и выложи сюда, сколько в одном кубе полигонов.

Это куб созданный в юнити. GameObject - Create - Cube

Цитата NEBR ()
Заостри внимание на материалах. Чтобы на одном кубе был один материал

На каждом кубе один и тот же difuse материал который ставится когда создаёшь куб в юнити.

Цитата Ranger ()
Мне вот интересно, если грохнуть один куб, то кубы сверху "пойдут" вниз, или будут "держаться" за соседей сбоку?

Я про физику ничего не говорил

Цитата Bizzy ()
если про версия то юзай "occlusion culling".

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

Добавлено (21.10.2013, 16:01)
---------------------------------------------

Цитата Bizzy ()
Отключи тени

+5 фпс только. Того 14.

Дело не в том, есть ли тени, какие материалы, есть ли оклюжн кулинг, сколько полигонов на кубе юнити.
В этой кубической игре отсутствуют чанки. В этой игре куб, это отдельно созданный gameobject cube без материала. Каждый куб.
Возможно мне нужно просто посмотреть MinePackage.
Я в первом сообщении не просто так упомянул
Цитата robertono ()
А как это делается в других играх и за счёт чего лаги полностью отсутствуют даже на слабых системах ?
.
Просто в других играх это делается совсем по другому как я понял.

Вы видите характеристики моего компьютера? Выигрыш 5 фпс от теней, от полигонов безсмыссленый , так как игра сильно тормозит на видео карте Geforce GTX 770 !

Добавлено (21.10.2013, 16:19)
---------------------------------------------
Вот вам префаб одного здания, врубите юнити, поставьте first person controller, поставьте здание на сцену 6 раз (у меня стоит 6 зданий) и посмотрите сколько фпс будет у вас. Не думаю что больше 2.

BuildingPrefab

Добавлено (21.10.2013, 16:29)
---------------------------------------------
Открыл я значит MinePackage, текстуры у меня грузится не хотели , но я включил максимальное сглаживание (x8), fantastic, врубил тени.


1000 fps)) С помощью чего это достигается?

Добавлено (21.10.2013, 16:31)
---------------------------------------------
Но там не ломаются блоки почему то...

KamiRoninДата: Понедельник, 21 Октября 2013, 22:23 | Сообщение # 13
почти ветеран
Сейчас нет на сайте
насколько смог разобраться, в MinePackage используется вычисление лицевых сторон, батч процессор, который рассовывает все вычисления по отдельным потокам, и декоратор, который накладывает текстуру на видимый полигон используя признаки "пиксола" (тоже в отдельном потоке).
там вообще нет кубов!
мир хранится в координатах и признаках (позиция, текстура, UV развертка). каждый chunk хранит в себе и меш, и меш рендер, и меш фильтр, но они включаются только для видимых блоков, наверное только в зоне досягаемости рейкаста плейера.
грубо говоря -- после декорирования это просто литой "пиксольный" (вортексный) объект, который просто выглядит как куча блоков.
когда ломаешь "пиксол" - то декоратор вычисляет новое видимое поле, только для сопряженных с измененным chunk'ом и все. мы снова имеем единый вортексный объект.
если сделаешь в 3D max такой "террайн" слитый с деревьями, удалив все скрытые полигоны, и запекши текстуры - то он вот так и будет работать в unity. у меня 68 fps / 1M вертексов / 513K триугольников в FullHD на весь мир.


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


Сообщение отредактировал KamiRonin - Понедельник, 21 Октября 2013, 22:24
robertonoДата: Вторник, 22 Октября 2013, 00:04 | Сообщение # 14
Чокнутый Кот
Сейчас нет на сайте
KamiRonin, из твоего выше сказанного, для себя я могу выбрать создание системы вычисления лицевых сторон. Это должно очень сильно поднять производительность (я думаю). А где можно прочитать про батч процессор?

А вот хотелось бы поговорить о чанках - нужны ли они мне? Если я в какой то момент захочу добавить кубам (во время игры, любой куб который я выберу) rigidbody, то получается чанки тогда безсмысслено делать? И если я хочу построить небоскрёб, сделать ему красивое падение и разрушение то чанки тоже уже не годятся?

Occlusion Culling своими руками.
Можно сделать? Точнее вопрос можно ли выглядит тупо, потому что написать можно что угодно. Скорее вопрос "как".
Я видел такую крутую штуку, Field Of View с помощью теней.
http://unitycoder.com/upload/demos/FOVShadowcasting1/
Может можно как то тени обрабатывать но не обрабатывать ? biggrin Т.е. как бы просчитывать их но не выводить на экран?
И например куда лучи солнца попадают, всмысле на какие объекты , те и рендерить. Источник света повесить на камеру или игрока. Но что бы тоже света небыло, теней небыло но они обрабатывались (очень сомневаюсь что реально, но может можно сделать как то очень похоже). Так можно было бы не рендерить то что находится например ЗА каким нибудь кубом и совсем не видно!

Заранее спасибо!

Добавлено (21.10.2013, 22:47)
---------------------------------------------
KamiRonin, спасибо за подробное описание всего)

Добавлено (21.10.2013, 22:52)
---------------------------------------------
KamiRonin, Какие вообще есть способы что бы не рендерить объекты которые не видно но они например находятся за какими то объектами спереди?

Добавлено (21.10.2013, 23:00)
---------------------------------------------
KamiRonin, А мне кажется всё равно пришлось бы писать свою оклюжн кулинг систему, т.к. которая в про версии она же как запекает объекты, а значит если они динамические то это уже не получится использовать!

Добавлено (21.10.2013, 23:21)
---------------------------------------------
KamiRonin, Из чего вообще состоят эти системы? Сетка из триггеров?

Добавлено (22.10.2013, 00:04)
---------------------------------------------
Вот такое нехитрое решение я нашёл для oclusion culling!
http://unitycoder.com/blog/2012/02/15/raycast-realtime-visibility-2-0/
разработчик предлагает пускать до 60 к рейкастов! Но я проверил, и для плавности достаточно 1024, но не 512) И того,пускаем тысячу рейкастов и отрубаем то что его не трогает) Можно делать массив то что включено, и удалять от туда когда не видно. Вообщем придумать можно хорошо я думаю smile

XakepДата: Вторник, 22 Октября 2013, 00:14 | Сообщение # 15
めちゃくちゃちゃ
Сейчас нет на сайте
подобное делается при помощи инстансинга, так же рисуется много травы, вообще нужно разбить весь мир на блоки для начала, и отрисовывать несколько блоков одним вызовом, большое падение фпс так же из-за того, что одновременно расчитывается вся физика для каждого объекта, оптимизации физики - это уже другая тема
PoqXertДата: Вторник, 22 Октября 2013, 03:21 | Сообщение # 16
постоянный участник
Сейчас нет на сайте
Цитата robertono ()
Вот вам префаб одного здания, врубите юнити, поставьте first person controller, поставьте здание на сцену 6 раз (у меня стоит 6 зданий) и посмотрите сколько фпс будет у вас. Не думаю что больше 2.

12-15 FPS (без теней)
Не понятно, откуда ты взял 50К DC и 2М трисов?
Твои 6 зданий и террейн дают ~80 DC и ~330К трисов.


Расширения для Unity3D
Блог программиста - PoqXert.ru
robertonoДата: Вторник, 22 Октября 2013, 16:32 | Сообщение # 17
Чокнутый Кот
Сейчас нет на сайте
Цитата Xakep ()
отрисовывать несколько блоков одним вызовом

Это я так понял чанки? Это невозможно сделать, т.к. мир блоки иногда будут получать rigibody + force.

Цитата Xakep ()
большое падение фпс так же из-за того, что одновременно расчитывается вся физика для каждого объекта

я не говорил и этого нету : на кубах нету rigidbody. Просто rigibody будет добавлен объектам около которых взорвалась граната и после чего AddForce.

Добавлено (22.10.2013, 16:28)
---------------------------------------------

Цитата PoqXert ()
Не понятно, откуда ты взял 50К DC и 2М трисов?
Твои 6 зданий и террейн дают ~80 DC и ~330К трисов.


Я тоже не знаю откуда столько... Возможно не правильные модели оружия, т.к. он выглядит самым неоптимизированным...
Модели все делаются в Cinema 4D.


у меня 18 - 22 фпс без теней)

Добавлено (22.10.2013, 16:32)
---------------------------------------------
robertono, потестил, оружие + перс не больше 40к вертов. Вообще не знаю что создало целых 3 милиона!

KamiRoninДата: Вторник, 22 Октября 2013, 20:42 | Сообщение # 18
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
Из чего вообще состоят эти системы? Сетка из триггеров?

"эти системы"? эт ты про что?
в MinePck - простой трехмерный массив блоков, каждый из которых хранит признаки и тп. основой блока является ТРАНСФОРМ.

Цитата robertono ()
Вот такое нехитрое решение я нашёл для oclusion culling!

smile нуу не знаааю.. Lod, Occlusion автоматом считают видимость... хотя идея конечно зачетная smile
Цитата robertono ()
Какие вообще есть способы что бы не рендерить объекты которые не видно но они например находятся за какими то объектами спереди?

просто Active = false; вопрос определения их видимости. я бы сделал просто ближайшие к игроку видимыми все. остальные считал бы через линию проходящую через точку блока и точку позиции камеры - получил бы на его пути координаты других объектов, из смещение + заранее известный размер "кубов" сделали бы признак видимости однозначным.

а так вопросов тут очень много. как ответишь на них все - напиши тут статью плиз!! smile

Вот есть уже и скрипты url=http://gamecreatingcommunity.ru/forum/178-2039-1].
Есть LOD система (оклюжен дороговатый в обработке все таки), с очень хорошими показателями тут и
тут.

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


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


Сообщение отредактировал KamiRonin - Вторник, 22 Октября 2013, 20:43
XakepДата: Вторник, 22 Октября 2013, 21:12 | Сообщение # 19
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата robertono ()
Это я так понял чанки? Это невозможно сделать, т.к. мир блоки иногда будут получать rigibody + force.

я не в курсе что-такое чанки, я не прогарммирую в юнити, я говорю как это делается в общем, а делается это через псевдо инстансинг или аппаратный инстансинг, со вторым не работал, а вот с псевдо инстансингом, можно физику прикрутить, нужно уметь просто. Советую погуглить на тему инстансинга.
robertonoДата: Вторник, 22 Октября 2013, 21:55 | Сообщение # 20
Чокнутый Кот
Сейчас нет на сайте
KamiRonin, а мне кажется LOD здесь не подойдёт потому что это просто куб. Я не понимаю как это с кубами использовать)

Добавлено (22.10.2013, 21:55)
---------------------------------------------
Цитата KamiRonin ()
остальные считал бы через линию проходящую через точку блока и точку позиции камеры - получил бы на его пути координаты других объектов, из смещение + заранее известный размер "кубов" сделали бы признак видимости однозначным.


мне кажется этот вариант медленным

Добавлено (22.10.2013, 21:55)
---------------------------------------------
Цитата KamiRonin ()
"эти системы"? эт ты про что?

оклюжн кулинги


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

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