Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование игр, графики и искусственного интеллекта > Число текстур в объетке


Автор: EgoBrain 26.2.2009, 12:31
Вопрос по теории: если объекту  имеющему много материалов/текстур (meshMaterials[]/meshTextures[] - хранятся в массивах) задать каждой текстуре один и тот же файл (некоторый jpg)
Код

for(int i = 0; i < meshTextures.Length; i++)
{
    meshTextures[i] = TextureLoader.FromFile(device, @"некоторый jpg");
}
, то Direct CLR будет в памяти хранить для каждой текстуры отдельный экземпляр файла или для всех один, то есть есть ли разница между заданием каждой текстуре объекта один и тот же файл и заданием каждой текстуре разные файлы?
Вообще откуда взялся такой вопрос, сегодня заметил что если такому объекту с множеством материалов задать весомую текстуру (чуть меньше метра), то сцена "тупить" начинает, а потом понял что это на самом деле в совокупности с х6 сглаживанием тупило, убрал сглаживание - не тупит. Вообщето сразу оговорюсь что моя прога с множеством объектов с текстурами не тупит при 6х и 1600х1200 (объекты по нескольку мегайбайт весят), но когда добавляю объект скажем с 20 текстурами, то сразу тупить начинает со сглаживанием...

Автор: ShellRaiser 26.2.2009, 13:15
ууу...я как понимаю ты транжириш память текстурами "налево-направо"?
просто не загружай заново текстуры, если такие текстуры где-то уже есть то просто используй их...экономия;)
тоже самое и с моделями...если у тебя два одинаковых динозавра на сцене то не надо грузить каждому модель...достаточно загрузить одну модель и два раза отрендрить;)

Автор: EgoBrain 27.2.2009, 04:17
Цитата(ShellRaiser @ 26.2.2009,  13:15)
ууу...я как понимаю ты транжириш память текстурами "налево-направо"?
просто не загружай заново текстуры, если такие текстуры где-то уже есть то просто используй их...экономия;)
тоже самое и с моделями...если у тебя два одинаковых динозавра на сцене то не надо грузить каждому модель...достаточно загрузить одну модель и два раза отрендрить;)

По поводу моделей я не подумал, а вот по части текстур то же такая идея была - проверять в массиве текстур,  если есть одни и те же, то оставить одну, остальные обнулить, а при рендеренге просто один о тот же элемент массива текстур отображать... А вообще я пока не планировал браться за оптимизацию проекта брать, так как это дипломка, хотя там работы оптимизатору непочатый край.

Автор: ShellRaiser 27.2.2009, 10:50
EgoBrain, 
ненене дэвид блэйн=)
оптимизация такого рода должна быть сразу включенна, у меня в дипломмной текстуры и модели грузились в одном экземпляре
ты экономиш на памяти как оперативной так и видюхи.

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

map.put("monsterA_texture_head", new Texture("data\texture\monsterA\texture_head.png"));

а далее просто дёргаеш когда при рендре биндиш: map.get("monsterA_texture_head"); получиш объект текстуры, и спокойно его забиндиш.
но на самом деле ты не будеш юзать прямы названия) они у тебя далее по двигу динамически будут генериться.

это пример кода на java но думаю на плюсах ты найдёш в стл кажись похожую реализацию.

Добавлено через 4 минуты и 46 секунд
Цитата(EgoBrain @  27.2.2009,  04:17 Найти цитируемый пост)
А вообще я пока не планировал браться за оптимизацию проекта брать, так как это дипломка, хотя там работы оптимизатору непочатый край.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)