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

Арканоид Пикабу

Арканоид, Аркады, Веселая

Играть

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

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

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

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

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

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

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

Gamedev + Самолет

С этим тегом используют

Инди Разработка Инди игра Игры Unity Компьютерные игры YouTube Авиация Полет Фотография Аэропорт Вертикальное видео Гражданская авиация Пилот Все
8 постов сначала свежее
4
Adarov
Adarov
10 месяцев назад

Самолет-птица⁠⁠

Самолет-птица Арт, Рисунок, Творчество, Искусство, Цифровой рисунок, Самолет, 2D, Digital, Графика, Gamedev, Game Art, Обои на рабочий стол, Компьютерная графика, Персонажи, Животные, Необычное, Художник, Современное искусство, Милота, Птицы
Показать полностью 1
[моё] Арт Рисунок Творчество Искусство Цифровой рисунок Самолет 2D Digital Графика Gamedev Game Art Обои на рабочий стол Компьютерная графика Персонажи Животные Необычное Художник Современное искусство Милота Птицы
2
38
andreibelianin
andreibelianin
11 месяцев назад
TECHNO BROTHER

Ответ на пост «Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году?»⁠⁠1

Когда я учился в 9 классе, а это был вроде 2003 год, начали заниматься программированием на информатике, хотя я начал изучать его чуть раньше. Нам объясняли, как на бейсике отрисовать точку, круг, квадрат, и прописав несколько координат, линиями нарисовать многоугольник в виде разных лодочек. Меня это так увлекло, ведь мы на алгебре как раз строили графики, а задав нужную функцию, вывести точки в виде графика, нет ничего проще. В общем первой моей программой был "решебник" для проверки верности моих построений графиков. Потом втянулся, нажал на кнопочку, нарисована ось координат с необходимым масштабом и штрих отметками, перерисовка при изменении масштабов окна и т.д. были, конечно проблемы с тормозами, ведь если точки рисовать достаточно плотно друг к другу, происходит эффект анимации рисования, а если точки редко, отрисовка быстрая, но приблизительная. В общем довел эту программу практически до уровня примитивного графического редактора, можно сказать даже некое подобие графического движка, способного выводить необходимые 2д модели, сохраняя их в файле и пользоваться ими в дальнейшем как спрайтами. Сделал на нем даже две игры, лабиринт, по которому бегает колобок, и пятнашки. Когда учитель информатики увидел мои работы, он конечно мне отлично поставил за будущие года, так как я там ничего нового больше не узнаю, но в то же время предложил заниматься со мной факультативно. Хоть он мне и сказал, что я изобрел велосипед, и все это уже реализовано в DX, но меня преисполняла гордость, что допер до этого сам. Тем не менее, я купил книжку по директу, и тут понеслось. Как же изменилось качество графики, в основном из за смены буферов. Затем разобрался с фотошопом и 3dsmax. Вуаля, и первая полноценная 3d игра, где все тот же лабиринт из рельс и вагонетки, в которой помимо стандартного прохождения, нужно еще переключать стрелки в нужном порядке, чтобы собирать золото. В общем игра не слишком захватывающая, но играл в нее чаще, чем в КС. Эх как же жаль что исходников не сохранилось.

Показать полностью
[моё] Опрос Горячее Ништяки Программирование Net 3D графика Игры Леталки Пилот Самолет Fw-190 Directx Gamedev Без звука Ответ на пост Текст
6
516
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER
11 месяцев назад

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году?⁠⁠1

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Осторожно: Несмотря на кажущуюся сложность статьи о разработке целой 3D-игры с нуля, я постарался систематизировать и упростить материал так, чтобы понятно было любому заинтересованному читателю, даже если вы далеки от программирования в целом!

Статьи о разработке инди-игр — это всегда интересно. Но разработка чего-то абсолютно с нуля, без каких-либо движков или фреймворков — ещё интереснее! Почти всю свою жизнь, буквально с 13-14 лет меня тянет пилить какие-нибудь прикольные 3D-демки и игрушки. Ещё на первом курсе ПТУ я написал небольшую демку с 3D-вертолетиками по сети и идея запилить какие-нибудь прикольные леталки не покидала меня по сей день! Спустя 6 лет, в 22 года я собрался с силами и решил написать небольшую аркадную демку про баталии на самолетиках, да так, чтобы работало аж на видеокартах из 90-х — NVidia Riva 128 и 3DFX Voodoo 3! Интересно, как происходит процесс разработки игры с нуля — от первого «тридэ» треугольника, до работающей на реальном железе демки? Тогда добро пожаловать под кат!

❯ Мотивация


Друзья! Вижу, что вам очень заходит моя постоянная рубрика о том, как работали графические ускорители из 90-х «под капотом», где мы не только разбираем их архитектуру, но и пишем демки на их собственных графических API. Мы уже успели с вами рассмотреть 3Dfx Voodoo, S3 ViRGE и мобильный PowerVR MBX и, думаю, теперь пришло время рассмотреть инструменты для разработчиков игр под Windows из 90-х. Про «старый» OpenGL рассказывать смысла не вижу — до сих пор многие новички учатся по материалам с glBegin/glEnd и FFP (Fixed Function Pipeline), а спецификацию с описанием первой версии API можно найти прямо на сайте Khronos. Зато про «старый» DirectX информации в сети очень мало и большинство документации уже потёрли даже из MSDN, хотя в нём было много чего интересного!

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Вероятно читатель спросит — зачем пилить что-то для компьютеров 90-х годов, если большинство таких машин (к сожалению) отправились на цветмет и «никто в своем уме» не будет ими пользоваться? Ну, ретро-компьютинг и программирование демок — это, во-первых, всегда интересно. Среди моих подписчиков довольно много ребят, которые ещё учатся в школе, а уже натаскали с барахолок Pentium III или Pentium IV и GeForce 4 MX440 и сидят, балдеют и играют в замечательные игрушки из нулевых на таких машинах с по настоящему трушным опытом, да и я сам таким был и остаюсь по сей день. Вон, мне даже dlinyj скидывал свои девайсы в личку, а я сидел и слюни пускал. Так что факт остаётся фактом — ретро-компьютинг становится всё более и более популярен — что не может не радовать!

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

А во-вторых — это челлендж для самого себя! Посмотреть на то, как делали игры «деды» и попытаться запилить что-то самому, не забыв об этом написать статью и снять интересное видео в попытке донести это как можно большему числу читателей и зрителей! Конечно сам DirectX6 в целом значительно проще DX12, но некоторые техники весьма заковыристые и для достижения оптимальной производительности приходится пользоваться хаками. Ну а почему именно леталки? Потому что, наверное, хотел бы когда-нибудь полетать :)

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Игру я решил писать на C#. Кому-то решение может показаться странным, но я уже не раз говорил, что это мой любимый язык, а при определенной сноровке — программы на нем работают даже под Windows 98. В качестве основного API для игры я выбрал DirectX 6, который вышел 7 августа 1998 года — за 3 года до моего рождения :)

Перед тем как что-то начинать делать, нужно определиться с тем, что нам нужно для нашей 3D-игры:

  • Графический движок или рендерер, работающий на базе Direct3D. В его задачи входит отрисовка геометрии, работа с освещением и материалами, отсечение моделей, находящихся вне поле зрения глаз, генерация ландшафтов из карт высот и т. п. Собственно, в нашем конкретном случае это графическим движком назвать сложно — никакого полноценного графа (иерархической структуры, как в Unity) сцены нет, толковой анимации тоже, зато есть довольно продвинутая система материалов :)

  • Звуковой движок на базе DirectSound. Здесь всё по классике: программный 3D-звук с эффектами типа «виу» и «вжух» с загрузкой звуковых дорожек из wav-файлов. Никакого стриминга звука с кольцевыми буферами и ogg/mp3 здесь не нужно!

  • Подсистема ввода, которая представляет из себя «получить состояние кнопки на клавиатуре» и «получить позицию курсора» :)

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




Как известно, в самолёте всё зависит от винта! Ну, или в нашем случае, от 3D-движка — поэтому предлагаю рассмотреть архитектуру нашего рендерера и заложить первые кирпичики в нашу 3D-игру!

❯ Графический движок


Поскольку C# — управляемый язык и напрямую дёргать COM-интерфейсы формально не может, а готовых обёрток для DirectX 6 по понятным причинам нет, мне пришлось писать свою. Простыми словами, обёртка обеспечивает слой совместимости между нативными библиотеками, написанными на C++ и управляемым кодом, написанном на C#/VB и т.п. Благо в мире .NET есть такое замечательное, но увы, забытое расширение плюсов, как С++/CLI, которое позволяет прозрачно смешивать нативный код и «байткод» .NET, благодаря которому разработка пошла значительно быстрее.

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Любой графический движок начинается с создания окна и инициализации контекста графического API (инициализации видеокарты, если простыми словами) для рисования в это самое окно. В случае Direct3D6 всё интереснее тем, что фактически здесь уже был свой аналог современного DXGI (DirectX Graphics Infrastructure — библиотека для управления видеокартами, мониторами в системе), который назывался DirectDraw. Изначально DDraw использовался для аппаратного ускорения графики на VGA 2D-акселеллераторах — тех самых S3 ViRGE и Oak Technology и предназначался в основном для операций блиттинга (копирования картинки в картинку), но в D3D ему выделили функции управления видеопамятью и поэтому они очень тесно связаны.

Инициализация начинается с создания так называемой первичной поверхности (которая будет отображаться на экран) и заднего буфера (в который будет рисоваться само изображение), или в терминологии современных API — Swap-chain.

DDSURFACEDESC rtDesc;
memset(&rtDesc, 0, sizeof(rtDesc));
rtDesc.dwSize = sizeof(rtDesc);
rtDesc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
rtDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE;
rtDesc.dwWidth = Width;
rtDesc.dwHeight = Height;
Guard(ddraw->CreateSurface(&rtDesc, &sSurf, 0));
Guard(sSurf->QueryInterface(IID_IDirectDrawSurface4, (LPVOID*)&sSurf4));

Теперь у нас есть окно, куда можно что-нибудь нарисовать!

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Но 3D мы пока рисовать не можем — ведь контекста D3D у нас всё ещё нет, благо создаётся он очень просто. Единственный момент: Z-буфер нужно создать перед созданием устройства, иначе работать он не будет.

DDSURFACEDESC zbufDesc;
memset(&zbufDesc, 0, sizeof(zbufDesc));
zbufDesc.dwSize = sizeof(zbufDesc);
zbufDesc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
zbufDesc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER | DDSCAPS_VIDEOMEMORY;
memcpy(&zbufDesc.ddpfPixelFormat, Window::zBufferFormat, sizeof(zbufDesc.ddpfPixelFormat));
zbufDesc.dwWidth = Width;
zbufDesc.dwHeight = Height;

IDirectDrawSurface* zTemp;
IDirectDrawSurface4* zSurface;
Guard(ddraw->CreateSurface(&zbufDesc, &zTemp, 0));
Guard(zTemp->QueryInterface(IID_IDirectDrawSurface4, (LPVOID*)&zSurface));

// Attach Z-Buffer to backbuffer
Guard(d3dSurface->AddAttachedSurface(zSurface));
Guard(d3d->CreateDevice(IID_IDirect3DHALDevice, surf, &device, 0));

Мы уже на полпути перед тем как нарисовать первый тридэ-треугольник: осталось лишь объявить структуру вершины и написать обёртки над… Begin/End! Да, в Direct3D когда-то тоже была концепция из OpenGL, а связана она с тем, что в видеокартах тех лет вершины передавались не буферами, а по одному, уже трансформированные. Подробнее об этом можно почитать в моей статье о S3 ViRGE:

public value struct Vertex
{
public:
float X, Y, Z;
float NX, NY, NZ;
D3DCOLOR Diffuse;
float U, V;
};

...

Vertex[] v = new Vertex[3];
v[0] = new Vertex()
{
X = 0,
Y = 0,
Z = 0,
U = 0,
V = 0
};
v[1] = new Vertex()
{
X = 1,
Y = 0,
Z = 0,
U = 1,
V = 0
};
v[2] = new Vertex()
{
X = 1,
Y = 1,
Z = 0,
U = 1,
V = 1
};

dev.BeginScene();
dev.Begin(PrimitiveType.TriangleList, Device.VertexFormat);
dev.Vertex(v[0]);
dev.Vertex(v[1]);
dev.Vertex(v[2]);
dev.End();
dev.EndScene();

И вот, у нас есть первый треугольник! Читатель может спросить — а где же здесь игра и причём здесь треугольники, мы же не на уроке геометрии… Дело в том, что вся 3D-графика в современных играх строится из треугольников. Любая моделька на экране — это набор из маленьких примитивов, которые в процессе рисования на экран подвергаются процессу трансформации — преобразованию из мировых координат (то есть абсолютной позиции в мире) сначала в координаты камеры (таким образом, при движении камеры, на самом деле двигаются объекты вокруг камеры), а затем и в экранные координаты, где происходит перспективное деление и каждый треугольник начинает выглядеть как трёхмерный…

Таким образом, из тысяч треугольников можно описать самые разные объекты — от трёхмерной модели моих любимых «жигулей», до персонажей.

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

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

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

И вот с текстурами ситуация в D3D6 не менее интересная и очень похожа на современные GAPI: нам необходимо сначала создать текстуру в системной памяти (ОЗУ) и только затем скопировать её в видеопамять. Причём форматов текстур не слишком много. Я выбрал RGB565 (16-битный), хотя есть поддержка и форматов со сжатием — тот-же S3TC.

bool hasMips = mipCount > 1; // If texture has more than 1 mipmap, then create surface as complex, if not - then as single-level.

DDSURFACEDESC2 desc;
memset(&desc, 0, sizeof(desc));
desc.dwSize = sizeof(desc);
desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_TEXTURESTAGE | DDSD_CKSRCBLT;
desc.ddsCaps.dwCaps = DDSCAPS_TEXTURE | (hasMips ? (DDSCAPS_MIPMAP | DDSCAPS_COMPLEX) : 0);
desc.ddsCaps.dwCaps2 = DDSCAPS2_TEXTUREMANAGE;
desc.ddckCKSrcBlt.dwColorSpaceHighValue = 0;
desc.ddckCKSrcBlt.dwColorSpaceLowValue = 0;
memcpy(&desc.ddpfPixelFormat, DXSharp::Helpers::Window::opaqueTextureFormat, sizeof(desc.ddpfPixelFormat));
desc.dwWidth = Width = width;
desc.dwHeight = Height = height;

IDirectDrawSurface4* surf;
IDirect3DTexture2* tex;

IDirectDraw4* dd2;
window->ddraw->QueryInterface(IID_IDirectDraw4, (LPVOID*)&dd2);

Guard(dd2->CreateSurface(&desc, &surf, 0));
Guard(surf->QueryInterface(IID_IDirect3DTexture2, (LPVOID*)&tex));

А чтобы её использовать, нужно «сказать» об этом видеокарте с помощью биндинга текстуры к текстурному юниту. Те, у кого были в свое время 3dfx Voodoo, наверняка поймут, о чём я :)

Guard(device->SetTexture(stage, tex->texture));

И вот у нас уже есть треугольник с текстурой! Осталось лишь домножить его матрицы трансформации, перспективную матрицу…

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Реализуем простенький загрузчик моделей из формата SMD (GoldSrc, Half-Life или CS1.6), который грузит статичные модельки без скиннинга, а также загрузчик текстур из bmp и вот — мы уже имеем 3D-модельку самолёта с текстурой.

for(int i = 0; i < smd.Triangles.Count; i++)
{
uint c = new Color(255, 255, 255, 255).GetRGBA();

for (int j = 0; j < 3; j++)
vert[i * 3 + j] = new Vertex()
{
X = smd.Triangles[i].Verts[j].Position.X,
Y = smd.Triangles[i].Verts[j].Position.Y,
Z = smd.Triangles[i].Verts[j].Position.Z,
U = smd.Triangles[i].Verts[j].UV.X,
V = smd.Triangles[i].Verts[j].UV.Y,
NX = smd.Triangles[i].Verts[j].Normal.X,
NY = smd.Triangles[i].Verts[j].Normal.Y,
NZ = smd.Triangles[i].Verts[j].Normal.Z,
Diffuse = c
};
}

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Возможно в каких-то играх и не нужно небо, но в леталках — уж точно необходимо. И без учёта динамических облаков, здесь есть две популярные техники:

Возможно в каких-то играх и не нужно небо, но в леталках — уж точно необходимо. И без учёта динамических облаков, здесь есть две популярные техники:

  • Sky-sphere, которая заключается в том, что небо представляет из себя полусферу с наложенной поверх текстурой неба в специальном формате. Такую полусферу очень часто крутят вокруг своей оси по оси Y, создавая эффект плывущих облаков. И получается вполне себе симпатичное анимированное небо. Иные варианты включают в себя многослойные реализации, где крутится могут лишь облака, когда статичные элементы фона остаются на месте.

  • Skybox — здесь суть простая, вокруг камеры рисуется «коробка» с вывернутыми в обратную сторону треугольниками, на которых рисуется текстура одной из сторон панорамы с выключенной записью в Z-буфер. Получается не только симпатично, но ещё и быстрее Skysphere на слабом железе, правда скайбоксы обычно статичным. Скайбоксы можно найти почти везде: например, в Counter-Strike, Half-Life.

    На скриншоте ниже можно увидеть пример скайбокса:

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост



Я выбрал скайбоксы. Реализация — проще пареной репы:

materials[0].Texture = TextureLoader.LoadFromImage(string.Format("{0}{1}_bk.bmp", Path, name));
materials[1].Texture = TextureLoader.LoadFromImage(string.Format("{0}{1}_ft.bmp", Path, name));
materials[2].Texture = TextureLoader.LoadFromImage(string.Format("{0}{1}_lf.bmp", Path, name));
materials[3].Texture = TextureLoader.LoadFromImage(string.Format("{0}{1}_rt.bmp", Path, name));
materials[4].Texture = TextureLoader.LoadFromImage(string.Format("{0}{1}_up.bmp", Path, name));
materials[5].Texture = TextureLoader.LoadFromImage(string.Format("{0}{1}_dn.bmp", Path, name));

