shaders что это на андроиде
Shaders — что это за папка? (Андроид)
Приветствую всех. Сегодня мы должны выяснить предназначение одной директории, которую можно встретить в операционной системе Андроид. И помните — просто так даже не думайте удалять никакие папки или проги с телефона!
Ребята, сразу вас огорчу — реально нет никакой точной инфы о предназначении папки! То, что я здесь написал — это максимум что вы сможете найти в интернете, если только не посвятите поискам инфы целый день))
Shaders — что это за папка? (Андроид)
Ребята, я покопался в интернете, прошустрил сайты и вот какие могу сделать выводы:
Папка Shaders хранит шейдеры игры или используется для их кэширования.
Можно ли удалить? Как понял — да, но при условии что директория для кэша. А если ее предназначение другое — то после удаления могут быть проблемы/ошибки в игре. Поэтому удалять без уверенности не стоит. Дело в том, что у одной игры она может быть например для кэша и удалить ее можно, а вот у другой использоваться еще для каких-то целей.. и после удаления вы возможно больше не сможете поиграть…
Если эта Shaders много весит, а раньше весила мало (когда игра уже стояла) — то да, может это и правда кэш. Кэш спокойно со временем может увеличиваться, это так бы сказать нормальное явление. ВАЖНО также то, что удаление папки — может расцениваться как вмешательство в игру, и может сработать некая защита (например бан), но это уже конечно от самой игры зависит.
От какой игры? Тут уже зависит какую вы ставили. Шейдеры используются почти во всех играх. Они нужны для определения параметров геометрических фигур, обьектов, созданий эффектов отражения, сдвига, преломления, затемнения и других вещей. То есть это то, что связано напрямую с игрой.
Например такую папку содержат игры NESDroid, Asphalt8, FIFA 14 by EA SPORTS, даже в знаменитой GTA IV такая папка есть.
Хотя один пользователь например эту папку удалил.. но она у него была от игры Real Racing 3… потом запустил игру и всей окей, папка создалась заново. Почему? Потому что скорее всего нужна была для кэша шейдеров. Тогда после удаления папки она будет восстановлена при следующем запуске игры.
Если Shaders пустая — советую ее не удалять, места она не занимает и телефон никак не грузит.
Мой совет
Не знаю поможет ли мой совет, но я бы сделал так при возможности — переименуйте папку, например была Shaders, а вы задайте имя Shaders_ — то есть добавьте символ нижнего проблема.
Потом выполните перезагрузку телефона и проверьте — работает ли все нормально? все установленные приложения, запускаются ли все игры? Если при этом папка появилась заново и все в смартфоне работает нормально — значит папка выполняет роль некого кэша. То есть удалять можно. Но лучше поэкспериментировать и проверить точно. Ну а если будут ошибки — восстанавливаете название переименованной папки обратно.
Такая папка может быть даже в операционке Microsoft Windows от игры Prepar3D v4 (некий шутер или симулятор самолетов):
Заключение
К сожалению нормальной инфы узнать не удалось.
Повторюсь, если папка ничем не мешает — лучше оставить, мало ли.
На этом все. Удачи и добра, до новых встреч друзья!
Что за папка Shaders на Андроид — весит много, а удалять страшно
Пользователи часто сталкиваются с тем, что на устройствах, работающих под управлением операционной системы Android, по умолчанию содержится множество папок с совершенно непонятным названием, назначением и содержанием. И пока памяти на гаджете достаточно, их наличие, в общем-то, никого особо не волнует. Но как только устройство начинает сигнализировать о заполненном хранилище, возникает желание удалить все ненужное, хотя прежде не помешает разобраться, что именно относится к этой категории. И первой на пути возникает непонятная папка Shaders.
Папка Shaders — что за зверь?
Загадочная папка есть далеко не на всех Андроидах. Ее присутствие в смартфоне обычно видят любители мобильных игр и развлекательных приложений. Она предназначена для кэширования графики игры. За счёт этого утилита загружается быстрее, а графическое отображение не страдает от недостатка трафика или других нюансов.
Различные игры, изображения бонусов и все графические рисунки из геймплея так же хранятся в Shaders.
При этом после открытия папки можно будет видеть исключительно белые файлы, отобразить которые будет невозможно. В то же время именно они помогают играм быстро и качественно загружаться, становясь очень ценным подспорьем для геймеров.
Понять важность кэша можно оценив разницу в скорости загрузки игры в первый и во все последующие за ним разы. После установки приложение всегда загружается дольше, чем во время повторного открытия.
Можно ли удалять и как это правильно сделать
Разработчики настоятельно рекомендуют не удалять системные файлы. Однако для любого правила действуют свои исключения. Вот и Shaders не относится к важным данным, которые нельзя трогать.
Важно! Среди геймеров бытует мнение, что удаление любого файла может расцениваться, как вмешательство в систему, что приведёт к бану в игре или невозможности дальнейшего гейминга. Однако таким влиянием рассматриваемая папка явно не обладает.
Тем не менее удалять данные, содержащиеся в Shaders, без крайней необходимости не стоит.
К тому же, все удаленные файлы будут восстановлены после повторного запуска утилиты. То есть никакого положительного эффекта достигнуто не будет, поскольку память смартфона заполнится снова. Перед удалением важно убедиться, что файлы действительно относятся к кэшу, и не нужны для более серьёзных действий, влияющих на приложение.
Сделать это можно двумя способами:
При первом способе достаточно просто посмотреть, сколько весит хранилище до активной игры и по завершении процесса. Если вес существенно увеличивается, значит файлы – это всего лишь кэш.
Проверка важности содержимого также выполняется путём смены названия. Если после переименования утилита продолжит запускаться стабильно и без сбоев, значит файлы не имеют никакой системной важности, и их удаление не станет критичным для системы.
На устройствах Андроид можно наблюдать много установленных по умолчанию папок, которые не несут в себе серьезной функциональной нагрузки для системы. Другое дело, что определить их не так уж просто. Поэтому если системные файлы никак не мешают, и не забивают внутреннюю память смартфона, то лучше их все-таки не трогать.
Аналогичное правило распространяется и на Shaders. К тому же, удаление этой папки никак не способствует очистке памяти гаджета, поскольку повторный запуск игры приведёт к очередному кэшированию файлов.
Как можно использовать шейдеры в Android View и как Android View может использовать шейдеры
Для полноценной работы с динамическими элементами пользовательского интерфейса, которые используют тени, фильтры в реальном времени для фото или видео, или адаптивный пользовательский интерфейс и освещение, недостаточно использовать только Canvas. Было бы куда лучше, если бы у нас в распоряжении было что-то помощнее. Раньше мы могли использовать RenderScript, но поддерживается ли он сейчас?
В этой статье я расскажу как использовать стандартные GLSL шейдеры OpenGL в вашем пользовательском view, которое является наследником класса Android View (android.view.View). Я предлагаю вам использовать это решение, если вы работаете над чем-нибудь из нижеперечисленного:
Шейдеры или коррекция цвета в реальном времени для видеопотоков.
Динамические тени и освещение для кастомных элементов пользовательского интерфейса.
Продвинутая попиксельная анимация.
Какие-либо эффекты пользовательского интерфейса, наподобие размытия (blurring), искажения (distortion), пикселизации и т. д.
Если вы создаете новый нейроморфный адаптивный пользовательский интерфейс.
Это решение предоставит вам надежную среду и множество примеров шейдеров, которые вы можете легко использовать в своем приложении. И я покажу вам, как легко это сделать!
Нам нужно, чтобы в нашем стандартном лэйауте лежал класс, который ведет себя так же, как Android View (android.view.View), и мы cможем использовать фрагментный шейдер OpenGL для визуализации его содержимого.
Демо-приложение с несколькими ShaderViews. Динамический свет и видео фильтры.
Как это работает на абстрактном примере
Волшебные краски — GLSL шейдеры OpenGL.
Холст — четырехугольник, который заполнит все пространство нашего кастомного view.
Известный художник — класс, реализующий интерфейс Render. Этот художник, в свою очередь, использует волшебные краски, чтобы нарисовать картину на холсте.
Картина — кастомный view-класс, который задействует художника с его/ее холстом и волшебными красками.
Стена — Activity или Fragment android.
Как это работает с технической точки зрения
Создадим класс Render , который будет отображать view с использованием шейдеров.
Создадим 3D-модель четырехугольника (quadrangle), который заполнит все пространство view (3D, поскольку OpenGL был создан для 3D-сцен). Не беспокойтесь об этом; это стандартное решение, и с ним не связано никаких трудностей.
Четырехугольник OpenGL внутри TextureView.
SurfaceView или TextureView
SurfaceView и TextureView оба наследуются от класса Android View, но между ними есть некоторые различия.
Создание GLTextureView
Итак, в GLSurfaceView есть почти все, что нам нужно для рендеринга OpenGL. Нам всего лишь нужно скопировать пригодный код в наш класс и внести некоторые изменения.
5. Обновите метод finalize() до стандарта Kotlin. (Если у вас есть лучшее решение, напишите в комментариях).
6. Замените SurfaceHolder на SurfaceTexture .
7. Замените все упоминания GLSurfaceView на GLTextureView .
9. Устранение проблемы с допустимостью нулевых значений после автоматического преобразования кода Java в Kotlin. В моем случае мне пришлось обновить методы переопределения и некоторые параметры, допускающие значение NULL (например, egl: EGL10 должно быть egl: EGL10? ).
10. Переместите константы в объект-компаньон или на верхний уровень.
11. Удалите неподдерживаемые аннотации.
13. В createSurface() вы наткнетесь на неработающую строчку, замените view.holder на view.surfaceTexture .
В результате у вас получится что-то вроде этого.
Расширения
Чтобы облегчить себе работу, мы создадим расширения, которые загружают исходный код шейдера из каталога ресурсов.
Код шейдеров
В этой статье мы будем использовать самые простые шейдеры, чтобы сделать наш код менее сложным. Если вас интересуют более сложные шейдеры, вы можете найти их здесь или здесь.
Вершинный шейдер (Vertex Shader)
Для наших целей нам достаточно простого вершинного шейдера для рендеринга нашего четырехугольника (мы не потратим кучу времени на его код).
Фрагментный/пиксельный шейдер (Fragment Shader)
Код довольно прост, но давайте посмотрим, что у нас здесь есть.
Прежде всего, мы определяем версию GLSL.
Затем мы определяем пользовательские параметры, которые мы собираемся отправить шейдеру.
Определяем параметры ввода и вывода для нашего фрагментного шейдера. In — что мы получаем от вершинного шейдера (в нашем случае координаты текстуры), а out — что отправляем в результате (цвет пикселя).
Теперь напишем функцию, которая будет выполняться для каждого пикселя нашего Android View и возвращать его цвет.
В результате мы получим следующее:
QuadRender
Следующий класс, который нам понадобится, — это класс рендеринга. Этот класс будет отрисовывать четырехугольник размера ShaderView с помощью шейдеров.
Четырехугольник OpenGL в проекции камеры. Камера — это точка зрения пользователя, который смотрит на устройство.
Наш класс должен расширить интерфейс GLTextureView.Renderer тремя методами:
onSurfaceCreated() — Создает программу шейдера, связывает некоторые параметры формы (uniform) и отправляет атрибуты в вершинный шейдер.
onDrawFrame() — Обновление на каждом кадре. В этом методе мы отрисовываем четырехугольник экрана и при необходимости обновляем параметры формы.
onSurfaceChanged() — Обновляет вьюпорт.
Итак, давайте будем писать код шаг за шагом. Я не буду вдаваться в подробное описание того, как работает OpenGL, потому что это выходит за рамки данной статьи. Я также хочу упомянуть, что мы фокусируемся только на фрагментном шейдере и не касаемся деталей вершинного шейдера, так как они должны быть одинаковыми практически для любых возможных требований фрагментного шейдера.
Две переменные, которые будут содержать исходный код наших вершинного и фрагментного шейдеров.
Определите список вершин для буфера вершин.
И добавить инициализацию в init<> блок.
Вершинный шейдер, атрибуты вершин и расположение матриц.
Локатор программы шейдера.
Обратите внимание на последние три строки, где мы получаем расположение нашей кастомной формы ( uMyUniform ) для фрагментного шейдера. Для более сложных шейдеров нам придется добавить больше таких параметров.
В onSurfaceCreated() мы использовали специальные методы для создания и связывания программы.
Следующий метод, который мы должны реализовать, — это onDrawFrame() .
Обратите внимание на строки, в которых мы отправляем кастомное значение ( uMyUniformValue ) в форму ( uMyUniform ) во фрагментный шейдер.
И последнее, surfaceChange() — довольно простой метод.
Полный код этого класса вы можете найти здесь.
ShaderView
Отлично, все, что нам нужно для нашего ShaderView, готово. Теперь мы можем использовать мощь фрагментного шейдера для рендеринга его содержимого! Создадим ShaderView.
Дополнительно: Использование текстур в фрагментных шейдерах
Приятно, что мы научились общаться и работать с фрагментными шейдерами, но во многих случаях вам приходится иметь дело с текстурами (например, для размытия или других видеоэффектов).
Вам нужно определить форму во фрагментном шейдере как sampler2D и получить текущий пиксель текстуры по координатам текстуры с помощью метода texture() из GLSL.
Вот полный код шейдера.
Затем нам понадобятся два расширения для загрузки и использования растрового изображения в качестве текстур OpenGL.
Не забывайте утилизировать растровое изображение, когда оно вам больше не нужно.
Полный код примера использования текстуры вы можете найти в этой ветке.
Ссылки
Исходный код этой статьи можно найти в моем репозитории.
С библиотекой ShaderView с помощью дружественного высокоуровневого API можно познакомиться здесь.
Также предлагаем посмотреть вебинары:
1) Рисуем свой график котировок в Android:
— Рассмотрим основные инструменты для рисования
— Изучим возможности классов Canvas, Path, Paint
— Нарисуем кастомизируемый график котировок и добавим в него анимаций
5 лучших шейдеров RTX для Майнкрафт на устройствах Android
Minecraft больше известен своим инновационным игровым процессом, чем визуальными эффектами. С момента своего выпуска в 2011 году игра сохранила блочную и пиксельную графику. Это, безусловно, помогло игрокам играть в игру на недорогих устройствах, но некоторым хотелось большего. Таким образом, сообщество Minecraft начало делать модификации, улучшающие графику.
Эти шейдеры изначально предназначались только для игроков на ПК, но вскоре их мобильные варианты были также представлены для Pocket Edition (PE) Minecraft. В наши дни игроки могут устанавливать множество шейдеров, подобных RTX, и играть в игру с ультрареалистичной графикой на телефоне Android.
5 шейдеров Minecraft RTX для устройств Android, которые хорошо имитируют освещение, тени и отражения от воды
Есть сотни шейдеров на выбор, но это одни из лучших шейдерных пакетов, которые пользователи Android могут установить для Minecraft PE.
5) Sildur Шейдеры
Шейдеры Sildur считаются одними из лучших шейдеров для всех платформ, поддерживаемых Minecraft. Это яркий шейдер, который полностью обновляет освещение, тени, текстуру неба и отражение воды. Единственным недостатком является то, что качество отражения воды не на должном уровне.
4) ESBE 3G Shaders
ESBE — известный разработчик шейдеров в мире ПК, и они также обеспечивают отличные шейдеры для игры. Шейдер ESBE 3G — известный шейдер Minecraft для устройств Android. Он предлагает реалистичную текстуру воды, отличное освещение и цвета, а также обновленное небо, солнце и луну.
3) Реалистичные шейдеры
Этот шейдерный пакет — идеальное дополнение, чтобы сделать Minecraft более реалистичным. Тени значительно улучшены, листья и волна травы, как если бы они действительно были затронуты ветром, и отражения от воды выглядят реалистично.
2) Шейдеры SEUS PE
Шейдеры SEUS хорошо известны в сообществе Minecraft на ПК. Также они предлагают шейдеры для Minecraft PE. По своей надежности это один из лучших шейдеров для игры. Он также может работать на телефонах более низкого уровня. Этот шейдер также предлагает великолепные визуальные эффекты.
1) Evo Shaders
Evo Shaders — это новый пакет шейдеров для игры, выпущенный в этом году. Этот шейдер предлагает облака FMB, тени от облаков, солнечные лучи, блики от линз и многое другое. Он также является одним из лучших с точки зрения отражения воды. Этот шейдер, как и многие другие, также имеет от четырех до пяти различных уровней графических настроек.
Примечание. Эта статья является субъективной и отражает исключительно мнение автора.
Следите за новостями и обновлениями Fox-Guide Minecraft на YouTube, Snapchat и Facebook!
Оптимизация рендера под Mobile. Часть 3. Шейдеры
Привет Хабр! В предыдущих частях цикла (раз, два) мы рассматривали тайловую архитектуру мобильных GPU, а также классифицировали различные семейства GPU, представленные у пользователей. В этой части мы рассмотрим приемы, которые помогут писать быстрые шейдеры для мобильных GPU.
Шейдерные инструкции
Чтобы лучше ориентироваться в оптимизационных подходах, применяемых при написании шейдеров, полезно знать об основных категориях шейдерных инструкций. Первая категория — арифметические инструкции. Эти инструкции, как правило, работают с регистрами GPU и выполняются предсказуемое количество тактов. Обычно это 1 такт. При этом в современных конвейерах может выполняться по нескольку арифметических инструкций за 1 такт. Вторая категория — текстурные инструкции. Они осуществляют текстурную выборку — чтение из текстур с применением определенной фильтрации. Время выполнения этих инструкций значительно дольше, чем арифметических, и зависит от наличия запрашиваемых текселей в текстурном кэше. Современные архитектуры маскируют длительное время выполнения текстурных инструкций за счет переключения на другие шейдерные потоки и выполнения их арифметических инструкций. Рекомендуемое соотношение количества арифметических инструкций к текстурным может быть 10 к 1 и выше.
Кроме арифметических и текстурных инструкций, ещё выделяют Load & Store инструкции. К ним относятся, например, инструкции записи вершинных атрибутов в вершинном шейдере и чтение интерполированных значений этих атрибутов во фрагментном шейдере. Время выполнения таких инструкций больше, чем у арифметических, но меньше, чем у текстурных.
Учет количества используемых регистров
В типичной архитектуре GPU имеется общий банк регистров (register file), используемый множеством параллельно выполняемых потоков. Каждый такой поток рассчитывает один вертекс или пиксель. От количества регистров, требуемых для выполнения шейдера, зависит максимальное количество одновременно выполняемых потоков. Например, на архитектуре Mali Midgard имеется следующая зависимость:
0-4 регистра | максимальное количество потоков |
5-8 регистров | половина максимального количества |
8-16 регистров | четверть максимального количества |
Дальнейшее увеличение потребности в регистрах приводит к записи промежуточных значений во временную память (так называемый register spilling). Иногда компилятор Mali может предпочесть небольшой register spilling переходу в менее выгодную конфигурацию потоков.
Оценить количество используемых регистров для Mali можно при помощи Mali Offline Compiler:
Точность mediump
В OpenGL ES предусмотрена возможность задавать точность величин при помощи квалификаторов lowp, mediump и highp.
uniform lowp sampler2D u_texture0; varying mediump v_pos; … mediump float temporary; |
Применение пониженной точности позволяет задействовать меньше регистров и добиться повышенной плотности вычислений за такт. Как было рассказано в предыдущей статье, применение точности lowp сегодня нежелательно. Она поддерживается на аппаратном уровне только в устаревающих моделях PowerVR, а на всех современных GPU вместо lowp фактически используется mediump. Такая ситуация напрасно усложняет процессы QA, если в шейдерах используется lowp.
Есть ли смысл применять mediump? В самых актуальных рекомендациях по оптимизации для мобильных GPU по-прежнему предлагается по возможности использовать mediump во фрагментных шейдерах. Остановимся подробнее на этой точности.
Как мы показали выше, в GLSL ES точность можно задать отдельным переменным — uniform-ам и varying-ам. Кроме того, есть возможность задать точность по умолчанию для всех величин определенного типа. Например, используя такую строчку в начале шейдера, можно задать точность mediump для всех float:
С такой строкой в начале фрагментного шейдера можно получить заметное ускорение на большинстве мобильных видеокарт (при условии, что в шейдере большое количество арифметических инструкций).
Приведем пример выдачи утилиты Mali Offline Compiler для архитектуры Midgard для шейдера, содержащего большое количество арифметики.
С точностью highp (precision highp float;) получаем 32 такта на выполнение шейдера:
С точностью mediump — 21 такт:
Отметим, что, несмотря на немного возросшее количество инструкций, оценочное время выполнения шейдера сократилось. Это связано с тем, что за 1 такт с точностью mediump выполняется больше инструкций, чем с highp.
Похожую картину можно наблюдать в PVRShaderEditor от Imagination для видеокарт PowerVR Rogue.
С «precision highp float;» получаем:
Используются умножения с полной точностью, выполняемые по 2 за такт.
Если же начинать такой же шейдер строчкой «precision mediump float», можно увидеть, что операции были упакованы в 16-битные суммы произведений (SOP). Это операции вида a * b + c * d. Архитектура PowerVR Rogue позволяет выполнять 2 такие операции за такт, что дает большую плотность операций по сравнению с точностью highp:
Вместо 20 тактов с точностью highp, с mediump получили 15 тактов.
Смешанное использование точностей
Установка точности highp по умолчанию и выборочное понижение точности до mediump работает плохо. Лучший результат дает установка mediump по умолчанию и выборочное повышение точности там, где это необходимо. Приведем некоторые часто встречающиеся случаи, где требуется высокая точность:
Перемещение вычислений выше по pipeline
Типичный сценарий рендера на GPU предполагает следующее соотношение сущностей: