Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр “Рецепт Счастья” — увлекательная игра в жанре «соедини предметы»! Помогите Эмили раскрыть тайны пропавшего родственника, найти сокровища и восстановить её любимое кафе.

Рецепт Счастья

Казуальные, Головоломки, Новеллы

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • Animalrescueed Animalrescueed 36 постов
  • Oskanov Oskanov 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
509
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER
1 месяц назад

Пишем 3D-игру для ретро-устройств весом в 600Кб…⁠⁠

...которая работает на первых Android-смартфонах в мире, компьютерах из 90-х и даже Mac'ах! Часть 2.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Иногда у меня лежит душа просто взять и написать какую-нибудь небольшую игрушку с нуля, без использования готовых движков. В процессе разработки я ставлю перед собой интересные задачки: игра должна весить как можно меньше, работать на как можно большем числе платформ и использовать нетипичный для меня архитектурный паттерн. Недавно я начал писать ремейк классических «танчиков» и в рамках серии статей готов рассказать о всех деталях разработки трёхмерной игры с нуля в 2025 году. Если вам интересно узнать, как работают небольшие 3D-демки «под капотом» от написания фреймворка до разработки геймплея — жду вас под катом!

❯ Предисловие

Ещё в начале этого года, мне взбрело в голову проверить насколько концепция «Write once, run anywhere» правдива. Все мы знаем, что Java достаточно обширно используется в Enterprise-секторе по типу банков, Android-гаджетах в качестве языка, на котором написано около 80% системы и даже в смарт-карточках, куда входят привычные нам SIM и банковские карты.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Изначально я хотел написать игру, которая работала бы не только на самых первых Android-смартфонах в мире, но ещё и на ретро-кнопочных телефонах, и при всём этом была 3D. В течении недели, я успел написать некоторые наработки для трёхмерной гоночки с примитивной физикой на основе «линий»:

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

В игре был мультиреднер для M3G и MascotCapsule... не хуже игр Fishlabs :))

Но затем я понял, что лишаюсь очень многих фич языка. Дело в том, что игры для Java-телефонов писались не столько на самой «джаве», сколько на её своеобразном диалекте. В мире C/C++ такой подход принято называть «C с классами», но в случае Java - подход заключался в написании большей части логики в одном-двух классах для улучшения производительности игры. Наследование, полиморфизм и абстракции на кнопочных телефонах использовать не рекомендуется. Кроме того, версия JDK в кнопочных телефонах была на уровне 1.3 — а значит, никаких дженериков и иных полезных фишек Java.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Про разработку игр для кнопочных телефонов я писал отдельную статью. Дабы не отвлекать вас от прочтения этой, ссылку оставлю в закрепленном комментарии :)

По итогу я решил сфокусироваться на относительно свежем HTC Dream — первом серийном Android-смартфоне в мире, который вышел в далёком 2008 году с Android 1.0 на борту. В нём используется уже не JVM, а своя виртуальная машина Dalvik с собственным байткодом и версией JDK — 1.5, да и процессор здесь значительно помощнее, а следовательно и куда больше возможностей для разработки!

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Поскольку игру я разрабатываю и отлаживаю на ПК, у меня также есть отдельный билд и для ретро-компьютеров с GPU из 90-х и нулевых. И в рамках статьи, мы, конечно же, сделаем с вами практические тесты!

❯ Рендер

В первой части мы с вами закончили на том, что написали основу для игры — фреймворк, который включает в себя рендерер, менеджер ресурсов на слабых ссылках, некое подобие графа сцены с компонентной системой и загрузчик уровней. Но этого всё ещё мало для 3D-игры и, что самое важное, все эти модули ещё не оптимизированы.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Например, если грузить уровень «в лоб» и на каждый кубик выделять по отдельному игровому объекту, который «рисует сам себя отдельно» — мы быстро столкнемся с тем, что количество вызовов отрисовки (DIP'ов) превысит все разумные нормы. Для уровня в 16x16 блоков это уже целых 256 DIP'ов - а вкупе с другими танчиками и UI - не менее 260-270.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Самая базовая оптимизация в таком случае — это отсечение по пирамиде видимости (Frustum culling). Концепция простая: для отрисовки всего, что мы видим с вами на экране используется три матрицы размерности 4x4: мировая (позиция и поворот объекта в мире), вида (камера, позиция из «глаз») и проекции. При перемножении, они образуют так называемую WorldViewProjection-матрицу и если каждую вершину модели умножить на эту матрицу — то мы получаем её позицию в Clip-Space (или NDC) пространстве. Далее растеризатор берёт каждые три трансформированные вершины в качестве углов треугольника и отрисовывает их в рендертаргет - в нашем случае, это экран. Именно за счёт перспективной матрицы проекции и Z-буфера, мы с вами и получаем тот самый эффект трёхмерного пространства.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Если взять произведение матрицы вида с матрицей проекции и разбить её на плоскости, соответствующие каждой стороне мира (вверх, вниз, влево, вправо, вперёд, назад) — то путём выполнения простейшей проверки можно понять — находится ли точка мирового пространства в текущей позиции камеры:

public void calculate(Matrix viewProj) {
float[] items = viewProj.Matrix;
planes[0].set(items[3] - items[0], items[7] - items[4], items[11] - items[8], items[15] - items[12]).normalize();
planes[1].set(items[3] + items[0], items[7] + items[4], items[11] + items[8], items[15] + items[12]).normalize();
planes[2].set(items[3] + items[1], items[7] + items[5], items[11] + items[9], items[15] + items[13]).normalize();
planes[3].set(items[3] - items[1], items[7] - items[5], items[11] - items[9], items[15] - items[13]).normalize();
planes[4].set(items[3] - items[2], items[7] - items[6], items[11] - items[10], items[15] - items[14]).normalize();
planes[5].set(items[3] + items[2], items[7] + items[6], items[11] + items[10], items[15] + items[14]).normalize();
}

// Allocation-less
public boolean isPointInFrustum(float x, float y, float z)
{
for(int i = 0; i < planes.length; i++)
{
Plane plane = planes[i];

if ((plane.A * x) + (plane.B * y) + (plane.C * z) + plane.D <= 0)
return false;
}

return true;
}

Далее проверить попадает ли наш кубик или танчик в кадр — дело техники. Есть два подхода: подсчитать Bounding-sphere для модели (радиус относительно самой нижней и самой верхней вершины), или Bounding-box. В самом простом случае, можно обойтись проверкой самой нижней и самой верхней точки Bounding-box'а, однако в некоторых случаях такой алгоритм может давать сбой — например если уткнутся в «стенку» носом в игре:

public boolean isMeshRendererInFrustum(MeshRenderer renderer) {
float x = renderer.Parent.Position.X;
float y = renderer.Parent.Position.Y;
float z = renderer.Parent.Position.Z;
Vector min = renderer.Mesh.BoundingMin;
Vector max = renderer.Mesh.BoundingMax;

return isPointInFrustum(x + min.X, -(y + min.Y), z + min.Z) || isPointInFrustum(x + max.X, -(y + max.Y), z + max.Z);
}

Конкретно в нашем случае, такая оптимизация помогает сэкономить около 100 DIP'ов и даёт неплохой прирост FPS. На Galaxy S3 с Mali 400MP4 мы получаем стабильные 60FPS, в то время как на Xperia Play — около 30... Что-ж, этого всё равно мало, тем более для смартфона, в котором GPU — кровный брат Xenos в Xbox 360...

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Нарисовать 256 кубиков для GPU, даже мобильного — не проблема, особенно если они не бьют по филлрейту. Однако на классических мобильных GPU был строгий бюджет на число DIP'ов — в идеале не более 100, иначе FPS заметно просаживается даже на примитивной геометрии. Поэтому для оптимизации можно использовать технику батчинга: объединяем все кубики с одним материалом в сцене в одну большую модель и рисуем за один вызов DIPUP:

public void bake() {
int uniqueMaterials = 0;

batchList.clear();
batchRenderers.clear();
world.findComponentsOfType(BatchedMeshRenderer.class, batchRenderers);

for(int i = 0; i < batchRenderers.size(); i++) {
BatchedMeshRenderer renderer = batchRenderers.get(i);
renderer.IsTakenByBatcher = false;

if(renderer.Mesh != null && renderer.Material != null) {
if(renderer.Mesh.Buffers.length != 1)
continue; // Only simple meshes is supported now

Batch batch = meshes.get(renderer.Material);

if(batch == null)
meshes.put(renderer.Material, batch = new Batch(renderer.Material));

batch.addMesh(renderer);
}
}

for(Map.Entry<Material, Batch> materialBatch : meshes.entrySet()) {
batchList.add(new BatchHolder(materialBatch.getKey(), materialBatch.getValue()));
materialBatch.getValue().finish(); // Upload mesh to GPU
}
}

После этого, FPS поднимается до очень приятных значений - целых 45! Однако есть и обратная сторона: эта техника очень сильно бьёт не только по памяти, но и в случае динамического батчинга (танки ведь уничтожают кубики) - по процессору. Однако можно и далее оптимизировать этот алгоритм путём разбиения батчей на сетку, чтобы отсекать невидимые группы "кубиков" :)

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Следующая тема — это материалы для поверхностей, описывающие внешний вид модели на экране. В первой статье я написал базовую систему материалов, которая оборачивала в себе набор рендерстейтов и парочку текстур: Diffuse и Detail. Но мало кто помнит, что ещё до шейдеров, в FFP был довольно мощный инструмент, именуемый комбайнерами. По сути, комбайнеры — это возможность задействования сразу нескольких текстурных юнитов для смешивания двух и более текстур за один вызов отрисовки.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Пример использования комбайнеров — плавное смешивание двух текстур на ландшафте с использованием маски. Эдакая вариация техники Splat mapping