....

Engine.Current.Graphics.DrawMesh(mesh, 0, 6, v, new Vector3(0, 0, 0), new Vector3(1, 1, 1), materials[1]); // Forward
Engine.Current.Graphics.DrawMesh(mesh, 6, 12, v, new Vector3(0, 0, 0), new Vector3(1, 1, 1), materials[3]); // Right
Engine.Current.Graphics.DrawMesh(mesh, 12, 18, v, new Vector3(0, 0, 0), new Vector3(1, 1, 1), materials[0]); // Back
Engine.Current.Graphics.DrawMesh(mesh, 18, 24, v, new Vector3(0, 0, 0), new Vector3(1, 1, 1), materials[2]); // Left
Engine.Current.Graphics.DrawMesh(mesh, 24, 30, v, new Vector3(0, 0, 0), new Vector3(1, 1, 1), materials[4]); // Left

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Но летать в пустом мире неинтересно и для этого нам нужен хотя бы ландшафт, который называется Terrain. Концепция Terrain простая — у нас есть карта высот, каждый пиксель который описывает высоту той или иной точки.

Мы проходимся по всей картинке и строим сетку треугольников, где высота определяется именно соседними пикселями на этой самой карте высот. На практике это выглядит так:

for (int i = 1; i < bmp.Width - 1; i++)
{
for(int j = 1; j < bmp.Height - 1; j++)
{
float baseX = (float)i * XZScale;
float baseZ = (float)j * XZScale;

// Transform vertices
verts[vertOffset] = new DXSharp.D3D.Vertex()
{
X = baseX,
Y = ((float)bmp.GetPixel(i, j).R / 255.0f) * YScale,
Z = baseZ,
U = 0,
V = 1 * TextureScale,
NY = 1
};
verts[vertOffset + 2] = new DXSharp.D3D.Vertex()
{
X = baseX,
Y = ((float)bmp.GetPixel(i, j + 1).R / 255.0f) * YScale,
Z = baseZ + XZScale,
U = 0,
V = 0,
NY = 1
};
verts[vertOffset + 1] = new DXSharp.D3D.Vertex()
{
X = baseX + XZScale,
Y = ((float)bmp.GetPixel(i + 1, j + 1).R / 255.0f) * YScale,
Z = baseZ + XZScale,
U = 1 * TextureScale,
V = 0,
NY = 1
};
verts[vertOffset + 3] = new DXSharp.D3D.Vertex()
{
X = baseX,
Y = ((float)bmp.GetPixel(i, j).R / 255.0f) * YScale,
Z = baseZ,
U = 0,
V = 1 * TextureScale,
NY = 1
};
verts[vertOffset + 4] = new DXSharp.D3D.Vertex()
{
X = baseX + XZScale,
Y = ((float)bmp.GetPixel(i + 1, j).R / 255.0f) * YScale,
Z = baseZ,
U = 1 * TextureScale,
V = 1 * TextureScale,
NY = 1
};
verts[vertOffset + 5] = new DXSharp.D3D.Vertex()
{
X = baseX + XZScale,
Y = ((float)bmp.GetPixel(i + 1, j + 1).R / 255.0f) * YScale,
Z = baseZ + XZScale,
U = 1 * TextureScale,
V = 0,
NY = 1
};

vertOffset += 6;
}
}

А результат — такой! Это самый простой кейс с Terrain'ом: в реальных играх, где ландшафт достаточно большой, его обычно бьют на так называемые патчи и дальние участки ландшафта упрощают с помощью специальных алгоритмов. Таким образом построены ландшафтры, например, в TES Skyrim.

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

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

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Этот способ даёт возможность использовать всего лишь две текстуры за один проход, в современных играх используется сплат-маппинг, позволяющий использовать более 4х-текстур за один проход!

Context.SetTextureStageState(1, (int)TextureStageState.AlphaOp, (int)TextureStageOp.Modulate);
Context.SetTextureStageState(1, (int)TextureStageState.AlphaArg1, (int)TextureArgument.Texture);
Context.SetTextureStageState(1, (int)TextureStageState.AlphaArg2, (int)TextureArgument.Texture);

Context.SetTextureStageState(0, (int)TextureStageState.ColorOp, (int)TextureStageOp.SelectArg1);
Context.SetTextureStageState(0, (int)TextureStageState.ColorArg1, (int)TextureArgument.Texture);
Context.SetTextureStageState(0, (int)TextureStageState.ColorArg2, (int)TextureArgument.Texture);

Context.SetTextureStageState(1, (int)TextureStageState.ColorOp, (int)TextureStageOp.BlendDiffuseAlpha);
Context.SetTextureStageState(1, (int)TextureStageState.ColorArg1, (int)TextureArgument.Texture);
Context.SetTextureStageState(1, (int)TextureStageState.ColorArg2, (int)TextureArgument.Current);

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Но тем не менее, выглядит вполне прикольно. Однако текстуры вдали выглядят слишком грубо и отдают пикселями. Ретро-стайл скажете вы? Согласен, но фильтрация и мипмаппинг здесь необходимы! Мип-маппинг — это техника, которая делит большую текстуру на несколько небольших разного размера. Каждый размер называется mip-уровнем и в два раза меньше прошлого: таким образом, у текстуры 256x256 9 уровней: 256x256, 128x128, 64x64 и так до 1x1. Мой самопальный конвертер текстур в собственный формат заранее «запекает» все мип-уровни, дабы быстро грузить текстуры с медленных HDD, а линейная фильтрация с мипмаппингом позволяет сгладить текстуры вдали, дабы они не резали глаза:

device->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTFP_LINEAR);
device->SetTextureStageState(0, D3DTSS_MINFILTER, D3DFILTER_LINEAR);
device->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DFILTER_LINEAR);

device->SetTextureStageState(1, D3DTSS_MIPFILTER, D3DTFP_LINEAR);
device->SetTextureStageState(1, D3DTSS_MINFILTER, D3DFILTER_LINEAR);
device->SetTextureStageState(1, D3DTSS_MAGFILTER, D3DFILTER_LINEAR);

Ну и давайте же посадим немного деревьев на наш ландшафт! Для этого я добавил псевдослучайное добавление деревьев и кустов при генерации геометрии ландшафта:

if (rand.Next(0, 32) % 8 == 0)
foliageBatches.Add(new FoliagePlacement()
{
Mesh = foliage[rand.Next(0, foliage.Length)],
Position = new Vector3(baseX, ((float)bmp.GetPixel(i, j).R / 255.0f) * YScale, baseZ)
});

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Упс, наши деревья — черные! А всё потому, что у них нет альфа-канала, благодаря которому видеокарта может отделить прозрачные пиксели текстуры от непрозрачных. Полноценный альфа-блендинг (полупрозрачность) здесь слишком дорогой, поэтому приходится использовать технику, называемую колоркеями (Color key). Техника очень схожая с Chromakey, благодаря которым вырезают фон из видео, но чуть попроще (тем, что цвет прозрачности фиксированный, без Threshold). У нас есть определенный цвет, который считается прозрачным и не используется во всей картинке. Нередко это Magenta, в моём случае — полностью чёрный:

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Включаем колоркей и наслаждаемся прозрачными деревьями на фоне ландшафта!

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Ой-ой, а FPS то успел просесть с 1.000 до 50 из-за большого количества DIP'ов (и не очень хорошей работе современных GPU с старыми гапи). Время оптимизаций! Пока что нам хватит обычного Frustum culling'а, также известного как «отсечение по пирамиде видимости». Суть алгоритма простая: из матрицы вида и проекции строятся 6 плоскостей, каждая из которых описывает одну из сторон системы координат: левая, правая, верхняя, нижняя, ближняя и дальняя. Таким образом, делая обычную проверку нахождения точки в World-space и одной из плоскостей, мы можем отсечь невидимую глазам геометрию и не тратить ресурсы GPU и CPU на отрисовку невидимой геометрии:

public void Calculate(Matrix viewProj)
{
float[] items = viewProj.Items;
Planes[0] = new Vector4(items[3] - items[0], items[7] - items[4], items[11] - items[8], items[15] - items[12]);
Planes[0].Normalize();
Planes[1] = new Vector4(items[3] + items[0], items[7] + items[4], items[11] + items[8], items[15] + items[12]);
Planes[1].Normalize();
Planes[2] = new Vector4(items[3] + items[1], items[7] + items[5], items[11] + items[9], items[15] + items[13]);
Planes[2].Normalize();
Planes[3] = new Vector4(items[3] - items[1], items[7] - items[5], items[11] - items[9], items[15] - items[13]);
Planes[3].Normalize();

Planes[4] = new Vector4(items[3] - items[2], items[7] - items[6], items[11] - items[10], items[15] - items[14]);
Planes[4].Normalize();
Planes[5] = new Vector4(items[3] + items[2], items[7] + items[6], items[11] + items[10], items[15] + items[14]);
Planes[5].Normalize();
}

