Name: John Carmack Email: Description: Programmer Project: Last Updated: 06/27/2002 21:18:25 (Central Standard Time) --------------------------------------------------------- June 27, 2002 -------------Заметки о графических акселераторах:
Вынужден принести свои извинения Matrox – их реализация текстурирования посредством карт смещения оказалась НЕ квадратичной. Перепутал с некоторыми другими компаниями, применяющими такой метод. Та реализация, которую использует Matrox, по сути, очень неплоха, и даже если мы не будем ее использовать из-за усиления геометрии, она всё равно сможет задавить любую другую quad-based технологию.
На прошлой неделе я получил карту 3Dlabs P10 и проверил её производительность и возможности. Из-за моей постоянной занятости и отсутствия свободного времени, подчас именно первое впечатление от карты определяет мои дальнейшие с ней отношения и то количество времени, которое я ей уделю. Помнится, я несколько месяцев не общался с ATi после того, как они передали мне образец карты Radeon 8500 с кривыми драйверами, некорректно выводившими консоль. :-)
Я был весьма впечатлен тем, что у P10 оказались равно успешно функциональными как ARB_ расширения (за исключением зеркальных бликов), так и комбинаторы регистров чипа NV10 (расширение NV_register_combiners). Я столкнулся только с двумя случаями полностью некорректной работы с любыми нашими данными, причем один из них спорный. Не поддерживается расширение NV_vertex_program_1_1, которое я использую в случае с NV20. Тогда, для того, чтобы провести тестирование, я модифицировал программу таким образом, чтобы она работала с расширением версии 1.0, однако проблемы остались. Тем не менее, эта карта является лучшей среди тех, что выпущены не nVidia.
Пока рано говорить о том, какая может быть производительность, так как до сих пор не поддерживается расширение по работе с вершинными объектами, и центральному процессору приходится скармливать данные о вершинах акселератору. Однако, карта оказалась быстрее, чем я ожидал.
Находясь под первым, но положительным, впечатлением о карте, я решил переписать ядро так, чтобы карта смогла делать в Doom однопроходный рендеринг. Единственным целесообразным способом реализовать это казалось использование примененных 3DLabs расширений nVidia, то есть NV_vertex_program и NV_register_combiners с семью текстурами вместо четырех, доступных для GeForce 3/4. Однако, вместо этого, я решил использовать прототипы расширений OpenGL 2.0, поддержка которых также реализована на P10.
Реализованы они очень гладко, но использован не весь набор возможностей, и я уперся в ограничение их нынешнего прототипа компилятора. В целом, он мне понравился, и я собираюсь провести исследования над этой моделью программирования, когда компилятор доделают. Да, на настоящий момент языки реализации затенения являются наиболее критичными аспектами, и могут быть развернуты как расширения OpenGL, однако есть еще масса тонких, но важных моментов, которые будут решены в OpenGL 2.0.
Я буду постепенно реализовывать рендеры OpenGL 2.0 в Doom на протяжении всего времени эволюции спецификаций OpenGL 2.0.
В данный момент драйвер GL2 не даст никаких преимуществ на картах, способных накладывать семь и более текстур за раз, но исследовательская работа будет заключаться в отказе от низкоуровневого программирования, и если некоторые новые вендоры пошевелятся (например, Rendition восстанет из мертвых), я постараюсь убедить их реализовать GL2 вместо собственных расширений OpenGL.
Я проводил детальных сравнений с Cg. Есть около полудюжины C-подобных графических языков, и, честно говоря, я не думаю, что между ними так уж много различий на уровне синтаксиса. Все они гораздо лучше тех интерфейсов, которые мы используем в настоящее время и я не думаю, что будут проблемы с синтаксисом. Не так долго осталось до того момента, когда вся работа будет делаться в одном из этих языков, а разработчики, придерживающиеся более низкоуровневого кодинга, будут подобны тем, кто пишет полностью ассемблируемые приложения (меня забавляют люди, придерживающиеся полностью ассемблируемого кода, это, может быть, впечатляюще, но неэффективно).
Можно бесконечно долго рассуждать, почему грядущие языки высокого уровня не должны быть ограничены ресурсами при достижении предела своего потенциала. При этом драйверы должны иметь возможность многопроходной передачи данных железу. Давайте, ребята, займитесь этим.
June 25, 2002 -------------
Отчет по Matrox Parhelia:
Вкратце можно сказать, что Doom будет работать на Parhelia, но по производительности карта не может конкурировать с продуктами nVidia и ATI.
Остались проблемы с драйверами, и они до сих пор не идеальны, однако я уверен, что Matrox решит эту проблему.
Для первой карты с 256-ти битной DDR памятью, производиетельномть меня очень разочаровала. Я специально создал программу, попытавшись нагрузить память, обойдя неэффективность драйвера и полигонального движка, однако мне не удалось достичь даже производительности GeForce 4. Базовая аппаратная поддержка хороша, местами больше гибкости, чем у GF4 (но меньше, чем у ATI 8500), но карта просто не может конкурировать по чистой производительности. С «утоньчением» технологического процесса производства, чип станет вполне конкурентным, но к тому моменту появятся уже другие чипы, способные полностью затмить нынешнее поколение продуктов.
Ни одна специальная возможность Parhelia не пригодится для Doom.
Десяти битный буфер кадра, это здорово, но Doom требуется более 2 бит для destination alpha, когда у карты всего четыре текстурных блока, поэтому мы не можем использовать эту возможность.
Возможности сглаживания у Parhelia неплохие, однако не слишком быстрые даже при небольшой детализации, а значит никто не будет этим пользоваться.
Карты смещения. Я разочарован, что в индустрии до сих пор применяется quad based метод. Неужели мы не поняли на неудачном примере 3DO, Saturn и NV1, что такие решения являются полным отстоем? В любом случае, мы не можем использовать схему улучшения геометрии (включая ATi TruForm) вместе с трафаретными тенями.
March 15, 2002 --------------
Марк Килгард и Касс Эверитт из nVidia опубликовали любопытный документ, рассказывающий о рендеринге объемных теней. Они также включили в него небольшой документ о моих исследованиях во время ранних работ над ядром Doom, который я писал несколько лет назад.
http://developer.nvidia.com/view.asp?IO=robust_shadow_volumes