Поэтому я решил написать загрузчик для материалов, описанных в простом текстовом формате по типу ini-файлов. В секции Texture описываются используемые текстуры, которые затем подгружаются из пула ресурсов, в RenderStates — напрямую указаны поля в классе Material, а в Combiners — очень-очень примитивная вариация на тему шейдеров!

[Texture]
Primary = textures/t72_diffuse.tex
Secondary = textures/brick.tex

[RenderStates]
AlphaTest = 0
AlphaTestValue = 1

DepthWrite = 1
DepthTest = 1
AlphaBlend = 0
Fog = 1
Unlit = 1

[Combiners]
Sample Primary
Interpolate Secondary 0.3
MultiplyColor Primary

Изначально я хотел сделать чтобы материалы описывали эдакий набор инструкций как «шейдеры» в Quake 3. Однако учитывая отсутствие лямбд в Java 1.5, реализация на интерфейсах (и тем более на рефлексии) не впечатлила своей производительностью и я решил сделать «программируемыми» только сами комбайнеры. Суть простая: отдельные псевдо-шейдеры реализуют интерфейс FixedFunctionShader и в теле метода onApply применяют необходимые операции над комбайнерами. При этом строго запрещается менять стейт самого графического API кроме биндинга текстур:

static class Sample implements BaseGraphics.FixedFunctionShader {

@override
public void onApply(Material material, int combiner, float[] params) {
if(params.length != 1)
throw new ShaderException(this, material, params, "Expected 1 argument");

int texId = (int)params[0];
Texture2D tex = material.Textures[texId];

if(tex == null)
throw new ShaderException(this, material, params, "Texture " + texId + " was null");

tex.bind();

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE0 + combiner);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE0 + combiner);

glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
}
}

Затем при вызове отрисовки модели, рендерер выполняет «инструкции» для таких комбайнеров по одному и если нужно — откатывается до простой «однотекстурной» версии (драйвер GLES на Mali-400 и VideoCore IV не поддерживает комбайнеры, несмотря на то, что спецификация требует их поддержки). Получается довольно шустро:

if(GPUClass.QualityLevel >= com.monobogdan.engine.GPUClass.QUALITY_LEVEL_NORMAL) {
for (int i = 0; i < Material.COMBINER_STAGE_COUNT; i++) {
// Reset combiner state
glActiveTexture(GL_TEXTURE0 + i);
glDisable(GL_TEXTURE_2D);
}

for (int i = 0; i < material.Shaders.length; i++) {
Material.ShaderInstance instance = material.Shaders[i];

glActiveTexture(GL_TEXTURE0 + i);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glEnable(GL_TEXTURE_2D);
instance.Shader.onApply(material, i, instance.Params);
}
} else {
// Single texture fallback for very slow GPU's
glActiveTexture(GL_TEXTURE0);
setState(GL_TEXTURE_2D, material.Textures[0] != null);
material.Textures[0].bind();
}

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Наполовину кирпичный танк — видели ли вы когда-нибудь такой камуфляж? :)

Следующая тема — рендеринг текста. В более ранних статьях я обычно не парился над демками и просто рисовал текст нативными средствами системы в текстуру, а затем рисовал полноэкранный квад. Такая методика работает шустро на смартфонах, но очень тормозная на ПК и более того, такая текстура занимает слишком много VRAM! Однако чаще всего я использую так называемые битмапные шрифты, которые состоят из атласа — текстуры с «запеченными» буквами и информации о том, где какой символ в ней находится. Для генерации таких шрифтов я использую утилиту BMFont, а сам код рендеринга получается очень простым:

public void drawString(BitmapFont font, Vector color, float x, float y, String str) {
if(font == null)
throw new NullPointerException("font was null");

if(str == null)
return;

int sz = font.Size / 2;

for(int i = 0; i < str.length(); i++) {
char chr = str.charAt(i);

if(chr == ' ')
x += sz;
else {
BitmapFont.CharacterInfo chrInfo = font.getCharacter(chr);
drawImage(font.Pages[chrInfo.Page], x, y + chrInfo.YOffset, chrInfo.X, chrInfo.Y, chrInfo.Width, chrInfo.Height, chrInfo.Width, chrInfo.Height, color);
x += chrInfo.Width;
}
}
}

