Pull to refresh

Comments 28

UFO just landed and posted this here

А зачем этому всему Visual Studio с костылями в виде bat-файлов, если в итоге код не на C#? В Android Studio было бы проще.

А зачем мне код на C#, если бы вес был бы явно больше?

Мой вопрос не в том, почему не на C#, а в том, почему использовалась неподходящая IDE.

Хорошо, я вас понял. Android Studio тянет за собой кучу зависимостей в APK, это мне не подходит. К тому же как правило Android Studio используется в основном под java/kotlin, что в моей реализации напрочь отсутствует, а также в ней тупит синтаксис C/C++ и прочее

Android Studio тянет за собой кучу зависимостей в APK

Сама студия ничего не тянет. Более того, она и APK сама не собирает, это делает Gradle. А он затянет ровно то, что будет у него в билд-файлах, и не более того.

в ней тупит синтаксис C/C++

Что значит «тупит»?

Пихать все библиотеки в один APK не надо, есть AAB, а на устройство попадет все равно APK только с библиотеками под нужную архитектуру

PNG не особо нужен, можно сразу конвертировать в формат, который будет принимать OpenGL - скорее всего ETC1. Тогда сторонние библиотеки не нужны

Про AAB знаю, но это относится только к google play как мне известно. Про ETC1 полезно, не вспомнил о нем

Про AAB знаю, но это относится только к google play как мне известно

Так и наличие разных библиотек в APK - это тоже требование исключительно для загрузки в Play. На устройство в любом случае попадет только нужный набор библиотек внутри одного APK (если выгружается AAB)

Если вы сами для себя собираете приложение - можно вообще ничего не класть. Работать не будет, конечно, но установить такой APK это не помешает. А если заведомо известно, что запускаться будет только под конкретной платформой, то класть разные библиотеки не обязательно

Эти 100кб - это данные для генерации, из которых на лету генерируются тяжелые текстуры, но на "лету" это сильно сказано для ПК тех времен. В памяти это занимает уже 300мб, а требования к процессору и железу выше чем у Far Cry, вышедшей на 2 года раньше: https://habr.com/ru/companies/ruvds/articles/780102/

Можно такую аналогию провести. Обучить и дистиллировать универсальную Stable Diffusion на какое-то малое подмножество, в итоге модель будет весить допустим 450мб, она будет генерировать текстуры и ресурсы для конкретной игры, а в самой игре будут храниться только текстовые промпты и сиды для генерации. Плюс маленькая нейросеть для апскейлинга этих текстур до 4к. Плюс логика игры допустим еще 50мб.

В итоге GTA можно упихнуть в 500мб вместо 88гб, но правда запуститься она часов через 5-10 после запуска, и будет иметь требования к процессору и диску в разы выше, чем типичные игры в 500мб. Но на ПК из 2042 это будет занимать секунды и люди будут писать "умели же в 2024 в 500мб запихнуть целую GTA 6".

Очень натянутая аналогия.
Ну и да, большей частью это все же код, а не данные для генерации. В том числе код генерации текстур и мешей.

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

Аналогия не про "припрелать нейросети" ради нейросетей, а про количество мощности необходимой для запуска этих "в 100кб помещали".

Чтобы эти 100кб запустить и получить симпатичную, но всё-таки посредственную графику, нужен был ПК мощнее, чем необходимый для запуска FarCry на минималках - игры которая была признана одной из самых красивых своего времени, или Doom 3 - игра которая нещадно ставила на колени ПК того времени.

Аналогия на нейросетях переносит это в современные реалии, которая многим будет понятна более явно, чем "ПК того времени не тянули запуск такой игры в 100кб".
Можно вместо ресурсов игры хранить только текстовые промпты, игра будет весить "всего 200кб", но запуск потребует пару rtx 4090, процессор на 20 ядер и блок питания на 1000Вт, чтобы это запустилось за 30 минут, а не за 5 часов как на обычном ПК.

Ну не так там все страшно было, но все так, игра на самом деле использовала много ресурсов, которые генерировались на старте и загружались в память как текстуры/модели и т.д.
Тормозила она скорее потому, что была бенчмарком и жирненькой, люди не на оптимизацию смотрели все же.
Ну и да, речь о молотилке на старте, сама игра была ну скажем современной по тем временам

Лет через 50 заголовки - "игра всего в 100 гигабайт"

А цель была в том числе не использовать Java/Kotlin? Как будто минимальный размер APK можно получить, максимально используя системные библиотеки, а не затаскивая NDK

Просто представьте, сегодня, когда вес APK достигает по 30–600 Мегабайт, нужно уложиться всего лишь меньше, чем 100 Килобайт.

Вот я как раз не могу представить, как какой-нибудь вшивый Блокнот или вшивый Список покупок может весить 600 Мб, а игру в 100 Кб мне легко проверить.

Но статья удивила меня самим фактом возможности писать прикладные приложения под Андроид на Си. Я думал, что только Java. А возможность писать на Си — прямо интригует, хочется вкатиться. Есть квик-гайд?

Когда я изучал эту тему в 21 году, то заметил, что сообщество было очень мало. Прошло 3 года и не заметил особо прироста. В бОльшей степени вся проблема заключается в том, что требуется изучать работу операционки Android в процессе разработки на Си в нативном его представлении. Поэтому, отвечая на ваш вопрос, квик-гайда скорее всего нет, но можно обратить внимание на мой репозиторий, потому что из того что я видел, хотя бы здесь имеется минимально полезный и хорошо читаемый код, с которого можно начать. Если с нуля тяжело, можно попробовать raylib или rawdrawandroid.

Эм, примерно все игры для Android написаны не на джаве. О каком маленьком сообществе вы говорите?

О том, кто увлечен созданием приложений на Android на чистом Native Activity без java/kotlin и тому подобное

Андроид под капотом ведь линукс.
Можно писать обычные бинарные библиотеки под эти платформы, есть NDK, есть много примеров к нему.
Прежде всего он направлен конечно на переиспользование библиотек с других платформ и написание всяких высокоскоростных специализированных библиотек.
Гугл не рекомендует его использовать, т.к это не платформонезависимо.

Знаете, очень интересно показывать обывателям подобные проекты, а так же демосцену, легковесные и быстрые программы, выполняющие что-то абсолютно то же, что и их медленные, тяжеловесные, но при этом известные собратья.

Если следом поднимается с пола упавшая челюсть и вопросы «как? а почему же тогда...? получается что...?» - значит, как минимум одной цели автор добился и результат оправдан

Так как я больше по времени делаю игры, то сделал для себя инструменты. Например Я могу перегнать obj 3d модельки или png картинку в raw формат, который грузиться прямо в opengl. На android есть библиотека zlib и поэтому я с помощью упаковщика ресурсов (своего) сжимаю снова эти файлы и получается маленький размер. У меня есть несколько типов ресурсов, и у каждого свой адрес, например, чтобы загрузить ресурс png текстуры, я пишу.

Resource *res = resource_manager_get (RES_SPRITES, SCANNER_TEXTURE);

Да, в android возможно пользоваться готовыми библиотеками для создания игры на opengl es, и в Android Studio это делается удобней. Я тоже на сях писал игру для android, но только вместе с SDL2 для упрощения и скорости разработки.

А так, вы молодцы. Если будете работать в этом направление, то впереди создание потрясающих инструментов и написания интересных статей.

Как же нужна нейросеть которая бы сжимала и оптимизировала код по максимуму. Сама ищет альтернативу и применяет ее в коде. А на выходе весь проект от 30 килобайт до 1 мегабайта. Правда это все грезы.

Sign up to leave a comment.

Articles