Эффективное использование GPU
Разработчику следует научиться эффективно использовать графический процессор устройства (GPU), чтобы приложение не тормозило и не выполняло лишнюю работу.
Настроить параметры GPU визуализации
Если ваше приложение тормозит, значит часть или все кадры обновления экрана обновляются больше чем 16 миллисекунд. Чтобы визуально увидеть обновления кадров на экране, можно на устройстве включить специальную опцию Настроить параметры GPU визуализации (Profile GPU Rendering).
У вас появится возможность быстро увидеть, сколько времени занимает отрисовка кадров. Напомню, что нужно укладываться в 16 миллисекунд.
Опция доступна на устройствах, начиная с Android 4.1. На устройстве следует активировать режим разработчика. На устройствах с версией 4.2 и выше режим по умолчанию скрыт. Для активации идёт в Настройки | О телефоне и семь раз щёлкаем по строке Номер сборки.
После активации заходим в Опции разработчика и находим пункт Настроить параметры GPU визуализации (Profile GPU rendering), который следует включить. В всплывающим окне выберите опцию На экране в виде столбиков (On screen as bars). В этом случае график будет выводиться поверх запущенного приложения.
Вы можете протестировать не только своё приложение, но и другие. Запустите любое приложение и начинайте работать с ним. Во время работы в нижней части экрана вы увидите обновляемый график. Горизонтальная ось отвечает за прошедшее время. Вертикальная ось показывает время для каждого кадра в миллисекундах. При взаимодействии с приложением, вертикальные полосы рисуются на экране, появляясь слева направо, показывая производительность кадров в течение какого-то времени. Каждый такой столбец представляет собой один кадр для отрисовки экрана. Чем выше высота столбика, тем больше времени уходит на отрисовку. Тонкая зелёная линия является ориентиром и соответствует 16 миллисекундам за кадр. Таким образом, вам нужно стремиться к тому, чтобы при изучении вашего приложения график не выбивался за эту линию.
Рассмотрим увеличенную версию графика.
Зелёная линия отвечает за 16 миллисекунд. Чтобы уложиться в 60 кадров в секунду, каждый столбец графика должен рисоваться ниже этой линии. В каких-то моментах столбец окажется слишком большим и будет гораздо выше зелёной линии. Это означает торможение программы. Каждый столбец имеет голубой, фиолетовый (Lollipop и выше), красный и оранжевый цвета.
Голубой цвет отвечает за время, используемое на создание и обновление View.
Фиолетовая часть представляет собой время, затраченное на передачу ресурсов рендеринга потока.
Красный цвет представляет собой время для отрисовки.
Оранжевый цвет показывает, сколько времени понадобилось процессору для ожидания, когда GPU завершит свою работу. Он и является источником проблем при больших величинах.
Существуют специальные методики для уменьшения нагрузки на графический процессор.
Отладить показатель GPU overdraw
Другая настройка позволяет узнать, как часто перерисовывается один и тот же участок экрана (т.е. выполняется лишняя работа). Опять идём в Опции разработчика и находим пункт Отладить показатель GPU overdraw (Debug GPU Overdraw), который следует включить. В всплывающим окне выберите опцию Показывать зоны наложения (Show overdraw areas). Не пугайтесь! Нкоторые элементы на экране изменят свой цвет.
Вернитесь в любое приложение и понаблюдайте за его работой. Цвет подскажет проблемные участки вашего приложения.
Если цвет в приложении не изменился, значит всё отлично. Нет наложения одного цвета поверх другого.
Голубой цвет показывает, что один слой рисуется поверх нижнего слоя. Хорошо.
Вы можете самостоятельно проверить своё приложение для поиска проблемных мест. Создайте активность и поместите на неё компонент TextView. Присвойте корневому элементу и текстовой метке какой-нибудь фон в атрибуте android:background. У вас получится следующее: сначала вы закрасили одним цветом самый нижний слой активности. Затем поверх неё рисуется новый слой от TextView. Кстати, на самом TextView рисуется ещё и текст.
В каких-то моментах наложения цветов не избежать. Но представьте себе, что вы таким же образом установили фон для списка ListView, который занимает все площадь активности. Система будет выполнять двойную работу, хотя нижний слой активности пользователь никогда не увидит. А если вдобавок вы создадите ещё и собственную разметку для каждого элемента списка со своим фоном, то вообще получите перебор.
Маленький совет. Поместите после метода setContentView() вызов метода, который уберёт перирисовку экрана цветом темы. Это поможет убрать одно лишнее наложение цвета:
Как ускорить телефон Android с помощью секретных настроек
Android — это мобильная операционная система, которая предлагает множество возможностей для пользователя. Однако с помощью простых приемов можно расширить потенциал смартфона, превзойдя пределы производительности. Можно применить на практике скрытые функции, чтобы максимально использовать графику, безопасность, скорость подключения к Интернету и общую производительность.
↑ Настройки разработчика и как их разблокировать
↑ Возможности меню Для разработчиков
Ниже представлены функции, содержащиеся в меню Для разработчиков.
↑ Настройка анимации
С помощью нижеприведенного лайфхака снижается время перехода между окнами. Сразу будет ощутима разница при открытии программ.
Сначала нужно открыть секретное меню под названием «Параметры разработчика».
Также есть еще один метод. Сначала необходимо зайти в пункт «Отрисовка». Все показатели выбраны по умолчанию. Значение для шкалы анимации окна, переходного масштаба и длительности устанавливается на 1X. Рекомендуется поставить 0,5Х.
↑ Улучшение графики
Спецификации современных смартфонов быстро масштабируются за счет интеграции большого объема оперативной памяти и SoC, достойных настольных систем среднего и высокого уровня. В Playstore много новых игр и приложений, в том числе бесплатных, позволяющих раскрыть технический потенциал смартфона.
Чтобы улучшить графическую производительность игр и время отклика можно активировать опцию MSAA 4X. Это простой фильтр сглаживания, который обрезает изображения, улучшая качество. Он подойдет не для всех игр, а только для тех, которые используют OpenGL ES 2.0 API.
Один немаловажный минус этой процедуры – небольшое повышение расхода оперативной памяти при взаимодействии с приложениями. Но обычно этот недостаток считается несущественным.
↑ Дополнительные хитрости
Есть несколько других параметров, которые можно настроить для ускорения работы.
↑ Очистить лишние файлы
Внутренняя память должна быть свободной. Для этого подойдет файловый менеджер, который анализирует хранилище и показывает неиспользуемые файлы, а также маловажные программы.
↑ Удалить или отключить приложения вручную
Чтобы сделать это необходимо посетить «Настройки», а затем «Приложения». Некоторое ПО, установленное по умолчанию, нельзя стереть, но разрешено выключить.
↑ Сменить лаунчер
↑ Разгон на 100%
В заключение важно заметить, что это секретное меню изначально не отображается и только после разблокировки дает доступ ко всем недоступным ранее возможностям.
Являюсь руководителем проекта, люблю андроид. Слежу за новинками, новостями, а так же помогаю решить проблему возникшую у пользователей в андроид смартфонах!
Для того чтобы воспользоваться полными возможностями сайта, пожалуйста авторизуйтесь с помощью социальных сетей.
Если у вас возникли вопросы с решением проблемы на вашем смартфоне. Оставьте комментарий подробно описав проблему, и обязательно укажите модель вашего смартфона. Мы постараемся помочь вам!
Информация
На данный момент комментариев нет 🙁
Процессором (CPU) или видеокартой (GPU): чем рендерить?
Рендеринг трехмерных сцен — это основополагающая современных визуальных эффектов (VFX), графического дизайна, промышленного дизайна и анимации. Когда вы работаете в одной из этих отраслей, самым важным инструментом в вашем арсенале является ваша рабочая станция. Центральный процессор (CPU) является сердцем вашей рабочей станции и выполняет множество задач, таких как работа в приложениях, загрузка драйверов и т. д. Графические процессоры (GPU), представляющие собой специализированные типы микропроцессоров, которые работают параллельно с CPU, в последнее время переживают значительный рост использования, поскольку начинают расти объемы вычислений необходимые для одной задачи. Эти задачи, интенсивно использующие процессор, могут включать:
Чтобы не усложнять эту статью или ее цель, мы будем ссылаться исключительно на сравнение возможностей CPU и GPU, используемых для обработки изображений или, в данном случае, рендеринга изображений. Надеюсь, прочитав это, вы получите лучшее и более полное представление о том, какие варианты для рендеринга могут предложить вам и вашей студии эти технологии. Поможет вам принять более обоснованное решение о том, что лучше всего подходит для ваших проектов.
Первый и наиболее очевидный фактор, который необходимо рассмотреть — это скорость. В то время как CPU имеет ограниченное количество процессорных ядер (в среднем около 24), которые делают его эффективным при последовательных вычислениях и выполнении процессов в порядке очереди, GPU состоят из меньших ядер в большем количестве, чем у среднего компьютерного процессора, это позволяет им выполнять несколько задач одновременно.
Современные графические процессоры уже расширили свои возможности вывода с момента их первого появления. В то время как центральные процессоры обычно могут последовательно обрабатывать отдельные конкретные задачи, графические процессоры предлагают превосходную пропускную способность памяти, вычислительную мощность и скорость до 100 раз быстрее для решения нескольких задач, требующих нескольких параллельных вычислений и больших кешей данных.
Часы рендеринга могут превратится в минуты и упростят процесс создания изображений при использовании GPU. Если скорость является основным приоритетом в вашем рабочем процессе, предпочтительным решением будет рендеринг на основе графического процессора (GPU).
CPU vs GPU — Качество и точность графики
Рендеринг — это трудоемкий процесс, но с качеством нельзя торопиться. Хотя для завершения рендеринга изображения могут потребоваться часы (возможно, даже дни), традиционный рендеринг на базе процессора с большей вероятностью обеспечит более высокое качество изображения и более четкое, меньше шума.
У графического процессора (GPU) намного больше ядер, чем у CPU, но в целом каждое ядро работает медленнее, чем ядро процессора. Когда несколько процессоров CPU связаны между собой и используются например, в среде рендеринга, как на ферме. Они потенциально могут дать более изысканный конечный результат, чем рендеринг на основе графического процессора. В фильмах это обычный стандарт для создания высококачественных кадров и изображений, поскольку для рендеринга нет жестких ограничений во времени.
С другой стороны, с ростом доступной виртуальной реальности игры также становятся все более захватывающими, а при максимальных настройках приходит высококачественный рендеринг изображений и обработка в реальном времени, которые могут проверить вашу рабочую станцию на прочность. Проще говоря, современные игры и VFX теперь могут быть слишком нагружающими базовый CPU.
Если вы готовы не торопиться и не ограничены сроками для получения максимально лучшего изображения, тогда рендеринг на базе CPU может быть тем, что вы ищете.
CPU vs GPU — Стоимость
По мере того, как оборудование становится более эффективным, его цена также становится важным фактором.
В дополнение к скорости, мощность одного графического процессора может быть эквивалентна как минимум пятидесяти процессорам. Это означает, что мощность одной рабочей станции может выполнять задачи нескольких рабочих станций на базе CPU вместе взятых, что дает 3d визуализаторам и студиям свободу создавать, проектировать и разрабатывать изображения с высоким разрешением. Кроме того, GPU предлагают значительное снижение затрат на оборудование и устраняют необходимость в нескольких ПК или серверах для выполнения работы профессионального качества. Теперь можно выполнять все за минуты, имея одну небольшую станцию с видеокартами.
Без необходимости в дорогостоящих фермах рендеринга CPU, 3d художники могут позволить себе и полагаться на свои собственные компактные рабочие станции с графическими процессорами и получить работу студийного качества за невысокую цену.
CPU vs GPU — Визуализация в реальном времени
При определенных рабочих процессах, в частности, VFX, графическом дизайне и анимации, требуется много времени для настройки сцены и управления освещением, что обычно происходит в окне (вьюпорте) просмотра программного обеспечения. GPU может управлять производительностью вьюпорта в программном обеспечении вашей студии, позволяя в реальном времени просматривать и манипулировать вашими 3d моделями, источниками света и проекциями в трех измерениях. Некоторое программное обеспечение для рендеринга, предназначенное только для графического процессора, может даже позволить вам полностью работать в окне просмотра с включенным Real Time рендерингом, увеличивая результат и минимизируя возможные ошибки, которые могут возникнуть при рендеринге в другой программе.
Совершенно очевидно, что преимущества работы и рендеринга на машинах с GPU по сравнению с традиционными рабочими станциями на базе CPU могут замедлить производство или ограничить бюджет проекта из-за потенциально необходимых обновлений.
Делаем выбор между рендерингом на CPU и GPU
Имейте в виду, что графические процессоры не предназначены для полной замены рабочих станций с процессорами и рабочего процесса. Может показаться, что преимущества рендеринга на основе CPU бледнеют по сравнению с преимуществами рендеринга на основе GPU, но в конечном итоге это зависит от того, что нужно вам или вашей студии. Эти процессоры живут и работают в синергетической гармонии. Графический процессор предназначен не для замены, а для ускорения и оптимизации существующих практик и рабочих процессов, максимального увеличения производительности и компенсации ресурсоёмких вычислений в приложениях, которые без них могли бы вывести из строя систему.
Даже с самыми быстрыми и мощными графическими процессорами в вашем распоряжении процессор по-прежнему тянет свою долю веса. Неопытному пользователю просто покажется, что ваши приложения работают намного быстрее и плавнее. Использование этих инструментов в тандеме сделает гораздо больше для вашей работы и презентаций, а также значительно увеличит способность вашей машины быстро воплощать ваши творения в жизнь. Удачного рендеринга!
3D рендеринг: как работает GPU
Всем привет. Меня зовут Глеб Булгаков, я — программист. Вместе с тех. артистом Романом Лещенко мы работаем в компании Fractured Byte и хотим поделиться нашими знаниями и опытом в деле оптимизации реалтаймового контент пайплайна.
Работая вместе в компании BWF, мы успели приложить руку ко множеству разных по жанру, целевой платформе и сложности проектов. Среди них было и портирование всемирно известных проектов на мобильные платформы (Life Is Strange, Brothers: A Tale of Two Sons), разработка собственных проектов на разные платформы (In Fear I Trust, Renoir), и даже прототипирование и R’n’D для VR игр. У нас 9 лет опыта работы с движком Unreal Engine, начинали с UE3. Мы успели поработать с такими компаниями как Square Enix, Disney, 505 Games, Framestore, Chillingo и т.д. Таким образом, мы почти никогда не сталкивались с одними и теми же задачами и нам всегда приходилось изыскивать возможности отрисовать много контента на экране за минимальное количество миллисекунд. Так что, можно сказать, что мы съели на этом пару собак 🙂
В этой статье мы разберем принцип работы и отрисовки простейшей сцены на GPU, а также познакомимся с базовыми понятиями, на которые будем впоследствии ссылаться. Надеемся, эта статья будет интересна как техническим специалистам, так и артистам, желающим понять, почему “злые программисты” говорят им уменьшать разрешение текстур.
Обзор
Перед тем как погрузиться с головой в оптимизацию, нужно разобраться в том, как работает GPU и процессах, которые происходят в движке.
В упрощенном виде конвейер рендера (именно конвейер, потому что многие последующие процессы зависят от результатов завершения предыдущих) работает по такому принципу:
Как вы могли заметить, основная “магия” происходит в четвертом пункте. Что это за сложные вычисления, как они влияют на производительность и как научится их контролировать? Этим мы сегодня и займемся, а начнём с того, какие объекты можно создавать и какие операции можно делать над ними, а потом плавно перейдем к отрисовке сцены.
Также перед тем, как начать, стоит сказать, что эта статья не описывает какой-то конкретный конвейер рендера в конкретном движке (хотя мы и будем приводить много примеров из UE4), а старается обобщить наши знания таким образом, чтобы вы могли понять откуда “растут ноги” у современных контент-пайплайнов и графических фич, а также поняли, почему количество полигонов в модели уже давно не является адекватным мерилом производительности.
Мы также хотим уточнить, что эта статья не затрагивает моменты оптимизации самого рендера, мы хотим научить локализовывать проблемные места в игре, показать способы их обхода, а также показать как бороться с ограничениями платформы — иногда это означает разработку нового пайплайна для создания или оптимизации контента, иногда замену эквивалентными решениями, а иногда — отказ от данной фичи.
Какие ресурсы можно создать на GPU?
Текстуры
Самый известный и самый объемный ресурс — это, наверное, текстура. Чисто для примера мы будем использовать простую текстуру 8х8 пикселей с призраком из игры Pac-man:
Текстура обладает рядом характеристик: размером, форматом, наличием мип мап. Это самые основные настройки текстуры, на которые стоит обращать внимание, поскольку они определяют объем памяти, занимаемый этим ресурсом, определяют — хранится ли текстура со сжатием и т. д. Стоит также разобраться в типах текстур — на удивление, их достаточно много. Итак, поехали:
Двумерные (в терминологии DirectX 11 — Texture2D).
Тут и рассказывать особо нечего — это самый распространенный тип текстур, который с большой вероятностью будет делать
90% картинки в вашем проекте. Текстуры объектов, интерфейса, служебные LUT, карты высот — как правило, это все Texture2D.
Трехмерные (в терминологии DirectX 11 — Texture3D).
Такие текстуры можно представить как массив или слои двумерных текстур. В редакторе создавать их как ассеты можно, но для этого их нужно включить ( r.AllowVolumeTextureAssetCreation 1 ). В основном, 3D текстуры используются самим движком для работы с Vector Fields, Distance Fields, Volumetric Lightmaps и т.д. То есть там, где необходимо пространственное представление данных.
Каждая текстура может обладать уменьшенными копиями самой себя — это так называемые мип-мапы (mip maps). Дело в том, что когда мы рисуем объект, он может находится как близко, так и далеко от игрока и соответственно иметь разный размер на экране. В результате, если объект имеет текстуру большего разрешения, чем его фактический размер на экране в этот момент — невозможно стабильно получить один и тот же цвет пикселя на экране с течением времени. В результате возникает эффект, известный под названием Муар (от фр. Moire).
Чтобы избежать этого, придумали мипмапы, которые по сути являются уменьшенными копиями оригинальной текстуры, из которых значительно проще получить стабильный цвет пикселя на удалении. GPU сам определяет, какую мипмапу ему лучше использовать для каждого пикселя в зависимости от расстояния до пикселя. Генерация мипмап поддерживается аппаратно и нам не нужно заботиться об их создании вручную.
8 Мб
Константные буферы
Следующий ресурс — константный буфер. Это просто участок памяти, который используется для хранения информации, например, для геометрии модели или же для параметров материалов.
Рассмотрим простейшую модель — куб. Как вам, возможно, известно — треугольник является наименьшим элементом, из которого состоят все 3D-модели. И чтобы описать модель способом, который будет понятен GPU, нам нужно 2 буфера — вершинный и индексный. Вершинный описывает, как ни странно, вершины модели: их позицию, нормали, текстурные координаты и т. д. Индексный буфер содержит индексы вершин, порядок соединения этих вершин, необходимый для построения на экране отдельного треугольника.
Шейдера и стейты
Вместе с ресурсами на GPU можно создавать дополнительные объекты: стейты и шейдера. Первые из них являются объектами, которые описывают правила взаимодействия с конкретным ресурсом, вторые же —отдельные программы для GPU.
SamplerState — стейт, который определяет, как GPU делает выборку с текстуры: фильтрацию, адресацию. Это, наверно, единственный стейт в UE4, на который мы явно можем влиять, когда устанавливаем текстуру в материале или в настройках самой текстуры. При описании текстур я избегал слова “сэмплить” (sample), под сэмплингом подразумевается вычисление цвета, именно вычисление, а не простая загрузка из памяти. Каждый раз, когда мы сэмплим из текстуры, GPU делает много вычислений, чтобы определить, с какой мипмапы брать цвет, возможен даже блендинг между мипмапами; для определенных типов фильтрации, таких как Anisotropic, в учет берется и положение треугольника в пространстве. Сэмплинг — достаточно сложная операция, и чем меньше текстур используется при рендеринге объекта, тем лучше.
А что будет, если мы попытаемся взять пиксель за пределами текстуры (напомним, что текстура находится в пределах 0. 1)? Для этого и была придумана адресация.
Хоть большую часть стейтов мы и не можем контролировать напрямую, понимание того, как они работают, может помочь нам при профайлинге кадра.
Шейдер — это программа, которая выполняется на GPU. Есть разные виды шейдеров, но мы остановимся только на двух основных: Vertex Shader (вершинный) и Pixel Shader (пиксельный). Основной задачей вершинного шейдера является трансформация объекта в пространстве (перемещение, поворот и масштабирование) и проецирование на экран. После того, как GPU спроецировала примитив на экран, вступает в работу пиксельный шейдер, который и вычисляет цвет пикселя.
В UE4 шейдеры создаются путём визуального программирования в Material Editor. Каждый материал имеет в себе предопределенные входы (инпуты) (Base Color, Metallic, Roughness, Emissive и т.д.), и мы, создавая ноды и соединяя их в определенной последовательности, генерируем код шейдера. Этот код является только частью шейдера и определяет основные параметры материала. В свою очередь, материал генерирует не один шейдер, а целое множество шейдеров для разных проходов материала.
Операции на GPU
На GPU есть особая текстура — Swapchain, которая представляет собой область экрана, где рисуется наша сцена. Swapchain состоит из нескольких буферов: front buffer — содержит то, что сейчас мы видим на экране, и back buffer — текстура, в которую мы рисуем следующий кадр. Когда наша сцена отрисована и находится в back buffer, мы вызываем команду Present — она меняет front buffer и back buffer местами. И отрисовка следующего кадра начинается снова.
Спасибо за внимание, надеемся, вы почерпнули новых знаний и лучше поняли возможности GPU и для чего они используются. Во второй части статьи мы рассмотрим на практическом примере процесс отрисовки сцены. До встречи на UE4 Daily!