// Allocation-less
public bool IsPointInFrustum(float x, float y, float z)
{
foreach(Vector4 v in Planes)
{
if (v.X * x + v.Y * y + v.Z * z + v.W <= 0)
return false;
}

return true;
}

public bool IsSphereInFrustum(float x, float y, float z, float radius)
{
foreach (Vector4 v in Planes)
{
if (v.X * x + v.Y * y + v.Z * z + v.W <= -radius)
return false;
}

return true;
}

Затем проверяем, находится ли сфера внутри каждой из 6 плоскостей и если нет, то не рисуем геометрию вообще:

if (mesh.Radius > 0 && !Camera.IsSphereVisible(position, mesh.Radius))
return;

С учётом всех оптимизацией, получаем 17-20 кадров на этом GPU что можно считать… весьма неплохим результатом, учитывая что всё ещё есть куда оптимизировать!

❯ Звук


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


Инициализация контекста DSound начинается с создания primary-буфера, который выступает в роли микшера перед отправкой звука на аудио-карту. Создаётся он довольно легко:

BufferDescription desc = new BufferDescription();
desc.Flags = BufferFlags.PrimaryBuffer | BufferFlags.Control3D;

primaryBuffer = Context.CreateSoundBuffer(desc);

После этого, в самом простом случае (без стриминга звука) нам достаточно лишь выгрузить PCM-поток на аудио-карту и начать его играть:

public WaveBuffer(WaveFormat fmt, byte[] pcmData)
{
BufferDescription desc = new BufferDescription();
desc.BufferBytes = (uint)pcmData.Length;
desc.Flags = BufferFlags.ControlDefault |BufferFlags.Software;
desc.Format = fmt;

buffer = Engine.Current.Sound.Context.CreateSoundBuffer(desc);
IntPtr data = buffer.Lock();
Marshal.Copy(pcmData, 0, data, pcmData.Length);
buffer.Unlock();

buffer.Play();
}

И всё! Да, вот так легко. BufferFlags.Software заменяется на Hardware, если необходимо аппаратное ускорение.

❯ Ввод


Пожалуй, это самая простая часть нашей статьи :) Как я уже говорил ранее, никакого особого функционала от модуля обработки ввода не нужно, лишь получать состояние кнопок — и с этим справляется лишь один метод…

[DllImport("user32.dll")]
static extern short GetAsyncKeyState(Keys vKey);

public static bool GetKeyState(Keys key)
{
return (GetAsyncKeyState(key) & 0x8000) != 0;
}


Ну что ж, основа готова, давайте перейдем к реализации самого геймплея!

❯ Пилим геймплей


Сначала нам нужно реализовать логику полёта нашего самолётика. В целом, в нашем конкретном кейсе всё просто — для поворотов используем углы Эйлера (лень было писать класс для кватерниона), считаем Forward-вектор (вектор, указывающий на направление прямо) и просто крутим повороты по оси X и Y в нужную сторону, прибавляя к позиции самолетика Forward вектор, умноженный на скорость полёта. Правда, с таким подходом есть некоторые проблемы: выполнить петлю не получится, поскольку Forward-вектор всегда смотрит именно прямо и не учитывает обратную направленность по оси X.

Rotation.X += -v * (YawSpeed * Engine.Current.DeltaTime);
Rotation.Y += h * (YawSpeed * Engine.Current.DeltaTime);

Rotation.Z = MathUtils.Lerp(Rotation.Z, 35 * -h, 4.0f * Engine.Current.DeltaTime);

Vector3 fw = GetForward();
Position.X += fw.X * (Speed * Engine.Current.DeltaTime);
Position.Y += fw.Y * (Speed * Engine.Current.DeltaTime);
Position.Z += fw.Z * (Speed * Engine.Current.DeltaTime);

Мы с вами хотим, чтобы камера всегда следила за нашим самолётиком. Для этого нужно взять Forward-вектор объекта и умножить каждую его компоненту на дальность от источника камеры. Эдакая бомж-версия lookat, правда с кучей ограничений, как минимум с Gimbal lock (потерей одной из осей поворота), а чтобы камера казалась плавной и придавала динамичности игре — мы делаем EaseIn/EaseOut эффект путём неправильного использования формулы линейной интерполяции :)

Vector3 forward = GetForward();
// Adjust camera
Engine.Current.Graphics.Camera.Position = new Vector3(Position.X + (forward.X * -12.0f),
Position.Y + (forward.Y * -12.0f) + 4.0f, Position.Z + (forward.Z * -12.0f));
Engine.Current.Graphics.Camera.Rotation.Y = MathUtils.Lerp(Engine.Current.Graphics.Camera.Rotation.Y, Rotation.Y + (yaw * 30), 3.0f * Engine.Current.DeltaTime);
Engine.Current.Graphics.Camera.Rotation.X = MathUtils.Lerp(Engine.Current.Graphics.Camera.Rotation.X, Rotation.X + (pitch * 5), 3.0f * Engine.Current.DeltaTime);
Engine.Current.Graphics.Camera.MarkUpdated();

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Ну, летать мы с вами уже можем… да, сильно по аркадному, но всё же :) Пришло время реализовать каких-нибудь соперников, а именно вражеские самолёты! Вообще, реализация нормального ИИ на самолетах, тем более в симуляторах — задачка очень нетривиальная, поскольку боты будут либо читерить, используя не те рычаги, что использует игрок, либо тупить и играть будет не сильно интересно. Вон, что «Варгейминг», что «Гайдзины» крутые в этом плане — я б ниасилил нормальных ботов для мультиплеерного симулятора или даже аркады :))

Вычисляем угол между позицией самолетика соперника и позицией игрока и интерполируем текущий угол по оси Y: получается вполне плавно, правда в нормальных играх ещё и компенсируют эффект «плаванья» вокруг игрока по синусоиде. Для подъёма и спуска по вертикали просто берём абсолютную величину выше/ниже:

float angle = (float)Math.Atan2(Game.Current.Player.Position.X - Position.X, Game.Current.Player.Position.Z - Position.Z);
float vert = MathUtils.Clamp(Position.Y - Game.Current.Player.Position.Y, -1, 1);
Rotation.X = MathUtils.Lerp(Rotation.X, vert * 35, 1.5f * Engine.Current.DeltaTime);

float prevY = Rotation.Y;
Rotation.Y = MathUtils.Lerp(Rotation.Y, angle * MathUtils.RadToDeg, 1.5f * Engine.Current.DeltaTime);
float diffY = Rotation.Y - prevY > 0 ? 1 : -1;
Rotation.Z = MathUtils.Lerp(Rotation.Z, 15 * -diffY, 4.0f * Engine.Current.DeltaTime);

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

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Ну что ж, демка у нас есть и в этот раз я подготовился получше, чем в статье про 3dfx Voodoo: я собрал целых два тестовых стенда и попросил у подписчиков потестировать демку на своих машинах с диковинным железом из 90-х и нулевых годов. Железо у нас такое:

  • Процессор: Celeron 600MHz Coppermine

  • ОЗУ: 192Mb SDRAM 133MHz

  • GPU: Asus GeForce 4 MX420

  • ОС: WinXP SP3

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

На Win98 я так и не смог нормально накатить драйвера на MSDC (Mass Storage Device Class — «флэшки»), поэтому «считерил» и поставил WinXP. Изначально я планировал ставить Win2000 — но там .NET 2.0 работает с косяками (при том что этот же самый .NET работает на Win98!).

❯ Тесты


Давайте же посмотрим, как демка идёт на трушном железе. Для наглядности, я решил записать видео.

Переходим к интегрированной графике, а именно к EEEPC 701 4G с Intel GMA 900 на борту! Те, кто знают что такое GMA, понимают насколько эти встройки не приспособлены для игр. Несмотря на наличие поддержки вторых шейдеров, из-за отсутствия аппаратного вершинного конвейера чип ничего не тянет. Но моя игрушка — исключение и она работает на удивление очень даже неплохо! 15-20 кадров точно есть и это при том что есть куда оптимизировать!

А дальше у нас идут тесты от подписчиков в Telegram-канале, которым я скинул билд и пригласил потестить демку на ретро-железе. Первый тест от читателя на ноутбуке с Pentium III и редкой встройкой Trident CyberBlade XP показал весьма неплохой результат — 15-20 кадров:

Дальше тот же читатель, имя которое он просил не раскрывать, потестил демку на ATI Rage M6 — очень и очень бодрый GPU, который выдает стабильные 20-25-30 кадров!

❯ Заключение


Вот такая демка, мини-игрушка у меня получилось. Да, весьма примитивненько, зато прикольно, запилено за пару дней и можно полетать на виртуальных самолетиках. Также у меня есть Telegram-канал, куда я публикую различные мысли связанные с подручным ремонтом, моддингом и программированием под гаджеты прошлых лет, а также публикую туда ссылки на новые статьи и видео! Найти исходный код демки вы можете на моём Github.

Понравилась статья? Пишите своё мнение в комментариях, я старался :)

Статья подготовлена при поддержке TimeWeb.Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать новые статьи каждую неделю!

