![]() |
Что быстрее LoadMesh vs LoadAnimMesh?
Почему когда я гружу уровень (~ 30 тыс/полигонов) через LoadAnimMesh(чтобы пропарсить его) FPS падает в разы больше чем через простую LoadMesh ?
И ещё вопрос, Через блитцевскую команду AvailVidMem() заметил что при загрузке геометрии в видео-память и последующем её скрытии на расстоянии память моей карточки не освобождается, пока мешей мало всё будет нормально, а что когда мой проект разрастётся скажем до 500 тыс.полигонов? При юзанье комманды HideEntity я так догнал что свобода настаёт только рендеру но не как не ОЗУ моей видеокарты? |
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
Насчет первого вопроса не знаю, сам не пробовал. А с HideEntity ты абсолютно прав, отключается рендер этой модели (и соответственно обработка анимации и остальной работы над моделью), но ее геометрия и.т.д. естественно остаются в памяти, или как ты хотел? Хайдаешь энтити и он выгружается из видеопамяти? ))) А теперь представь себе чтобы его обратно показать - надо вновь загрузить? ))) Чтобы из видеопамяти выгрузить юзай FreeEntity (выгружается геометрия, браши и все остальноеЮ, что связано с этим энтити (позиция, поворот и.т.д.))
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
насчет первого вопроса.
твой уровень состоит из кучи объектов. рисовать 1000 объектов по 1000 полигонов ето совсем не то же самое, что 10 по 100 000. второе быстрее (при условии что все объекты выводятся на екран) |
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
А если сделать кадров при експорте модели в шкале анимации в максе минимум то файл будет весить меньше :) - спасибки внизу жать есче :)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
Dstorton111
Цитата:
Разница в обработке. У тебя как и верно сказал ХолиДел уровень состоит из кучи объектов. Один объект - один батч при рендере. 10 000 объектов - 10 000 батчей. Это здорово тормозит игру А Блитз особенно критичен к количеству Ентити (т.к. когда ты грузишь Аниммешем то каждый объект из макса - это энтити) Когда ты грузишь LoadMesh - все объекты объединяются в один , ентити получается один и тормозов в разы(!) меньше. Решение: №0. Юзать LoadMesh №1. Если приспичило LoadAnimMesh то тогда объедини все объекты в один в редакторе графики (3ds max например) и уже в таком виде экспортируй в Блитз. Не объединяй только то, что тебе действительно нужно и из-за чего нельзя юзать LoadMesh Если ты не знаешь подобных случаев - не заморачивайся (это отдельная песня зачем и почему иногда нельзя использовать LoadMesh а нужно именно LoadAnimMesh как-нибудь долгими зимними вечерами расскажу), юзай решение №0 Правило хорошего Блитзера № 113 - всегда минимизируй кол-во энтити 2. Цитата:
Это удобно когда нужно часто скрывать/показывать некоторые объекты Потому что если ты выкинул из памяти что-то то если тебе потом приспичит это показать, то придётся грузить с винта а это жжжуткий тормоз. Правило хорошего блитзера №238 - никогда не грузи ничего с винчестера во время игры. Далее. Не хватит ОЗУ - полезет в файл подкачки - только и всего :-) Правда этот самый файл подкачки находится на винте, а это... (см. выше) Но я не думаю что тебе удастся заср*ть 1 Гб ОЗУ (средний сегодняшний компьютер). Так что спи спокойно. Кстати! Для экономии памяти стоит удалять уже заюзанные текстуры! Например так: Tex = LoadTexture("texture.dds") ball = CreateSphere(16) EntityTexture ball,tex FreeTexture tex Правило хорошего блитзера №96 - всегда удаляй текстуры после их использования! Надеюсь, развёрнуто и понятно всмё объяснил. Удачи! ;) |
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
Цитата:
т.е. ты можешь удалить текстуру, но она уже используется кучей мешей и refcount у нее больше нуля (т.е. текстура все еще в памяти). так что насчет экономии не получится. просто не сможешь новые меши текстурить этой текстурой... |
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
Текстура останется в памяти, но ссылки на неё и её управление будет уже не доступны, это освобождает немного память.
LoadMesh и LoadAnimMesh разные вещи, и их сравнивать нельзя. Ещё есть в DX такой моммент, что память в ДХ9 прилоениях заполняется только после первого рендеринга объекта, до этого он какбы находится в ней, но не в памяти (незнаю как объяснить, т.к. сам не разбирался, но заметил этот моммент в дх сдк, пару демках). |
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
Цитата:
Цитата:
Цитата:
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
на самом деле, создается браш - и туда копируется текстура. зачем так сделали авторы блица - хз.
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
ХЗ-то хз но ОЗУ освобождается - это факт.
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
HolyDel, я скорее считал что есть брашь - он наложен на сюрфейс, а текстура вкладывается в брашь при наложении на сюрфейс (при наложении на энтити, все его браши получают эту текстуру, и от сюда все сюрфейсы). Разве не так?
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
тогда при удалении текстуры был бы мав. скорее всего при первом наложении куда либо - делается браш (копируется текстура). и дальше, по возможности используется етот браш. а текстуру можно стирать. а у себя в двиге я вообще по дефолту держу копию текстуры в системной памяти, на всякий пожарный.
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
По мне так представляется так: Есть эллемент, в нём инфа и указатель на текстуру.
Также есть брашь. При наложении на голый сюрфейс, надаж брашь создать. Или он будет автоматически создан. Таким образом в браше уже будет хранится указатель на саму текстуру, а не на эллемент. При удалении браша текса то останется. А если она нигде не юзается то удаляется - по сути это задача менеджера ресурсов. |
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
я фигею. как с графикс3д изменилось значние. тут что то хитрожопое. если убрать renderworld из мест явно для него не предназначенных, то программа становится шаманской - фиг поймеш когда и где выделяется память.
Код:
DebugLog TotalVidMem() |
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
HolyDel, да есть такие приколы. По сути там менеджер работает хитро :)
|
Часовой пояс GMT +4, время: 04:28. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot