Продолжение поста «Игровая легенда из 90-х: Как работала 3dfx Voodoo "под капотом"? Пишем 3D-приложение нуля на Glide (1/2)»

Это вторая часть лонга про 3dfx Voodoo. Пришлось разбить его на две части из-за ограничений в 30.000 символов на пост у Пикабу. Сначала читайте первую часть.

Продолжение поста «Игровая легенда из 90-х: Как работала 3dfx Voodoo "под капотом"? Пишем 3D-приложение нуля на Glide (1/2)» Гаджеты, Покупка, 3D графика, Графика, Программирование, C++, 3dfx, Voodoo, Видеокарта, 90-е, Железо, Старое железо, Ретро-игры, Игры, Ретро, YouTube, Ответ на пост, Длиннопост, Telegram (ссылка)

Скрин с криво-наложенной текстурой: здесь уже был настроен сэмплер, но неправильно. А ещё тут видно артефакты отсутствия Z-сортировки наглядно.

Пока не впечатляет, да? Где же текстуры? А об этом — в следующей главе!

❯ Текстуры


Плоские модельки без текстур — это не очень круто. Ну что можно сделать с плоскими моделями, пусть даже они будут с освещением?

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

Но в Glide всё было иначе — ведь там не было понятия текстуры как объекта! Как-так? Glide позволял нам получить верхнюю и нижнюю границу адресного пространства памяти одного конкретного TMU и программист волен был выгружать текстуру куда угодно! Затем программист сохранял указатель на текстуру в видеопамяти и передавал её… в комбайнер, дабы он мог использовать текстуру по назначению! При этом TMU даже характеристики текстур не знал — эту информацию отсылал программист.

TMU поддерживает множество пиксельформатов: RGB332 (8 бит на пиксель), RGB565 (16 бит на пиксель), палитровый и собственный формат сжатия с NCC-компрессией. Тем не менее, 565 у 3dfx требует какого-то особого формата пикселей, иначе текстуры превращаются в кашу. Благо для загрузки текстур с диска, в Glide есть удобные функции и тулза texUS для создания текстур и всего набора мипов для них — gu3dfGetInfo и gu3dfLoad. Кроме того, есть функция grTexCalcMemRequired для расчета необходимого размера для текстуры в видеопамяти с учетом мипов, формата и выравнивания.

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

https://pastecode.io/s/ruf14177

После этого, нам необходимо загрузить текстуру в видеопамять юнита с помощью grTexDownloadMipMap.

https://pastecode.io/s/260k0nrr

Как же теперь указать текстуру для сэмплинга, ведь glBindTexture здесь нет? Для этого есть функция glTexSource, которая принимает адрес первого мипа и конфигурацию текстуры — которая хранится на стороне ЦПУ!

https://pastecode.io/s/6ouq99eo

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

Для этого, мы настраиваем комбайнеры на сэмплинг текстур напрямую, без умножения на цвет вершины. Альфа-канал мы не трогаем вообще — у нас нет альфа-буфера для него.

Продолжение поста «Игровая легенда из 90-х: Как работала 3dfx Voodoo "под капотом"? Пишем 3D-приложение нуля на Glide (1/2)» Гаджеты, Покупка, 3D графика, Графика, Программирование, C++, 3dfx, Voodoo, Видеокарта, 90-е, Железо, Старое железо, Ретро-игры, Игры, Ретро, YouTube, Ответ на пост, Длиннопост, Telegram (ссылка)

Запускаем программу и вот результат:


Да, первая полноценная 3D-модель с текстурой! Мы реализовали половину работы видеодрайвера вручную, однако по концовке всё равно очень приятно! Игры здесь пока ещё нет — материал вышел бы слишком большим.

❯ А где практика?



К сожалению, сегодня без практической части :( Изначально я думал что у меня всё схвачено и моя материнка на 478 с AGP-слотом вполне справиться с ролью тестового стенда для нашей демки. Однако, я не учел важный факт — существовало несколько физических версий AGP и на 478 уже поздний вариант с 1.5в/0.8в уровнями.

Материал был обещан в четверг на 11 утра, времени на заказ через почту у меня не было (новый год, посылки 1.5-2 недели задерживаются только на сортировке в Краснодаре), поэтому я начал написывать всем сервисникам у себя в городе, в надежде что у кого-то лежит на складе материнка на PGA370… в любом состоянии.

И материнка нашлась! Ей оказалась поздняя ECS P6IPAT на 815 чипсете с универсальным AGP-разъемом, который поддерживал все стандарты AGP одновременно. Продавал её мужичок всего за 100 рублей, сразу с процом и охладом :) Однако возникли определенные проблемы с поднятием платы (все электролиты необходимо менять «вкруг», а нужных номиналов под рукой не оказалось, плата стартовала раза с 3го) и накатыванием винды (помер IDE-привод), поэтому практическая часть немного откладывается…

Продолжение поста «Игровая легенда из 90-х: Как работала 3dfx Voodoo "под капотом"? Пишем 3D-приложение нуля на Glide (1/2)» Гаджеты, Покупка, 3D графика, Графика, Программирование, C++, 3dfx, Voodoo, Видеокарта, 90-е, Железо, Старое железо, Ретро-игры, Игры, Ретро, YouTube, Ответ на пост, Длиннопост, Telegram (ссылка)


❯ Заключение


И мы приходим к выводам, что для написания 3D-игры, программист в 90-х годах должен был как минимум:

  1. Иметь представлении о трансформации геометрии, что такое матрицы (геометрию можно трансформировать и без матриц, однако это не очень удобно).

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

  3. Иметь представление об основных техниках в растеризации 3D-графики: что такое перспективное деление, Z-буфер, форматы вершин, фильтрация текстур, мипмаппинг, затенение по Гуро, какие-либо методы анимации, если была необходимость и т. п.


