Войти
ПрограммированиеФорумГрафика

Почему-то не работает Dynamic Resolution

#0
(Правка: 21:55) 21:26, 26 янв. 2021

Привет всем!

Настало время разобраться с Dynamic Resolution. В общем, пытался понять как он работает в Unity, вроде дело совсем нехитрое и все проще простого, но нет.

//=====
Вот эти моменты хотел бы разьяснить для себя, может кто знает как DR работает и сможет на пальцах в общем виде все обьяснить
//=====
Во-первых, в unity на OSX + OpenGL он, похоже, совсем не работает. Я не прав, исправьте, если у кого-то работает.
Во-вторых unity + DirectX11 его не поддерживает что ли?
Вот есть ссылка на их инструкцию: DynamicResolution
Читаем:
Supported platforms
Unity supports dynamic resolution on Xbox One
, PS4, Nintendo Switch, iOS
, macOS and tvOS (Metal only), Android (Vulkan only), Windows Standalone and UWP (DirectX 12 only).

Поясните пожалуйста, Windows Standalone поддерживает DR или нет и какие графические API входят в понятие Standalone?

И как все это ^ связано с тем как работает DynamicResolution?
Насколько понимаю, DR - это программная имплементация алгоритмов на С++ для работы с массивом изображения \ текстурой.
Похоже, для имплементации алгоритмов (проекции одного массива в другой), нужна поддержка графических движков. Верно? Просто, если поддержка не нужна, то почему бы самому не сделать эту поддержку? Пока не выяснял как это можно сделать, но вроде unity умеет С++.
//=====

Создаю 20000 кубов, батчу их статическим батчингом и использую DR-script:
Вот код моего эксперимента с DR:

+ Показать

Разрешение 288х180 (мыло):
mmm | Почему-то не работает Dynamic Resolution

Разрешение 2880х1080 (пытался сильно напрячь видеокарту):
max | Почему-то не работает Dynamic Resolution

Вопрос: почему разрешение никак не бьет по fps? На камере поставил галку, EnableFrameTimingStats тоже выставлена.
Доп.информация: видеокарта NVidia GE Force 750M, использую DX12 в качестве граф. API


#1
(Правка: 22:18) 22:13, 26 янв. 2021

Alerr
> Вопрос: почему разрешение никак не бьет по fps? На камере поставил галку,
> EnableFrameTimingStats тоже выставлена.
> Доп.информация: видеокарта NVidia GE Force 750M, использую DX12 в качестве
> граф. API
Вероятно пиксельный шейдер не самое узкое место.
Рекомендую проверить рендер в unity debug frame что бы видеть куда уходит производительность.
Например могут быть включены тени и они ломают батчинг.
Вообще статический батчинг предназначен не для одинаковых объектов, в твоём случае надо использовать инстасинг.

It will depend on what you static batch. Static batching is designed for larger unique meshes that will share the same material. It's not designed for a lot of the same mesh.

И почему для теста разрешения текстуры используется сложная сцена, а не сцена из одного простого кубика?
Видеокарта кстати древняя говнина. Удивительно что такая сцена вообще показывает 50 фпс.
Она хуже чем gtx 250 / ati 4850, которые вышли 13(!) лет назад.
#2
23:49, 26 янв. 2021

Kripto289
> И почему для теста разрешения текстуры используется сложная сцена, а не сцена из одного простого кубика?
Чтобы видеокарту напрячь

> Вообще статический батчинг предназначен не для одинаковых объектов, в твоём случае надо использовать инстасинг.
Думаю, если обьекты статичные, то лучше статический батчинг. У динамического батчинга есть одна серьезная проблема - обьекты могут выпадать из батчинга потому, что unity решит, что обьекты расположены "далеко" друг от друга.

#3
0:03, 27 янв. 2021

Alerr
> Чтобы видеокарту напрячь
Чем? Ты тестируешь влияние количества пикселей на фпс, тогда и сделай так, что бы бутылочным горлышком был пиксельный шейдер. В твоём случае узкое место может быть вершинный шейдер, drawcalls, теневые каскады, да что угодно, но не филрейт. Да тот же debug.log каждый кадр просаживает фпс в разы.
Что бы напрячь видеокарту, поставь штук 10 полупрозрачных квадов и растяни их на весь экран. Это будет чистое тестирование филрейта.

Alerr
> Думаю, если обьекты статичные, то лучше статический батчинг. У динамического
> батчинга есть одна серьезная проблема - обьекты могут выпадать из батчинга
> потому, что unity решит, что обьекты расположены "далеко" друг от друга.
Причём тут динамический батчинг? Я про GPU instancing
https://docs.unity3d.com/ru/2018.4/Manual/GPUInstancing.html

#4
(Правка: 1:52) 0:16, 27 янв. 2021

Kripto289
> Причём тут динамический батчинг? Я про GPU instancing
Да-да, я про него говорил

Кстати, frameTimings[0].gpuFrameTime на Unity 2020.2.2f1 все еще возвращает 0. Кажется в этом десятилетии не использовать нам (разработчикам на unity) по полной такую мощную штуку как Dynamic Resolution.

#5
(Правка: 15:24) 15:24, 27 янв. 2021

В общем пытался всячески менять разрешение в зависимости от нагруженности сцены, получается фигня нерабочая. А все потому, что нельзя узнать что тормозит: GPU или CPU.
Люди, как вы решали эту проблему и решили ли???

#6
(Правка: 16:04) 16:04, 27 янв. 2021
А все потому, что нельзя узнать что тормозит: GPU или CPU.
Люди, как вы решали эту проблему и решили ли???

Написали свой движок.
#7
18:23, 27 янв. 2021

Alerr
> А все потому, что нельзя узнать что тормозит: GPU или CPU.
> Люди, как вы решали эту проблему и решили ли???
обычно это решается профилировкой.

ПрограммированиеФорумГрафика