|
3D-программирование Вопросы, касающиеся программирования 3D мира |
23.07.2008, 16:44
|
#1
|
Оператор ЭВМ
Регистрация: 03.05.2007
Сообщений: 23
Написано 0 полезных сообщений (для 0 пользователей)
|
Что быстрее LoadMesh vs LoadAnimMesh?
Почему когда я гружу уровень (~ 30 тыс/полигонов) через LoadAnimMesh(чтобы пропарсить его) FPS падает в разы больше чем через простую LoadMesh ?
И ещё вопрос, Через блитцевскую команду AvailVidMem() заметил что при загрузке геометрии в видео-память и последующем её скрытии на расстоянии память моей карточки не освобождается, пока мешей мало всё будет нормально, а что когда мой проект разрастётся скажем до 500 тыс.полигонов?
При юзанье комманды HideEntity я так догнал что свобода настаёт только рендеру но не как не ОЗУ моей видеокарты?
|
(Offline)
|
|
23.07.2008, 17:13
|
#2
|
ПроЭктировщик
Регистрация: 18.11.2006
Сообщений: 179
Написано 7 полезных сообщений (для 16 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
Насчет первого вопроса не знаю, сам не пробовал. А с HideEntity ты абсолютно прав, отключается рендер этой модели (и соответственно обработка анимации и остальной работы над моделью), но ее геометрия и.т.д. естественно остаются в памяти, или как ты хотел? Хайдаешь энтити и он выгружается из видеопамяти? ))) А теперь представь себе чтобы его обратно показать - надо вновь загрузить? ))) Чтобы из видеопамяти выгрузить юзай FreeEntity (выгружается геометрия, браши и все остальноеЮ, что связано с этим энтити (позиция, поворот и.т.д.))
|
(Offline)
|
|
23.07.2008, 17:22
|
#3
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
насчет первого вопроса.
твой уровень состоит из кучи объектов. рисовать 1000 объектов по 1000 полигонов ето совсем не то же самое, что 10 по 100 000. второе быстрее (при условии что все объекты выводятся на екран)
|
(Offline)
|
|
23.07.2008, 23:47
|
#4
|
Разработчик
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений (для 289 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
А если сделать кадров при експорте модели в шкале анимации в максе минимум то файл будет весить меньше - спасибки внизу жать есче
|
(Offline)
|
|
24.07.2008, 00:15
|
#5
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
Dstorton111
1. Что быстрее LoadMesh vs LoadAnimMesh?
|
Одинаково при загрузке.
Разница в обработке.
У тебя как и верно сказал ХолиДел уровень состоит из кучи объектов.
Один объект - один батч при рендере.
10 000 объектов - 10 000 батчей.
Это здорово тормозит игру
А Блитз особенно критичен к количеству Ентити
(т.к. когда ты грузишь Аниммешем то каждый объект из макса - это энтити)
Когда ты грузишь LoadMesh - все объекты объединяются в один , ентити получается один и тормозов в разы(!) меньше.
Решение:
№0. Юзать LoadMesh
№1. Если приспичило LoadAnimMesh то тогда объедини все объекты в один в редакторе графики (3ds max например) и уже в таком виде экспортируй в Блитз. Не объединяй только то, что тебе действительно нужно и из-за чего нельзя юзать LoadMesh
Если ты не знаешь подобных случаев - не заморачивайся (это отдельная песня зачем и почему иногда нельзя использовать LoadMesh а нужно именно LoadAnimMesh как-нибудь долгими зимними вечерами расскажу), юзай решение №0
Правило хорошего Блитзера № 113 - всегда минимизируй кол-во энтити
2.
а что когда мой проект разрастётся скажем до 500 тыс.полигонов?
При юзанье комманды HideEntity я так догнал что свобода настаёт только рендеру но не как не ОЗУ моей видеокарты?
|
Угу, освобождается только рендер.
Это удобно когда нужно часто скрывать/показывать некоторые объекты
Потому что если ты выкинул из памяти что-то то если тебе потом приспичит это показать, то придётся грузить с винта а это жжжуткий тормоз.
Правило хорошего блитзера №238 - никогда не грузи ничего с винчестера во время игры.
Далее.
Не хватит ОЗУ - полезет в файл подкачки - только и всего
Правда этот самый файл подкачки находится на винте, а это... (см. выше)
Но я не думаю что тебе удастся заср*ть 1 Гб ОЗУ (средний сегодняшний компьютер). Так что спи спокойно.
Кстати! Для экономии памяти стоит удалять уже заюзанные текстуры!
Например так:
Tex = LoadTexture("texture.dds")
ball = CreateSphere(16)
EntityTexture ball,tex
FreeTexture tex
Правило хорошего блитзера №96 - всегда удаляй текстуры после их использования!
Надеюсь, развёрнуто и понятно всмё объяснил. Удачи!
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
24.07.2008, 12:11
|
#6
|
Дэвелопер
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений (для 1,460 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
Сообщение от ABTOMAT
Dstorton111
Кстати! Для экономии памяти стоит удалять уже заюзанные текстуры!
Например так:
Tex = LoadTexture("texture.dds")
ball = CreateSphere(16)
EntityTexture ball,tex
FreeTexture tex
Правило хорошего блитзера №96 - всегда удаляй текстуры после их использования!
|
разве в Direct3D память под текстуры управляется не счетчиком ссылок?
т.е. ты можешь удалить текстуру, но она уже используется кучей мешей и refcount у нее больше нуля (т.е. текстура все еще в памяти).
так что насчет экономии не получится. просто не сможешь новые меши текстурить этой текстурой...
|
(Offline)
|
|
24.07.2008, 12:52
|
#7
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
Текстура останется в памяти, но ссылки на неё и её управление будет уже не доступны, это освобождает немного память.
LoadMesh и LoadAnimMesh разные вещи, и их сравнивать нельзя.
Ещё есть в DX такой моммент, что память в ДХ9 прилоениях заполняется только после первого рендеринга объекта, до этого он какбы находится в ней, но не в памяти (незнаю как объяснить, т.к. сам не разбирался, но заметил этот моммент в дх сдк, пару демках).
|
(Offline)
|
|
24.07.2008, 13:11
|
#8
|
Дэвелопер
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений (для 1,460 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
Сообщение от MoKa
Текстура останется в памяти, но ссылки на неё и её управление будет уже не доступны, это освобождает немного память..
|
эээ... выигрыш в 8(к примеру) байт (указатель на текстуру и на vtable)???
Сообщение от MoKa
LoadMesh и LoadAnimMesh разные вещи, и их сравнивать нельзя.
|
все можно сравнивать, главное определить критерии
Сообщение от MoKa
Ещё есть в DX такой моммент, что память в ДХ9 прилоениях заполняется только после первого рендеринга объекта, до этого он какбы находится в ней, но не в памяти (незнаю как объяснить, т.к. сам не разбирался, но заметил этот моммент в дх сдк, пару демках).
|
это как?
|
(Offline)
|
|
24.07.2008, 13:30
|
#9
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
на самом деле, создается браш - и туда копируется текстура. зачем так сделали авторы блица - хз.
|
(Offline)
|
|
24.07.2008, 15:08
|
#10
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
ХЗ-то хз но ОЗУ освобождается - это факт.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
24.07.2008, 16:47
|
#11
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
HolyDel, я скорее считал что есть брашь - он наложен на сюрфейс, а текстура вкладывается в брашь при наложении на сюрфейс (при наложении на энтити, все его браши получают эту текстуру, и от сюда все сюрфейсы). Разве не так?
|
(Offline)
|
|
24.07.2008, 16:57
|
#12
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
тогда при удалении текстуры был бы мав. скорее всего при первом наложении куда либо - делается браш (копируется текстура). и дальше, по возможности используется етот браш. а текстуру можно стирать. а у себя в двиге я вообще по дефолту держу копию текстуры в системной памяти, на всякий пожарный.
|
(Offline)
|
|
24.07.2008, 17:14
|
#13
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
По мне так представляется так: Есть эллемент, в нём инфа и указатель на текстуру.
Также есть брашь. При наложении на голый сюрфейс, надаж брашь создать. Или он будет автоматически создан. Таким образом в браше уже будет хранится указатель на саму текстуру, а не на эллемент.
При удалении браша текса то останется. А если она нигде не юзается то удаляется - по сути это задача менеджера ресурсов.
|
(Offline)
|
|
24.07.2008, 17:42
|
#14
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
я фигею. как с графикс3д изменилось значние. тут что то хитрожопое. если убрать renderworld из мест явно для него не предназначенных, то программа становится шаманской - фиг поймеш когда и где выделяется память.
DebugLog TotalVidMem()
DebugLog AvailVidMem()
Graphics3D 800,600,32,2
cam=CreateCamera()
PositionEntity cam,0,0,-5
RenderWorld()
DebugLog AvailVidMem()
tex = CreateTexture(1024,1024)
b = TextureBuffer(tex)
For i=0 To 1023
For j=0 To 1023
WritePixel(i,j,Rnd(2^32),b)
Next
Next
RenderWorld()
DebugLog AvailVidMem()
cube = CreateCube()
EntityTexture cube,tex
RenderWorld()
DebugLog AvailVidMem()
FreeTexture tex
RenderWorld()
DebugLog AvailVidMem()
;FreeEntity cube
RenderWorld()
DebugLog AvailVidMem()
While Not KeyDown(1)
TurnEntity cube,0,1,0
RenderWorld
Flip
Wend
DebugLog AvailVidMem()
FreeEntity cube
RenderWorld()
DebugLog AvailVidMem()
EndGraphics
DebugLog AvailVidMem()
Stop
End
|
(Offline)
|
|
24.07.2008, 17:54
|
#15
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Что быстрее LoadMesh vs LoadAnimMesh?
HolyDel, да есть такие приколы. По сути там менеджер работает хитро
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:50.
|