Статья...
Всего голосов:
Показать полностью 20 4 1
[моё] Опрос Горячее Ништяки Программирование Net 3D графика Игры Леталки Пилот Самолет Fw-190 Directx Gamedev Видео Без звука Длиннопост
95

Попробовать мобильный офис

Перейти
Партнёрский материал Реклама
specials
specials

Мобильный офис до 100 тысяч рублей⁠⁠

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

Протестировали TECNO MEGABOOK K15S вместе со смартфоном TECNO CAMON 40 и наушниками TECNO в рабочих и бытовых сценариях от Zoom-звонков до перелета, а теперь рассказываем, как себя показала техника.

Первое впечатление от дизайна ноутбука

Первое, что заметно — это вес. При диагонали 15,6 дюйма и полностью металлическом корпусе K15S весит всего 1,7 кг. Это примерно на 15% меньше, чем аналоги. Устройство не обременяет ни в офисе, ни в такси. Ноутбук поместился в стандартный городской рюкзак, было удобно достать его в кафе за завтраком и по дороге в такси, чтобы быстро отработать клиентские правки.

1/4

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

Шарнир работает мягко: чтобы открыть крышку даже одной рукой, не нужно придерживать корпус. Чтобы показать коллеге или клиенту презентацию, достаточно раскрыть экран на 180°. Это удобно и для работы лежа, и для подставок, которые требуют определенного угла обзора.

Также отметим 9 портов: USB-A, USB-C, HDMI, слот для карты памяти — можно забыть о переходниках.

В TECNO MEGABOOK K15S предустановлен Windows 11. Ноутбук готов к работе сразу после включения. Никаких лишних установок и обновлений. Все настроено и оптимизировано для вашей многозадачности.

Экран: яркая картинка и комфорт ночью

Экран — 15,6 дюйма, IPS-матрица с разрешением Full HD. Углы обзора отличные: изображение остается четким, даже если смотреть сбоку, цвета не искажаются. Есть антибликовое покрытие. Тестировали ноутбук при разном освещении: можно спокойно работать у окна. Когда солнце бьет прямо в экран, текст по-прежнему остается читаемым, картинки не искажаются. Это редкость в бюджетных моделях.

1/2

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

Стеклокерамический крупный тачпад — 15 см. Он не залипает, не промахивается, срабатывает с первого касания. Не возникает дискомфорта, даже если несколько часов редактировать документы без мышки. После перехода с других устройств немного непривычно, что тачпад работает в двух направлениях: нижняя часть отзывается нажатием, верхняя — касанием.

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

Производительность: рендерим видео, открываем вкладки

Ноутбук работает на AMD Ryzen 7 5825U (опционально можно выбрать версию техники Intel Core i5-13420H). Восьмиядерный AMD с поддержкой 16 потоков подходит для ресурсоемких операций вроде рендеринга или работы с большими массивами данных. Встроенная графика Radeon справляется с редактированием видео в Full HD или играми.

1/4

Во время монтажа 30-минутного ролика в DaVinci Resolve и параллельной работе в Photoshop с несколькими большими PSD-файлами система сохраняла стабильность. Не было ни зависаний, ни заметного падения производительности. Ноутбук уверенно держит в фоне 10 приложений одновременно. Если запущены браузер с 20 вкладками, видеозвонок в Telegram, Excel с объемной таблицей и софт для монтажа, система не тормозит и не перегревается. Переход между окнами остается плавным, ничего не «проседает», даже при одновременном скачивании файлов и редактировании видео.

Базовая комплектация включает 16 ГБ оперативной памяти в двух слотах. При необходимости можно легко увеличить этот показатель до 32 ГБ, заменив стандартные модули на более емкие. Помимо установленного SSD на 1 ТБ предусмотрен дополнительный слот, поддерживающий диски объемом до 2 ТБ.

Чтобы во время нагрузки системы охлаждения не выходили из строя, в ноутбук встроен эффективный вентилятор, способный рассеивать до 35 Вт тепла. Устройство не греется, его спокойно можно держать на коленях. Это решение дополнено тремя режимами работы, которые переключаются простой комбинацией клавиш Ctrl+Alt+T. Тихий режим идеален для работы ночью или в общественных местах, сбалансированный подходит для повседневных задач. Производительный, на котором запускали рендеринг видео и игры, практически не шумит.

Автономность: 15 часов без подзарядки

Протестили автономность MEGABOOK K15S в условиях, знакомых каждому деловому путешественнику. Утром перед вылетом зарядили ноутбук до 100% и взяли его в рейс Москва — Калининград. В зале ожидания провели созвон, потом три часа смотрели сериал и в дороге до отеля редактировали документы. К моменту приезда оставалось 40% заряда: хватило бы еще на пару часов продуктивной работы.

1/3

MEGABOOK K15S может автономно работать до 15 часов и позволяет не оглядываться на индикатор заряда. Заявленное время достигается при типичном офисном использовании: одновременная работа с документами в Word и Excel, ведение переписки, видеоконференции, веб-серфинг.

Если все же понадобится, за  час восполняется до 70% батареи. Компактный адаптер мощностью 65 Вт на базе нитрида галлия поместился даже в карман пиджака. Один блок питания заряжает и ноутбук, и смартфон, и наушники. Экономия места: не нужно никаких дополнительных проводов.

Звук, который реально слышно

В TECNO MEGABOOK K15S установлены два мощных динамика по 2.5 Вт. Звук с глубокими низами, без пластикового дребезжания, объемный. Благодаря DTS можно смотреть видео даже в шумном помещении. В тестах специально включали сцены с шагами и выстрелами: локализация настолько точная, что в наушниках нет необходимости.

Та же стабильность и в микрофоне. Благодаря AI-шумоподавлению голос передается чисто. Во время тестовых звонков из оживленного кафе собеседник не услышал ни разговоры за соседним столом, ни городской шум. И все это — на расстоянии до пяти метров.

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

Для тех, кто предпочитает гарнитуру, идеально подойдут беспроводные наушники TECNO FreeHear 1 из экосистемы бренда. Когда не хотелось делиться разговорами с окружающими, подключали их. Чистый звук с акцентом на средние частоты, 11-мм драйверы, которые выдают неожиданную детализацию. Музыку слушать приятно: и фоновый плейлист на телефоне, и вечерний сериал на ноутбуке. Автономно работают наушники 6 часов, с кейсом — до 30 часов. 

1/2

Bluetooth 5.4 обеспечивает стабильное соединение на расстоянии до 10 метров. Удобная C-образная форма разработана специально для длительного ношения — после восьмичасового рабочего дня в ушах не возникает дискомфорта. Наушники поддерживают одновременное подключение к ноутбуку и смартфону. Переключение между устройствами происходит быстро и без заминок.

Через фирменное приложение Welife можно выбрать один из четырех эквалайзеров и отследить местоположение гарнитуры в случае утери. А еще кастомизировать виджет для управления наушниками. Функция настройки персонализированного дизайна доступна для устройств на Android и позволяет гибко изменить внешний вид окна подключения: вплоть до установки фоновой картинки или собственного фото.

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

Бесшовная синхронизация со смартфоном

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

Функция выручила, когда нужно было открыть приложение, у которого нет веб-версии. Удобно работает и буфер обмена: скопировал текст на одном устройстве — вставил на другом. Например, код, полученный в сообщении на телефоне, вводится в браузере на ноутбуке. Экономит минуты, а иногда и нервы. А когда в дороге пропал Wi-Fi, ноутбук сам подключился к мобильному интернету через смартфон.

1/2

TECNO CAMON 40 и сам по себе — мощный рабочий инструмент.  Смартфон выделяется камерой высокого качества 50 Мп, ярким AMOLED-экраном 120 Гц и множеством функций, которые упрощают процесс мобильной съёмки и использование искусственного интеллекта TECNO AI.

Телефон работает на HIOS 15.0.1 на базе Android 15.В фирменную оболочку встроен искусственный интеллект:

  • Голосовой помощник Ella. Отвечает на вопросы, помогает с задачами и управлением устройством.

  • Решение задач. Наводите камеру на задачу, ИИ решает ее.

  • AI Редактор фотографий. Интеллектуальная обработка в одно касание.

  • Быстрый поиск. Находит адрес на экране и запускает навигацию, распознает объекты и события, автоматически добавляет их в календарь.

Технические характеристики

  • Процессор и память. 8 ядер, 16 потоков, Кэш L3 16 МБ, частота до 4.5 ГГц Графический процессор AMD Radeon™ graphics SSD 512 ГБ или 1 ТБ, М.2, 2280, PCle 3.0 Nvme DDR4 16 ГБ, 3200 МГц.

  • Дисплей. 15.6", TFT, Full HD (1920×1080), 16:9, 280нит, 45% NTSC, 16.7 млн цветов, 60 Гц, 141 ррі.

  • Веб-камера. 1 Мп, шторка приватности.

  • Порты. 9 портов: 1*TF Card (microSD), 1*HDMI 1.4, 1*USB-A 3.1,

    1*USB-A 3.2, 1*3.5mm аудиовход, *Ethernet RJ45 до 1 Гбит, 2*Туре-С (Full Function), 1*слот для замка Kensington.

  • Другое. Сканер отпечатка пальца в кнопке питания. Клавиатура с подсветкой (4 уровня яркости). Тачпад с поддержкой одновременно 4 касаний.

  • Батарея. 70 Вт∙ч (6150 мА∙ч), Li-Pol, 11.55 B 65 Вт Type-C GaN, 20 В, 3.25 А, кабель 1.8 м (Туре-С-Type-C).

  • Габариты. 17.3 мм (высота), 359.5 мм (ширина), 236 мм (глубина).

  • Вес. 1,7 кг.


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

