Компания NVIDIA начала информировать разработчиков о содержании своей предстоящей презентации в рамках конференции GTC 2024.
Будут раскрыты улучшениях в платформе CUDA а также представят новые видеокарты RTX Blackwell для ИИ. Главным анонсом станет ИИ-ускоритель Nvidia B100.
B100 будет базироваться на 3-нм техпроцессе TSMC, это значительно увеличит его производительность и энергоэффективность по сравнению с прошлыми ускорителями. Новый ускоритель получит сверхбыструю памятью стандарта HBM3e.
Презентация NVIDIA GTC 2024 получит синхронный перевод на youtube канале ARCHiTECH 18 марта.
Дженсен Хуанг расскажет об основных технологических достижениях NVIDIA за последние годы, а также анонсирует некоторые новые продукты компании. Ожидается, что он представит первые специализированные графические ускорители поколения Blackwell, предназначенные для индустрии искусственного интеллекта и высокопроизводительных вычислений.
Будем рады вас видеть на трансляции, друзья ! Всем хорошего дня.
Дисклеймер: игра была написана как простенькая, но познавательная демка именно для PowerVR MBX и именно для Axim X51v. Именно поэтому здесь нет нормального Update-таймера, расчёта дельты времени, а игра прибита к константным временным отрезкам и величинам скорости!
Итак, как же игры подобного планы работают «под капотом»? По факту, обычно мы с вами никуда не едем: фоновые модели ландшафта и дороги просто скроллятся и телепортируются друг за другом, когда одна из частей уходят за экран, что создаёт эффект бесконечной дороги. И эта техника используется во многих играх! Что же касается машинок, от которых мы должны лавировать, то это не мы едем на них, это они едут на нас! По итогу создаётся эффект будто мы с вами куда-то едем и уворачиваемся от машинок, хотя на деле это не так!
Начинаем с реализации базовой вещи в архитектуре любой современной игры, а именно системы игровых объектов. В нашей игре нет необходимости в реализации сложного графа сцены с комплексной компонентной системой, или, например, ECS. Хватит классического линейного списка игровых объектов (который использовался, например, в Half-Life), по которому объект World проходится каждый кадр, вызывая необходимые функции для обновления состояния объекта и его отрисовки:
public abstractclass Entity { public Transform Transform;
foreach (Entity ent in entityRemovalList) Entities.Remove(ent);
entityRemovalList.Clear(); }
publicvoid Draw() { sky.Draw();
renderer.Draw();
foreach (Entity ent in Entities) ent.Draw(); }
Самым первым нашим объектом будет машинка игрока, которой можно будет управлять! Модельки я взял лоуполи со скетчфаба, вот ссылка на ВАЗ 21099 и VW Golf Mk2. Спасибо авторам моделей за их работу!
Наследуемся от Entity и реализуем абстрактные методы с логикой объекта. Здесь мы получаем состояние аппаратных кнопок влево и вправо, в зависимости от них вычисляем направление поворота машинки и, собственно, поворачиваем машинку путём сложения с координатой X вычисленного направления, помноженного на «скорость» поворота машинки. Для лучшего визуального эффекта, мы также плавно поворачиваем машинку эффектом а-ля EaseIn/EaseOut:
Теперь нам нужно, чтобы машинка где-то «ездила». Для этого мы моделируем в блендере примитивный кусок дороги с элементами ландшафта:
А затем реализуем примитивный рендерер фона, который будет скроллить два одинаковых seamless-куска уровня и как я уже говорил ранее, просто телепортировать их друг за другом, создавая эффект бесконечности.
public SectorRenderer() { road = Model.FromFile("road.mdl"); roadMaterial.Diffuse = Texture2D.FromFile("road.tex");
Где terrain.mdl — окружающий ландшафт, а road.mdl — собственно, сам меш дороги. Получаем вот такой эффект:
Артефакты на видео — следствие проблем с точностью float у MBX Lite в процессе клиппинга геометрии при ближней плоскости отсечения в 0.1f. Меняем на 1.0f и всё снова работает нормально :) Чуть изменяем проекцию, переместив камеру выше и наклонив на 45 градусов и игра уже похожа на Traffic Racer!
Переходим к реализации машин трафика. Модельки их машин будут загружаться при старте игры:
publicstaticvoid Preload() { PreloadedCars = new Model[1]; PreloadedMaterials = new Material[1];
LoadTrafficModel(0, "traffic1"); }
А сама их логика предельно проста. При спавне, машинка выбирает себе полосу, по которой будет ехать и рандомный множитель скорости, который вносит разнообразие в игру:
Переходим к обработке столкновений. Помним, что мы на этапе конвертации моделей посчитали Axis Aligned Bounding Box для каждой модели? В качестве алгоритма мы будем использовать классический AABB — или Rect vs rect:
public bool Intersects(BoundingBox box) { return (X < box.X + box.X2 && Y < box.Y + box.Y2 && Z < box.Z + box.Z2 && box.X < X + X2 && box.Y < Y + Y2 && box.Z < Z + Z2); }
Теперь для проверки столкновения между ними, нам надо посчитать абсолютный Bounding Box для каждого игрового объекта:
Затем итерируемся по списку всех игровых объектов в сцене, и если у нас есть машинка трафика, то проверяем на столкновение с машинкой игрока. Если столкнулись, то помечаем машинку игрока как разбитую и предлагаем игроку рестартнуть игру.
foreach (Entity ent in Game.Current.World.Entities) { if (ent is TrafficCar) { if (Player.Bounds.Intersects(((TrafficCar)ent).Bounds)) { // TODO: Damage logic Player.IsDestroyed = true; } } }
Уже что-то немного похожее на игру. Добавим конечное препятствие — необходимость рестарта при столкновении с другой машинкой и для демки пока-что хватит.
if (Game.Current.world.Player.IsDestroyed) { int measure = Engine.Current.Graphics.MeasureString(RestartString); Engine.Current.Graphics.DrawString("Press Return to restart", Engine.Current.Graphics.ViewWidth / 2 - (measure / 2), Engine.Current.Graphics.ViewHeight / 2, StatsColor); } }
Вот что у нас получилось:
Правда, что на МКАДе каждый вечер такое? Я просто не с МСК :)
❯ Заключение
Вот такой у нас получился материал про PowerVR MBX! С выходом iPhone, этот GPU дал толчок для появления красивых мобильных игр с уровнем графики, близким к полноценным домашним консолям… жаль, что золотая эра интересных, самодостаточных и бездонатных мобильных игр и закончилась во времена iPhone 5 :(
В остальном же, надеюсь материал был достаточно интересен и познавателен для всех моих читателей, даже тех, кто никогда не программировал игры! Был у вас Dell Axim X51v? Пишите в комментариях!
Исходный код демки и бинарники можно найти на моём гитхабе.
Материал написан при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud , чтобы не пропускать новые статьи каждую неделю! А ещё у меня есть своя телега, куда я публикую бэкстейдж статей и вовремя публикую ссылки на новый материал!
Понравился материал?
А ещё я собираю деньги на проект с уже настоящим, физическим ТАЗом и его электронным дооснащением бортовым компьютером "по самому дешману" своими руками! Уже собрано 50.000 рублей из планируемых 70.000 на машину, из них 45.000 моих личных сбережений и 5.000 рублей - помощь читателей, за что вам большое спасибо :)
Пожалуй, многие из вас помнят, какими были мобильные игры до и после выхода первого iPhone. В начале 2000-х годов, ещё до появления яблочного смартфона, игры для телефонов в основном были весьма интересными, но тем не менее, достаточно простенькими с точки зрения графики и реализации в целом. После запуска AppStore в 2008 году, на iPhone начали выходить самые разные красочные, невиданные раннее по уровню детализации и проработке 2D и 3D игры. Но появление таких игр — отнюдь не заслуга Apple, а относительной малоизвестной компании PowerVR (подразделение Imagination Tech), которая смогла разработать на базе видеочипа Dreamcast и внедрить один из первых действительно массовых мобильных 3D-ускорителей, имя которому — PowerVR MBX! Сейчас мы с вами привыкли, что почти любой дешевый смартфон может отрисовывать графику уровня PS3 в 1080p, а то и выше, но когда-то даже уровень PS2 был роскошью… Сегодня мы с вами: узнаем предысторию появления аппаратно-ускоренной 3D-графики на телефонах, рассмотрим такую фирменную фишку PowerVR, как тайловый рендеринг, а в практической части статьи нам поможет легендарный КПК Dell Axim X51v с MBX на борту, под который мы напишем 3D-игру «про жигули» с нуля! Интересно? Тогда добро пожаловать под кат!
❯ Мобильная 3D-графика. Начало
Пожалуй, 3D-графика на мобильных устройствах начала развиваться ещё с самого начала 2000-х годов. К тому моменту, как мобильные телефоны научились запускать сторонние Java-приложения, практически сразу же появился прибыльный рынок мобильных игр. Ещё до появления поддержки jar-приложений, люди ставили рекорды в «Змейке» на телефонах Nokia, таскали ящики в «Строителе» на Siemens и играли в другие предустановленные игры на девайсах других брендов, поэтому было очевидно, что игры на мобильных телефонах рано или поздно смогут занять немалую часть сегмента портативных игровых устройств.
Именно появление J2ME дало тот самый толчок для развития мобильного гейминга. Производители телефонов активно развивали и дорабатывали мобильную платформу, добавляя в неё различные API-расширения — например, активацию приложений через СМС и доступ в WAP-интернет. Сама платформа J2ME была достаточно простой для изучения и имела низкий порог вхождения не только для людей, имевших какой-то опыт программирования, но даже для совсем новичков, которые никогда не писали код и тем более игр! Благодаря этому, появились сотни игр, многие из которых до сих пор помнят и любят: это и легендарный «мячик» Bounce, и «зайчик с морковками» Bobby Carrot, и весьма крутой Gish, а также множество различных платформеров по известным фильмам и «большим» играм!
В 2003 году появился Nokia N-Gage — первый массовый телефон, ориентированный именно на мобильный гейминг, который поддерживал не только Java-игры, но и собственные Symbian-игры с достаточно крутой 3D-графикой! Примерно в том же 2003 году, для платформы Java вышло сразу два API-расширения, которые добавляли поддержку симпатичной 3D-графики даже в самые простенькие и бюджетные телефоны: Mobile 3D Graphics (M3G, была почти везде) и Mascot Capsule (эта платформа была только на Sony Ericsson и Motorola). Именно благодаря этим API, мы с вами увидели такие легендарные игры, как V-Rally, Galaxy on Fire, Deep3D и многие другие! Но тем не менее, эти API были относительно медленными из-за программной растеризации на процессоре без отдельного 3D-ускорителя и весьма ограниченными в функционале. Ближайший пример по функционалу — уровень софтрендера первой кваки на первом Pentium! Кстати, про 3D на мобильных телефонах я писал отдельную статью, там в практической части мы пишем 3D-бродилку для Sony Ericsson!
Но помимо кнопочных телефонов, существовал сегмент High-end мультимедийных устройств, которые предоставляли гораздо больший функционал и производительность за немалые деньги. И речь, конечно же, о КПК! Девайсы, работавшие на базе шустрых процессоров Intel PXA и Samsung S3C с Windows Mobile на борту были заметно более перспективными для игр… но как-то не задалось из-за отсутствия нормальных каналов для распространения. Но тем не менее, Intel (иронично, но один из самых больших производителей ARM-чипсетов для КПК в те годы), которая уже занималась развитием десктопной графики GMA и PowerVR активно работали в этой сфере и результатом стало появление видеоускорителя 2700G, который представлял из себя не только 3D GPU PowerVR MBX Lite, но и аппаратный декодер видео, позволявший смотреть видео в высоком качестве! MBX Lite позволял запустить даже Quake 3 в 640x480 (!), пусть и в 10-15 FPS… Ещё за 5 лет до этого, далеко не все десктопные видеокарты могли выдать больше 30 FPS в 800x600!
Конечно в 2004 году уже вышел PSP, выставивший новую планку уровня 3D-графики для портативного гейминга, однако для смартфонов и КПК, уровень графики, разрешение и производительность 3D-игр на MBX Lite был просто немыслимым! Одним из самых легендарных и популярных устройств с 2700G, которое вы можете приобрести достаточно дешево и сейчас, был КПК Dell Axim X51v, флагманская модель с VGA-дисплеем тех лет. Но нельзя сказать, что только PowerVR работала в этом направлении. Параллельно NVidia выпустили GoForce, крайне редко попадающийся в «полноценном» виде (NVidia предлагала дешевле лицензировать только видео-декодер с отключением 3D-части, как это было в Toshiba Portege G900) и ATI Imageon, который чаще всего можно встретить в виде Adreno на ранних Android-чипсетах Qualcomm (Adreno — анаграмма Radeon :)).
Тем не менее, решение PowerVR было действительно массовым: компания не предлагала отдельный чип (что обычно было дороже), как конкуренты, а лицензировала другим компаниям уже готовые IP-ядра, которые производители чипов могли синтезировать и использовать в своих собственных чипсетах, или, сопроцессорах, как в случае с 2700G. Благодаря этому, MBX появился в чипсете TI OMAP 2430, использовавшийся в легендарных Nokia N93i и Nokia N95, Samsung INNOV8, Asus Lamborghini, Nokia E90 и некоторых других. Кроме того, PowerVR MBX использовался в процессоре Samsung S5L8900, судя по всему, разработанный для iPhone 2G и 3G! Благодаря этому, его можно считать одним из первых массовых 3D GPU в телефонах!
Одна из игр для iPhone 2G и N95 — Assasins Creed
И Asphalt 5!
Весьма симпатично, согласитесь?
❯ Под капотом
Но MBX, конечно же, не появился «из ниоткуда» и был основан на более ранних разработках компании Imagination Tech, а именно GPU из полноценной домашней консоли SEGA Dreamcast — PowerVR CLX2, который в свою очередь был основан на ранних десктопных GPU PowerVR из середины-конца 90-х годов. Основная фишка PowerVR была в использовании так называемой техники отложного тайлового рендеринга (TBDR), которая, в отличии от классической растеризации и сортировки с помощью Z-буфера (или ручной сортировки треугольников) всех примитивов «в лоб» (методика, используемая в PSP, PS2 и большинстве видеокарт 2000-х годов), сначала ждёт от программы списка всех рисуемых треугольников в кадре, разбивает весь экран на тайлы (небольшие прямоугольные области), которые содержат в себе информацию о пересекающихся треугольниках, а затем процессом, несколько схожим с рейтрейсингом, определяет, какой из пикселей треугольника ближе всего находится к камере наблюдателя. Таким образом, мы избавляемся от необходимости сортировки геометрии с помощью Z-буфера (который сам по себе занимает достаточно много, по меркам тех лет, памяти и страдает от проблем точности и Z-fighting'а), а также такой метод позволяет реализовать более дешевый альфа-блендинг без ручной сортировки полупрозрачных примитивов и имеет ещё одну приятную фишку — «бесплатный» Occlusion Query, который можно использовать для реализации продвинутых техник отсечения невидимой глазу геометрии.
Производительность PowerVR MBX была весьма достойной для своих лет: при частоте работы в 200МГц, видеочип обеспечивал филлрейт в 100Мп, обрабатывал до 1млн треугольников в секунду. Нативным графическим API MBX был OpenGL ES 1.1 — специальная урезанная версия OpenGL для встраиваемых устройств, из которой выбросили все ненужное и которая заточена не только под floating-point, но и под fixed-point арифметику. В остальном, особо никаких отличий для программиста по сравнению с обычными GPU не было, можно было без проблем портировать уже существующие приложения для десктопого OpenGL для мобильные девайсы, чем и пользовались энтузиасты при портировании Quake 3 на Nokia E90, КПК и другие девайсы. Также, PowerVR MBX поддерживал D3DM — графический API Windows Mobile, о котором мы поговорим позднее.
Однако PowerVR MBX был GPU с фиксированным конвейером (FFP), а не программируемым, как принято в современных 3D-ускорителях. Что-же такое программируемый и фиксированный конвейер? Давайте разберемся:
Фиксированный конвейер: для того, чтобы задать визуальную составляющую рисуемой геометрии, программист оперирует набором заранее определенных при проектировании видеочипа параметров, которые позволяют управлять внешним видом растеризуемых примитивов. Например, для реализации света, программист задает параметры каждого из 8 источников света влияющих на рисуемый объект. Если программисту необходимо наложить несколько текстур за один проход (например, для реализации плавных переходов текстур на ландшафте или нанесения карты отражений на модель), он оперировал комбайнерами, которые позволяли задавать для каждого сэмплера параметры наложения. Такой подход использовался на десктопных GPU эпохи до GeForce 3 (т. е. примерно до 2000 года), до PS3 на Sony PlayStation (Xbox сразу вышел с GeForce 3) и до PSP включительно на портативках. Очевидно, что такой подход сильно ограничивает программиста в том, как будет выглядеть его игра на той или иной видеокарте.
Программируемый конвейер: в программируемом подходе, для управления визуальной составляющей программист пишет небольшие программы для видеокарты, называемые шейдерами. Всего есть два базовых (в современных GPU их больше) этапа программируемого конвейера: первый из них — вершинный шейдер, отвечающий за трансформацию геометрии (перевод из мировой системы координат в экранную) и, например, анимацию. Трансформированные вершины отправляются в следующий этап конвейера — растеризацию, где выполняется уже пиксельный шейдер, который определяет цвет пикселя (или более корректно — фрагмента в терминологии 3D графики) — т.е например, окрас объекта в определенной цвет, текстуру (или несколько текстур), рассчитывает попиксельное освещение, накладывает тени и т. д. Кроме того, такой подход позволяет реализовать сложные техники типа Ambient Occlusion, SSR, а также пост-эффекты (например блюр/блум, правда эти два можно «сэмулировать» и на FFP при определенной сноровке).
К 2007 году, Khronos выпустили спецификацию второй версии OpenGL ES, которая добавляла в мобильные устройства поддержку программируемого конвейера и шейдеров. Таким образом, мобильные GPU всё ближе приближались к уровню консолей и могли выдавать вполне годную графику, близкую к консолям. Даже была когда-то такая консоль, как Zeebo, которая работала на базе смартфонного чипсета Qualcomm с графикой ATI Imageon (!). PowerVR уже в 2009 выпустила серию SGX, которая также использовалась в iPhone, iPad, многих Android-смартфонах и планшетах, а также PS Vita!
Modern Combat 3 на iPad
Но статья с пересказом фишек PowerVR MBX была бы не особо интересной без практической части с написанием 3D-игры под этот GPU с нуля! Поэтому предлагаю посмотреть на нашего сегодняшнего гостя, легендарный флагманский КПК Dell Axim X51v из далекого 2005 года! Для тех лет, это настоящий «жир»:
Его мне подарил мой читатель Сергей с Хабра, за что ему огромное спасибо! Девайс был в полной комплектации, даже с флэшкой и усиленной АКБ, которая до сих пор неплохо держит заряд, однако у него не работал тачскрин. Если вам интересен только процесс программирования игры, а не аппаратного ремонта, то листайте ниже сразу до следующего абзаца :)
❯ Практическая часть: ремонтируем КПК
По факту, девайс полностью работал, однако в некоторые моменты времени не откликался на кнопки и тачскрин, и по всем симптомам это напоминало дребезг кнопок. При этом тачскрин сам по себе реагировал нормально во всех местах, что, фактически, исключало вероятность его поломки (хотя резистивные тач-панели сами по себе не особо надежные, в отличии от емкостных тачскринов). Дело было вот в чём: во многих КПК тех лет был отдельный аппаратный переключатель блокировки клавиатуры и тачскрина, который можно было использовать при просмотре фильмов. Однако на моем девайсе он был слишком разболтанным…
Разбирается КПК несложно: выкручиваем 4 винта и снимаем переднюю часть корпуса. На всякий случай я прочистил грязь между тачем и верхней частью корпуса — она тоже бывает влияет на ложные нажатия и чувствительность тачскрина:
А вот и виновник наших проблем: рычажок переключателя был отломан, но все еще находится в положении «разблокирован». Даже если в выжать в упор — он все равно не работал. Ну что ж, фен в руки, сдуваем переключатель и ставим вот такую перемычку (на фото флюс ещё не отмыт):
Включаем девайс и смотрим — теперь всё работает! Вот такой простой и быстрый ремонт Axim'а. КПК мне сразу очень понравился, я и ранее знал о его легендарности, но теперь узнал и о том, что он очень круто спроектирован и собран! Кстати, есть смысл сразу сдуть концевой выключатель, который прижимает задняя крышка и заменить на перемычку. GPU не очень хорошо работает на кастомных прошивок, на которую прошиты многие Axim X51v. Поэтому есть смысл прошить сток: качаем прошивку (Файл отката), закидываем на SD-карту и ребутим девайс нажатием клавиш Wi-Fi + включение + Reset. После этого, девайс пойдет прошиваться.
Теперь девайс чистый, как с завода! Можно приступить к написанию небольшой демки-игрушки, которая сможет продемонстрировать нам перспективы нашего КПК в 3D!
❯ Практическая часть: подготовка
Изначально, в практической части статьи должна была участвовать не менее легендарная Nokia N95. Однако вот незадача: несмотря на то, что под Symbian сохранился SDK (который работает нормально только под Windows XP), на устройствах с системой старше 9.x необходимо взламывать installserver, дабы иметь возможность ставить хоумбрю программы (к которым относится и наша игра) и отладчик TRK.
И хотя свой девайс я пропатчил, дебаггер нормально поднять мне так и не удалось. Я смог проинициализировать контекст GLES, запилить примитивный рендерер с загрузкой ассетов из памяти устройства но потом решил перевести проект на WinMobile… Проблем с разработкой под Symbian много: если приложение крашится — то оно просто закрывается, без сообщений и логов. Добавьте к этому то, что в Symbian вообще нет исключений и не всегда можно записать ошибки в лог и отладка превращается в ужас. Ситуацию исправляет Qt, который работает на N95, но в котором нет поддержки GLES (по крайней мере, в виде обычного QOpenGL, хотя возможность юзать API системы из Qt есть и дебаггер там работает нормально, так что не всё потеряно). Если вы когда-то что-то пилили под Symbian, особенно в Carbide — пишите свой опыт в комментариях, интересно почитать :)
WinMobile не менее интересен тем, что в нём поддерживается сразу два графических API: классический OpenGLES в профиле Common Lite (только fixed-point арифметика) и мобильная версия Direct3D — D3DM.dll, которая предоставляет API очень похожее на DX9, но без поддержки шейдеров. Что не менее приятно — есть официальные биндинги от Microsoft к D3DM в .NET Compact Framework, что позволяет легко писать 3D-игры под WM на C#/VB.NET. Поскольку WinMobile — достаточно открытая для пользователя система, хватит лишь накатить VS2005/2008 на машину с WinXP/WinVista/Win7/Win8 и сразу начать разрабатывать под неё приложения, никаких проблем с отладкой и запуском приложений тут нет. На Win10/Win11 совместимость с WM5 поломали :(
Создаём приложение для смарт-устройств, выбираем в качестве целевой платформы WM5-устройство (эмулятор будет слишком медленным для наших целей, он даже для 2D-игр не подойдет) и, наконец-то, приступаем к написанию игры!
Что же за игра у нас будет? Я решил сделать эдакое 3D-переосмысление популярного в прошлом бесконечного раннера из «тетриса», где мы едем на машинке F1 и обгоняем другие машины, стараясь в них не врезаться. Основной целью является набрать как можно больше очков. Подобные игры достаточно популярны на мобильных девайсах и сейчас: вспомнить хотя-бы Highway Traffic, однако мой вариант будет весьма колоритным: ведь в моей демке мы будем кататься на ТАЗе 21099 и уворачиваться от гнилых «вторых гольфов». Ну а почему бы и нет, я просто очень люблю старые гнилые жигули и это не первый мой проект про машины этого производителя :)
❯ Практическая часть: «движок»
Как и у настоящей машины, у каждой игры должен быть собственный движок! Однако в случае конкретно нашей игры, это скорее небольшой фреймворк, который предоставляет ровно тот функционал, который нужен игре без каких либо излишеств. Необходимо изначально распланировать требования для будущего фреймворка, дабы написание игры не скатилось в процесс, известный в узких кругах как «движкописание» :)
Рендерер: с графической точки зрения, фреймворк должен реализовывать весьма небольшой функционал. Загружать геометрию и текстуры из файлов в специально-подготовленном формате, реализовывать концепцию камеры, отрисовывать статическую геометрию, а также спрайты и текст, реализовывать примитивную систему материалов, которая позволяет наносить на геометрию текстуры, красить их в определенный цвет и управлять повершинным освещением, а также наносить на геометрию отражения с помощью специально подготовленных enviornment-текстур. Кроме того, рендерер должен уметь рисовать симпатичное анимированное небо в виде полусферы.
Звук: воспроизведение wav-звуков и музыки из файлов. Да и всё пожалуй — что ещё нужно от звуковой подсистемы? :) Стерео ведь нет, поэтому и 3D-звук не нужен.
Ввод: обработка нажатий на тачскрин и аппаратные кнопки устройства, маппинг кейкодов в виртуальный «геймпад». GUI-подсистему тоже частично можно отнести именно сюда!
Физика: AABB и Sphere vs Sphere столкновения. Никакого полноценного солвера тут и не нужно :)
Начинаем, пожалуй, с реализации рендерера. Сначала нам необходимо создать окно и контекст D3DM. Процесс практически идентичен D3D8 и D3D9: передаём информацию о нужном адаптере (видеочипе) и заполняем структуру PresentationParameters, однако есть важные нюансы: аппаратный FSAA лучше всего отключить (MultisampleQuality), а также передавайте точный размер окна, в которое собираетесь рендерить изображение, иначе система начнёт софтварно (!) скейлить рендертаргет до размера окна каждый кадр, что, как сами понимаете, крайне медленно.
Из форматов Depth-Stencil форматов поддерживается D16, D24S8 и D32. Желательно использовать D16 (несмотря на тайловую архитектуру, насколько мне известно, в MBX все равно есть fallback до классического рендеринга при некоторых условиях). Практически на всех КПК и коммуникаторах использовался 16-битный цвет, т.е RGB565, но можно указать Unknown — тогда GAPI подцепит тот формат пикселя, что используется в остальной системе.
Переходим сразу же к рисованию геометрии! Для начала рендеринга, нам необходимо подготовить состояние контекста: посчитать и установить матрицы вида (т. е. камеры) и проекции для трансформации геометрии, задать рендерстейты (список состояний, например нужно ли рисовать модельку с освещением, или нет), очистить экран и Z-буфер и установить параметры фильтрации текстур. Перспективная коррекция текстур — достаточно тяжелая операция и использовать её стоит лишь при необходимости:
public void EndScene() { device.EndScene(); device.Present();
System.Threading.Thread.Sleep(16); }
Чтобы какую-то модельку нарисовать, нам нужно сначала её загрузить! Для возможности напрямую прочитать треугольники из файла и сразу записать их в вершинный буфер, я написал небольшой конвертер из формата SMD (GoldSrc) в собственный, очень простой и легковесный формат, который состоит из позиции вершины и её текстурных координат:
foreach (SmdTriangle triangle in mesh.Triangles) { for (int i = 0; i < 3; i++) { writer.Write(FloatToFixedPoint(triangle.Verts[i].Position.X)); writer.Write(FloatToFixedPoint(triangle.Verts[i].Position.Y)); writer.Write(FloatToFixedPoint(triangle.Verts[i].Position.Z));
Обратите внимание, PowerVR MBX оперирует fixed-point арифметикой! D3DM, конечно, может автоматически преобразовывать float-координаты вершин в числа с фиксированной точкой, вот только реализовано это криво и косо: драйвер будет конвертировать все вершины в fixed-point каждый вызов отрисовки, вместо того, чтобы один раз преобразовать их после Unlock'а вершинного буфера. Теперь представьте, насколько это тормозно для хоть сколь-либо комплексной модели :)
При этом загрузчик модели при таком подходе будет очень простым и будет работать шустро даже на таком слабеньком железе:
public Model(string debugName, Stream strm) { BinaryReader reader = new BinaryReader(strm);
int hdr = reader.ReadInt32(); int numVerts = reader.ReadInt32(); int vertSize = 20;
Переходим к текстурам. Грузить напрямую png/jpg на КПК слишком долго, поэтому их я тоже перегоняю в собственный примитивный формат, который состоит из описания ширины/высоты, а также формата текстуры и собственно, самих пикселей. На данный момент поддерживаются только RGB565 текстуры — с ними MBX работает лучше всего:
public sealedclass TextureConverter { publicconstint Header = 0x1234;
Загрузчик тоже получился примитивным и шустрым донельзя, пусть и без какой либо компрессии. PowerVR MBX поддерживает собственный формат компрессии — PVRTC:
BinaryReader reader = new BinaryReader(strm);
int hdr = reader.ReadInt32(); int fmt = reader.ReadInt32();
Handle = new Texture(Engine.Current.Graphics.device, Width, Height, 1, Usage.Lockable, Format.R5G6B5, Pool.VideoMemory);
int pitch; GraphicsStream gs = Handle.LockRectangle(0, LockFlags.None, out pitch); gs.Write(data, 0, data.Length); Handle.UnlockRectangle(0);
strm.Close();
Переходим, наконец, к фактическому рисованию модели! Для этого мы строим мировую матрицу для трансформации нашей модели, а также задаем вершинный буфер для, собственно, вершинного конвейера и посылаем видеочипу команду отрисовки. ZBufferWriteEnable нужен для отрисовки геометрии без записи в Z-буфер, что можно использовать, например, для реализации скайбоксов:
public void DrawModel(Model model, Transform transform, Material material) { Matrix matrix = Matrix.RotationY(transform.Rotation.Y * MathUtils.DegToRad) * Matrix.Translation(transform.Position); device.SetTransform(TransformType.World, matrix);
void Start() { model = Model.FromFile("model.mdl");
mat = new Material(); mat.Diffuse = Texture2D.FromFile("test.tex"); }
void Update() { t = new Transform(); t.Position.Z = 150; t.Rotation.Y += 0.1f;
graphics.DrawModel(model, t, mat); }
Результат: у нас есть крутящийся кубик или любая другая произвольная 3D-модель!
Переходим к обработке ввода. Тут ничего сложного нет, ловим события KeyUp/KeyDown формы и назначаем виртуальным кнопкам их состояние.
public Input(Form parentForm) { keyState = newbool[(int)GamepadKey.Count];
parentForm.KeyPreview = true;
parentForm.KeyDown += new KeyEventHandler(OnKeyDown); parentForm.KeyUp += new KeyEventHandler(OnKeyUp); }
private GamepadKey ResolveKeyCode(Keys key) { GamepadKey k = GamepadKey.Count;
switch (key) { case Keys.Left: k = GamepadKey.Left; break; case Keys.Right: k = GamepadKey.Right; break; case Keys.Up: k = GamepadKey.Up; break; case Keys.Down: k = GamepadKey.Down; break; case Keys.Return: k = GamepadKey.OK; break; }
Теперь мы сможем управлять нашей машинкой в игре (которой пока ещё нет). Самая-самая основа для реализации игры подобного плана у нас есть, пора переходить к геймплею!
На данный момент Xiaomi 13 Ultra является лучшим смартфоном Xiaomi. Это единственный настоящий камерофон среди актуальных моделей бренда, имеющий дюймовый сенсор с переменной диафрагмой и 120-кратный зум вкупе с мощным процессором и крутым экраном. Стоит он под стать своим характеристикам (139 990 ₽ в официальной российской рознице), что делает его, мягко говоря, не самым ходовым устройством. А как насчет того же Xiaomi 13 Ultra, только за 7 490 ₽? Такой трюк решила провернуть Redmi, выпустившая новый смартфон Redmi A3, и сейчас мы выясним, насколько удачным получился этот эксперимент.
Смартфон, похожий на Xiaomi 13 Ultra
Xiaomi 13 Ultra получил узнаваемый дизайн, главным элементом которого является блок камер. Он выполнен в форме шайбы, что объясняется большим количеством вспомогательных сенсоров, а также их почтенным размером. Телефон Redmi A3 почти в точности копирует этот дизайн, хотя практической пользы от его пугающего круга нет.
Чтобы совсем спутать карты, разработчики недорогого смартфона Redmi даже выкатили версию оливкового цвета, и в этом варианте спинка устройства покрыта материалом, напоминающим экокожу, прямо как на Xiaomi 13 Ultra. В то же время корпус дешевой модели выполнен целиком из пластика, а его грани плоские, как и дисплей.
Характеристики Redmi A3
В техническом плане Redmi A3 не является откровением. Это очередной ультрабюджетный смартфон, который стоит в одном ряду с устройствами других брендов за те же деньги.
Характеристики Redmi A3 Экран 6,71 дюйма, IPS (1650х720), 90 Гц Основная камера 8 + 0.08 МП Фронтальная камера 5 МП Процессор Helio G36 Память 3/64 или 4/128 ГБ NFC Нет Аккумулятор 5000 мАч Зарядка 10 Вт
Среди характеристик Redmi A3 обращает на себя внимание разве что частота обновления экрана, но в 2024 году уже почти все дешевые смартфоны отказались от стандартных 60 Гц. А остальная начинка и вовсе выглядит странно.
Если Xiaomi 13 Ultra круг сзади требовался для размещения четырех полезных камер, то у Redmi A3 из всего две. Причем вторая представляет собой заглушку с разрешением, как у кнопочных телефонов начала XXI века. Словом, штука бесполезная, и функциональным является только сенсор на 8 МП.
Главное в дешевом смартфоне — скорость работы. И, если повышенную частоту обновления экрана можно отнести к достоинствам Redmi A3, то процессор Helio G36 (115 000 баллов в AnTuTu) вместе с медленным накопителем стандарта eMMC 5.1 — его беда. Не факт, что с таким железом новинка вытянет заявленные 90 Гц, однако операционная система Android 13 без тяжелой оболочки MIUI должна сгладить углы.
Чем Redmi A3 отличается от Redmi A2+
Сравнивать Redmi A3 стоит не с Xiaomi 13 Ultra, а с предшественником Redmi A2+, появившимся в прошлом году. В версии 3/64 ГБ он продается за 5 тысяч рублей, то есть на треть дешевле. При этом преимуществ Redmi A3 в сравнении с Redmi A2+ совсем немного:
сканер отпечатков переехал со спинки на кнопку питания;
экран подрос на 0.2 дюйма и получил повышенную частоту обновления;
появился вариант на 128 ГБ;
Redmi A3 получил поддержку двухдиапазонного Wi-Fi (2.4 ГГц и 5 ГГц);
версия Bluetooth обновилась с 5.0 до 5.3.
Камеры и процессор у Redmi A3 остались прежними, а потому новинка не будет работать быстрее или лучше фотографировать. Это дешевый смартфон на грани фола без какого-либо запаса производительности.
Стоит ли покупать Redmi A3
Особенно бледно Redmi A3 выглядит на фоне конкурентов других брендов. Так, пару недель назад свой самый дешевый смартфон 2024 года выпустила компания realme. Ее realme Note 50, который сейчас продают за 5 990 ₽, не только получил большой экран с частотой обновления 90 Гц, но и в 2 раза более мощный процессор Unisoc T612.
Realme Note 50 доказывает, что новый ультрабюджетник Redmi не предлагает ничего интересного кроме дизайна, заставляющего вспомнить о камерофоне Xiaomi 13 Ultra. В остальном это — посредственный аппарат, уступающий большинству дешевых смартфонов Xiaomi в категории до 10 тысяч рублей.
Nvidia - одна из ключевых компаний мира прямо сейчас. Существует популярное мнение, что они просто везунчики, которые всегда оказываются с нужным продуктом в нужное время. Однако, если историю развития этой компании, то станет отчетливо видно, что эти ребята умеют мастерски конкурировать, делают полезные выводы из провалов и отлично "ловят волны". Сегодня разберемся, как им это удается.
Главный секрет Nvidia в том, что её основатель ходит с стильной кожанке. Спасибо за внимание. Ладно, шучу, сейчас во всем разберемся.
Nvidia обогнала по стоимости Saudi Aramco, и теперь выше детища Дженсена Хуанга лишь Microsoft да Apple. Microsoft за последние годы ИИ-бума влезли в очень плотную зависимость от чипов Nvidia, из-за чего сейчас экстренно пилят собственную замену. Apple же слез с чипов Nvidia в 2010-х, но, уверен, у Nvidia неплохие шансы пободаться и с этим гигантом.
Возможно, кто-то спросит "Аффтар, почему ты так уверено назвал Nvidia главной компанией нашего будущего?". Отвечу: "Потому что Nvidia продает те самые пресловутые лопаты современным золотоискателям. А это самая надежная и устойчивая бизнес-стратегия независимо от эпохи и контекста".
Ладно, к делу. Изучая материалы про Nvidia, я регулярно сталкивался со следующим лейтмотивом:
"Да просто чуваки каждый раз оказывались вовремя с востребованным продуктом. Они просто крайне везучие".
Так вот, если компания умудряется несколько раз подряд оказаться с востребованным продуктом (причем, самым популярным на рынке, или одним из самых) в нужные моменты времени, то это означает, что у компании офигеть какая мощная стратегия, а СЕО - крутой визионер.
Поэтому, в этом материале я хочу не просто рассказать историю развития компании и основные этапы её развития. Но также понять, как Дженсену и ко. удавалось делать настолько верные и точные стратегические ставки. А еще, по ходу дела расскажу, что же за продукцию такую производит эта Nvidia, что на неё всегда есть устойчивый спрос в самых разных индустриях и сегментах рынка.
Disclaimer. История Nvidia - это большой и яркий путь с россыпью крутых бизнес-решений. Так что, я поделю материал на две части. Сегодня расскажу, как из небольшого перспективного "стартапа из кафешки" Nvidia превратилась в важнейшего производителя железа для современной технологических отраслей. А во второй части (coming soon) мы разберемся, как Nvidia из просто крупной и важного игрока превратилась в главную компанию будущего, которая (очень возможно), скоро станет самой дорогой корпорацией в истории.
Этап первый. Как жизнь Nvidia чуть не закончилась после первого же выпущенного чипа
Думаю, многие из вас слышали историю, как Дженсен Хуанг, Крис Малаховски и Кертис Прэм сели за столик в дешевой кафешке в Сан-Хосе и стали думать, какая технология станет the next big thing в этом мире. Еще ходит байка, что эта забегаловка была в таком суровом районе, что в её стенах зияли дырки от гангстерских пуль.
Последний факт, наверно, должен был символизировать стартаперский дух начинания, но на самом деле все трое фаундеров на тот момент уже были состоявшимися взрослыми спецами. Например, наш главный герой трудился руководителем направления в LSI Logic - довольно крупном производителе интегральных схем, а два других партнера инженерили в Sun Microsystems (эту компанию позже поглотит Oracle). В общем, ребята были весьма матерыми профи, а не какими-то оборванцами, бросившими колледж ради стартапа в гараже.
Приятели сходились во мнении, что компьютерная отрасль только набирает обороты, и что в самое ближайшее время машины будут использоваться для все более широкого спектра вычислительных задач. А значит, центральным процессорам (CPU) явно понадобится помощь. Эта помощь называется аппаратное ускорение вычисления.
В двух словах. CPU - это такой "мозг компьютера". Он обрабатывает сигналы и распределяет вычислительные команды. А теперь представьте, что вам на работе подкинули 10-20 задач одновременно. Что случится с вашим мозгом? Правильно, он "перегреется" и вы поймаете мощный приступ прокрастинации (=зависнете). То же самое и с центральным процессором компьютера, который должен выполнять все больше и больше задач одновременно.
Так вот, элементы аппаратного ускорения - это такие вспомогательные мини-мозги, призванные разгрузить основной мыслительный центр.
Без этих штук мы едва бы смогли параллельно запустить на ноутбуке несколько вкладок браузера, эксель, фотошоп, Телегу, и игру в отдельном окошке.
Кстати, на счет игр. Дженсен, Крис и Кертис не сомневались, что за аппаратным ускорением будущее. Оставалось лишь выбрать направление внутри этого тренда. Решили, что это будет гейминг. Если конкретнее, то их особенно привлекала бурно развивающаяся 3D-графика для этого самого гейминга. Продвинутый графон - это штука энергозатратная, вычислительные мощности она жрет как конь. Так что, друзья решили софкусироваться на графических процессорах (GPU).
В 1995 г. Nvidia выпустила свой первый продукт - мультимедийную видеокарту NV1.
Вот так она выглядела.
NV1 отличалась от аналогов тем, что на одной плате размещалось сразу несколько модулей - блок обработи 2D-графики, ускоритель 3D-графики, звуковая карта и порт для игрового геймпада приставки Sega Saturn. Кстати, в рамках этой карты Nvidia сотрудничала с Sega, что позволило портировать некоторые популярные эксклюзивы для этой консоли на ПК.
Нужно отметить, что Nvidia - это fabless (=fabricless) company, т.е. компания без своего производства. По сути, это просто конструкторское бюро. Очень большое и крутое конструкторское бюро! Они всего лишь (ну, если сравнивать с полноценной сборкой) придумывают и разрабатывают свои технологии и продукты, а непосредственной изготовкой занимаются подрядчики по контракту. Например, первый чип NV1 для Nvidia производила компания SGS Thomson-Microelectronics на своем заводе во Франции. Сейчас, конечно, у Nvidia есть кое-какие собственные производственные мощности, но львиная доля производства все равно происходит на стороне - например, с помощью тайваньских компаний.
В итоге NV1 стал прорывом и принес компании известность... хотелось бы мне написать. Но нет, он провалился! Да-да, история третьей по стоимости компании в мире началась с провала.
Дело в том, что NV1 был больше всего заточен на игровую консоль Sega. А в те годы происходит бум ПК-гейминга. Большинство ПК же работает на операционной системе Microsoft. NV1 вышел в мае 1995, а уже в сентября Microsoft представил свой API под названием DirectX.
Если упрощенно, DirectX - это специальный модуль, позволяющий разработчикам задействовать все мощности железа без написания специального кода под каждый элемент комплектующих.
Помните, большинство игрух на ПК в конце 1990-х и начале 2000-х требовали вместе с установкой самой игры поставить DirectX?
Так вот, принцип ускорения графики у чипсета NV1 принципиально расходился с таковым у DirectX. Следовательно, первый продукт Nvidia оказался принипицально несовместим с подавляющим большинством игр, которые геймеры ставили на ПК!
А учитывая, что в создание NV1 стартап бахнул почти все первые привлеченные инвестиции (первый раунд был 10 миллионов долларов - довольно серьезная сумма по тем временам), это был epic fail. Хуангу даже пришлось сократить половину сотрудников, которых к тому моменту уже успели нанять... Был момент, когда у Nvidia хватало денег всего лишь на один месяц зарплат. Тогда родился негласный девиз компании: "У нас есть всего лишь 30 дней, чтобы продолжать делать бизнес".
Так что, да, в начале своего пути сооснователи получили довольно мощный апперкот от жестоких реалий рыночной экономики.
Впрочем, Nvidia сделала правильные выводы. С пор они редко промахивались с трендами рынка, особенно в сегменте ПК.
Интересный факт. Первые годы у Nvidia не было названия. В рабочих переписках компания называла свои первые продукты "NV" - Next Version. Ну типа, новая версия этих ваших видеокарт. Когда компания развилась до такого масштаба, что без названия уже было сложно, основатели решили открыть словарь и найти что-то прикольное из похожего на NV. В итоге остановились на слове "'invidia"', что на латыни значит... "зависть". Да-да, тот самый дух неуёмной конкурентной борьбы, который позже проявился в схватках с 3dfx, ATI, AMD и другими крутыми компаниями.
Этап второй. Первый большой успех и победа над Voodoo
Есть такой миф, что Nvidia придумала видеокарты. На самом деле, это не так. Первый графический видеоадаптеры с поддержкой 3D-графики еще в бородатом 1982 году запилила IBM. Чуть позже многие другие компании выпустили свои версии. Однако первые версии были очень дорогими и не слишком производительными. В общем, узкоспециализированная история для избранных.
Действительно массовые, доступные, универсальные и широкосовместимые 3D-видеокарты появились во второй половине девяностых. Первый образец выпустила та же IBM в 1995 г., был еще чипсет S3 ViRGE от компании S3 Graphics (сейчас принадлежит тайваньской HTC). Еще было сразу несколько популярных моделей от компании Matrox, да и японцы из Yamaha тоже что-то делали... В общем, хотя океан еще не был алым, он уже стремительно краснел.
В 1996 г. на рынок выбрасывается сразу несколько успешных моделей, но настоящий прорыв происходит, когда компания 3dfx выпускает свой 3D-ускоритель под названием Voodoo Graphics.
3dfx специализировалась на графике для игровых автоматов, и их чип выдавал скорость и качество рендера, близкое к автоматам. Тогда это была вершина крутости. К тому же, их карты хорошо совмещались с ПК-играми.
Справа - графон в Quake 1 на чипсете Voodoo, слева - без оного. Как говорится, почувствуйте разницу.
Короче говоря, это был очень крутой 3D-ускоритель, который быстро завоевал популярность. Сначала среди производителей видеокарт, а позже и среди геймдев-компаний, которые целенаправленно начали оптимизировать графон своих проектов под него.
В 1998 г. 3dfx выпустила чипсет Voodoo2, который был еще производительнее первой версии. И вот с этой штукой Nvidia пришлось конкурировать. Скажу сразу, Nvidia выиграла, а позже вообще выкупила 3dfx, интегрировав к себе их наработки. Как же им это удалось?
Если вычленять самую суть, то более массовый и простой продукт победил более продвинутый. В общем, классика. Voodoo2 показывал исключительную производительность и качество текстур, к которым не могли приблизиться конкуренты. Однако Nvidia выпустил свой новый продукт - NV4, также известный как Riva TNT. Дело в том, что поверх набора ускорителей Voodoo2 нужно было отдельно прикрутить внешнюю видеокарту. А Riva TNT имела изначально встроенную видеокарту внутри своего набора (т.е. предлагала готовое решение под ключ). К тому же, Riva TNT была банально дешевле ("дешевые карты Nvidia" сейчас звучит как плохой анекдот, но тогда реально было так). Так что, Nvidia начал активно отжирать бюджетный и средний сегменты, которые благодаря растущей доступности 3D-игр росли быстрее всего.
Тем не менее, Nvidia и 3dfx активно конкурировали следующие 2-3 года. Но Дженсен Хуанг победил. Во-первых, пока у 3dfx каждый следующий чипсеть был масштабным мегапроектом, Nvidia намеренно минимизировал цикл разработки, научившись быстро выкатывать новые версии на рынок. Это позволяло еще быстрее отжимать бюджетный и средний сегмент. К тому же, Nvidia изначально заложила в конструкцию своих продуктов систему проверки чипов на брак, за счет чего у них была ниже доля неисправной продукции.
Закончилось все тем, что в 2002 г. 3dfx проиграла Дженсену Хуангу патентный спор, что окончательно добило некогда мощного игрока. В итоге Nvidia выкупила своего закадычного конкурента за 70 миллионов долларов. Первый громкий триумф.
В 1999 г. компания выпустила один из своих главных продуктов - GeForce 256, который Nvidia с гордостью называла "первым графическим процессором". На самом деле, это было не совсем так. Хотя GeForce 256 умел создавать более сложные и реалистичные трехмерные объекты за счет наложения структур, был способен обрабатывать солидный объем графических примитивов (примитивы - это простейшие объекты, из которых на экране складывается изображение), и вообще очень резво работал с графикой, он точно не был первым графическим процессором. Более того, он был даже не самым мощным в свое время. Однако, он точно выдавал оптимальную "цену-качество", а еще Nvidia весьма талантливо его пиарила (в хорошем смысле этого слова).
GeForce 256. Как говорится, найдите 10 отличий с фото NV1 выше. Но на самом деле, разница примерно как между Nokia 3310 и пятым (ну ладно, четвертым) Айфоном.
К тому моменту Nvidia уже стала крупным поставщиком графических ускорителей и видеокарт. Её выручка была в районе 200 миллионов в год, капитализация достигала 700 млн долл., а в 1999 г. компания провела IPO на NASDAQ, окончательно перестав быть стартапом.
Этап третий. Новая конкуренция на зрелом рынке
В начале 2000-х на рынке графических процессоров уже миновал этап бешеной конкуренции между кучей стартапов. Сформировались три явных лидера - Nvidia, Intel и ATI. У Nvidia и Intel было примерно по 30% рынка, у ATI - чуть меньше. Однако в 1998 г. Intel выпустил неудачный внешний ускоритель i740, так что, через некоторое время решил забить на рынок дискретных (т.е. внешних) видеокарт, состредоточившись на внутренней графике, а также других направлениях, коих у этого диверсифицированного гиганта было предостаточно.
В итоге в сегменте внешних графических модулей образовалась дуополия - Nvidia против ATI. Тут-то Дженсен Хуанг и попал в свою любимую среду ультраконкуренции. В 2000 г. ATI как раз выпустила свой самый жирный продукт, название которого вы наверняка слышали - это чипсет Radeon (сейчас это флагман компании AMD, но об этом позже).
В общем, две компании начали бодаться за самые жирные сегменты и контракты.
Сначала Nvidia стала поставщиком чипов для консоли Xbox, которую только-только начинал развивать Microsoft. Однако в дальнейшем Microsoft ушел к конкурентам из ATI. Дженсен Хуанг подумал "А чем я хуже?", и пошел к Sony с их PlayStation. Вдобавок, Nvidia стала эксклюзивным поставщиком внешних видеокарт для компов Apple. Кстати, в рамках партнерства с Sony Хуанг поступил очень мудро - Nvidia не просто продавала свои чипы, но и помогала Sony разрабатывать собственную графику для PlayStation 3 и PSP. Конечно, в перспективе Sony мог полностью перейти на свои решения, но глава Nvidia понимал, что рано или поздно это случится в любом случае (так и случилось). Так что, лучше поучаствовать в процессе, выжав из сотрудничества максимум хотя бы до создания японцами своего GPU.
Параллельно, Nvidia начала себя вести как настоящая взрослая корпорация. Она начала скупать перспективные компании и стартапы, диверсифицируя технологическую и продуктовую базу. В частности, прикупили:
Exluna - разработчика оборудования для 3D-рендеров в кино.
MediaQ - производителя чипов, которые оптимизируют работу дисплеев и аккумуляторов мобильных телефонов и прочих "беспроводных устройств".
iReady - разработчика чипов, которые "разгружали мозги" сетевого адаптера (это штука внутри компьютера, с помощью которой он ловит сеть или вайфай).
А еще, что любопытно, в 2005 г. хитрая Nvidia купила некую тайваньскую компанию ULI Electronics (сейчас она называется чуть по-другому), которая была важным поставщиком компонентов для главного конкурента - ATI. Этот удар Хуанга был крайне чувствительным для конкурента.
Второй удар по себе нанесла сама ATI. Компания продалась диверсифицированному производителю микропроцессоров AMD. В итоге ATI стала "графическим юнитом" в составе AMD, при этом лишившись большинства контрактов со своим основным потребителем - Intel (ведь AMD - это уже прямой конкурент Intel, а не какой-то там поставщик графических чипов). Угадайте, кому после этого достались безхозные контракты от Intel?
В итоге получилась очень характерная ситуация. С одной стороны, огромный процессорный холдинг купил главного конкурента Nvidia (а также, соответственно, их главный продукт - чип Radeon). С другой стороны, сама Nvidia активно диверсифицировалась, скупала компании в смежных сегментах и готовилась играть по-крупному. Все это предзнаменовало главное противостояние в сегменте графики, рендеров, процессоров и всего что с этим связано - Nvidia vs AMD ("зеленые" против "красных").
Классическое противостояние, которое идет уже почти 20 лет. Иногда еще сюда добавляют Intel, но Intel - это все же прямой конкурент для AMD. Для Nvidia Intel и конкурент, и партнер и покупатель одновременно.
Кстати, есть версия, что AMD сначала хотели купить Nvidia, но Дженсен Хуанг их послал. Этот хитрый CEO что-то знал уже тогда.
Этап четвертый. Первые ростки в направлении ИИ
Середина 2000-х. Nvidia - уже совсем серьезная корпорация, зарабатывающая по 200-300 миллионов баксов за квартал.
В 2007 г. компания выпускает свой, возможно, самый важный продукт. Очень вероятно, что именно он открыл ей путь к нынешним триллионам. Он назывался CUDA (Compute Unified Device Architecture). CUDA - это GPGPU (General-purpose computing on graphics processing units). И здесь я остановлюсь подробнее.
Дженсен Хуанг понимал, что одними ускорениями графона и рендерами сыт не будешь. Так что, Nvidia выпустил, скажем так, адаптер (ну или прееходник), который позволял задействовать мощности большинства своих графическиих чипов для обработки математических вычислений, алгоритмов и прочих веселых штук, которыми занимаются разработчики самых продвинутых технологий.
Проще говоря, с помощью CUDA разрабы смогли делать запросы на упрощенных диалектах языков C, С++ и Fortran, которые обрабатывались прямо на мощностях чипов Nvidia. Позже прикрутили еще Python, MATLAB и другие популярные языки.
Отдельно выделю крайне удачное решение добавить язык Fortran. С одной стороны, этот язык сложно назвать самым популярным для разработки (видели хоть один войтивайтишный курс про Фортран?). С другой стороны, он считается "высоким языком", на котором программисты-ученые любят вести научные изыскания. В том числе, именно Fortran стал одним из ключевых языков для ранних наработок в области искусственного интеллекта и машинного обучения (есть версия, что это вообще первый язык для ИИ).
Таким образом, помимо очевидного стимулирования спроса на чипы, успешный выпуск CUDA, вероятно, стал фундаментом (или хотя бы первым кирпичиком) для лидерства компания в вычислительных мощностях для искусственного интеллекта.
Интересный факт. В 2012 г. прошел ImageNet Large Scale Visual Recognition Challenge - крупный конкурс, где разработчики соревновались, чья технология круче всех распознает разные картинки. Лучший результат показала нейронная модель AlexNet, которая обучалась через мощности графических чипов Nvidia с помощью CUDA. Тогда окончательно стало ясно, что графические чипы в целом и Nvidia в частности ой как пошумят по мере развития ИИ. Кстати, одним из создателей AlexNet был Илья Сутцкевер, который теперь нам известен как сооснователь OpenAI и один из самых важных людей в мире современных технологий.
Молодые Илья Сутцкевер и Алекс Крижевский, а также уже солидный Джеффри Хинтон (один из самых видных ученых в области deep learning) работают над AlexNet.
Этап пятый. Новые вызовы и работа с рисками
В конце 2000-х Nvidia продолжила усиленную диверсификацию. В частности, был куплен Ageia - разработчик движка PhysX, который позволяет моделировать и разрабатывать симуляции физических явлений. PhysX - крайне важная штука для гейминга, которую активно используют Unreal Engine, Unity и другие игровые движки. Он стал весьма важным продуктом для компании.
Однако, к началу 2010-х перед Nvidia встал серьезный вызов - стремительно набирал обороты сегмент интегрированной (внутренней) графики. Это означало, что диверсифицированный крупняк вроде Intel, Sony, Microsoft, Apple и прочих становились гораздо более самостоятельными в плане работе с графическими задачами. Если в 2007 г. Intel контролировал 30% рынка графики, то к началу 2010-х - уже более половины, и продолжал усиливать свои позиции за счет поглощения целой россыпи мелких производителей.
Позиции основного бизнеса Nvidia (дискретных, т.е. "встраиваемых", решений для графики) оказались под серьезной угрозой. К тому же, в 2008 г. Nvidia выпустила большую партию чипов с дефектами, которые отгрузили Apple, Dell, HP и другим крупным ребятам. В итоге Nvidia получила серьезный репутационный ущерб, а еще пришлось раскошелиться на компенсации.
Нужно было что-то менять. В первую очередь - еще активнее диверсифицироваться, чтобы сделать бизнес-модель прочной и устойчивой.
Действовать решили по всем фронтам:
Радикально усилили чипы и прочие вычислительные продукты для игр на ПК и консоли.
Активно пошли в мобильный сегмент. Еще в 2007 г. Nvidia купила разработчика системных чипов PortalPlayer. В 2010-х на основе технологий PortalPlayer была выпущена серия процессоров (не GPU, а полноценных CPU) для мобильных устройств под названием Tegra (их еще называют "кристаллы"). Правда, на мой взгляд, Nvidia слегка промахнулась с операционной системой, ведь большинство Tegra применялось в смарфтонах и планшетах на Windows. Впрочем, это сейчас мы видим, что мобильные потуги Microsoft оказались провалом, а в начале 2010-х это была весьма перспективная история с неплохой долей рынка. Так что, бизнес Nvidia неплохо на этом вырос. Даже CEO Microsoft Сатья Наделла недавно признавался, что сворачивание мобильного бизнеса Microsoft было главной стратегической ошибкой компании.
Nvidia даже отважилась на нетипичный для себя эксперимент - выпустила собственную портативную игровую консоль Nvidia Shield Portable:
Заряженная тем самым процессором Tegra. Работала на ОС Windows.
Вообще, консоль Shield - это крайне нетипичный продукт для Nvidia. Компания всегда отличалась высокой прагматичностью при выборе конфигурации продуктов и оценке будущего спроса, всегда стараясь сделать относительно доступный продукт, который найдет отклик у массовой аудитории. Но тут получилось с точностью до наоборот. Shield стоила дороже аналогов, а игр для неё было крайне мало (хотя Nvidia даже запилила собственную платформу для разработки). Так что, хотя эксперты и игровые издания хвалили консоль за весьма недурную графику и производительность, особой популярности продукт не сыскал. Что ж, видимо, если умеешь производить чипы и процессоры, то не стоит лезть в истории про платформы и пользовательские девайсы.
Еще Nvidia начал активничать в сегменте автомобильной электроники. В том числе, в области начинки для беспилотного управления.
Но про это я расскажу во второй части. Как и про конкуренцию с AMD, качели из-за криптомайнинга, партнерства с китайцами и, собственно, путь к триллионной капитализации за счет лидерства в ИИ в последние годы. Там много интересных историй. А на сегодня хватит.
Если эта статья круто зайдет, то я быстрее сяду за вторую часть. Так что, если вам понравилось, то можете подкинуть мне дополнительной мотивации в виде плюсов, комментов и репостов статьи друзьям.
Если вам заходит такой контент, то подпишитесь на мои тг-каналы. Мне будет приятно, а вы найдете там еще больше подобного:
На своем основном канале Дизраптор я простым человечьим языком разбираю инновации, технологические продукты и знаковые компании (а еще анонсирую все свои статьи, чтобы вы ничего не пропустили).
А на втором канале под названием Фичизм более точечно пишу про новые фичи и функции продвинутых компаний и сервисов.
Я не пойму, когда это стало нормальным впадать в детство? Жена вам мама что ли, чтобы покупать видюху, Playstation? А вы ей в ответ Барби подарите, видимо, или что там у школьниц популярно? Да и вообще, откуда такие восторги от комп. игр? Ладно бы ещё школьники, студенты восхищались, а тут начинается "мальчик Петя 30 годиков, у меня идеальная жена, она подарила мне PS5". Йобаный стыд. Ещё удивляли периодические заплюсованные посты про то, что "купил на ДР сыну 1,5 года PS5/xbox, жена удивилась, я ей сказал, что это сын просил. Инфантилы какие-то, вместо жизни и зарабатывания денег - ненужные траты. Раз уж завели семью, взяли на себя ответственность, то зачем наносить такие удары по бюджету? А это, видимо, большая трата для этих мужиков, раз такая радость от видюхи/приставки. Зато теперь вал постов про разводы и алименты, ну, видимо, доигрались пацаны.