Материал получился очень объёмным, для меня это абсолютный рекорд. Я старался собрать всю информацию о 3dfx Voodoo, которую изучил и поделится с вами не только архитектурой конкретно видеокарт, но и рассказать о программировании графических API на низком уровне и подробно рассказать, как же строится изображение «под капотом» и вашей видеокарты.

Касательно баек насчет 3dfx в СНГ: я лично родился в 2001 году, так что могу судить исключительно из услышанных мной баек и историй. А какая история с 3dfx Voodoo была у вас? Пишите в комментах!
Надеюсь, материал был вам интересен. :) Статья писалась несколько бессонных ночей, дабы успеть под новый год! Больше бэкстейджа, мыслей и проектов у меня вTelegram.

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

Продолжение поста «Игровая легенда из 90-х: Как работала 3dfx Voodoo "под капотом"? Пишем 3D-приложение нуля на Glide (1/2)» Гаджеты, Покупка, 3D графика, Графика, Программирование, C++, 3dfx, Voodoo, Видеокарта, 90-е, Железо, Старое железо, Ретро-игры, Игры, Ретро, YouTube, Ответ на пост, Длиннопост, Telegram (ссылка)

TECHNO BROTHER

1.6K постов12.5K подписчиков

Добавить пост

Правила сообщества

1-Мы А-политическое сообщество. 2-Запрещено оскорбление: Администрации Пикабу, сообщества, участников сообщества а также родных, близких выше указанных.

3-Категорически запрещается разжигание межнациональной розни или действий, направленных на возбуждение национальной, расовой вражды, унижение национального достоинства, а также высказывания о превосходстве либо неполноценности пользователей по признаку их отношения к национальной принадлежности или политических взглядов. Мат - Нежелателен. Учитесь выражать мысли без матерщины

4
Автор поста оценил этот комментарий

3DFX Voodoo купил школьный товарищ в 1998, а 17-летний я в то время обзавидовался, но купил Riva128 🙂

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

Riva в некоторых аспектах была лучше.

показать ответы
3
Автор поста оценил этот комментарий
С точки зрения гемера почти во всех. У меня была тройка как на фото в самом начале двухтысячных. Полноценно она работала в паре тайтлов сетевых шутеров. Точно UT и возможно Qll Qlll. В остальных играх в основном расстраивала. В это время игровая индустрия переходила на d3d и полноценная поддержка glide была далеко не везде.
раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Да, d3d со временем стал основным GAPI для игр. Хотя-бы потому, что OpenGL на ATI был реализован не оч хорошо и с косяками.

1
Автор поста оценил этот комментарий
Молодец!!
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Спасибо))

3
Автор поста оценил этот комментарий

Видимо в конце заголовка должно быть "(2/2)" вторая часть из двух.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

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

Автор поста оценил этот комментарий
Им столько лет уже. Может через 10 минут работы что-то вылезти? Или там проблем таких нет? А так да, я хочу собрать себе раритетную сборку из крутых железок. Элт монитор пока есть, тв тюнер и саундбластер
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

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

показать ответы
4
Автор поста оценил этот комментарий
ТС браво. Я хоть и стар (2х от ТС) но заморочится и разжевать для серой массы это достойно уважения. Продолжай!
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

показать ответы
1
Автор поста оценил этот комментарий
В свое время продал свою velocity, жалею теперь. Хочу купить, но Авито не доверяю
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я брал доставкой. В целом, норм, лучше СДЭКом доставлять. Перед покупкой попросить видос работоспособности видеокарты.

показать ответы
1
Автор поста оценил этот комментарий

Мало что понял, но плюсы на оба поста отгрузил, достойно. А будут еще посты о старых мобильных устройствах с написанием приложений для них?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Привет, будут!


Мне @NoAdO, еще полгода назад Moto E398 заслал. Сейчас с бывшими обитателями мотофана общаемся, позже хочу эльф-игрушку запилить какую-нить

показать ответы
1
Автор поста оценил этот комментарий

Конечно все относительно. Мы учились на ПК PC XT с CGA мониторами в далеком 91 году. Нам никогда не разрешали играть, но все же мы умудрялись в перемену что ни будь притащить на дискете и загрузить. На весь учебный класс стояло 10 ПК и два из низ были с EGA мониторами.

Графику EGA я оценил по достоинству тогда, когда друг принес на дискете картинки с голыми бабами. Это как журнал мурзилка и современная полиграфия полноцветная.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

АХАХАХАХА, про дискету топ) Вопрос откуда сам её друг достал)))

показать ответы
1
Автор поста оценил этот комментарий

Rendition где то в пк стоит. Пойду поищу.

Цена всегда была космос. Пока не появилась в продаже серия 3000. Первую я взял велосити 100 8 мб. Потом апгрейдил по очереди до 3500 с тв выходом. Я был фанат вуду, но 16 бит со временем стало мало, но это еще можно было терпеть - а вот текстуры маленькие - зло.

Она на фото?

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Угу, она. Красивая зараза, уже тогда взяла "цвет ATI" :)


16-бит друг другу рознь. На смартфонах 2010х, например, часто использовали именно 16-битный фреймбуфер, но никто не жаловался :)

показать ответы
1
Автор поста оценил этот комментарий

У меня побывали все вуду до 5500 включительно. Я работал в комп магазине, который занимался в том числе и б/у-шкой. Жаль, что не оставил для истории. 5500 2х чиповую я хотел купить, но стоила дофига, а умела меньше чем geforce 2ti

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Круто! Действительно ли Voodoo была относительно неподъемной с "ЗП в регионах"? Завозили ли в СНГ Rendition?

показать ответы