И результат - весьма симпатичным:

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

В целом, далее особо оптимизировать и нечего для рендерера. Инстансинга в FFP нет, шейдеров — тоже, а рендер идентичный и на Android, и на ПК. Поэтому имеем что имеем!

❯ Аллокации

Однако когда я начал отлаживать игру на смартфонах, я заметил резкие просадки кадров и абсолютно нестабильный FPS. При этом характер лагов был константный: раз в 2-3 секунды просадка в 20 кадров. Заглянув в logcat, я обнаружил что Dalvik постоянно вызывает GC (сборщик мусора) и блокирует все потоки на невероятные 16мс — даже для простейших объектов в «куче»! В зависимости от устройства, Dalvik выделяет от 8 до 32Мб памяти для каждого приложения - что очень немного!

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

В первой статье я рассказывал о том, что большинство объектов у меня мутабельные и предполагают аллокацию не в update/draw, а в конструкторе компонента. Это касается векторов, матриц и иных примитивных классов для различных расчетов — ведь в отличии от .NET, в Java нет Value-типов, которые можно выделить на стеке, кроме примитивов. Например, если в C# написать такой код для сложения двух векторов:

struct Vector3 {
public float X, Y, Z;

public Vector3(float x, float y, float z)
{
X = x;
Y = y;
Z = z;
}

public static Vector3 operator +(Vector3 a, Vector3 b)
{
return new Vector3(a.X + b.X, a.Y + b.y, a.Z + b.z);
}
}

...

Transform.Position += Velocity;

То из-за того, что Vector3 — простая структура без ссылок на управляемые объекты, которая не требует контроля от GC, рантайм .NET выделит её на стеке, а не в куче и автоматически удалит при выходе из скоупа метода, где она использовалась. Если попытаться сделать такое в Java:

public static Vector3 add(Vector3 a, Vector3 b)
{
return new Vector3(a.X + b.X, a.Y + b.y, a.Z + b.z);
}

...

transform.position = Vector3.add(transform.position, velocity);

То мы получим аллокацию для каждого объекта, вызывающий этот участок кода на каждый кадр. И когда придёт время вызывать GC — он обязательно тормознет игру и вызовет огромные фризы, прямо как в Minecraft на ПК. Главный нюанс здесь в том, что Dalvik оптимизирован под минимальное потребление памяти и поэтому начинает слишком часто вызывать GC, тормозя работу игры. В смартфонах с большим объёмом ОЗУ (хотя-бы 1Гб) таких проблем уже нет.

Но как я уже и сказал выше — мои игровые объекты и компоненты написаны так, чтобы не нагружать ни GC, ни кучу, но сборщик мусора всё равно продолжает тормозить игру, а значит нужно максимально экономить аллокации. Начав профайлить код, я обнаружил что огромное число аллокаций приходится на... итераторы! Да-да, та же самая проблема, что и в примере с векторами: даже несмотря на крошечный вес в памяти, итерации в каждом кадре засоряют хип и по итогу вызывают GC. Решение: перевести все индексированные списки на классический for:

for(int i = 0; i < GameObjects.size(); i++) {
GameObjects.get(i).onUpdate();
}

// Second pass for late updates
for(int i = 0; i < GameObjects.size(); i++)
GameObjects.get(i).onLateUpdate();

И после этого, частота вызова GC наконец-то стабилизировалась!

❯ Ввод

Отдельный вопрос — это грамотная обработка ввода. Хочется чтобы наша игра поддерживала не только клавиатуру, но и геймпады, а на смартфонах — ещё и виртуальные джойстики. Чтобы не размазывать подсистему ввода в игре на 150 источников как в Unity, есть смысл её абстрагировать на некий виртуальный геймпад с необходимыми для игры кнопками: в нашем случае это стрелки и кнопка стрельбы.

Затем необходимо замаппить физические кнопки на наш виртуальный геймпад. Для этого, на смартфонах я сделал таблицу с маппингом, которая подходит для большинства игровых гаджетов: Xperia Play, игровых консолей на Android'е из 2012-го и даже смартфонов с аппаратными QWERTY-клавиатурами. И если захочется добавить возможность переназначения кнопок — это тоже не станет проблемой!

private static int[] xperiaPlayMapping = {
KeyEvent.KEYCODE_DPAD_UP, KeyEvent.KEYCODE_DPAD_DOWN, KeyEvent.KEYCODE_DPAD_LEFT, KeyEvent.KEYCODE_DPAD_RIGHT, KeyEvent.KEYCODE_DPAD_CENTER,
KeyEvent.KEYCODE_BACK, KeyEvent.KEYCODE_BUTTON_X, KeyEvent.KEYCODE_BUTTON_Y, KeyEvent.KEYCODE_BUTTON_R1, KeyEvent.KEYCODE_BUTTON_L1
};

private static int[] genericQWERTYMapping = {
KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_D, KeyEvent.KEYCODE_W, KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_SPACE, KeyEvent.KEYCODE_J, KeyEvent.KEYCODE_K,
KeyEvent.KEYCODE_Q, KeyEvent.KEYCODE_E
};

public static int[][] ConversionTable = {
xperiaPlayMapping,
genericQWERTYMapping
};

...

private int resolveGamePadTranslationTable(int keyCode) {
for(int i = 0; i < GamePadKeyTable.ConversionTable.length; i++) {
int[] keys = GamePadKeyTable.ConversionTable[i];

for(int j = 0; j < keys.length; j++) {
if(keyCode == keys[j])
return j;
}
}

return -1; // Not resolved
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
int gamePadKey = resolveGamePadTranslationTable(keyCode);
handleKeyEvent(event.getScanCode(), Input.STATE_RELEASED);

if(gamePadKey != -1)
handleGamePadEvent(gamePadKey, Input.STATE_RELEASED);

return true;
}

По итогу, у нас есть унифицированное управление на ПК и смартфонах, покататься в нашей демке можно даже на легендарной Xperia Play!

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Для смартфонов без аппаратной клавиатуры, виртуальный геймпад пишется буквально за 5 минут. Главное — использовать относительные нормализованные координаты для адаптивности и учитывать Aspect Ratio устройства, который может быть разным:

public void drawUI() {
VerticalInput = 0;
HorizontalInput = 0;

float scaled = UI_BASE_SIZE * Scale;
float baseY = 1.0f - (scaled * 3); // 0.7f is base coefficient for 1.0f scaling

if(game.Runtime.UI.imageButton(arrowUp, scaled, baseY, scaled, scaled, true))
VerticalInput = 1;

if(game.Runtime.UI.imageButton(arrowDown, scaled, baseY + (scaled * 2), scaled, scaled, true))
VerticalInput = -1;

if(game.Runtime.UI.imageButton(arrowLeft, 0.0f, baseY + scaled, scaled, scaled, true))
HorizontalInput = -1;

if(game.Runtime.UI.imageButton(arrowRight, scaled * 2, baseY + scaled, scaled, scaled, true))
HorizontalInput = 1;
}