КУПИТЬ НОУТБУК TECNO

Реклама TECNO Mobile Limited, Юридический адрес: Flat N, 16/F., Block B, Универсальный промышленный центр, 19-25 Shan MeiStreet, Fotan, New Territories, Гонконг

Показать полностью 17
Электроника Гаджеты Ноутбук Длиннопост
5
Drevmon
Drevmon
1 год назад

Процесс рисования самолетика для игры на Unity⁠⁠

DTF: https://dtf.ru/u/971789-jaster-studio

Youtube: https://www.youtube.com/@JestStudio

Группа ВК: https://vk.com/publiczolotist

ТГ Канал: https://t.me/mediamol

ТГ Чат: https://t.me/mediamolchat

Дзен: https://dzen.ru/jestersstudio?_csrf=815618b6cf4d818a8eb6561ed8cc1a29d6b05134-1707337638032-1743214615-292452731673685585:0

Boosty: https://boosty.to/zolotistby

Показать полностью
[моё] Арт Digital Photoshop Рисунок Игры Gamedev Рисование Видео YouTube Самолет Telegram (ссылка) Яндекс Дзен (ссылка) ВКонтакте (ссылка) YouTube (ссылка)
0
43
Talentplace
3 года назад
Лига Разработчиков Видеоигр

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam⁠⁠

Всем привет! Наша небольшая команда KishMish Games работала в разных жанрах, но большую известность получила, как разработчик симуляторов: водителя автобуса Bus Driver Simulator и машиниста метро Metro Simulator.


Если вам интересно, у меня в блоге есть посты об этих играх. Но сегодня речь пойдёт не о них. В 2019 году мы посетили Питерскую конференцию разработчиков игр White Nights. Большая часть игр на ней - мобильные, но были и для ПК. Выслушав кучу выступлений и отдохнув на вечеринке, спонсированной Unreal, вдохновившись разговорами с такими же разработчиками и издателями, голову посетила идея новой игры. Она должна была стать стратегией (до этого мы не работали в этом жанре), но минималистичной, чтобы хорошо игралась и на ПК, и на мобилках.


Расскажем, как из экспериментального проекта Fly Corp стал самой популярной нашей игрой.

Рейтинг в Steam сейчас составляет 87% положительных отзывов на основе почти девятьсот оценок!

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

Суть игры очень проста. У нас есть карта мира с разными странами и городами (страны и города в них должны открываться случайным образом и постепенно). В каждом городе после его открытия накапливаются пассажиры, которые хотят лететь в какой-то из других городов. Игроку нужно успевать строить маршруты между городами и запускать самолеты до того, как аэропорты в городах переполнятся (пассажиры могут делать пересадки). Это простая концепция всячески наращивала детали по мере разработки: добавился свободный режим и режим сценариев, различные условия победы.


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

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

Разработка началась в августе 2019 года на движке Unity. Мы рассчитывали, что за 3-6 месяцев реализуем всё, что задумали. Ха-ха, разработка на самом деле продолжается и сейчас в раннем доступе (хотя количество запланированного контента и возможностей, конечно, сильно увеличилось с тех пор).


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


В это время игра выглядела как-то так:

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp
Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

На самом деле уже в октябре того же года у нас была очень сырая версия игры, которая запускалась не только на компьютере, но и Android. С ней мы поехали на питч в польский Познань, на выставку GIC. Издателя мы там не нашли, уж очень сырой была игра. Но определенный интерес людей, которым мы показывали игру, чувствовался, и было ясно, что нужно довести всё до хорошего играбельного состояния.

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

Весь следующий, 2020 год, мы дорабатывали игру, добавляли туда новые возможности и механики, исправляли всевозможные ошибки и готовили одновременно версии и для ПК, и для мобилок. В дальнейшем они будут отличаться: компьютерная версия платная, а мобильные - FreeToPlay, с другим балансом, рекламой и системой мэрства (о ней я расскажу чуть позже).

В игру добавлена систему случайных событий, которая не даёт заскучать:

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

Интерфейс и внешний вид карты ещё предстоит пройти несколько итераций прежде, чем примет сегодняшний вид:

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

Всё, что есть в игре приходилось перерабатывать много раз, пока мы не понимали, что этот вариант нам подходит. Например, интерфейс перерисовывался уже раза четыре. Нынешний нам нравится и кажется наиболее подходящим, но не исключаем, что в будущем он снова будет доработан и улучшен. Множество переделок касалось и методов управления, чтобы играть было одновременно удобно и на ПК, и на мобилках. Какие-то из, казалось бы, мелких улучшений кардинальным образом меняли удобство игры. Например, "примагничивание" линии маршрута при его постройке к городам рядом с курсором.

К 2021 году мы принялись активно искать издателя для мобильных версий, тогда как на ПК в Steam мы определились издаваться сами (как впрочем и с предыдущими нашими играми). Мы разослали десятки сообщений самым известным российским и зарубежным издателям. От некоторых получили ответ и продолжили обсуждения условий сотрудничества уже в формате видеозвонков. В конце концов мы выбрали одного издателя, с которым провели первые тестирования с закупкой трафика. На первом тесте сразу же выявились самые очевидные проблемы (вроде того, что большинство казуальных игроков не хотело соревноваться на время, а хотели спокойно строить свою транспортную сеть - тогда мы добавили свободный режим). После их устранения, провели второй тест, и он показал себя гораздо лучше. Показатели удержания игроков и прочие показатели были высокие и издатель согласился взять нашу игру. Мы подписали договор.


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


Параллельно мы наконец-то анонсировали Fly Corp для ПК. Мы создали страницу в Steam и рассказали об игре нашей аудитории с других симуляторных игр. Также мы выпустили демо-версию, так как решили, что пока игрок не пощупает игровой процесс своими руками, он не поймёт, почему игра должна ему понравиться. Её и сейчас можно найти на странице игры в Steam.

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

Реакция нашей аудитории по играм Bus Driver Simulator и Metro Simulator была совсем не такой, как мы рассчитывали. Посмотрите, какие комментарии нам пришлось получать:

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

Дело в том, что, как и прошлые наши игры, Fly Corp - игра транспортной тематики, хоть и совершенно не похожа на прошлые игры. И мы надеялись, что большой процент нашей аудитории заинтересуется ей. Как бы не так. Это было тревожной ноткой, но останавливаться уже было поздно - совсем скоро мы намеревались выпустить игру в ранний доступ Steam.

Это произошло в мае 2021 года.

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

Скажем честно, поначалу игра показывала себя не так хорошо, как предыдущие наши проекты. Но никакой рекламной компании почти не было. Разве что, мы разослали ключи по блоггерам, большинство из которых, видимо, отпугнул невзрачный облик игры. Тем не менее, некоторый поток игроков пошёл. Причём, мы заметили, что игра нашла аудиторию, совершенно отличную от предыдущих наших игр. Если Bus Driver Simulator и Metro Simulator показывали наибольшие результаты на развивающихся рынках, вроде России, Турции и Бразилии, то Fly Corp хорошо пошла в западноевропейских странах. Игроки не высказывали своё "фи, это как мобилка, зачем в такое играть", а просто играли и получали удовольствие.


Мы привыкли к тому, что большой процент нашей аудитории русскоязычный и, как вы видите, мы всё равно рассказываем о проекте на русскоязычной площадке. Однако сейчас количество игроков из СНГ составляет менее 3%. Наверняка, сыграло своё значение и блокировка платежей для РФ в Steam. Но мы присутствуем и на других площадках, где можно приобрести ключ игры.

В течении 2021 года игра периодически обновлялась, было исправлено множество багов. Осенью стало ясно, что игре очень нужна огласка. Особенно заметно это стало, когда один французский стример показал игру на своём канале. Последовал потрясающий выхлоп - в этот месяц продажи поднялись в разы. Мы разослали множество сообщений по блогерам, которые снимают похожие игры на youtube. Из большого списка ответило не так много людей, и большинство заламывало совершенно неадекватный ценник.


В конце концов, мы всё же договорились с несколькими блогерами о съемке видео по игре. Игра им очень понравилась и они были готовы сделать солидную скидку. Это были не чисто рекламные видео, а полноценные летсплеи. Видео дали новый прирост игроков. Они высоко оценили игру - одно время общий рейтинг поднимался аж до 95% положительных отзывов! Алгоритмы Steam'а поняли, что игра интересна для игроков и с тех пор неплохо продвигает её без дополнительной рекламы.


Самые просматриваемые видео по игре на данный момент (из этого списка только видео на одном канале было проспонсировано нами):

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

