Quest3D - Русскоязычное сообщество

Quest3D => Программирование => Тема начата: redis от 25 Сентября 2009, 16:58:01



Название: причина падения производительности
Отправлено: redis от 25 Сентября 2009, 16:58:01
Всем привет. Я бы хотел спросить у знающего народа, собственно у меня есть проект в нём полигонов не много около 100 тысяч, но очень много блоков и каналов массивов, array table 5 штук, и мне бы хотелось узнать почему проект тормозит? Вроде говорилось что всё зависит от железа, так у меня из 2 гигов оперативы 300 мб используется, и проц загружен лишь на половину, так вот мне интересно может это сам квест тормозит? может есть предел кол-ва блоков?


Название: Re: причина падения производительности
Отправлено: DimiS от 25 Сентября 2009, 18:14:05
Нет, это не сам квест, и вряд ли есть некий предел ограниченный программно. Скорее всего нужна оптимизация твоей программы. Наверно ты где-то что-то не учитываешь, или не знаешь каких то ньюансов.
Например большинство ченелов просчитывают свой результат каждый раз когда к ним обращаются, и если ты конектиш некий такой вычисляемый пиздец в цикле, то это может стать причиной падения производительности. Облегчить цикл можно вынеся все вычисления не зависящие от итерации цикла наружу, там посчитать и сохранить в какую-то переменную (Set Value, Set Vector, и т.д.)
Но это был банальный пример. Грустнее если не знать некоторых особенностей работы компъютера, все из которых так сразу и не перечислить и не объяснить. Например очень тяжелая операция записи RTT текстуры в обычную, потому что первая храниться на видяхе а вторая в операционной памяти с которой работает центральный процессор. И видяхи не расчитаны на быструю передачу данных процессору, вот с проца на видяху -- пожалуйста. Так вот, ошибкой будет в каждом рендере выполнять операцию копирования из RTT в обычную, хотя в документации квеста это никак на прямую не упоминается  :) Ну и выделение памяти тоже не такая быстрая операция как может показаться. Каждый раз когда вы выполняете Text Operator -- это выделение памяти под результат. Каждое создание элемента в массиве -- тоже.
Я не хочу сказать, что нужно отказаться от этих операций вовсе, просто постарайтесь избежать их использования в серьёзном цыкле, который будет выполняться каждый рендер


Название: Re: причина падения производительности
Отправлено: redis от 25 Сентября 2009, 18:59:06
Спасибо за подробный ответ да ещё и с примерами)) но если под словом цикл вы подразумеваете канал for loop, то я его почти не использую(только для стрельбы), основная логика у меня ии, и для каждого нового моба я просто копирую группу каналов, и подсоединяю к рендеру,(мобов пока 3) или лучше цикл использовать ?


Название: Re: причина падения производительности
Отправлено: DimiS от 25 Сентября 2009, 19:27:48
ну с точки зрения экономии труда, то для подключения мобов лучше использовать цикл )) их ведь собирается быть когда-то больше 3-ёх?

если под словом цикл вы подразумеваете канал for loop, то я его почти не использую
тогда у меня вопрос -- как ты работаешь с теми пятью массивами которые ты упоминал?

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


Название: Re: причина падения производительности
Отправлено: redis от 25 Сентября 2009, 19:44:09
Ну с массивами я так работаю, у меня есть массив в котором два столбца, кол-во жизней, и матрица, дальше есть счётчик который считает от 0 до 3, тем самым перебирая матрицы в массиве, когда например условие нужной дистанции до обьекта будет истино то счётчик останавливается. А мне вот интересно откуда у вас такие познания про работу квеста и компьютера ?))) лично я читаю и диву даюсь) а то вдруг я уже кучу грубых ошибок наделал


Название: Re: причина падения производительности
Отправлено: DimiS от 26 Сентября 2009, 01:42:52
Ну с массивами я так работаю, у меня есть массив в котором два столбца, кол-во жизней, и матрица, дальше есть счётчик который считает от 0 до 3, тем самым перебирая матрицы в массиве, когда например условие нужной дистанции до обьекта будет истино то счётчик останавливается.

ну это фактически и есть For Loop, только немного в более извращённой форме  ;)

А мне вот интересно откуда у вас такие познания про работу квеста и компьютера ?))) лично я читаю и диву даюсь) а то вдруг я уже кучу грубых ошибок наделал
ну для меня это работа и мой хлеб)) 4 года стажа, из которых 1 год с квестом.
Ошибок конечно наделал, но это ничего страшного, я тоже делаю ошибки. На них нужно учиться.


Название: Re: причина падения производительности
Отправлено: Viik от 26 Сентября 2009, 02:18:25
Логику не обязательно проверять на каждом кадре, разбей расчеты на несколько кадров. Например на первом кадре проверяеш растояние, через 5-ть кадров вычисляеш что делать если изменились какие-то условия из-за растояния, на 10-м выполняеш условия. При этом разных мобово можно разгрузить на разные кадры.


Название: Re: причина падения производительности
Отправлено: redis от 26 Сентября 2009, 04:44:23
Ого спасибо за советы просветили меня, а не подскажите как реализовать чтобы каналы вызывались через определённое кол-во кадров ? у меня есть предположение что через OneTimeReset ?


Название: Re: причина падения производительности
Отправлено: mishich от 26 Сентября 2009, 10:39:56
Здравствуйте ! Вот читал,читал,и не понял!?
С оптимизацией всё ясно - дело нужное и обязательное!

Цитировать
так у меня из 2 гигов оперативы 300 мб используется, и проц загружен лишь на половину

Допустим я оптимизирую проект . От этого система будет использовать все ресурсы компьютера ? при том что до оптимизации ресурсы использовались лишь на 30 % ???

Разве Квест не должен использовать ресурсы по полной ???

Извиняюсь за вопросы , но я серьёзно недопонимаю всего этого.

 


Название: Re: причина падения производительности
Отправлено: DimiS от 26 Сентября 2009, 13:07:24
Ну может вы когда замеряли производительность то, фокус был не на квесте, он тогда не гоняет рендер. Или может проверяли на квест эдиторе, а не на запаблишеном проекте. Ну и возможно это какие-то хитрости связанные с двухядерностью процессора.


Название: Re: причина падения производительности
Отправлено: mishich от 26 Сентября 2009, 14:13:19
DimiS Спасибо за уделённое время!


Название: Re: причина падения производительности
Отправлено: Viik от 27 Сентября 2009, 15:58:05
Ого спасибо за советы просветили меня, а не подскажите как реализовать чтобы каналы вызывались через определённое кол-во кадров ? у меня есть предположение что через OneTimeReset ?
Самое простое через IF, делаеш счетчик, на каждом кадре увеличиваеш на единицу (обязательно сделай математику принудительно обновляемой только один раз за кадр Ctrl+T), если значение счетка совпадает с нужны выполняеш ветку ченелов и счетчик сбрасываеш в ноль.