❯ Тестируем игру

Пришло время протестировать то, что мы успели с вами сделать за неделю. И сегодня в тестах участвует сразу несколько машинок: Asus eeePC 4G в роли «компьютера из 90-х», Sony Ericsson Xperia Play, iPhone 4S с нюансом и Samsung Galaxy Y Pro. Все гаджеты по своему хороши, имеют разные GPU и всех их объединяет статус легендарных.

Начинаем с SE Xperia Play 2011 года выпуска, который изначально позиционировался как игровой смартфон. По сути, Xperia Play - чуточку переделанный Xperia Pro, где QWERTY-клавиатуру заменили на геймпад, при этом аппаратная платформа почти всех "сонериков" 2011 года идентичная: чипсет Qualcomm MSM8250 с ARMv7-совместимым ядром Scorpio на частоте 1ГГц и GPU Adreno 205 (ребрендинг ATI Imageon Z430, на архитектуре Xenos), 512Мб ОЗУ типа DDR1 и 512Мб флэш-памяти. С смартфонами в те годы была такая же ситуация, как и с компьютерами в начале нулевых: прогресс был слишком быстрым и уже в 2012 году, Xperia Play не тянул многие свежие игры из-за слабенького процессора и GPU!
Но в нашем случае, он показывает себя неплохо и стабильно тянет рендеринг уровня и танчика в 40-45 FPS... В играх на Unity3D, Adreno 205 таким результатом похвастаться не мог.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Переходим к iPhone 4S, который, как я уже сказал, с некоторым нюансом: это китайская реплика на Android. При этом довольно интересен тот факт, что у копии очень крутая IPS-матрица почти такого же разрешения (800x480 против 960x640), как и на оригинальном айфоне. Работает "клон" на базе чипсета MediaTek MT6515 2012 года выпуска с одним ядром Cortex-A9, работающим на частоте 1ГГц и GPU PowerVR SGX531 Ultra. Также в смартфоне установлено 256Мб оперативной памяти и 256Мб постоянной - в общем, типичный бюджетник тех лет. GPU от PowerVR - главное достоинство этого смартфона в плане гейминга, наша демка спокойно выдаёт 50-60 стабильных FPS. Я считаю что это прекрасный результат.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

ERTY-клавиатурой, но и очень диковинным (и родственным Raspberry Pi) процессором Broadcom BCM21553 с одним ARMv6-совместимым ядром на частоте 832МГц и крайне необычным GPU собственной разработки VideoCore IV. Дело в том, что GPU в чипсетах Broadcom выполняет роль системного монитора и по архитектуре заметно отличается от классических видеоускорителей. По сути, это DSP с очень крутым векторным сопроцессором из-за чего его отчасти можно назвать софтрендером. Однако ранние драйвера для этого GPU были очень сырыми из-за чего большинство игр выдавали артефакты или работали очень медленно. Наша игрушка - не исключение, всего лишь 20 FPS при 240x320...

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Переходим к довольно необычной машинке: Asus eeePC 4G. Первые модели легендарной линейки нетбуков отличались очень низкой ценой, довольно слабым и прожорливым процессором Celeron M 353 на архитектуре Dothan (прямой поток Pentium III Tualatin) и частоте 900МГц, встроенной графикой Intel GMA900 с поддержкой пиксельных шейдеров 2.0 и довольно небольшим объёмом ОЗУ в 512Мб типа DDR2. Здесь я проводил тесты на JRE 1.7 - и получил почти 60 FPS... за вычетом того, что раз в 3-4 секунды я получаю микрофризы и нагрузку на процессор в 80%. Однако сама JRE здесь не причём: такая высокая нагрузка связана с тем, что у GPU нет аппаратного вершинного конвейера и поэтому вся трансформация геометрии происходит на процессоре. Такой вот нюанс:

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

❯ Заключение

Вот такая статья о разработке 3D-игры с нуля у нас с вами получилась. Прошлые статьи в этой рубрике я писал в стиле туториала, но в этой я решил рассмотреть конкретные кейсы и архитектурные решения. И может она не настолько простая и понятная, как статья про разработку «самолетиков» или Top-Down стрелялки по зомби, думаю своего читателя она точно нашла! Если вам интересно, с кодом можно ознакомиться на моём Github.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.

Что думаете о таком формате статей?
Всего голосов:

Очень важно! Разыскиваются девайсы для будущих статей!

Друзья! Для подготовки статей с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 2000-х годах, китайцы часто делали дешевые телефоны с игровым уклоном — обычно у них было подобие геймпада (джойстика) или хотя бы две кнопки с верхней части устройства, выполняющие функцию A/B, а также предустановлены эмуляторы NES/Sega. Фишка в том, что на таких телефонах можно выполнять нативный код и портировать на них новые эмуляторы, чем я и хочу заняться и написать об этом подробную статью и записать видео! Если у вас есть телефон подобного формата и вы готовы его задонатить или продать, пожалуйста напишите мне в Telegram (@monobogdan) или в комментарии. Также интересуют смартфоны-консоли на Android (на рынке РФ точно была Func Much-01), там будет контент чуточку другого формата :)

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

А также я ищу старые (2010-2014) подделки на брендовые смартфоны Samsung, Apple и т. п. Они зачастую работают на весьма интересных чипсетах и поддаются хорошему моддингу, парочку статей уже вышло, но у меня ещё есть идеи по их моддингу! Также может у кого-то остались самые первые смартфоны Xiaomi (серии Mi), Meizu (ещё на Exynos) или телефоны Motorola на Linux (например, EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E5, ZINE ZN5 и т. п., о них я хотел бы подготовить специальную статью и видео т. к. на самом деле они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake!). Всем большое спасибо за донаты!

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Статья написана при поддержке Таймвеб КЛАУД.

Показать полностью 22 1
[моё] Опрос Гаджеты Смартфон Программирование Java 3D Gamedev Opengl Android Android разработка Гифка Длиннопост
43
9
akab24
akab24
1 год назад

Игра Машинист Московского Метро 3Д | Первое обновление⁠⁠

Мы продолжаем работать над игрой "Машинист Московского Метро" и выпускаем первое обновление, которое затронуло как механику игры, так и визуал:

Новые туннели, рельсы и оборотные тупики

Теперь в игре более детализированный туннель, рельсы и оборотные тупики.

Игра Машинист Московского Метро 3Д | Первое обновление Разработка, Видеоигра, Компьютерные игры, Метро, Игры, Длиннопост, Московское метро, Яндекс Игры, Rustore, Симулятор, Поезд, Браузерные игры, Мобильные игры, Обновление, Android, Windows, Инди, Unity, 3D

АРС/АЛС

Добавлено ограничение скорости. Красная цифра - текущее ограничение. Желтая цифра - ограничение на следующем участке.

