|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
Сделал трёхмерную модель лабиринта на примерно 40к полигонов. Всё сделал по тайлам, а посему расстановку точек каждого тайла сделал по базовой точке. Триангуляцию по расставленным точкам тоже сам, тем более, что фигурки-то простые - кубики да прямоугольники, просто с очень большим количеством полигонов. Текстурирование и освещение (всего два точечных источника в положении камеры) тоже сам сделал. Причём на все стены и пол налепил всего по две текстурки - каждая примерно по 256х256 размерами. Просто текстурки везде повторяются. Побродил по лабиринту... Это к тому, что всё программировалось на C#, и никакие модели - ни геометрия, ни освещение - не подкачивались из внешних файлов, сделанных во всяких максах и блендерах, кроме пары текстурок. Так вот, ставлю FarPlaneDistance в плюс бесконечноть и отъедает всё это дело 24 МБ ОЗУ и 31 МБ ОЗУ видео (ОЗУВ). Ставлю FarPlaneDistance так, чтобы показывалось только примерно пятая-шестая часть лабиринта, а расходы памяти не изменились никак. Более того, как были подтормаживания при бесконечной дальности прорисовки, так и остались (при разворачивании окна на весь экран, но не выходя из настроек рабочего стола). ВОПРОСЫ. 1. Такое ощущение, что FarPlaneDistance не влияет на производительность. Как связан параметр FarPlaneDistance с наличием данных в ОЗУ и ОЗУВ? Ну т. е. те модели, что отсечены FarPlaneDistance, по-прежнему в ОЗУ и ОЗУВ и обрабатываются ЦПУ и ГПУ, или подогружаются только по мере входа в пределы FarPlaneDistance? Судя по всему, они из ОЗУ и ОЗУВ никуда не исчезали и продолжают обрабатываться ЦПУ и ГПУ. Тогда зачем FarPlaneDistance нужен вообще? 2. Что происходит с ресурсами - геометрией, текстурами и прочим - когда они загружены и отправлены на обработку видеокартой? Они же в ОЗУ остаются? Тем более, что модели у меня именованные и я к ним обращаюсь иногда - та же камера вообще на кнопки непрерывно реагирует, вместе со светом. Тогда получается, что они занимают место дважды - в ОЗУ и в ОЗУВ? 3. Что происходит с ресурсами во взрослых играх у профессионалов - типа всяких кризисов, скайримах и пр.? Там же текстуры грузятся в ОЗУВ через ОЗУ? И геометрия и пр.? И в остаются в ОЗУ, если могут понадобиться? 4. Где бы почитать про 3D производительность и как её повысить в WPF? А также, как все эти параметры, типа FarPlaneDistance, влияют на производительность, и почему у меня не влияет? Также, где почитать, как конкретно WPF отправляет ресурсы с ОЗУ на видеокарту и как их перед этим обрабатывает. Не непонятно мне, как такая простая сцена может вообще тормозить, а какой-нибудь Морровинд, который, хоть и старый, но куда сложнее, летает на максимальных настройках? Ведь вроде и то, и то на DirectX работает. Для справки:видеокарта GeForce 8400 GS 256 МБ, процессор Феном II, 2 ядра по 3,1 ГГц, ОЗУ 3 ГБ. Я знаю, что WPF не предназначен для сложной трёхмерки. Но я другого ничего не знаю, да и всё равно хочу пока на WPF. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 12:13 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
>> как были подтормаживания при бесконечной дальности прорисовки, так и остались ...так и остались при обрезании дальности прорисовки до буквально "под ногами". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 12:15 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
>> Я знаю, что WPF не предназначен для сложной трёхмерки. Но я другого ничего не знаю, да и всё равно хочу пока на WPF. Да и 40к текстурированных треугольников - это не "сложная трёхмерка". Это графика уровня PlayStation One и ниже. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 12:18 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
Сделал 2,6 млн. треугольников: ОЗУ 650 МБ заняло, ОЗУВ - 30-90 МБ (окно - полный экран), тормозня как в окне, так и при полном экране - при отсутствии обрезки; ОЗУ 570 МБ заняло, ОЗУВ - 30-90 МБ (окно - полный экран), тормозни в окне нет, только при полном экране - при обрезке "почти под ногами". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 12:28 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
10,5 млн. треугольников - не хватило памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 12:29 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
>> Сделал 2,6 млн. треугольников: Кстати, при такой сцене для 30 FPS нужно, чтобы производительность была на уровне 78 млн. треугольников в секунду. У меня по ощущениям выдавало кадров 10 при разрешении где-то 1920х1080. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 12:43 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
user7320, А что Вы хотите сделать в конечном итоге ? Игру ? То вам не сюда. WPF хоть и использует DirectX, но для программирования игр он слишком тормозной. Так, всякие градиентики он нарисует, простых человечком каких нить тоже, трансформацию тоже сделает, но не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 14:56 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
thunder2user7320, А что Вы хотите сделать в конечном итоге ? Игру ? То вам не сюда. WPF хоть и использует DirectX, но для программирования игр он слишком тормозной. Так, всякие градиентики он нарисует, простых человечком каких нить тоже, трансформацию тоже сделает, но не более того. Да, игру, но простенькую. А вы вы можете подкинуть статеек про сравнение производительности WPF и DirectX? И как вообще для DirectX на C# писать? Ну и непонятно, почему WPF должен быть НАСТОЛЬКО тормозным - вроде, трансляция функций WPF в DirectX чуть ли не один в один возможна? И ещё, понимаете, если бы он действительно только для градиентиков и простых трансформаций был, то зачем ему шейдеры аж третьей версии и прочие навороты? По-моему, тенденция идёт к наращиванию возможностей подобных технологий. Вот и Flash получил трёхмерные функции и аппаратное ускорение, и Сильверлайт. WPF, думаю, тоже будут накручивать ещё - например, теней ему не хватает и отражений. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 15:45 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
thunder2 Ну и плюс я стараюсь сделать свой движок отделяемым от визуальной части, чтобы если что, можно было перенести на другое средство отображения - хотя бы тот же DirectX или XNA. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 15:47 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
user7320thunder2user7320, А что Вы хотите сделать в конечном итоге ? Игру ? То вам не сюда. WPF хоть и использует DirectX, но для программирования игр он слишком тормозной. Так, всякие градиентики он нарисует, простых человечком каких нить тоже, трансформацию тоже сделает, но не более того. Да, игру, но простенькую. А вы вы можете подкинуть статеек про сравнение производительности WPF и DirectX? И как вообще для DirectX на C# писать? Писать для DirectX на C# также как и на любом другом языке для Windows, т.е. муторно. Обычно пользуются готовыми библиотеками. http://www.codeproject.com/KB/directx/ - полные список статей. А вообще в инете полно книг для программировния на DirectX, например такая: http://www.ozon.ru/context/detail/id/3557386/ Ну и непонятно, почему WPF должен быть НАСТОЛЬКО тормозным - вроде, трансляция функций WPF в DirectX чуть ли не один в один возможна? Думаю это из-за принятой модели распрастренения событий. Пузырьки и тунели знаете ли даром не даются. К тому же сам C# вносит свою лепту. И ещё, понимаете, если бы он действительно только для градиентиков и простых трансформаций был, то зачем ему шейдеры аж третьей версии и прочие навороты? По-моему, тенденция идёт к наращиванию возможностей подобных технологий. Вот и Flash получил трёхмерные функции и аппаратное ускорение, и Сильверлайт. WPF, думаю, тоже будут накручивать ещё - например, теней ему не хватает и отражений. Вам тут вряд ли помогут. На WPF пишут не потому, что он использует DirectX, а скорее из-за его возможностей по конструированию элементов и управления ими. Уж больно приятная компоновочная модель принята в WPF. Ну и привязки, конечно, и XAML и шаблоны со стилями и многое другое, но никак из-за того что он использует DirectX. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 16:14 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
Посмотрите на Microsoft XNA http://ru.wikipedia.org/wiki/Microsoft_XNA http://www.xnadev.ru/news.php http://msdn.microsoft.com/ru-ru/xna ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 19:59 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
user7320Тогда получается, что они занимают место дважды - в ОЗУ и в ОЗУВ? это совершенно нормально для Direct3DEx. WPF -ни при чём ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2011, 21:34 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
А вот ещё такой вопрос. Меня совершенно не удовлетворяет дефолтное затенение по Гуро в 3D WPF - чтобы получить более-менее приличную картинку, приходится невообразимо увеличивать количество треугольников даже на плоских прямоугольных поверхностях, для которых по идее двух должно быть достаточно. Есть ли возможность использовать затенение по Фонгу? И да, зачем нужна коллекция нормалей в модели? Я заполняю только коллекцию вершин, треугольников и текстурных координат - этого достаточно. Но в разных скриптах экспорта моделей, типа скрипта для Blendera, я видел, что коллекция нормалей тоже заполнена. Зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2011, 08:42 |
|
Производительность 3D в WPF
|
|||
---|---|---|---|
#18+
user7320, нормали на полигонах, называют картой нормалей. нужна лишь для правильного распределения света. есть еще и другие карты, которые нужны для расчета света. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2011, 10:35 |
|
|
start [/forum/topic.php?fid=21&msg=37569550&tid=1442026]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 126ms |
0 / 0 |