Всем привет! Многие знают, что купить видеокарты, до недавнего времени, было очень не просто. Особенно с достаточно большим объёмом видеопамяти, особенно за вменяемые деньги. Ещё в начале лета старенькие карты типа RX470+ до rx 590 на 8 гб. памяти стоили чудовищных 40+ т.р. в китае и около 60т.р. на авито. Сегодня мир видеокарт совсем другой, на общеизвестном Китай-сайте такие карты упали в цене до 6 т.р., при этом утверждают, что карты новые. Мне стало интересно - что это за звери и почему так недорого. Ну и заказал.)
Выбор пал на rx 580 2048SP JieShuo. Что такое 2048SP? Это немного урезанная версия rx 580. Наша карта будет на уровне RX 570. В видео есть сравнение этих видеокарт, наша - rx 570.
Карта пришла в простой картонной коробке, тщательно обложенной пупыркой. Почта России коробку не помяла и не потеряла, за что ей огромное спасибо). Сама карта выглядит новой, с приличной системой охлаждения. Тепловые трубки, судя по всему, просто железные. Карту ставил в другом ПК, вместо скринов просто фотографировал, так что как то так). Подключение доп. питания - 6 пин. Из разъёмов - 3 дисплей порта и HDMI. На памяти видны термопрокладки.
Разобрал, поскольку в отзывах на алике рекомендовали проверить термопасту и прокладки, ибо порой там бывают приключения. Раскручивается быстро и без проблем, термопрокладки и термопаста есть, судя по отпечаткам - прилегают хорошо. Термопрокладки мягкие, не сухие. Кристалл процессора целый, сколов нет. Цвет текстолита на перегретый не похож.
Чтож, давайте загоним её в ПК и будем посмотреть).
Завелась карта сразу и без проблем, драйвера скачаны с офф сайта. В системе определяется как rx 580 2048SP. Стресс тест комбустера за 30 минут нагрели карту до 60 градусов, вентиляторы работают на 30% мощностей, то есть проблем с охладом нет. Это данные с сайта Passmark.
Посмотрим, соответствует ли наша карта этим данным.
И таки да, в целом разница на уровне погрешности. То есть можно с уверенностью сказать, что карта точно соответствует заявленной.
В общем и целом я полностью удовлетворён полученными результатами. Карта работает как и должно, охлаждение в порядке, Китайцы молодцы). Таким образом эта видеокарта - лучшее, что есть на рынке по цена - производительность. Своё любопытство удовлетворил, всем добра).
P.S. забыл добавить картинку с комбустером). 50 минут - 63 градуса.
Биткоин, лайткойн, майнинг, хешрейт, эфир, блокчейн, криптовалюта, — скорее всего, хотя бы часть из этих слов вы активно видели и слышали на протяжении пары последних месяцев, даже, если особо этим не интересуетесь.
При этом странным образом из продажи исчезли все игровые видеокарты. Почему так произошло? Что же такое этот майнинг? Когда ждать видеокарты в продаже снова? И как поиграть в новые игры без мощных GPU? Об этом и многом другом мы сегодня и поговорим. Как всегда - текстовая версия под видео.
Представьте себе утопичное будущее — дома отапливаются солнечными батареями и фермами, на марсе, колония шахтеров нашла крупные залежи вибраниума, а наличных денег никто не видел уже пару десятков лет. На счет вибраниума я не уверен, но вот то что традиционных денег может не стать — такая вероятность очень высока. Вас может это удивить но по своим экономическим условиям и последствиям платежи криптовалютой более похожи на платежи именно наличными деньгами, чем на варианты безналичных платежей.
Я считаю, что в будущем, большинство денежных эквивалентов рано или поздно будут опираться на Блокчейн — цепочку информационных блоков, в каждом из которых хранятся данные о совершенных транзакциях. Другими словами, это электронная книга бухгалтерского учета. На этой технологии и основано большинство криптовалют. Блокчейн не хранится в одном месте, он дублируется у всех участников сети, а не в банке, как это происходит с цифровыми деньгами. Каждый пк в цепочке — является ревизором этой сети, потому что у него записаны все ходы. Подделать, подменить эту цепочку невозможно. Из этого вытекает еще один факт — прозрачность всех операций, вся информация о совершенных сделках находится в открытом доступе.
Представьте себе сложную формулу, которая при ее последовательном решении добавляет к итоговому числу цифру, появившись эта цифра больше никуда не денется и каждый пк в сети, получает данные о ней, а тот пк кто участвовал в ее поиске получает в награду долю от этого числа. Это и есть майнеры.
Майнинг — заставляем компьютер приносить деньги
По сути майнинг — это решение определенных математических задач, за что вы получаете вознаграждение. То есть это обмен вычислительной мощности, например, вашего ПК на деньги. Звучит заманчиво, не правда ли?
Причем сами вычисления, разумеется, не простые — в процессе майнинга выстраивается цепочка связанных между собой блоков, которые являются массивами данных. Причем каждый блок жестко связан с предыдущим, что убирает саму вероятность подлога. Такая цепочка блоков и называется блокчейн.
И как раз вычислительная задача — это найти новый блок в цепочке по специальным правилам: например, чтобы его контрольная сумма начиналась с определенного количества нулей. Причем это количество определяется таким образом, чтобы все текущие вычислительные мощности рождали новый блок раз в определенное время — например, каждые 10 минут.
Тот, кто нашел новый блок, получает за это вознаграждение. Однако чем больше блоков в цепочке и больше людей копают, тем сильнее растет сложность, а вот вознаграждение падает. Так, сначала в системе биткоинов вам давали по 50 монет за блок, а первые блоки можно было рассчитать на листке бумаги. Теперь за каждый блок вам дадут лишь 12.5 биткоинов, а для получения одного блока тратятся огромные вычислительные мощности. Ежегодно на добычу биткоинов уходит больше электроэнергии чем потребляет Аргентина или Нидерланды.
И именно из-за того, что сложность постоянно растет, а выплаты уменьшаются, майнить биткоины на обычном компьютере сейчас абсолютно невыгодно — вы за электричество отдадите куда больше денег. В общем и целом, с 2012-2013 года копать биткоины стоит только на специализированных устройствах, которые называются ASIC-ами. В них стоят процессоры, которые заточены именно под майнинг биткоина, что позволяет добывать на них золотую криптовалюту.
Эфир — добыча серебра на видеокартах
Тогда откуда бум майнинга, спросите вы? Неужели у кучи людей есть ASIC-и? Не совсем. Все дело в том, что биткоин — просто самая старая и основная криптовалюта. За последние 10 лет так называемых альткоинов родилось великое множество — это и эфир, и монеро, и риплы, и сотни других. У них всех свои сложности и принципы получения новых блоков, объединяет их лишь наличие блокчейна и вознаграждение за каждый новый блок. У большинства из них есть важная особенность: как курсы валют третьих стран мира, они завязаны на доллар, то есть биткоин. Если растет последний — растут и альткоины. Если он падает — в трубу летят и другие.
Вот и получается, что если майнить биткоины на домашнем ПК сейчас абсолютно не выгодно, то вот эфир благодаря резкому росту биткоина сейчас находится в такой стадии, что его можно копать на обычных пользовательских видеокартах, получая сверхприбыли.
Единственное ограничение в данном случае — вам нужно как минимум 5 ГБ видеопамяти, ибо вес так называемого DAG-файла с информацией по эфиру на данный момент уже превышает 4 ГБ.
Но, разумеется, не эфиром единым: так, если у вашей видеокарты 4 и меньше гигабайт памяти, на ней можно копать к примеру Ravencoin. Да, прибыли будут меньше, чем от эфира, но все еще затраты на электричество вы отобьете в разы.
Майнинг наложился на дефицит
Подводя итог: курс биткоина поднялся, потянул за собой остальные альткоины, которые можно добывать на видеокартах, и такая добыча стала снова приносить большие деньги. Просто для примера, та же RTX 3080 может приносить более 30 тысяч рублей в месяц, что даже при текущей стоимости позволяет ее окупить менее чем за полгода. Даже старая добрая GTX 1060 с 6 ГБ подарит вам 6-7 тысяч в месяц — хватит чтобы оплатить не только электричество, но и коммуналку в целом.
Поэтому и не удивительно, что с учетом таких прибылей с полок магазинов смели просто все видеокарты с 5 и более гигабайтами памяти и многие из тех, что имеют 4 ГБ — а ведь это как раз те GPU, на которых можно комфортно поиграть.
И, что самое печальное, бум майнинга наложился на дефицит и видеопамяти, причем даже старых стандартов типа GDDR5, и графических чипов. Причин тут много: так, например, львиную долю мощностей TSMC забирает себе Apple для производства своих ARM-процессоров, да и чипы для новых консолей делать нужно. Что касается GPU для RTX 3000, то их делает Samsung на не самом популярном 8 нм техпроцессе, из-за чего их тоже на рынке оказывается не ахти как много.
Ну и если добавить сюда такую любопытную информацию, что майнеры скупают видеокарты штабелями прямо на заводах, предлагая нередко в два раза больше их реальной стоимости, не удивительно, что до магазинов доходят просто крохи, которые опять же русские барыги не брезгуют продавать с хорошей наценкой.
Сколько продлится эта вакханалия?
Первый бум майнинга продолжался около полугода, но тогда не было прямо жесткого дефицита видеокарт: да, они стоили дороже, временами даже вдвое, но такого, чтобы в DNS была сиротливо выставлена одна GTX 1660, не было. Сейчас сама волна подъема выше — биткоин, пробил отметку в 50 тысяч долларов, спасибо Илону Маску, который подшумок купил его по 30 тысяч, и запульнул об этом свой волшебный твит, в одночасье заработав в два раза больше, чем приносит тесла за год.
Волну хайпа подхватил и Twitter, который планирует тоже вложиться в биткоин. Когда все это прекратится, едва ли кто-то сможет сказать.
Верить тут обещаниям производителей не стоит: так, глава Nvidia еще в середине осени обещал, что к началу 2021 года дефицит на RTX 3000 пропадет. В итоге те, кто тогда не послушал «куртку» и урвал себе RTX 3080 за 80 тысяч, могут сейчас только радоваться, ибо стоят такие видеокарты уже под 150 тысяч. Новые обещания что AMD, что Nvidia звучат так: в первом квартале видеокарт будет мало, ждать более-менее нормальной доступности стоит лишь во второй половине года. Как будет на самом деле — знают только Док и Марти.
Но есть и радостная новость: очевидно, рано или поздно бум майнинга закончится, и биткоин упадет, утянув за собой на дно остальные криптовалюты. Как итог, это сделает майнинг на GPU куда менее выгодным, и различные торговые площадки наполнятся видеокартами и игровыми ноутбуками, на которых сейчас тоже активно майнят. Разумеется, в конечном итоге это приведет к тому, что упадут и цены на новые видеокарты. Так что остается только дождаться этого момента.
Я хочу поиграть здесь и сейчас, что мне делать?
Первый и самый простой способ — это воспользоваться облачным сервисом, устанавливаете клиент на свой древний пк и играете на уделенном ПК, только интернет нужен нормальный.
Второй способ — это купить ноутбук с новенькой Nvidia RTX 3000. Да, майнить на ноутбуках тоже можно, но куда менее выгодно, все-таки нужно оплачивать кроме мобильной видеокарты все остальное железо, которое для добычи криптовалюты бесполезно. Так что пока майнеры ноутбуки особо не жалуют, и если курс эфира не вырастет еще в полтора раза, то ничего не изменится.
Минусы такого способа очевидны: такие ноутбуки стоят дорого, и модели с RTX 3070 обойдутся вам в 150-180 тысяч рублей, при этом вы получите уровень десктопной RTX 3060. С учетом FHD-разрешения вы без проблем сможете поиграть во все новинки на ультра-настройках графики, но все еще ценник, конечно, отпугнет многих. Из плюсов — это все же ноутбук, то есть захватив с собой зарядку вы можете играть где угодно.
Ну и последний способ — это купить видеокарту, которая майнерам не особо интересна, но при этом способна тянуть современные игры. В основном это модели с 4 ГБ видеопамяти, такие как Nvidia GTX 1650, AMD RX 5500 или недавно вернувшуюся в производство старушку 1050 Ti . С одной стороны, супервыгодный эфир на них не помайнишь, а копать что-то другое многие уже не хотят. С другой стороны, такие видеокарты вполне комфортно чувствуют себя в современных играх: да, на ультра-настройки замахнуться не получится, но тот же Cyberpunk 2077 вполне неплохо бегается на смеси средних и низких настроек в FHD, игры проще вообще позволяет выставить и высокие пресеты.
Самый главный минус — хотя такие видеокарты и доступны относительно массово, цены на них все еще ощутимо выросли, и за простейшие GTX 1650 хотят уже по 18-20 тысяч рублей, что в полтора раза больше их реальной цены. Но если вы прям очень-очень хотите поиграть и не собираетесь ждать окончания бума — такой вариант тоже подходит.
Итоги: записываемся в секту ждунов
Какой наш совет обычным геймерам? Ждите. Видеокарты все-таки не являются продуктом первой необходимости, и хватает старых классных игр, которые отлично идут даже на интегрированной графике — самое время вспомнить о таких проектах. Пишите в комментарии, свои любимые олдовые игры, чтобы остальные узнали об этих шедеврах! В любом случае рано или поздно шахтерская вакханалия закончится и мы все сможем себе добыть отличную карточку за приятные деньги.
2025 год. После перехода на Ethereum 3.0 за одну монету криптовалютного серебра дают 25 000 долларов, RTX 5030 окупается за пол года, а Vega 13 и Intel HD Graphics 830 считаются игровыми решениями, ведь они отлично тянут S.T.A.L.K.E.R! Нет, не только вышедшую вторую часть, в него играют облачные консольщики. Классику - «Тени Чернобыля»...
Страшно? А ведь такое будущее может стать реальным — Bitcoin снова торгуется дороже 40 000 долларов за монетку, Эфир и не думает дешеветь, а Ravencoin за пару недель утроил свою цену. Конечно, вы можете сказать, что текущее повышение может быстро прекратиться, однако есть несколько предпосылок к тому, что высокие курсы криптовалют с нами навсегда, как и видеокарты по двойной цене.
Нас продолжают кормить обещаниями
Давайте перенесемся почти на год назад, в сентябрь 2020-ого. Nvidia только что представила свои инновационные RTX 3000, которые ощутимо обгоняют решения предыдущего поколения. Однако всем желающим купить видеокарты не получается: они попадают на полки магазинов в единичных количествах, а устроенная Nvidia распродажа через AliExpress завершается за секунды.
Разумеется, геймеры недовольны таким стартом продаж, на что глава Nvidia Дженсен Хуанг отвечает, что дефицит честно-честно закончится ближе к концу года, и на Рождество любой геймер сможет купить себе новенькую RTX 3080 за рекомендованный прайс в 64 тысячи рублей.
Но вот наступает октябрь, а потом и ноябрь. Поступившая в продажу RTX 3070 также улетает за секунды, а цены на видеокарты и не думают падать — их предлагают с наценкой в 20-30%. Хотя, глядя на современные цены, я бы сказал что переплата «всего» 20-30%.
Аналогично проваливается и старт продаж новых видеокарт AMD линейки RX 6000 — некоторые крупные европейские магазины получили их в количествах всего пару десятков штук, хотя один из топ-менеджеров компании публично объявил, что провала как у Nvidia не будет.
И с тех пор началась гонка обещаний — сначала конец дефицита пророчили к началу 2021 года. Потом, когда начался второй бум майнинга, стали говорить о середине года, теперь все чаще представители компаний и крупные новостные сайты сообщают, что вот точно все смогут купить себе видеокарты к концу года.
А что мы видим на деле? Летняя просадка курса Bitcoin с 60 до 30 тысяч долларов и удержание его на этом уровне в течение месяца, конечно, повлекло за собой снижение остальных майнерских криптовалют, и это действительно вылилось в падение стоимости видеокарт.
Однако рекомендованных цен мы и близко не увидели, особенно в странах СНГ. Самые дешевые RTX 3060, даже с ограничителем майнинга, продаются дороже 50 тысяч рублей, то есть почти вдвое выше рекомендованного ценника.
Свою лепту внесло и правительство Китая, полностью запретив в стране майнинг. Казалось бы, это должно серьезно пошатнуть ряды криптокопателей, большая часть которых проживает в Поднебесной, но нет — крупные пулы быстро соориентировались и перебрались в другие страны с дешевым электричеством, такие как Канада и Казахстан. А домашние майнеры быстро распродали свои в хлам замученные видеокарты по рекомендованным ценам, как минимум выйдя в ноль, а на деле неплохо заработав.
С учетом того, что курсы криптовалют снова стали расти, а с полок магазинов вновь начали пропадать видеокарты, надежды на рекомендованные цены к концу года развеиваются как сизый дым, на котором они работают. Так что ждем к осени новых клятвенных обещаний, что дефицит вот точно закончится. В начале 2022 года.
Nvidia продолжает проигрывать майнерам. Может в этом и состоит ее план?
В эпоху бума майнинга крупнейший производитель видеокарт находится в щекотливом положении. С одной стороны, удовлетворить спрос и со стороны криптокопателей, и со стороны геймеров, у Nvidia не получается — для этого нужно в кратчайшие сроки в разы нарастить производство GPU, и не факт что майнеры не скупят их подчистую.
С другой стороны, чисто с экономической стороны компании без разницы, куда в итоге попадут видеокарты с ее чипами, в риги для майнинга или в ПК для игр. Однако все же маркетологи Nvidia не дураки, и отлично понимают, что бум майнинга может рано или поздно закончиться, а геймеры останутся навсегда, и поэтому портить отношение с последними не стоит.
Как итог, в начале весны мы увидели RTX 3060 со встроенным ограничителем майнинга. И первый блин оказался комом, так как ограничивал он только добычу Ethereum, да и то недолго — обходные пути были найдены буквально через неделю, а в дальнейшем Nvidia сама «случайно» слила драйвер, который вообще убирает ограничение.
Второй блин компания испекла в начале июня, когда в продажу поступили RTX 3080 и 3070 Ti. Защиту от майнинга Ethereum на них обойти не удалось до сих пор. Получается, Nvidia победила?
Едва ли. Ravencoin, Conflux, Ergo — (и еще несколько) криптовалют, которые на этих видеокартах добываются без ограничений. Да, они несколько менее выгодные и более горячие, чем «эфир», но все равно даже при покупке видеокарты с нуля они окупаются всего за год-полтора, а то и меньше.
Это же касается и остальных LHR-видеокарт, то есть RTX 3060, 3060 Ti, 3070 и 3080. Да, вторая ревизия с новым чипом и новыми драйверами также не позволяет выгодно добывать на них Ethereum, но никто не мешает копать любой другой альткоин без ограничений — а, значит, майнерам эти видеокарты все еще интересны.
Все это заставляет задать Nvidia один неудобный вопрос — неужели инженеры компании не знали, что Ethereum не является единственной криптовалютой, которую можно добывать на видеокартах? Почему майнинг остальные монеток так и остается полноценным? Уж не сделала ли компания ограничитель просто для отвода глаз, чтобы показать, что формально она на стороне геймеров?
Об этом же намекают и видеокарты линейки CMP. Ее Nvidia официально анонсировала для майнеров — дескать это решения, где нет никаких ограничителей на шахтерство, но и при этом нет видеовыходов, да и гарантия всего 3-6 месяцев. Когда вы в последний раз о них слышали? И я о том же: майнерам такие видеокарты абсолютно не нужны. За полгода они не успевают отбиться, а отсутствие видеовыходов ставит крест на их продаже геймерам в будущем.
Вот и получается, что на деле Nvidia не интересуют судьбы игроков, им важны только деньги. Но, разумеется, напрямую компания это не показывает. Впрочем, AMD в этом плане ничуть не лучше — красные вообще открыто заявили, что никакими ограничениями заниматься не будут, и их видеокарты во всех задачах будут показывать 100%-ный уровень производительности.
Криптовалюты стали воспринимать всерьез
Всего 10 лет назад криптовалюты воспринимали как интересную шутку, тратя десяток тысяч Bitcoin на пару пицц к ужину. Несколько лет назад, во время Великого Первого Бума Майнинга, криптовалюты считали скамом и пирамидой, где первые вошедшие делают деньги из воздуха, а остальные в лучшем случае остаются при своих.
Но теперь, когда мы живем во время Второго Бума Майнинга, все поменялось. Да, многие, глядя на волатильность криптовалют, продолжают считать их скамом. Однако при этом виртуальные монетки начала признавать платежная система Visa. Tesla и вовсе предлагает купить за них автомобиль. И даже холдинг AMC, владеющий крупнейшей в мире сетью кинотеатров, к концу года позволит купить билет и попкорн за Bitcoin.
Все это говорит о том, что многие крупные компании увидели в криптовалютах будущее и стали их поддерживать. Да что там компании — даже целые страны. Сальвадор, теперь считает Bitcoin легальным платежным средством в стране! Да, это маааленькая страна в Центральной Америке с самой высокой плотностью населения в 6.5 млн человек. Но на минуточку - именно там жили Майя.
В любом случае, все это оказывает виртуальным монеткам ощутимую поддержку. Иными словами, все меньшему числу влиятельных людей хочется, чтобы Bitcoin опустился обратно к нескольким тысячам долларов. А раз криптовалюты падать не будут — получается, и майнинг никуда не денется: всегда найдется монетка, которую выгодно копать. И после этого кто-то еще верит, что дефицит видеокарт закончится к концу года?
Будущие видеокарты тоже будут в дефиците
Многие геймеры уже махнули рукой на текущие видеокарты Nvidia Ampere. Да, линейка RTX 3000 получилась интересной, и ее представители временами в полтора раза быстрее предшественников, но все равно мало кто согласен переплачивать за такие видеокарты вдвое. Кто-то уже решил купить себе консоль, кто-то перешел на облачный гейминг, а многие из тех, у кого уже есть неплохие видеокарты, решили подождать новых линеек Nvidia и AMD.
И первые слухи, казалось бы, оптимистичные: нам обещают, что решения RTX 4000 и RX 7000 будут ощутимо быстрее текущих видеокарт. Правда, частично этого добьются увеличением тепловыделения таких карточек до мощностей неплохих блоков питания, но все еще прирост производительности в полтора, а то и два раза, того стоит.
Правда, эти же слухи говорят, что GPU для будущих решений Nvidia будет все также производить только Samsung по своему 5-нм техпроцессу, а память будет использоваться стандарта GDDR6X. И это большая проблема. Почему? Да потому что и Samsung, и единственный производитель такой видеопамяти Micron и повинны в текущем дефиците RTX 3000.
Посудите сами: производить память стандарта GDDR6 умеют все крупные вендоры - Samsung, Micron и Hynix. Как итог, довести тут дело до дефицита сложнее, чем в случае с GDDR6X, которую умеет делать только Micron, и которой нужно очень много — по 24 одногигабайтных чипа на RTX 3090. С учетом того, что едва ли будущая RTX 4090 будет довольствоваться 10 ГБ памяти, нагрузка на Micron будет еще выше.
С видеочипами аналогично: текущие RTX 3000 производятся силами Samsung по 8-нм техпроцессу, который есть только у них. Иными словами, судьба всех текущих видеокарт Nvidia зависит от одного производителя. Который, ожидаемо, не справился с наплывом майнеров. С учетом того, что будущий 5-нм техпроцесс будет еще сложнее в освоении — едва ли ситуация с доступностью GPU станет лучше.
Но, может, у AMD дела обстоят веселее? Не совсем. С одной стороны, компания использует обычную память GDDR6, с доступностью которой все лучше. Но, с другой стороны, GPU для Radeon производит известный чипмейкер TSMC. Тот, который и процессоры для AMD делает, и SoC для Apple, да и вообще является крупнейшим контрактным производителем чипов. Поэтому он тоже завален заказами и не успевает их выполнять.
Так что если вы ждете, что будущая RTX 4060 или RX 7600 будут широко доступны — увы, к этому нет предпосылок. А с учетом того, что за год майнинг не исчезнет — дефицит будущих новинок может быть еще глобальнее, чем мы видим сейчас.
Майнеры сильнее блокчейна
4 августа — дата, которая была помечена красным в календаре любого знающего майнера. Все дело в том, что в этот день был официально запущен форк сети Ethereum под названием London, одно из нововведений которого — снижение доходов майнеров. Именно так Виталик Бутерин, создатель сети, хочет вывести ее из пучины гринда денег в свободную распределенную платежную систему.
И его ждал провал. Собственно, как и геймеров, которые надеялись на чудо и рост окупаемости видеокарт до нескольких лет. Все дело в том, что в ответ на теоретическое падение прибыли курс Ethereum резко вырос до 3 тысяч долларов, и тем самым копатели криптовалютного серебра стали получать даже больше денег, чем до 4 августа.
Все это очень хорошо показывает, что будущий переход на Ethereum 2.0, который вообще должен поставить крест на майнинге, скорее всего просто не сработает. Майнеры уже сильнее создателя сети. И, к слову, Виталик это хорошо понимает и пока не торопится обнародовать точную дату перехода на вторую версию «эфира» — он вполне справедливо боится, что в итоге просто получится никому не нужный Ethereum 2.0 и новый «классический эфир».
Итог — у геймеров нет шансов
Нам продолжают обещать, что дефицит вот-вот закончится, уже почти год, а на деле воз и ныне там. Nvidia и AMD вообще без разницы, кому попадут видеокарты — им важнее красивые цифры в финансовых отчетах. Будущие видеокарты все также будут использовать дефицитные комлектущие, ну и под конец — криптовалюты все глубже заходят в нашу жизнь.
Чем это грозит нам, обычным компьютерщикам? Игровые ПК станут котироваться как иномарки и будут доступны не всем. Кто-то сдастся и перейдет на консоли, на которых пока еще нельзя майнить. Единственной доступной графикой станут интегрированные в процессоры решения, которых будет хватить для запуска популярных онлайн-игр. Для геймеров настанут тяжелые времена.
Очень кстати компания Valve решила выпустить свою портативную консоль Steam Deck. Посудите сами, майнерам она не интересна от слова совсем, а вот геймерам — вполне: с учетом HD-экрана на 7'' картинка даже на низких настройках графики будет выглядеть неплохо, а встроенная графика на архитектуре RDNA2 способна потянуть все современные хиты.
Также на фоне бума майнинга все большее количество геймеров обращают внимание на игры через облако. Тут тоже все просто: в крупных городах получить скорость в 15-20 мбит/с можно даже по LTE, и этого вполне хватает для стриминга картинки в FHD. Да, все еще есть шероховатости в виде пинга и временами мыльной картинки, но разумеется в будущем это решится. Кроме того, такой облачный гейминг очень дешев — за стоимость хорошего игрового ПК вы сможете играть лет 10, если не больше.
Так что гейминг недалекого будущего может существенно отличаться от того, что мы видим сейчас. Большая часть ПК-игроков будут сидеть на интегрированных видеокартах или портативных консолях, которые майнерам не интересны. Тем, кому нужно что-то больше Dota или CS: GO, уйдут в облака или на PlayStation с Xbox. Ну а те немногие, кто сможет себе позволить компьютер с топовой видеокартой, по праву будут считаться ПК-бояринами.
Подписывайся и читай IT-новости и интересные авторские статьи.
Это вторая часть лонга про 3dfx Voodoo. Пришлось разбить его на две части из-за ограничений в 30.000 символов на пост у Пикабу. Сначала читайте первую часть.
Скрин с криво-наложенной текстурой: здесь уже был настроен сэмплер, но неправильно. А ещё тут видно артефакты отсутствия Z-сортировки наглядно.
Пока не впечатляет, да? Где же текстуры? А об этом — в следующей главе!
❯ Текстуры
Плоские модельки без текстур — это не очень круто. Ну что можно сделать с плоскими моделями, пусть даже они будут с освещением?
Те читатели, которые имеют опыт программирования графики наверняка знают, что видеодрайвер сам распоряжается видеопамятью с точки зрения аллокатора (механизм, управляющий выделением динамической памятью — т. е. той памятью, которая может быть выделена под объект, освобождена и затем занята другим объектом). Программист лишь создаёт текстуру, указывает число мипов и выгружает её на видеокарту — сейчас даже генерация мипов это задача видеодрайвера и самой видеокарты.
Но в Glide всё было иначе — ведь там не было понятия текстуры как объекта! Как-так? Glide позволял нам получить верхнюю и нижнюю границу адресного пространства памяти одного конкретного TMU и программист волен был выгружать текстуру куда угодно! Затем программист сохранял указатель на текстуру в видеопамяти и передавал её… в комбайнер, дабы он мог использовать текстуру по назначению! При этом TMU даже характеристики текстур не знал — эту информацию отсылал программист.
TMU поддерживает множество пиксельформатов: RGB332 (8 бит на пиксель), RGB565 (16 бит на пиксель), палитровый и собственный формат сжатия с NCC-компрессией. Тем не менее, 565 у 3dfx требует какого-то особого формата пикселей, иначе текстуры превращаются в кашу. Благо для загрузки текстур с диска, в Glide есть удобные функции и тулза texUS для создания текстур и всего набора мипов для них — gu3dfGetInfo и gu3dfLoad. Кроме того, есть функция grTexCalcMemRequired для расчета необходимого размера для текстуры в видеопамяти с учетом мипов, формата и выравнивания.
Я не стал писать сложный аллокатор, поскольку игра не требует динамической видеопамяти и может сразу загрузить уровень «пачкой», а при загрузке следующего — просто освободить всю память.
Как же теперь указать текстуру для сэмплинга, ведь glBindTexture здесь нет? Для этого есть функция glTexSource, которая принимает адрес первого мипа и конфигурацию текстуры — которая хранится на стороне ЦПУ!
Но если мы сейчас запустим программу, то никакой текстуры мы не увидим. Потому что сначала нужно настроить сэмплер и комбайнеры!
Для этого, мы настраиваем комбайнеры на сэмплинг текстур напрямую, без умножения на цвет вершины. Альфа-канал мы не трогаем вообще — у нас нет альфа-буфера для него.
Запускаем программу и вот результат:
Да, первая полноценная 3D-модель с текстурой! Мы реализовали половину работы видеодрайвера вручную, однако по концовке всё равно очень приятно! Игры здесь пока ещё нет — материал вышел бы слишком большим.
❯ А где практика?
К сожалению, сегодня без практической части :( Изначально я думал что у меня всё схвачено и моя материнка на 478 с AGP-слотом вполне справиться с ролью тестового стенда для нашей демки. Однако, я не учел важный факт — существовало несколько физических версий AGP и на 478 уже поздний вариант с 1.5в/0.8в уровнями.
Материал был обещан в четверг на 11 утра, времени на заказ через почту у меня не было (новый год, посылки 1.5-2 недели задерживаются только на сортировке в Краснодаре), поэтому я начал написывать всем сервисникам у себя в городе, в надежде что у кого-то лежит на складе материнка на PGA370… в любом состоянии.
И материнка нашлась! Ей оказалась поздняя ECS P6IPAT на 815 чипсете с универсальным AGP-разъемом, который поддерживал все стандарты AGP одновременно. Продавал её мужичок всего за 100 рублей, сразу с процом и охладом :) Однако возникли определенные проблемы с поднятием платы (все электролиты необходимо менять «вкруг», а нужных номиналов под рукой не оказалось, плата стартовала раза с 3го) и накатыванием винды (помер IDE-привод), поэтому практическая часть немного откладывается…
❯ Заключение
И мы приходим к выводам, что для написания 3D-игры, программист в 90-х годах должен был как минимум:
Иметь представлении о трансформации геометрии, что такое матрицы (геометрию можно трансформировать и без матриц, однако это не очень удобно).
Понимать, как работает конвейер видеокарты, что такое стейты, комбайнеры, каким образом происходит управление памятью, организация фреймбуфера и Depth-буфера.
Иметь представление об основных техниках в растеризации 3D-графики: что такое перспективное деление, Z-буфер, форматы вершин, фильтрация текстур, мипмаппинг, затенение по Гуро, какие-либо методы анимации, если была необходимость и т. п.
Материал получился очень объёмным, для меня это абсолютный рекорд. Я старался собрать всю информацию о 3dfx Voodoo, которую изучил и поделится с вами не только архитектурой конкретно видеокарт, но и рассказать о программировании графических API на низком уровне и подробно рассказать, как же строится изображение «под капотом» и вашей видеокарты.
Касательно баек насчет 3dfx в СНГ: я лично родился в 2001 году, так что могу судить исключительно из услышанных мной баек и историй. А какая история с 3dfx Voodoo была у вас? Пишите в комментах! Надеюсь, материал был вам интересен. :) Статья писалась несколько бессонных ночей, дабы успеть под новый год! Больше бэкстейджа, мыслей и проектов у меня вTelegram.
Материал подготовлен при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, дабы не пропускать новые статьи каждую неделю!
Принесли в ремонт сию карту с жалобами мол вроде работает, ну картинка есть, драйвера тоже, хотя несколько раз была ошибка 43 почему-то, тесты не держит почти никакие, вылетает везде через какое-то время, тот же фурмарк через пару минут вылетает
Были подозрения на неисправность чего-то другого в системе владельца
Пока картинка и правда стала пропадать, в фурмарке не успела прогреться даже
И кино пропало наглухо, только перезагрузка кнопкой помогала
Если верить кодам, то всё работает и кино вообще-то должно быть, только вот его уже не стало
Игровой бенчмарк в режиме тестирования "крутим нонстопом, пока юзер сам не закроет тест" карта первый раз прошла успешно и начала второй круг
И через несколько секунд вылез синий экран вообще, потом в перезагрузку ушла система
Значит разбираю карту и буду смотреть, что там
А там все прокладки со стороны радиатора поменяны на самые дешёвые, синие уж точно, насчёт других не знаю уже.
Реакция на эти прокладки у мастеров обычно такая
Осмотрев плату стало понятно, что гпу уже реболился когда-то, даже сделано было добротно, вот только флюс вокруг чипа не отмыли
Память такая же, но частично, потому что 3 чипа сверху 20го года, а остальные 19го
К тому же ВСЯ память 19го года гретая, ну а почему нет
А может память не гретая и показалось? Вот сниму всю память для замены на новую и будет видно уже
А нет, не показалось, везде флюс
Отмою плату и установлю новую память
Частично заменю прокладки на нормальные, ибо всех подряд нету просто
Готово, можно собирать и тестировать
Замена памяти помогла, карта стала работать, фурмарк дерижт и не вылетает ничего
По графику температуры можно судить, ну или по счётчику минут в углу
Пожалуй, многие из вас помнят, какими были мобильные игры до и после выхода первого 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);
Переходим к обработке ввода. Тут ничего сложного нет, ловим события 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; }
Теперь мы сможем управлять нашей машинкой в игре (которой пока ещё нет). Самая-самая основа для реализации игры подобного плана у нас есть, пора переходить к геймплею!