Игра Машинист Московского Метро 3Д | Первое обновление Разработка, Видеоигра, Компьютерные игры, Метро, Игры, Длиннопост, Московское метро, Яндекс Игры, Rustore, Симулятор, Поезд, Браузерные игры, Мобильные игры, Обновление, Android, Windows, Инди, Unity, 3D

Марксистская: добавлены люстры

Игра Машинист Московского Метро 3Д | Первое обновление Разработка, Видеоигра, Компьютерные игры, Метро, Игры, Длиннопост, Московское метро, Яндекс Игры, Rustore, Симулятор, Поезд, Браузерные игры, Мобильные игры, Обновление, Android, Windows, Инди, Unity, 3D
Игра Машинист Московского Метро 3Д | Первое обновление Разработка, Видеоигра, Компьютерные игры, Метро, Игры, Длиннопост, Московское метро, Яндекс Игры, Rustore, Симулятор, Поезд, Браузерные игры, Мобильные игры, Обновление, Android, Windows, Инди, Unity, 3D

Площадь Ильича: добавлена скульптура Ленина

Игра Машинист Московского Метро 3Д | Первое обновление Разработка, Видеоигра, Компьютерные игры, Метро, Игры, Длиннопост, Московское метро, Яндекс Игры, Rustore, Симулятор, Поезд, Браузерные игры, Мобильные игры, Обновление, Android, Windows, Инди, Unity, 3D

Третьяковская (северный зал): добавлен орнамент Верещагина и Васнецова

Игра Машинист Московского Метро 3Д | Первое обновление Разработка, Видеоигра, Компьютерные игры, Метро, Игры, Длиннопост, Московское метро, Яндекс Игры, Rustore, Симулятор, Поезд, Браузерные игры, Мобильные игры, Обновление, Android, Windows, Инди, Unity, 3D

Другие изменения

• Добавлены недостающие надписи с названием станции на Новокосино, Новогиреево, Шоссе Энтузиастов, Авиамоторной, Площади Ильича, Марксистской, Третьяковской.
• Добавлен предупреждающий писк при закрытии дверей;
• Теперь при положении контроллера в "0" поезд теряет скорость по инерции;
• В обучении добавлен пункт про АЛС/АРС;
• Добавлена возможность выбора времени;
• Новый раздел: "Новости".

Ссылки на игру

Яндекс Игры [Web] (ПК, Android, iOS)
RuStore [Установка] (Android 11+)

Показать полностью 5
[моё] Разработка Видеоигра Компьютерные игры Метро Игры Длиннопост Московское метро Яндекс Игры Rustore Симулятор Поезд Браузерные игры Мобильные игры Обновление Android Windows Инди Unity 3D
1
97
NEUROHUB2077
NEUROHUB2077
1 год назад
Искусственный интеллект
Серия Нейросети

Превращаем в 3D всё, что попадет под руку⁠⁠

Napkinmatic — нейросеть, которая сделает из любого объекта 3D-модель, достаточно лишь навести на него камеру смартфона.

Приложение на этапе бета-тестирования доступно на iOS и Android.

Источник телеграм-канал: NEUROHUB🔥 👈 Еще больше нейроконтента

Показать полностью
Искусственный интеллект Нейронные сети Гайд Перевел сам Компьютерная графика Digital iOS Android Телефон 3D Видео Telegram (ссылка)
30
2
IlnurAgay
IlnurAgay
1 год назад

10 Предстоящих Мобильных Игр #1 (Ноябрь 2023) : )⁠⁠

📌 Игры в этом списке 📌

1. 00:10 - Battlecruisers Showdown 🤖
Android: ▶ https://play.google.com/store/apps/details?id=com.Bluebottle...

iOS: ▶ https://apps.apple.com/us/app/battlecruisers/id1508784452?l=...

Описание игры: Кроссплатформенная многопользовательская игра, действие которой разворачивается в 2732 году на Земле. Миром управляют роботы, которые были созданы для того, чтобы строить, поддерживать развитие экономики и вести войны. Геймеры принимают участие в битвах роботов.


2. 00:53 - Tokyo Ghoul: Break the Chains 👹
Android: ▶ https://play.google.com/store/apps/details?id=com.komoe.tggp...

iOS: ▶ https://apps.apple.com/ph/app/tokyo-ghoul-break-the-chains/i...

Описание игры: Мобильная игра представляет геймифицированную версию серии в карточном формате. История рассказывает о студенте-первокурснике Кене Канеки. Его жизнь резко изменилась из-за получения органов от гуля Ризе Камиширо. Из оригинальной манги 2011 года в игре много знаковых моментов.


3. 01:48 - Dark Slayer Idle RPG 🥶
Android: ▶ https://play.google.com/store/apps/details?id=com.gamepub.zh...

iOS: ▶ https://apps.apple.com/in/app/dark-slayer-idle-rpg/id6446265...

Описание игры: Мир заполонили зомби! Это значит, что для его спасения нужен герой! В ваших силах стать героем и спасти мир! Наслаждайтесь крутой борьбой с монстрами, свободно переключаясь между искусством владения мечом, меткой стрельбой и заклинаниями!


4. 02:08 - Legend of Wizard: Idle RPG 🍃
Android: ▶ https://play.google.com/store/apps/details?id=com.LockOn.Wiz...

iOS: ▶ https://apps.apple.com/in/app/legend-of-wizard-idle-rpg/id64...

Описание игры: Хроника борьбы мальчика с великим злом. Мальчик, потерявший родителей на войне, теперь стремится стать великим волшебником и спасти мир от корня всего зла! Играйте и испытайте путь этого героя от сироты к волшебнику!


5. 02:33 - METRIA 🍕
Android: ▶ https://play.google.com/store/apps/details?id=com.asobimo.me...

iOS: ▶ https://apps.apple.com/ru/app/metria-the-starlight/id1631278...

Описание игры: METRIA — мобильная игра с 3D-графикой и аниме-стилистикой. Игроки будут проходить и исследовать большие локации, наполненные монстром. Для этого надо создать аватар и выбрать класс, среди них — маг. Радует, что в METRIA ручное управление, а сеттинг напоминает японские jRPG и современные мобильные игры по типу Genshin Impact.


6. 03:09 - Cyber Rebellion 🕶
Android: ▶ https://play.google.com/store/apps/details?id=com.emagroups....

iOS: ▶ https://apps.apple.com/ru/app/cyber-rebellion/id1635331647

Описание игры: Cyber Rebellion — ролевая игра, где вы управляете отрядом из бойцов, которые должны спасти мир будущего от вируса. Интересно, что действия проекты разворачиваются в 2177 году. Разработчики уже добавили кат-сцены, но они на китайском. Что до битв, то они проходят в пошаговом формате и авто-режиме. Всего на прохождение уровня даётся около 30 ходов, они заканчиваются и враг не побеждён — вы проиграли.


7. 03:35 - Bug Heroes: Tower Defense 👀
Android: ▶ https://play.google.com/store/apps/details?id=com.foursakenm...

iOS: ▶ https://apps.apple.com/us/app/bug-heroes-tower-defense/id644...

