Разработка шейдеров для мобильной игры

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Разработка шейдеров для мобильной игры
Сложная
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    874
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Разработка шейдеров для мобильной игры

Мобильный GPU — это не десктопный GPU с урезанным частотами. Архитектура tile-based deferred rendering (TBDR) у Apple GPU (PowerVR-наследие) и Arm Mali принципиально отличается от immediate mode rendering в десктопных Nvidia/AMD. Шейдер, написанный без понимания этой разницы, на мобиле работает в 3-5 раз медленнее, чем мог бы.

Архитектурные ограничения, которые меняют подход к шейдерам

Fillrate и overdraw. Мобильные GPU чувствительны к overdraw — когда один пиксель закрашивается несколько раз. Каждый лишний draw call поверх уже нарисованного стоит дорого. Для Unity: Sorting Layer + правильный Queue в шейдере (Geometry перед Transparent) позволяют рендеру использовать early-z rejection. Прозрачные объекты убивают early-z — их количество в мобильной игре должно быть минимальным.

Precision. На мобиле разница между float (32 бит), half (16 бит) и fixed (10 бит, фактически устарело) ощутима. Arm Mali и Adreno поддерживают нативную 16-битную арифметику, и на них half работает вдвое быстрее float. Позиции вершин — float, цвета и UV — half. В GLSL ES 3.0 это mediump vs highp.

Sampling textures. Mip-mapping обязателен. Без него texture sampler работает с полным разрешением текстуры даже для мелких объектов на экране — это bandwidth-убийца на мобильных SoC с разделяемой памятью CPU/GPU.

Шейдеры в Unity: URP vs Built-in

Universal Render Pipeline — стандарт для мобильных Unity-игр. Shader Graph позволяет строить шейдеры визуально, но узкие места всё равно нужно дописывать в HLSL. Кастомный SubGraph в Shader Graph = переиспользуемый блок, который компилируется один раз.

Пример простого шейдера растворения (dissolve) на URP HLSL:

half4 frag(Varyings input) : SV_Target {
    half4 baseColor = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv);
    half noiseValue = SAMPLE_TEXTURE2D(_NoiseMap, sampler_NoiseMap, input.uv).r;

    // cutout по порогу с мягкой границей
    half edge = smoothstep(_Threshold - _EdgeWidth, _Threshold + _EdgeWidth, noiseValue);
    clip(noiseValue - _Threshold); // discard пикселей

    half3 edgeColor = lerp(baseColor.rgb, _EdgeColor.rgb, edge);
    return half4(edgeColor, baseColor.a);
}

clip() на мобиле работает быстро — TBDR архитектура ещё до растеризации отбрасывает tile, если все пиксели заклипаны.

Постэффекты: что допустимо на мобиле

Полноэкранные постэффекты (bloom, depth of field, motion blur) — дорого. Стратегия:

  • Bloom — через Kawase blur вместо Gaussian. Kawase делает меньше семплов за сопоставимое визуальное качество. В URP Bloom override с High Quality Filtering = off для мобильного пресета.
  • ЦветокоррекцияTonemapping + Color Adjustments почти бесплатно, делается в одном проходе.
  • DOF — только для кинематических сцен, не в геймплее. Bokeh DOF на мобиле — это ~3 мс дополнительно на Snapdragon 778G.
  • Motion blur — лучше имитировать через Trail Renderer на конкретных объектах, чем полноэкранный velocity buffer.

Particle шейдеры и VFX

VFX Graph в Unity требует Compute Shader — поддерживается на Vulkan (Android 7+) и Metal (iOS 11+). Старый Particle System работает через CPU, что хуже при большом количестве частиц. Для мобильных таргетов: VFX Graph на современных устройствах, CPU particles как fallback для бюджетников.

Шейдер для частиц должен быть максимально простым: Unlit, Additive blending, half precision, без Lighting. Lit-шейдер на 500 частицах — распространённая ошибка, которая даёт -10 FPS.

Godot и GLSL ES

В Godot 4 шейдеры пишутся на диалекте GLSL с собственными расширениями (uniform, varying заменены на uniform и out). Шейдерный язык Godot компилируется в SPIR-V (Vulkan) или GLSL ES (совместимость). Для мобильного экспорта Godot использует Compatibility renderer на основе OpenGL ES 3.0 — он поддерживается шире, чем Vulkan на старых Android.

Оценка работ

Объём шейдерного кода сильно зависит от визуального стиля игры: стилизованная 2D-игра с cel-shading — 1-2 кастомных шейдера, реалистичная 3D с PBR, водой и атмосферой — 10+. Сроки от 3 дней до 4-6 недель. Стоимость рассчитывается индивидуально.