Стоит отметить интересный опыт с внутриигровыми покупками, который мы получили на ПК версии игры. Мы придумали интересную возможность становиться мэром любого города. Аэропорт в этом городе сразу же открывался прокачанным, вместительным, а то, что этот игрок мэр, видели все игроки, открыв окно города. Мэрство можно было перекупать, но за большую стоимость. Таким образом, за крупные известные города разгорелась битва.


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


В общем, эта система мэрства на ПК версии не прижилась. Зато имеет неплохой успех в мобильных версиях, где игра бесплатна. Иногда мэрство в городах за короткий промежуток перекупается десяток раз. Впрочем, эта система не полностью нас устраивает и мы хотим её переработать, дав игрокам больше возможности для взаимодействия с другими игроками и возможности влиять на их игровой процесс и помогать им.

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp
Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

В этом, 2022 году игра продолжила получать различные обновления, как для ПК, так и для мобильных версий. Например, недавно мы добавили изображения ко всем случайным событиям в игре. Нам кажется, мы подобрали идеальный стиль рисунка для такой минималистичной игры. Оцените:

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp
Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp
Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

Наконец, вчера вышло крупнейшее обновление, которое мы готовили очень давно - бета версия редактора испытаний. Теперь игроки могут создавать свои собственные сценарии, используя инструментарий внутриигрового редактора. А если создавать не нравится, но нравится играть и проходить разные испытания – то их количество сильно возрастёт за счёт тех, которые будут создаваться игровым сообществом.


Мы достаточно подробно рассказали, что из себя представляет редактор на примере создания сценария про удаленные города России: https://pikabu.ru/story/redaktor_stsenariev_v_nashey_transportnoy_strategii_pro_samolyotyi_fly_corp_8263304

Видите, как давно был опубликован тот пост? Да, потребовалось много времени, чтобы довести редактор до ума. И всё же это только бета-версия, с временным страшный интерфейсом.

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

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


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


Некоторые игроки творят в игре какие-то безумства (а вот рабочие тактики активно обсуждаются в нашем дискорд канале - приятно, что у нас такое вдумчивое сообщество):

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

За прошлый и этот год мы получили огромное количество фидбека. Многое уже было сделано и исправлено, но наш трекер задач по прежнему забит: планов очень много. Мы поняли, что база игры неудачная, в проекте много плохого кода, который остался от первого года разработки, когда мы думали по быстрому выпустить небольшую игру. Сейчас мы понимаем, что его очень сложно поддерживать и поэтому решились на следующий шаг: разработать новую архитектуру проекта и переписать большее количество кода. Мы рассчитываем, что после этого мы сможем быстрее выпускать обновления и реализовывать новые возможности, портировать игру на приставки. История Fly Corp не заканчивается.


Сейчас мы получаем вызовы, которые никогда не встречали раньше. Санкции, блокировки, отказы в сотрудничестве - всё это затрагивает и нас и, конечно же, так или иначе сказывается на скорости и эффективности работы. Но, мы уверены, что переживём и этот кризис.

Как мы сделали транспортную стратегию Fly Corp и получили 87% положительных отзывов в Steam Steam, Разработка, Gamedev, Unity, Инди, Самолет, Аэропорт, Стратегия, Транспорт, Гифка, Длиннопост, Fly Corp

Если у вас возникли какие-то вопросы по поводу Fly Corp - задавайте их в комментариях и мы постараемся ответить. Саму игру вы можете найти в AppStore и Google Play или для ПК в Steam.


Всем спасибо за внимание!

Показать полностью 19
[моё] Steam Разработка Gamedev Unity Инди Самолет Аэропорт Стратегия Транспорт Гифка Длиннопост Fly Corp
17
20
alterra.br
alterra.br
4 года назад
Лига Разработчиков Видеоигр

В свете последних событий⁠⁠

А в "Свободном режиме" Fly Corp вы сами можете выбирать, какие страны облетать стороной, а какие нет.

В свете последних событий Gamedev, Инди, Самолет, Стратегия

Fly Corp - транспортная стратегия о самолётах близка к выходу в ранний доступ.
https://store.steampowered.com/app/1372530/Fly_Corp/?utm_sou...

Gamedev Инди Самолет Стратегия
9
welovebundles
welovebundles
8 лет назад
Лига Геймеров

Интервью с разработчиками игры MOTH-O-WAR из отечественной студии Goonswarm⁠⁠

- Привет, Goonswarm, давайте знакомиться, расскажите немного о себе? Сколько человек в студии, кто чем занимается, какой у вас за плечами багаж разработок и участий в других игровых проектах?


- Приветствую! Меня зовут Павел, и я начал заниматься играми еще в далеком детстве. Сначала делал мелкие квесты на картинках в Delphi, потом консольные ASCII на Pascal, ну а дальше пошло-поехало. Когда появился Unity 3, решил сделать игру для Android - F2P, конечно же, но про сингл. Взлететь она не взлетела, и я решил, что нужно понабраться опыта в какой-нибудь крупной компании. Я довольно быстро нашел работу и двинул в Москву.


Уже находясь в столице я офлайн познакомился с 3D-artist, которого нанимал на ту самую игру для Android. Мы решили организовать "творческое объединение" под лаконичным названием GOONSWARM.


До сих пор мы так вместе и работаем. Выпустили три полноценных игры за последние три года (две для Steam и одну для iOS AppStore) и еще штук 5 прототипов "отложили до лучших времен".

- Расскажите историю создания концепта игры Moth-o-War? Чем вдохновлялись (игры, книги или кино)?


- Знаете, бывает такой момент, когда закончена работа над проектами и появляется время подумать о чем-то следующем, новом, интересном. Но кризис, который происходил в моей голове, не позволял мне определиться с идеей для новой игры. Объясню в чем дело. Я, как и все ваши читатели, заядлый геймер, и тонна разнообразных игр уже перепробована, переиграна и перепройдена. А что мы видим на рынке? Копия клона копии? Очередные "каллофдутия", "тауэр дефенсы" и прочие "рогалики"? Ну в такие жанры залазить смысла особо нет, да и новое "каллофдутие" нам создать не под силу. Придумывать экспериментальный геймплей - тоже рискованный метод. Поэтому я долго думал и вспоминал, какая игра меня зацепила когда-то и была бы посильна для разработки в два человека. И тут наткнулся на Luftrausers! Шикарная игра (кстати, кто не играл - очень рекомендую попробовать ее на PS Vita). Но в ней были два недостатка для меня: примитивная (хотя стильная) графика и плоский геймплей. Я решил сделать нечто похожее на Luftrausers, но… со своим покером и куртизанками. Накидал прототип за несколько вечеров, показал товарищу, и работа закипела.

Интервью с разработчиками игры MOTH-O-WAR из отечественной студии Goonswarm Steam, Greenlight, Gamedev, Interview, Аркадные игры, Самолет, Шутер, Видео, Длиннопост

- Какие моменты в процессе разработки данного проекта являются самыми интересными и интригующими?


- Для начала сразу скажу, что мы, простите за жаргонизм, немного лоханулись с названием. Сначала оно было "Moth the Fokker" (что созвучно с ругательством на английском языке).


Но коммьюнити не поняло задумки, да и что такое Fokker мало кто знает. Поэтому, пошевелив извилинами, сменили название на "Moth-o-War". Такие дела.


Еще есть один нюанс.


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


В какой-то момент мой коллега, создавая новую модель самолёта, сказал: "А давай сделаем еще вот такую-то фичу, с ней будет прикольно". Я ему ответил, что, мол, идея прекрасна, но в основную концепцию игры не вписывается. На что он начал меня убеждать, мы нашли компромисс и чуть изменили геймплей. А потом он предложил еще кое-что. И еще. И еще. И в какой-то момент этот поток идей стал бесконечным.


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


В конечном итоге мы с ним немного подискутировали на эту тему на повышенных тонах и взяли перерыв в разработке на 3-4 дня. Остыв, вернулись к первоначальному плану, частично реализовав изменения.


Теперь, когда он хочет предложить какую-то фичу, он делает это деликатно. Вы будете смеяться, но называется это у нас "скакун". Говорит, мол, вот "скакун" стоит за дверью, копытом бьёт о порог, идею приволок. Будем смотреть на него?

Интервью с разработчиками игры MOTH-O-WAR из отечественной студии Goonswarm Steam, Greenlight, Gamedev, Interview, Аркадные игры, Самолет, Шутер, Видео, Длиннопост

- Чем в первую очередь игра на ваш личный взгляд выделяется среди остальных топ-даун шутеров на летающих аппаратах? Ради чего её непременно должны приобрести фанаты жанра?


- В первую очередь, конечно же, это отсутствие одного "слоя" для игры. В игре будет три эшелона, и в них в каждый момент времени будет происходить разный геймплей. В нижнем эшелоне, близком к земле, по вам стреляют танки и гаубицы, а в случае неправильного маневра вы разбиваетесь о холмы и горы. В среднем эшелоне орудует множество истребителей, которые жаждут вас уничтожить. А на верхнем уровне у облаков летают тяжелые бомбардировщики: с ними надо расправиться для сохранности объектов на земле и в море.