Описание игры: Bug Heroes: Tower Defense — трёхмерная игра в жанре «башенная защита» (tower defense). В ней надо использовать башни, чтобы останавливать врагов. Разработчики обещают потрясающую графику и огромную одиночную кампанию. Также враги разнообразные, чтобы игровой процесс не надоедал с каждым новым уровнем.


8. 04:03 - Disney Speedstorm 🛹
Android: ▶ https://play.google.com/store/apps/details?id=com.gameloft.a...

iOS: ▶ https://apps.apple.com/es/app/disney-speedstorm/id6449708682

Описание игры: Disney Speedstorm — боевые гонки в духе Mario Kart, только на ПК и консоли. У каждого героя Disney Speedstorm свои уникальные навыки, которые способны перевернуть ход битвы. Также игрокам обещают трассы, вдохновлённые вселенными Disney и Pixar: от острова из Пиратов Карибского моря до самой Корпорации Монстров.


9. 05:10 - Sky Fortress: Odyssey ⛵
Android: ▶ https://play.google.com/store/apps/details?id=com.global.sfo...

iOS: ▶ https://apps.apple.com/ru/app/sky-fortress-odyssey/id6449519...

Описание игры: Sky Fortress:Odyssey - Фэнтезийное приключение в стиле стимпанк, эпическая история цивилизаций. Отправьтесь в грандиозное приключение в стиле стимпанк, где технологии и фэнтези сливаются воедино, раскрывая тайны мира Сецемира. Обширное повествование, состоящее из более чем миллиона слов, демонстрирующее великолепие различных цивилизаций. Вас ждет множество уникальных боссов. Тщательно продуманные, красивые карты в стиле аниме с разнообразными персонажами и возможностью нанять любимого героя S-ранга в наборе для новичков. Эксклюзивное оружие для героев, пробуждение скрытых талантов и комбинации наборов гаджетов позволяют безграничное многоплановое развитие.


10. 05:44 - Phantom Blade: Executioners 🔞
Android: ▶ https://play.google.com/store/apps/details?id=com.sgame.phan...

iOS: ▶ https://apps.apple.com/ru/app/phantom-blade-executioners/id1...

Описание игры: Phantom Blade: Executioners — это динамичная игра в жанре экшен, действие которой разворачивается в Phantom World, оригинальном мире, разработанном S-GAME.
В нем представлена богатая сюжетная линия приключений кунг-фу, в которой вы погрузитесь в заговор, который грозит разрушить мир, уничтожите мастеров кунг-фу, впавших в безумие, и обнаружите вдохновителя после серии, казалось бы, независимых инцидентов.


Видео и музыка предназначены для информационных целей 16 + 🎮
Все авторские права принадлежат их законным владельцам. 💽

Показать полностью 10
Мобильные игры Android iOS JRPG 3D Трейлер Pixel Art Шутер MMORPG Экшн Фэнтези Игры на Android Игры на iOS Видео Видео ВК YouTube Длиннопост ВКонтакте (ссылка) YouTube (ссылка)
1
741
monobogdan
monobogdan
2 года назад
TECHNO BROTHER

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой?⁠⁠

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Тема различных ТВ-боксов очень актуальна в наше время. За весьма приемлемый прайс, им можно найти кучу применений: просмотр видеосервисов на старых телевизорах, использование в качестве тонкого клиента, накатывание линукса и превращение бокса в медиасервер — из всего этого мы делаем вывод, что эти девайсы весьма полезны в повседневной жизни. Однако есть ещё одно применение, которое до сих пор раскрыто не полностью: и это конечно же игры! Железо современных фирменных Smart телевизоров LG и Samsung до сих пор остается достаточно слабым и едва ли тянет 2D игры, чего уж там говорить о 3D, а телевизоры на Android а-ля DEXP достаточно быстро устаревают. Сегодня я купил рабочий TV-бокс на андроиде всего за 500 рублей, специально для применения в качестве игровой консоли. Что из этого получилось? Читайте в статье!

Что я купил?

TV-боксы как отдельные медиаустройства появились ещё в начале 2010х годов. В то время, это были весьма слабенькие и недорогие устройства для выполнения базовых мультимедийных задач. Большинство пользователей продолжали пользоваться обычными, не Smart-телевизорами, поэтому в какой-то степени, ТВ-приставка была «must have» устройством. По большей части, производители таких устройств называли их не просто мультимедийными устройствами, а микропк размером с флэшку — и ничуть не лукавили, ведь зачастую на них можно было накатить полноценный дистрибутив Linux!

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



К середине 2010х годов, Smart-телевизоры начали получать гораздо более широкое распространение: тут и доступные LG c webOS, и Samsung, которые переориентировали Tizen с мобилок на телевизоры, и китайские производители как Haier, которые встраивали ТВ-бокс прямо в основную плату устройства. Однако основной проблемой смарт-телевизоров оставалась их относительная слабость и закрытость: дополнительная ТВ-приставка умела банально больше. Именно поэтому, с 2016 года, некие компании, MXQ и X96, начали клепать боксы различных конфигураций: на разных чипсетах, с разными конфигурациями памяти, доступными разъемами и.т.п.

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Основной проблемой подобных приставок является их поддержка. Конечно популярные бренды так или иначе выпускают обновления прошивок и выкладывают всю необходимую информацию у себя на сайтах. Однако в одном корпусе могут выпускаться кучу разных ревизий одного и того же устройства: где-то чипсеты отличаются, где-то модули Wi-Fi, а где-то меняют модули NAND, каждый из которых требует свой драйвер. Кроме того, эти гаджеты очень не любят резкого отключения света, из-за чего они зачастую уходят в вечную загрузку — или Bootloop. Из-за всех перечисленных факторов, поиск прошивки может обернуться настоящей проблемой и большинство людей банально не хотят с этим заморачиваться, выставляя свои гаджеты на Авито или Юлу — за сущие копейки, лишь бы купили :)

Так получилось и с сегодняшним устройством. Продавец выставил на продажу ТВ-бокс Rombica V003 за 500 рублей, также известный, как MXQ 4K. Это достаточно бюджетное устройство 2016 года выпуска, которое, тем не менее, обладает весьма занимательными характеристиками:

  • Процессор: RockChip RK3229, 4х-ядерный чипсет с архитектурой Cortex-A7, который работает на максимальной частоте до 1.5ггц.

  • GPU: Mali400MP3. Судя по даташиту, в чипе используется три ядра Mali400, которые вкупе могут давать относительно неплохую производительность в 3D приложениях (но не стоит ждать слишком многого).

  • ОЗУ: 1гб DDR3 двумя банками.

  • ПЗУ: 8гб NAND памяти Micron (в моей ревизии).

  • Видеовыходы: AV (тюльпаны) и HDMI вплоть до 4K. Производитель обещает возможность воспроизведения фильмов в полноценном 4К без каких либо проблем, но за 4K игры можно забыть :) Хоть бы в 720p нормально работали.

  • Интерфейсы: 4x USB 2.0 разъема, ИК-порт для пульта, Wi-Fi. Bluetooth нет (но часто встречается в других похожих боксах).

  • Питание: 5В 2А. При этом, теоретически приставке хватит и блока на 1А.



