Динамическое вкл/выкл объектов...

Раздел, посвящённый самому важному - скорости.

Динамическое вкл/выкл объектов...

Сообщение denri11 31 июл 2012, 21:34

Доброго времени суток. Нигде не нашел толкового ответа, как реализовать динамическое включение/выключение объектов в зависимости от их положения относительно player'а (камеры).
Суть: есть длинная дорога, состоящая из повторяющихся кусков (как прямых, так и поворотов), по дороге едет мотоцикл, на встречу ему попадаются разные объекты-препятствия. Логично, что рисовать объекты (будь то элемент дороги или препятствие), которые расположены далеко от мотоцикла, например на расстоянии 100 метров, нет смысла. Сначала я думал, что Unity берет всю эту работу на себя: через параметры камеры Near clip plane и Far clip plane... но не тут то было (хотя я и не понимаю, почему ИМ нельзя было так сделать).
Так вот, посоветуйте грамотный способ для реализации поставленной задачи (игра пишется под андроид).
Мои соображения:
1) camera.layerCullDistances ,по-моему, объект рендерится все равно;
2) высчитывать вручную расстояния до объектов и включать/выключать renderer.enabled или gameObject.active. Причем для renderer.enabled во всех объектах должен присутствовать Render, а для gameObject.active, когда объект выключен, то его нельзя найти, чтобы заново включить. Да и получается, что мы должны знать все объекты, которые присутствуют на сцене, что не удобно.
3) Occlusion Culling...
denri11
UNец
 
Сообщения: 32
Зарегистрирован: 31 июл 2012, 20:40

Re: Динамическое вкл/выкл объектов...

Сообщение Multirezonator 31 июл 2012, 21:48

Разбить сцену на зоны, закрепить все динамические объекты за соответствующими зонами. Когда игрок(камера) заходит в конкретную зону - включать объекты в зоне и объекты в соседних зонах и выключать объекты в зонах которые не являются соседними.
Скрытый текст:



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

Re: Динамическое вкл/выкл объектов...

Сообщение denri11 01 авг 2012, 12:12

А по-подробней? Я создаю ГО соответствующий каждой зоне, например road_1, road_2..road_n, кидаю в них куски дороги и объекты, натягиваю коллайдер на каждую зону типа триггера, при въезде в очередную зону делаю gameObject.active=true для нужного road_n и gameObject.active=false для других ???
У меня gameObject.active=true вызывает ошибку для выключенного объекта, т.е. он не может его найти. И почему только динамические объекты кидать в зоны, а статические?
denri11
UNец
 
Сообщения: 32
Зарегистрирован: 31 июл 2012, 20:40

Re: Динамическое вкл/выкл объектов...

Сообщение denri11 02 авг 2012, 17:38

Это к тому же очень неудобно при составлении левелов. А если реализовать какие-нить кубы, которые ты натягиваешь на левел, реализуя тем самым зонную иерархию: что в кубе, то входит в определенную зону. Как идея? Как реализовать?
denri11
UNец
 
Сообщения: 32
Зарегистрирован: 31 июл 2012, 20:40

Re: Динамическое вкл/выкл объектов...

Сообщение Woolf 02 авг 2012, 20:17

Не знаю, почему вы так считаете, но Camera Clipping Planes отлично справляется с отсечением. Только недостаток, что только один слой поддерживает.
НО! В Antares есть компонент, который позволяет камере клипить по слоям.
Ах да! Еще LOD.

Удачи в оптимизации )
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Динамическое вкл/выкл объектов...

Сообщение Multirezonator 03 авг 2012, 09:30

Woolf писал(а):Не знаю, почему вы так считаете, но Camera Clipping Planes отлично справляется с отсечением. Только недостаток, что только один слой поддерживает.
НО! В Antares есть компонент, который позволяет камере клипить по слоям.

Camera.layerCullDistances задает дистанцию отсечения по слоям.

Multirezonator писал(а):Разбить сцену на зоны, закрепить все динамические объекты за соответствующими зонами. Когда игрок(камера) заходит в конкретную зону - включать объекты в зоне и объекты в соседних зонах и выключать объекты в зонах которые не являются соседними.

Это делать есть смысл если есть огромный мир и персонаж перемещаясь по нему подгружает и выгружает из памяти объекты окружения.
denri11 писал(а):Это к тому же очень неудобно при составлении левелов. А если реализовать какие-нить кубы, которые ты натягиваешь на левел, реализуя тем самым зонную иерархию: что в кубе, то входит в определенную зону. Как идея? Как реализовать?

Я ничего не говорил о реализации, потому как этот механизм можно реализавать тысячами способов, и каждый будет в чем-то неудобен и возможно даже бесполезен совсем. Нужно писать свой код для конкретной задачи.
Скрытый текст:



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

Re: Динамическое вкл/выкл объектов...

Сообщение liver9711 07 авг 2012, 07:32

В каждый объект вставляешь это:
Синтаксис:
Используется javascript
 
function OnBecameInvisible()
{
//Делаешь объект невидимым.(отключаешь рендер, тени и прочую гадость)
}
function OnBecameVisible()
{
//И теперь всё с точностью да наоборот.
}
 

Скрипт будет отключать рендер объекта, пока тотго не видит ни одна камера.
liver9711
UNITрон
 
Сообщения: 285
Зарегистрирован: 14 мар 2012, 11:16

Re: Динамическое вкл/выкл объектов...

Сообщение seaman 07 авг 2012, 10:11

В любом движке работает отсечение по фрустуму камеры. Т.е. если объект не попадает в камеру он не рендерится. Так что то что Вы написали не нужно. В этих двух методах нужно выключать другие вещи - длительные рассчеты в скриптах, возможно ригидбоди/коллайдеры, т.к. они сильно загружают комп. Тени тоже не имеет смысла выключать, т.к. если тень попадает в камеру объект считается видим для камеры и OnBecameInvisible не вызовется.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Динамическое вкл/выкл объектов...

Сообщение denri11 07 авг 2012, 16:41

согласен с seaman.
denri11
UNец
 
Сообщения: 32
Зарегистрирован: 31 июл 2012, 20:40


Вернуться в Оптимизация

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

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