Вторая особенность – это система модификации самолётов. На каждый самолёт можно установить несколько орудий (за исключением НЛО, он не умеет стрелять, зато по всей своей грани имеет пилу) и разные варианты двигателей. Не забыли и про возможность перекрашивать самолёт.


В-третьих, фанатам жанра придется снаряжать друзей на приобретение игры, т.к. мы еще планируем добавить CO-OP режим игры. Бои до 4-х человек на одной карте будут выглядеть очень динамично.


Кстати, малопопулярный режим split-screen будет отлично подходить для тех, кто играет в Steam в режиме Big Picture на ТВ.

Интервью с разработчиками игры MOTH-O-WAR из отечественной студии Goonswarm Steam, Greenlight, Gamedev, Interview, Аркадные игры, Самолет, Шутер, Видео, Длиннопост

- Расскажите немного о мире и сеттинге, в котором происходит действие игры? Что это за острова и водные просторы, кто в игре твои враги, почему они хотят нас уничтожить?


- Изначально мы брали за основу сеттинг Первой Мировой Войны (WWI). Но, к сожалению, разнообразия техники, которую можно было бы использовать в игре, было маловато. Поэтому мы решили не заморачиваться и делать близкие по формам, но необычные по содержанию игровые объекты. Что-то будет из WWI, что-то из WWII, ну а что-то будет вообще из Sci-Fi (ближе к концу игры).


Острова, которые вы видели на скриншотах и в ролике, - это всего лишь первая карта, на которой будет разворачиваться театр военных действий.


Всего карт будет 5 штук, включая пустыни Африки, заснеженные горные хребты Швейцарии и еще кое-что – пока секрет


А про врагов - кто они, зачем и почему - мы расскажем в следующем трейлере. Осталось ждать недолго (*смеется*)

- Игра планируется к релизу в Steam Store. Многих геймеров волнуют такие вопросы: какая стоимость будет у игры? Планируются ли в игре Steam-достижения и коллекционные карточки? Будут ли в игре платные DLC?


- Все наши игры отличаются низким ценником. Лично я считаю, что чем больше пользователей будет играть в нашу игру, тем лучше и для нас, и для них. И Moth-o-War не должна стать исключением. Цена будет не выше $10 для всех, а для региона СНГ – значительно ниже.


По поводу "джентльменского набора" сразу скажу: "Да". И достижения, и коллекционные карточки будут обязательно. А вот платных DLC в этой игре точно не будет. Я противник платных DLC, хотя кто я такой, чтоб осуждать такую модель распространения контента. Поэтому, если мы задумаем какое-либо дополнение, то оно обязательно будет бесплатным, не переживайте.


- Будут ли в игре заставки, сюжетные ролики, озвучка и саундтрек? Раскройте немного завесу над этими элементами игры.


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


Но саундтрек обещается быть таким же крутым, как в предыдущей игре Alteric. Мы все также сотрудничаем с командой Audio Insurgency (Торонто, Канада), они пишут правильную музыку для игр (и не только).


-  Как вы считаете, кому эта игра точно не подойдет?


- Определенно тем, кому не интересна тема аркадных игр в целом и самолётов в частности. А еще тем, кто не любит инди-игры, заведомо считая их недостойными внимания. Всем остальным, надеюсь, понравится.

Интервью с разработчиками игры MOTH-O-WAR из отечественной студии Goonswarm Steam, Greenlight, Gamedev, Interview, Аркадные игры, Самолет, Шутер, Видео, Длиннопост

- Оставьте пожелание для наших читателей.


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


----


Поддержать игру можно на Гринлайте: http://steamcommunity.com/sharedfiles/filedetails/?id=871888...


Всем спасибо за прочтение и желаем вам хороших и качественных игр!

Показать полностью 4 2
[моё] Steam Greenlight Gamedev Interview Аркадные игры Самолет Шутер Видео Длиннопост
3
15
MrBeard
9 лет назад

Первая игра на Unity3d или как я не потратил зря отпуск⁠⁠

Всё началось с того, что в этом году на работе заставили заранее выбрать даты отпуска и планово в него уйти. Моё обычное "а, потом отпуск, сейчас не до отдыха" в этом году не сработало. 

Моя работа связана с гейм девом, я пишу сервера для мобильных игр. А в отпуске человеку положено заниматься чем? Правильно, отдыхом от работы. Именно поэтому я занялся написанием простенькой мобильной игры на Unity3d=) Это была далеко не первая попытка познакомиться с этим движком, зато первая попытка, доведённая до финального результата.


Fly - финальный результат моих двухнедельных трудов.


А теперь немного о процессе разработки, моих ожиданиях и том, как оно получилось.

Первая игра на Unity3d или как я не потратил зря отпуск Программирование, Gamedev, Unity3D, Самолет, Длиннопост

Идея игры - два друга отправляются в полёт на воздушном шаре, в процессе которого уворачиваются от различных препятствий или врагов и собирают некие "бонусы" (звёздочки, монетки). Управление - дирижабль может передвигаться по вертикали вверх/вниз.


Начать в этот раз я решил с поиска графики, хотя бы немного удовлетворяющей игровой идее и остановился на kenney game assets. Дирижабля там не было, зато был неплохой набор спрайтов для игры "tappy plane", который я и использовал.


Теперь немного о внутренней логике приложения. Единственным объектом, который не перемещается по оси Х будет наш главный самолёт. Все прочие объекты проносятся мимо него. Задники - генерящиеся объекты(облачка, башенки, деревья, земля), скорость которых зависит от Z координаты, что позволяет создать эффект параллакса(или лично мне так кажется). Монеты и вражеские самолёты тоже генерируются, но несколько хитрее. О них ниже.

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

1. создание шаблонов-матриц в текстовом виде, где каждый символ матрицы обозначает или монету, или пустое поле

OOOXOOO

OOXXXOO

OXXXXXO

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

Первая игра на Unity3d или как я не потратил зря отпуск Программирование, Gamedev, Unity3D, Самолет, Длиннопост

Я выбрал второй вариант, ибо счёл его более простым и быстрым для данной задачи.

В итоге у меня получился генератор монет, который имел набор префабов, каждому из которых был задан его вес. При удалении последнего сгенерированного контейнера монет на Random.Range(0.8f, 1.2f) * DefaultDistance от правого края экрана за экраном генерировался новый набор в соответствии с вероятностью его веса.

Теперь о вражеских самолётах. Их три типа. 

Первая игра на Unity3d или как я не потратил зря отпуск Программирование, Gamedev, Unity3D, Самолет, Длиннопост

Простой - быстро проносится по прямой.

Первая игра на Unity3d или как я не потратил зря отпуск Программирование, Gamedev, Unity3D, Самолет, Длиннопост

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

Первая игра на Unity3d или как я не потратил зря отпуск Программирование, Gamedev, Unity3D, Самолет, Длиннопост

Жёлтый - преследует игрока, меняя свою траекторию.


Как это работает? Простой тип не вызывает вопросов. Есть начальная скорость и небольшое ускорение по оси X, которое он получает каждый FixedUpdate. Шальной задаётся начальной скоростью и ускорением из диапазона (диапазон подобран вручную) по оси Y. Жёлтый ... Для жёлтого я задал Vector2 с ускорениями (к примеру 1f, 1f) и каждый гарантированный кадр он получает ускорение, равное произведению заданного вектора на вектор нормали к игроку.

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


Создав весь этот бедлам, я попробовал сделать первый android билд и с огорчением отметил, что система управления из первоначальной идеи смотрится на мобильных телефонах не очень. Две кнопки можно было бы расположить слева друг над другом, но тогда игрок будет вынужден нажимать на них одним пальцем, постоянно перемещая его по экрану, двигая и ошибаясь. Можно было их расположить внизу справа и слева, но тогда правая кнопка закрывала бы часть экрана, где могли бы появляться противники. Разбираться с виртуальным джойстиком я был морально не готов и пришлось реализовать однокнопочное управление, где при нажатии в любой части экрана самолёт начинал двигаться вверх, а без нажатия летел бы самостоятельно вниз. Благодаря этому управлению мне не избежать обоснованных и праведных сравнений с tappy bird и retry от Rovio. 


Это, в общем то, основная часть игры, написанная и протестированная за 2 дня. Чем же я занимался всё остальное время? А тем, что совершенно не умею делать - UI, интеграцией с Google Play, созданием проекта в Google Developer Console. 

Но больше всего времени у меня занял поиск музыки... Я около трёх дней провёл, прослушивая различные треки и слабо представляя, что в действительности хочу услышать. Совершенно не представляю, как пишут задания для композиторов на музыку... В итоге музыка была найдена на сайте PlayOnLoop. Там действительно неплохая подборка зацикленной фоновой музыки.

Первая игра на Unity3d или как я не потратил зря отпуск Программирование, Gamedev, Unity3D, Самолет, Длиннопост

Какие у меня были изначально планы? Я хотел создать 2 игры за 2 недели отпуска, изучить движок, а точнее его 2d составляющую. Получилось же лишь одна игра, да и та едва влезла в этот график. Жалею ли я о потраченном времени отпуска? Нет, было весело! 

И это непередаваемое ощущение - залипать в собственную игру=)

Google play - Fly

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