Небезынтересно, да? Среди заявленных продавцом неисправностей: «не загружается». Это мне уже нравится, заказываю лот!

Что же в нём было не так?

После включения, устройство действительно висело на доставке: бесконечная анимация загрузки и никакого движения дальше. Сначала я разобрал устройство, благо разбираются они проще простого: 4 винтика на обратной стороне корпуса. Вытаскиваем плату и наблюдаем следующую картину:

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Всё весьма компактненько. У процессора «высокий» TDP: аж 5 ватт, что к нему даже приклеили маленький радиатор. После небольшого анализа платы, сразу был найден UART для потенциальной диагностики и кнопка RESET, благодаря которой мы можем попасть в Maskrom/Recovery. У устройств на базе процессоров RockChip, как я уже рассказывал в предыдущей статье про ТВ-стики, есть специальный режим для прошивки MaskRom, благодаря которому есть возможность залить прошивку в «мертвый» девайс (т.е с красным глазком при включении питания). Активируется он с помощью замыкания пинов на микросхеме NAND, каких — можно узнать в даташите на ваш чип (любые I/O линии между собой).

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Наш бокс назвать полностью нерабочим нельзя: у него как минимум жив загрузчик, а значит он сможет загрузится с SD-карточки. Флэшку можно подготовить с помощью фирменной программыSD Firmware Tool: выбираем подходящий img образ с прошивкой, выбираем флэшку и жмём Create, затем вставляем флэшку в устройство и включаем ТВ-бокс: приставка сама обновится. В процессе работы над устройством, я пытался зашить несколько официальных прошивок от MXQ 4K, брата-близнеца нашего устройства. К сожалению, стартовала лишь одна прошивка, да и то зависала на обновлении. Значит, самое время посетить официальный сайт производителя!

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка
Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Он нашёлся не сразу, а лишь по линку на официальном форуме. К сожалению, все ссылки на прошивки оказались нерабочими, поэтому расскажу вам о небольшом лайфхаке про поиск прошивок на неизвестные устройства. Видим доменfiles.rombica.ru? Вставляем его в archive.org, идём на вкладку URLs и ищем прошивку. Вполне возможно, что Wayback Machine сохранил архив с вашей прошивкой и даст его скачать. За пару часиков: скорость отдачи у архива очень медленная к сожалению.

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка
Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Тем временем, я вернулся к ТВ-боксу и обнаружил, что он в общем-то загрузился. Несмотря на то, что по всем признакам он висел в бутлупе, у приставок на ранних процессорах RockChip есть неприятная особенность: они весьма долго грузятся при обычной загрузке и очень долго грузятся при первой загрузке (около 15-20 минут). В этом и была «неисправность»: продавцу лень было ждать первой загрузки, из-за чего он забраковал девайс и выставил его за копейки на продажу. Я ещё раз сделал Factory Reset через рекавери и подождал всё те же 20 минут. После этого, девайс стал грузится гораздо быстрее.

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Я не стал называть этот процесс ремонтом, т.к по сути девайс был рабочим. Однако на всякий случай прошивку я скачал с архива (за часа два) и выложилсюда: авось у кого-то из читателей есть подобный гаджет и ему нужна будет прошивка!

Что мы имеем?

На устройстве установлен Android 6 Marshmallow. Хоть это уже и достаточно старая версия, но она до сих пор вполне себе поддерживается современными приложениями. Ни о каких свежих играх и речи не идёт, но эмуляторы и мобильную годноту середины десятых он должен потянуть без каких-либо проблем.

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Из коробки тут стоит лаунчер от самой Rombica. Но, очевидно, накатить можно любой: хоть сразу ретроарч ставь! Кроме того, из коробки стоит Kodi, что позволяет использовать девайс как полноценный медиацентр, но в этой статье мы коснемся только темы игр.

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Для игр нам нужен будет геймпад: не с пульта ж мы играть будем. У Android в этом плане всё хорошо: есть как поддержка XInput-устройств (геймпад Xbox 360), так и DirectInput. Но геймпады у ритейлеров сейчас такие дорогие… идём опять же на онлайн-барахолки и ищем новый джой за копейки. И такой нашёлся: от некой российской консоли GS GameKit! Геймпад с вибрацией и Bluetooth всего за 300 рублей. Заказал, поигрался — вроде норм. Геймпад конечно с кривой прошивкой, дабы его нормально увидел ПК/консоль, нужно одновременно зажать правый триггер и X. После этого он нормально определяется и работает.

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Важно отметить и то, что разрешение HDMI можно в любой момент изменить в настройках. Эдакий Performance-mode, как у Xbox: если игра лагает в 1080p, то можно скинуть разрешение до 720p и попробовать поиграть с комфортом.

Вроде все готово. Геймпад у нас есть, бокс работает стабильно. Во что мы сможем поиграть и в каком качестве? Предлагаю узнать!

Нативные игры

Вот с нативными играми как раз возникают некоторые проблемы. Несмотря на то, что бокс можно назвать достаточно производительным, обратная совметимость Android уже давно стала набором костылей и пшиком. Я всю прошлую ночь искал подходящие версии старых приложений и игр, которые адекватно работали бы на 6 андроиде — и такие нашлись. Я рассматривал только действительно достаточно тяжелые игры, поскольку аркады, очевидно, консолька потянет без проблем.

Не забывайте про лайфхак с 720p: Mali400 хоть и неплохой GPU по мобильным меркам, ждать от него 4K графики не стоит.

GTA Vice City идёт отлично в 720p и на высоких настройках детализации. Средний FPS колеблется на уровне 30, при этом никаких особых рывков или проседов при большом количестве машин в кадре нет. Кроме того, игра сразу подхватывает любые геймпады и работает без каких либо проблем, будто Вы проходите игры на ps3/x360.

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Несколько хуже идёт Dead Trigger. Несмотря на игры с разрешением, игра умудряется работать в ~15 кадров. Причем упор явно не в проц: в свое время эта игра свободно шла даже на одноядерных мобильных чипсетах. Скорее всего, это «проапгрейженная» версия до Unity 5, у Unity 4 рендерер был ощутимо легче для слабых мобилок и на процессор нагрузка была несколько ниже.

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка
Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Raging Thunder 2 — одна из самых годных гоночек начала десятых для мобилок. Кроме того, она полностью поддерживает геймпад, что нельзя не записать в плюсики. Идет отлично и в 1080p, 30-40 кадров точно есть, никаких рывков.

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



В процессе подготовки материала, я хотел запустить еще как минимум Asphalt 6, Asphalt 7, Moder Combat, NOVA — но многие игры Gameloft тех лет безнадежно «сломались» на версиях Android выше 5. На rk3229 есть Android 4.4, но будете ли Вы даунгрейдить консоль для этого? Не думаю. Давайте перейдем к лакомке, той самой, которая может отговорить вас от покупки лагающего Game Stick Lite — эмуляторам!


Эмулятгоры

И вот здесь, бокс раскрывается на все сто. На старых консолях не нужен был мощный GPU, по правде сказать, с графикой PS1 справится процессор и в софтварном режиме. И здесь наши 4 Cortex-A7 ядра раскрываются на полную: результаты действительно неплохие!

Начинаем с NES и SMD. Оба работают отлично, под обе есть куча эмуляторов, я лично пользуюсь NES.emu и MD.emu. Оба эмулятора легко подхватывают несколько геймпадов, а игры работают без каких либо проблем и пропуска кадров/заедания звука. Ну, это для rk3229 ещё цветочки!

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка
Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Переходим к куда более тяжелой консоли для эмуляции: Nintendo 64. Её едва ли вытягивают бюджетные мобилки тех лет, чего уж там думать про бюджетный бокс. Но нет! На удивление, N64.emu показал себя очень достойно, Mario Kart идёт просто отлично. Не могу говорить за все игры, но системселлеры N64 думаю можно будет пройти без проблем.

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка
Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Если бокс смог раскусить N64 как семечки, то сможет и пс1. Включаем хардварный рендеринг, отключаем эмуляцию BIOS и запускаем Porsche Unleashed: игра идёт максимально плавно. Для любителей графона можно поиграть с разрешением рендеринга, при софтварном рендерере бокс может не вытянуть 1080p, но при аппаратном — легко.

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Неплохо идёт и Quake 2. Но управление в этой игре просто жесть какая-то :)

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Ну и конечно же я не мог вспомнить про ту консоль, которую Вы ждёте: PSP! И тут я вам скажу, что результат переменный. Местами консоль откровенно слабовата для сонивской портативки, однако 2D должны идти хорошо. 3D идут не все: например, NFS MW хоть и работает в 20 кадров, но геймплей слишком кисельный для того, чтобы это можно было назвать играбельным (неверная реализация таймера в игре?).

Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка
Полноценная игровая консоль за 500 рублей. Может ли полурабочий ТВ-бокс стать игровой платформой? Гаджеты, Мобильные игры, Игры, Консоли, Android, Дешево, Покупка, Планшет, 3D, Длиннопост, Тв-приставка, Игровая приставка



Выводы

Итак, давайте подведем итоги, что же мы получаем за 500 рублей (800, если брать еще геймпад):

  • Игры с 16-битных консолей, NeoGeo и другие не сильно тяжелые консоли идут отлично. Насколько мне известно, на Game Stick Lite бывают подлагивают и 16-битные игры в том числе.

  • Игры с консолей уровня PS1/N64 идут вполне неплохо, хотя может потребоваться копание в конфигах. У Game Stick Lite, насколько мне известно, есть подтормаживания в некоторых играх, но и эта консоль потенциально не застрахована от них. Кроме того, консоль должна потянуть и Dreamcast.

  • Игры с PS2/GameCube сразу идут мимо. Бокс слишком слаб для них. У PSP еще есть шанс — зависит от того, во что вы играете.

  • Нативные игры до 2015 года идут неплохо. Может потребоваться поиграться с разрешением или таскать с собой мышку в некоторых играх, но в целом поиграть есть во что, причём в честных 1080p!

  • Возможность смотреть кино по сети в 4K разрешении. Тоже неплохой плюсик в общую копилку.



Такой девайс «за 3 копейки» должен неплохо подойти либо ребенку, либо любителю ретро-игр, особенно если накачать туда ромсеты с любимых игровых консолей. Любителям современных мобильных игр такая консоль не подойдет совсем, но применение ей явно найти можно в любом случае. Я уже знаю, куда отправить этот ТВ-бокс после статьи: накачать ромов и отправить на дачу! Ну а вас, я возможно мотивирую зайти на онлайн-барахолку и попытаться поискать похожий TV-бокс за копейки и для себя! Это будет гораздо лучше, чем он отправится на помойку будучи забытым навсегда…

Показать полностью 24
[моё] Гаджеты Мобильные игры Игры Консоли Android Дешево Покупка Планшет 3D Длиннопост Тв-приставка Игровая приставка
166
Rosee1Vetements
2 года назад

Ищу игру⁠⁠

ищу игру на андроид, помню как то играл, платформер пиксельный(или воксельный) на выбор дают рыцаря лучника и мага, и ты персонажем прыгаешь в перед, три дороги, прыжки совершаются по диагонале, по квадратам, на каких то бандюги стоят, на каких то ловушки, что это за игра я устал искать?

Ищу игру Игры Android Платформер Пиксельные игры 3D Волшебники Рыцари Лучники Текст
3
9
KorgiGames
KorgiGames
3 года назад
Кубическая Лига

До и после нашествия зомби⁠⁠

Арт для новой локации в нашей игре "Crossy Granny".

Вся графика в игре выполнена в воксельном стиле.

[моё] Видеоигра Инди игра Gamedev Разработка Арт Voxelart 3D Unity Android Инди Мобильные игры Видео Без звука
2
2
Idit
3 года назад
Лига Потерянных Игр

Ламповая игра про мальчика у которого упал космический корабль⁠⁠

Ребят, нужна помощь


Вчера ночью вспомнил про одну игру на телефон, пол ночи искал эту игру, но так и не нашел


Если описывать что за игра, то:

1) В ней была 3д графика, но низкополиогональная (low poly, если кому-то так удобнее)

2) У камеры был вид сверху (тип как в доте или диабло, но ее можно было поворачивать вроде)

3) Сюжет был в том что у главного героя был космический корабль и он упал на какую-то планету, планета оказалась обитаема и на ней были растения и люди так скажем и главный герой ходил по планете в поисках обломков своего корабля что бы его восстановить, а так же параллельно общался с npc и помогал им

4) Передвижение в игре вроде бы было по клеточкам, но сейчас чего-то сомневаюсь в этом

5) Сами локации точно были по делены на клеточки и их размер иногда был разный, могла быть локация допустим 4 на 4 клеточек, а могла быть 5 на 5 или даже 6 на 7 наверно, единственное что везде была клеточка выхода на другую локацию

6) В игре можно было рубить деревья на сколько я помню, так же был крафт, на сколько я помню можно было крафтить инструменты и костер вроде, было еще но сейчас не помню

7) Так же в игре вроде была система голода, жажды и холода (на счет еды 100%, а на счет жажды и холод ток на каких 65% уверен)

8) Факт который вряд ли поможет, но в игре была очень ламповая атмосфера и приятная музыка

9) Игра была на Андройде и бесплатная на сколько я помню, играл я в нее в году 2018 вроде


Если что я пролистал все ранее установленные игры и приложения у себя в плеймаркете, но так и не нашел, а пролистал раз 10 минимум

Есть подозрения что ее удалили из плеймаркета


Спасибо всем кто поможет!
Показать полностью
[моё] Android 3D Игры на Android Low poly Вид сверху Текст
10
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии