3D-стандарты
3D-стандарты — проблемы выбора
Скажите, что является сегодня главным двигателем прогресса в области компьютерной индустрии? Ради чего люди выбрасывают на помойку работоспособные компьютеры в погоне за призрачной эффективностью новомодных технологий? Признайтесь: все дело в компьютерных играх и других интерактивных развлечениях!
Только для того чтобы насладиться свежими «шедеврами» игровой индустрии, мы порой и покупаем самые последние и мощные модели компьютеров и видеоакселераторов. Конечно, компьютер помогает и работать, и учиться, но все-таки прежде всего он позволяет играть и развлекаться!
И причину покупки новой, безумно дорогой и невероятно «навороченной» системы с процессором Pentium III нужно искать не во внезапно «задумавшемся» текстовом процессоре Word 2000 или слишком медлительном Excel — с такими мелочами вполне можно было бы смириться, по крайней мере до тех пор, пока цены на комплектующие в очередной раз не упадут...
Причина нетерпения кроется именно в играх, которые на сегодняшний день, как это ни парадоксально, являются одними из самых «тяжелых» приложений и выжимают из любого компьютера все до последнего мегагерца. Особую «тяжесть» играм придают новомодные трехмерные «заморочки», стяжавшие в последние годы невероятную популярность.
Разработчики игр постоянно отслеживают конъюнктуру и ориентируются на самое новое и мощное «железо» порою задолго до его официального выпуска. Действуя по этой схеме, они реализуют на PC такие шедевры, которые еще вчера казались совершенно невозможными даже на суперкомпьютерах. Производители компьютеров и комплектующих под давлением пользователей делают очередной шаг в этой бесконечной гонке и опять наращивают мощь аппаратного обеспечения.
Естественно, что создатели сегодняшних игр делают ставку на экстенсивное развитие оборудования и, вместо того, чтобы годами оттачивать свои алгоритмы, добиваясь необходимого быстродействия, пользуются стандартными библиотеками и API-интерфейсами.
Да никто и не согласился бы годами ждать новых игр, какими бы привлекательными они в результате ни оказались.
Поэтому естественно, что сегодня именно на играх апробируются самые передовые технологии, которые потом находят и «серьезное» применение в самых различных приложениях. И, в конце концов, собирая компьютер, рассчитанный на новые игры, вы можете быть вполне уверены, что практически все современные офисные и графические приложения будут выполняться на нем достаточно быстро и хорошо.
Поэтому нынешняя игровая индустрия — это своеобразный испытательный полигон для разнообразных «технологических чудес», и именно по ее запросам можно с большой долей вероятности предсказать, какие нововведения появятся в будущих деловых и графических приложениях. Скажем, трехмерные игры в недалеком будущем смогут дать начало развитию 3D-интерфейсов, о которых так давно говорят.
Аппаратные компоненты
Что же представляет собой современный игровой компьютер? Ну, конечно же, это мультимедийные устройства: привод компакт-дисков, звуковая плата и колонки. Но главным компонентом сегодняшнего игрового компьютера, бесспорно, следует считать видеоадаптер.
Современные видеоакселераторы должны не только быстро выполнять традиционные операции, такие как прорисовка окон или переключение графических режимов. Все более важное значение приобретает высокое быстродействие при отображении трехмерных сцен в реальном времени: в последнее время появилось большое количество игр, в которых и окружающая обстановка, и персонажи создаются покадровым просчетом (рендерингом) непосредственно в процессе действия. «Виртуальный мир» в таких играх непредсказуем; он динамически изменяется в зависимости от действий игрока и перипетий сюжета. Причем игровой мир должен преобразовываться с достаточной скоростью, чтобы излишняя «медлительность» не раздражала пользователя, — и при этом оставаться достаточно реалистичным. Первое достигается быстрой сменой кадров, сравнимой с телевидением или кино: при частоте смены около 15-30 кадров в секунду (или FPS — Frame Per Second) человеческий глаз воспринимает быстро сменяющиеся картинки уже как непрерывный фильм. Реалистичность трехмерного мира достигается использованием полноцветных текстур с большим разрешением, которыми «обтягиваются» все присутствующие в сцене объекты, динамическим изменением освещения, имитацией физических законов реального мира (гравитации, деформации предметов при соударениях и т.д.), а также использованием различных спецэффектов, таких как туман или дымка, полупрозрачные тени или огненные сполохи.
Для того чтобы достаточно быстро и реалистично изменять персонажи и окружающий их мир и тем более — применять различные спецэффекты, необходим громадный объем вычислений. Это, в свою очередь, предъявляет жесткие требования к базовому аппаратному обеспечению: процессору, оперативной памяти и системной шине, по которой передаются данные на видеоадаптер, и, естественно, к самому видеоакселератору.
Центральный процессор не всегда может достаточно быстро обработать необходимый поток данных, и эта задача перекладывается непосредственно на видеоадаптер или на отдельную специализированную плату-акселератор, которая имеет собственный графический процессор и дополнительную память для буферизации данных.
Впрочем, использование для 3D-визуализации специализированного устройства обусловлено не столько недостатком производительности центрального процессора, сколько его неприспособленностью к 3D-вычислениям. Возможно, в недалеком будущем при использовании расширенной системы команд и достаточно быстрой шины 4х AGP 3D-специализация видеоплат не будет играть такой роли, но пока красочность и скорость трехмерных игр, работающих без акселератора, явно недостаточны. При приближении к предметам текстурные точки превращаются в большие квадраты, а скорость перерисовки в стандартных SVGA-режимах даже на достаточно мощных машинах оставляет желать лучшего. Трехмерные акселераторы позволяют кардинально улучшить качество изображения и скорость визуализации.
Впрочем, пока на первом месте стоит не качество генерируемого изображения, а скорее, скорость визуализации. Игровой мир, создаваемый 3D-акселераторами на персональном компьютере в режиме реального времени, конечно, сильно уступает по качеству трехмерной графике, сделанной в специализированных 3D-пакетах с применением программного рендеринга. Но, несмотря на это, игры, работающие с акселераторами, гораздо более реалистичны, чем те, которые используют для визуализации трехмерных сцен только программную реализацию и возможности центрального процессора. Причем акселератор успевает не только текстурировать стены, деревья и персонажи, но и рассчитать специальные эффекты. Например, фильтруются текстуры (здесь уже предмет при приближении не превращается в нагромождение разноцветных квадратов, а может быть, лишь становится чуть менее четким, размывается); применяются световые эффекты (блики, тени, отсветы от выстрелов и т.д.); используются полупрозрачные материалы и различные атмосферные эффекты (дым, туман).
Кстати, следует отметить, что, впервые появившись в персональных компьютерах исключительно для игровых приложений, некоторые 3D-акселераторы, поддерживающие графический стандарт OpenGL, стали успешно использоваться и в пакетах трехмерной графики и анимации.
3D-стандарты — проблемы выбора
Итак, покупая 3D-ускоритель, вы вправе ожидать повышения производительности любых 3D-программ, в том числе и профессиональных приложений для 3D-моделирования, VRML-браузеров и, конечно же, любимых трехмерных игр.
Рынок профессиональных 3D-акселераторов уже более или менее устоялся — внушающих доверие производителей не так много, а стандарты профессиональной графики ясны (например, непременным атрибутом профессиональной графической платы должна быть поддержка стандарта OpenGL).
Уже не столь пестрым выглядит и массовый рынок 3D-плат — реально не более десятка производителей предлагает конкурентоспособные модели. Сегодня мы уже видим: победителями в борьбе вышли всего три-четыре технологии, представленные такими фирмами, как nVidia, 3Dlabs или 3Dfx.
Практически все современные игры сегодня могут использовать преимущества 3D-акселерации (сейчас уже появляются игры, не работающие без ускорителей), поэтому приобретение соответствующей графической платы для любого заядлого игрока становится насущной необходимостью.
Однако единого, всеобъемлющего 3D-стандарта ни на аппаратном, ни на программном уровне пока еще нет.
Впрочем, взаимодействие «ускоряемой» программы с тем или иным набором микросхем видеоакселератора осуществляется с помощью графических библиотек, и производитель акселератора должен не только добиться отличных аппаратных характеристик (скорости визуализации, поддержки различных 3D-функций и т.д.), но и обеспечить полную совместимость своего изделия с основными графическими библиотеками посредством качественных драйверов.
Совместимость и надежность работы драйверов акселератора с такими библиотеками на сегодняшний день во многом и определяет целесообразность приобретения той или иной модели.
Графические 3D-библиотеки, или так называемые интерфейсы программных приложений (API — Application Programming Interface), которые используют разработчики программ, были созданы для того, чтобы задать некоторые общие методы обработки графики программным обеспечением и тем самым облегчить процесс написания приложений, использующих трехмерную графику: объемные объекты, свет, перспективу, деформации и т.д. 3D-возможности не программируются каждый раз заново; они используют стандартные функции из уже существующей библиотеки, что значительно облегчает и ускоряет процесс создания новых приложений.
При работе над тем или иным графическим эффектом программисту необходимо лишь обратиться к библиотечной функции, задать для нее определенные параметры и получить готовый результат. Причем универсальные графические библиотеки (такие, например, как Direct3D) рассчитаны на комбинированную работу как с 3D-акселераторами, так и с центральным процессором. Если акселератор в системе не найден или не поддерживает данную функцию, библиотека «переложит» всю работу на центральный процессор, и трехмерный эффект все равно будет достигнут (правда, это займет значительно больше времени).
Из наиболее популярных на сегодняшний день графических библиотек, заслуживающих особого внимания, можно назвать Direct3D, OpenGL, специально разработанную компанией 3Dfx для игровых приложений библиотеку Glide API и перешедшую на PC с компьютеров фирмы Apple — QuickTime3D.
Пока только два API трехмерной графики получили широкое распространение на PC — Direct3D и OpenGL. Однако все API имеют свои плюсы и минусы, но каждая такая библиотека до сих пор занимает свою нишу. Direct3D и Glide API — это общепринятые API для трехмерных игр, а OpenGL — для профессиональных программ трехмерного моделирования и автоматизированного проектирования (CAD/CAM). Однако в последнее время благодаря своей мощности, простоте и доступности для изучения в играх все чаще начинает использоваться OpenGL.
Direct3D
Графическую библиотеку Direct3D, входящую в набор библиотек Microsoft DirectX, можно смело назвать стандартом де-факто в игровой индустрии. Как и любая другая графическая библиотека такого класса, Direct3D представляет собой своеобразную «прослойку» между акселератором и приложением. Набор DirectX входит в поставку последних версий Windows 95, Windows 98, а также поставляется многими производителями аппаратного и программного обеспечения отдельно вместе с видеоадаптерами и дистрибутивами приложений. Direct3D в настоящее время предназначена для работы с Windows 95/98 и лишь частично поддерживается в Windows NT (ситуация, обратная альтернативному стандарту — OpenGL, который, напротив, изначально поддерживался как раз под Windows NT), но мы надеемся, что ситуация изменится в Windows 2000, которая будет поддерживать все популярные API в полном объеме.
На сегодняшний день большинство игр использует именно Direct3D, и графический ускоритель, драйверы которого не поддерживают эту библиотеку, практически не имеет шансов завоевать внимание пользователей. Однако, по мнению многих экспертов, эта библиотека крайне неудобна при написании приложений и не предоставляет таких богатых возможностей, как ее ближайший конкурент — OpenGL. Библиотеки Direct3D, которые входили в DirectX с 1-й по 3-ю версию, были признаны многими разработчиками малоперспективными, что во многом было вызвано сложностями, которые возникали при программировании на этом API. В результате Direct3D приобрела репутацию широко распространенной, но довольно слабой графической библиотеки.
Однако Microsoft постоянно совершенствует DirectX, добавляя в Direct3D новые функции и оптимизируя эту библиотеку. Еще в Direct3D 5 была использована новая система команд Draw Primitive, которая существенно облегчила программирование на этом API, а скорость 3D-расчетов в этой версии заметно возросла. Текущая версия DirectX 6.0 позволяет осуществлять 3D-расчеты еще быстрее и качественнее.
Однако до сих пор качество и скорость генерации трехмерных изображений при помощи Direct3D, а также легкость программирования на этом API, пожалуй, уступают более мощному, «профессиональному» 3D-стандарту — OpenGL.
Однако, как уже отмечалось, существенным преимуществом решения от Microsoft является тотальная совместимость Direct3D со всеми графическими акселераторами и большим количеством трехмерных игр, достигнутая за счет верной маркетинговой политики, проводимой этой фирмой. К достоинствам Direct3D также стоит отнести то, что эта библиотека, в отличие, скажем, от OpenGL, не требует практически никакой настройки.
OpenGL
Почти все профессиональные 3D-ускорители в основном предназначены для работы с библиотекой OpenGL, иногда они так и называются — OpenGL-ускорителями. OpenGL, в отличие от Direct3D, является межплатформным стандартом, что существенно облегчает перенос программ, использующих этот API, на другие платформы, в том числе на PC, MAC, SGI и т.д. Для платформы PC на рынке уже имеется довольно много OpenGL-ускорителей, что подталкивает разработчиков к переносу своих 3D-приложений на эту платформу. Стоит напомнить, что знаменитая компания SGI объявила о совместном с Microsoft проекте Fahrenheit, цель которого — соединить переработанные API OpenGL и Direct3D в единую кросс-платформную 3D-архитектуру, которая позволит разработчикам программного обеспечения писать программы для операционных систем Windows и UNIX. Основная идея этого проекта состоит в том, чтобы сочетать развитые функции OpenGL с доступностью DirectX.
Как известно, графическая библиотека OpenGL разрабатывалась в недрах компании SGI, которая многие годы выпускала высокопроизводительные графические станции. Приложения, работавшие на этих станциях, использовали для визуализации трехмерных сцен разработанную компанией графическую библиотеку с незатейливым названием GL (Graphics Library). Как ведущие специалисты по трехмерной графике программисты SGI первыми почувствовали необходимость стандартного API для трехмерной графики вместо великого множества отдельных решений, существовавших до этого. И SGI начала долгую историю разработки соответствующего программного и аппаратного обеспечения, поддерживающего этот стандарт, которая длится и по сей день. В 1992 году компания начала формирование консорциума компаний (Architecture Review Board — ARB), которые поддерживают OpenGL в качестве стандарта. В настоящее время членами ARB являются следующие компании: Digital Equipment Corporation, Evans & Sutherland, Hewlett-Packard Co., IBM Corp., Intel Corp., Intergraph Corp., Silicon Graphics, Inc., Sun Microsystems, Inc. и, конечно, Microsoft.
Это очень мощная в техническом отношении, легкая в использовании, хорошо отлаженная и проверенная графическая библиотека. Большое количество приложений (в основном это профессиональные пакеты для создания трехмерной графики) написано с использованием OpenGL.
Эта библиотека имеет огромные преимущества по сравнению с конкурентами, а именно:
- Стабильность. Это устоявшийся API, успевший за долгие годы стать стандартом для профессиональных 3D-приложений. Различные дополнения тщательно контролировались и заранее анонсировались так, чтобы разработчики учитывали изменения, соблюдая при этом все требования совместимости «снизу вверх», чтобы даже ранние OpenGL-приложения не устаревали.
- Переносимость. Все OpenGL- приложения гарантированно дают одинаковые визуальные результаты на OpenGL-совместимом оборудовании, независимо от операционной системы или графической оболочки.
- Масштабируемость. OpenGL-приложения могут выполняться на различных системах от PC до суперкомпьютеров. В результате приложения могут легко переноситься на любую платформу.
- Удобство программирования. OpenGL хорошо структурирован и понятен программистам. Кроме того, информация об аппаратном обеспечении содержится в драйверах, что освобождает разработчиков от необходимости выяснения специфических особенностей оборудования. Кроме того, можно использовать множество уже разработанных и отлаженных OpenGL-подпрограмм.
Для взаимодействия OpenGL с конкретным акселератором помимо специальных команд программе необходим драйвер к видеоакселератору и специально написанный порт (в Windows 9х он называется opengl32.dll и находится в каталоге \system).
Когда стандарт GL стал открытым, компания Microsoft создала собственный порт высокого уровня для поддержки OpenGL — MCD (Mini Client Driver), позволяющий задействовать основные возможности библиотеки OpenGL и способный функционировать (правда, не так эффективно) даже без использования акселератора, полагаясь только на ресурсы центрального процессора. MCD поставляется с Windows NT, Windows 95 (начиная с OSR2) и Windows 98. (Если у вас Windows 95 более ранней версии, то вам необходимо скопировать MCD с сайта Microsoft.)
Однако OpenGL-порт может быть реализован и в низкоуровневом варианте, как ICD (Installable Client Driver) — это высокооптимизированный драйвер низкого уровня, который обеспечивает максимальное быстродействие на аппаратном уровне. ICD-порт довольно сложно программировать, так как создатель драйвера вынужден реализовать все функции OpenGL (MCD — это программный порт, который дает возможность подменять те фрагменты кода, которые разработчик считает нужным оптимизировать для конкретного оборудования.) Таким образом, MCD сильно уступает ICD в быстродействии. Более того, если 3D-программа использует функцию, которая не имеет в MCD-драйвере аппаратной поддержки, то аппаратное ускорение отключается совсем. Все профессиональные платы имеют собственные ICD-драйверы, и причиной высокой цены этих плат не в последнюю очередь является сложность программирования эффективного драйвера.
Фирма Microsoft до последнего времени утверждала, что идеальным решением для разработчиков игр является все же ее собственная библиотека Direct3D, а OpenGL — это стандарт для профессиональных приложений CAD/CAM и трехмерной анимации. В действительности и Direct3D, и OpenGL — библиотеки, предназначенные для одних и тех же целей. И по мнению многих экспертов и разработчиков игр, OpenGL ничуть не хуже, а даже лучше подходит для создания игровых приложений. Однако MCD-порт, созданный Microsoft, не позволяет использовать все функции OpenGL и делает эту библиотеку действительно более слабой, чем Direct3D.
Порт MCD в основном предназначен лишь для ускорения процесса окончательной растеризации изображения (например, для удаления скрытых поверхностей, то есть выяснения, какие части трехмерной сцены закрыты от глаз наблюдателя другими объектами). Растеризация — важная часть процессов 3D-рендеринга, однако это всего лишь его небольшая часть.
Поэтому MCD-порт не позволяет производителям акселераторов добиться максимального ускорения того или иного приложения. К примеру, акселераторы, которые позволяют оптимизировать выполнение расчетов световых эффектов или деформаций трехмерных объектов, не могут использовать аппаратную поддержку этих функций, работая с портом MCD. Кроме функциональных ограничений, у MCD есть еще один существенный недостаток — этот порт не позволяет производителям акселераторов при написании драйверов вводить в библиотеку дополнительные функции, не предусмотренные спецификацией OpenGL.
К плюсам MCD-порта следует отнести лишь то, что он легко сопрягается с драйверами низкого уровня, позволяя производителям быстро обеспечить поддержку OpenGL в новой модели графического акселератора. Максимально же раскрыть возможности этой библиотеки можно лишь при использовании ICD-порта, который полностью поддерживает OpenGL на низком уровне.
Специальный ICD-порт был разработан компанией SGI и активно используется для ускорения приложений под Windows NT. В последнее время многие производители акселераторов стали включать в комплект драйверов собственные версии ICD-портов, позволяющие максимально использовать все возможности ускорения, которые можно получить от того или иного 3D-набора микросхем. Кроме того, производители могут свободно добавлять в порты ICD новые, не предусмотренные в OpenGL функции, что открывает поистине безграничные возможности для расширения списка функций этой библиотеки и делает возможным появление ее модификаций.
В настоящее время тенденция поддержки OpenGL на платформе PC наметилась совершенно четко — эта графическая библиотека приобретает все большую популярность среди производителей игровых приложений и создателей акселераторов трехмерной графики.
Однако на сегодняшний день при переключении в режим OpenGL-акселерации массу проблем порождает существование большого количества ICD-модификаций, которое влечет за собой трудности с настройкой и запуском игр и приложений. Многие производители модифицируют OpenGL (с помощью ICD-порта) для максимального использования 3D-ускорения на своих платах, но делают это не всегда корректно, что приводит к трудностям при взаимодействии кода OpenGL в некоторых приложениях с соответствующим ICD-портом (особенно заметно некорректное поведение таких драйверов в профессиональных приложениях 3D-графики).
При взаимодействии некоторых приложений с портом MCD тоже иногда не все проходит гладко, так как у разработчиков еще недостаточно опыта в области адаптации игр к работе с OpenGL и драйверы некоторых видеоакселераторов могут плохо сопрягаться даже с примитивным MCD-портом.
Однако все эти проблемы при желании можно решить. Думаю, что в ближайшее время в дистрибутивы практически всех трехмерных игр будут включаться подборки драйверов и ICD-портов для различных моделей акселераторов.
Пока же разработчики игр и производители видеоадаптеров постоянно выпускают разнообразные «патчи» — небольшие программки, которые исправляют ошибки в играх и обновляют драйверы. Причем новые версии таких исправлений появляются постоянно, и потому не стоит отчаиваться, если то или иное приложение «не хочет» работать с драйверами и портом OpenGL, которые входили в комплект поставки вашего акселератора. Скорее всего, у вас устаревшая версия, и с сайта производителя акселератора можно уже списать новые, исправленные и дополненные версии.
Кроме того, существуют специальные программы-оптимизаторы, которые, управляя стартовыми параметрами игры, позволяют настроить ее на оптимальную работу с данным акселератором.
Glide API
Кроме вышеперечисленных стандартных библиотек, достаточно широко распространена разработанная компанией 3Dfx специализированная API Glide. Эта библиотека поддерживается на аппаратном уровне только компанией 3Dfx, но за счет популярности наборов Voodoo она используется в большом количестве игр.
По своим функциональным возможностям Glide API во многом схожа с OpenGL, однако не предоставляет таких широких возможностей кросс-платформного переноса приложений. Эта библиотека предназначена специально для использования в игровых приложениях, а некоторые специфические «игровые» функции, встроенные в Glide API, поддерживаются только в нестандартных расширениях OpenGL. Так как Glide API была специально создана для наборов микросхем 3Dfx, она полностью использует их возможности и позволяет создавать необычайно реалистичные эффекты при достаточно высоком быстродействии. К достоинствам Glide API стоит отнести и хорошо реализованную поддержку трехмерной акселерации под DOS (отсутствующую в Direct3D и OpenGL).
Маркетинг 3Dfx построен на взаимной поддержке программных и аппаратных решений: продвигая Glide API, компания старается распространять только свои чипсеты, а продавая свои наборы микросхем, которые поддерживают и альтернативные библиотеки, — плавно подводит пользователей к переходу на Glide API. Пытаясь утвердить эту библиотеку и увеличить продажи акселераторов, основанных на оригинальных чипсетах, компания очень четко реагирует на изменения рынка игровых приложений, активно взаимодействуя с разработчиками и постоянно выпуская различные исправления и дополнения к собственным драйверам и играм. Такой маркетинг только на руку многочисленным пользователям персональных компьютеров, с плеч которых снимается тяжесть поиска драйверов в необъятных просторах Интернета. Достаточно зайти на http://www.3dfx.com/download/patches/index.html — и все драйверы и исправления у вас перед глазами.
Проблемы с настройкой, присущие приложениям, использующим OpenGL, не обошли и Glide API — компании 3Dfx не всегда удается обеспечить полную совместимость между старыми и новыми чипсетами.
QuickTime
Фирма Apple также пытается утвердиться на рынке 3D-акселерации и приспосабливает свой стандарт QuickTime для выполнения 3D-функций. QuickTime 3.0 поддерживает и потоковое видео в сети Интернет, имеет функции «виртуальной реальности» и поддерживает более 150 видеоэффектов. Компания пытается сделать QuickTime для мультимедийных приложений своего рода PostScript’ом.
В пакет QuickTime 3.0 вошел и QuickDraw 3D, который позволяет встраивать, просматривать и управлять в реальном времени трехмерной графикой. QuickDraw 3D — не единственная возможность для стандартизации 3D-приложений на платформе Mac, здесь также лицензирован и OpenGL. Однако многие программы трехмерной графики на этой платформе более удачно используют преимущества именно QuickDraw 3D. Что же касается PC-приложений, то сегодня лишь немногие поддерживают формат 3DMF этой архитектуры, не говоря уже о системе аппаратного ускорения RAVE.
Сразу после выхода QuickTime получил поддержку производителей мультимедийного программного обеспечения, но что касается игр и других 3D-приложений, то какого-либо движения в эту сторону пока не происходит.
3D-резюме
Итак, в заключение разговора о стандартах графических библиотек еще раз подчеркнем, что во всяком случае до появления Fahrenheit все присутствующие сегодня на рынке акселераторы трехмерной графики поддерживают если не идеальную, то достаточно мощную и широко распространенную библиотеку Direct3D. Профессионалы ориентируются на OpenGL, фирма 3Dfx пропагандирует собственное API — Glide, а QuickDraw 3D пока не получил достаточной поддержки со стороны производителей программного обеспечения.
КомпьютерПресс 11'1999