Стандарт OpenGL отметил 20-й юбилей запуском двух новых версий

На Siggraph 2012 Khronos отметила 20-й юбилей OpenGL, сделав анонс сразу двух важных обновлений наряду с более мелкими. Первый запуск — это существенный скачок мобильной версии стандарта OpenGL ES до 3.0, а второй — более мелкое обновление настольной версии OpenGL до 4.3. Запуски обеспечивают паритет с DirectX 11 и улучшают возможности мобильных графических чипов. После ряда лет застоя и прекращения попыток существенно изменить принципы работы OpenGL, во время которых Microsoft Direct3D API развивался быстрыми темпами, организация Khronos Group начала разрабатывать новые версии стандарта OpenGL с регулярной постоянностью. И хотя ряд новых функций вначале стандартизируется в рамках Direct3D, инженеры OpenGL быстро их подхватывают и интегрируют.

Особенно бурное развитие претерпевает стандарт OpenGL ES преимущественно благодаря iPhone и Android. Как iOS, так и Android используют OpenGL ES в качестве стандартного 3D API, и стремительный рост популярности мобильных игр на смартфонах сделали OpenGL ES критически важным API для многих разработчиков.

OpenGL ES 2.0 впервые был представлен в 2007 году, а графические ускорители с его поддержкой появились на рынке в 2009—2010 году. Он был преимущественно основан на современном на тот момент OpenGL 2.x с удалёнными функциями OpenGL, необходимыми только для обратной совместимости, а также с использованием более простого набора типов данных и форматов текстур.

Новый стандарт OpenGL ES 3.0 добавляет множество функций из OpenGL 3.x и 4.x. Шейдеры, небольшие отрывки кода, используемые для программирования GPU, стали более продвинутыми и обзавелись полной поддержкой 32-битных целочисленных и данных с плавающей запятой. Ускорители с поддержкой OpenGL ES 3.0 будут поддерживать более сложные текстуры — например, текстуры произвольного размера (вместо требования того, чтобы размеры каждой стороны были степенью двойки) и текстуры с дробными значениями.

Khronos Group добавила новые форматы сжатия текстур в OpenGL ES 3.0. Благодаря алгоритмам, разработанным Ericsson и доступным всем без необходимости уплаты лицензионных отчислений, ETC2 и EAC станут стандартными способами сжатия текстур для разработчиков OpenGL ES. Это исправляет весьма существенный недостаток в OpenGL ES. Сжатие текстур весьма важно для мобильных устройств, так как оно уменьшает требования к объёму памяти и пропускной способности. Direct3D-оборудование обычно использует алгоритм S3TC, но этот стандарт принадлежит HTC и требует лицензионных отчислений.

OpenGL использует открытые алгоритмы и не поддерживает S3TC. Вместо этого каждый производитель GPU обычно внедряет собственный формат сжатия текстур, что усложняет работу для разработчиков, которым приходится использовать разные наборы текстур для каждого алгоритма. В перспективе новые универсальным стандартом сжатия текстур в OpenGL ES может стать ASTC, который разработан ARM и Khronos Group, но не является обязательным для оборудования с поддержкой OpenGL ES 3.0. В представленных недавно ускорителях ARM Mali T-600 второго поколения внедрена аппаратная поддержка ASTC.

OpenGL ES 3.0 также поддерживает новые возможности отрисовки изображения вроде визуализации по образцу: один объект (состоящий из набора линий и треугольников) может прорисовываться несколько раз с помощью одной команды. Но даже с новой функциональностью OpenGL ES 3.0 всё ещё отстаёт от Direct3D 10 и OpenGL 3.2 (и более новых стандартов) по возможностям. В частности, OpenGL ES 3.0 не включает поддержки геометрических шейдеров. Эти шейдеры способны генерировать новые линии и треугольники, и могут применяться в задачах вроде тесселяции, когда берётся существующая форма, и в неё добавляются новые линии для сглаживания кривых и улучшенного вида объекта.

Мобильные ускорители с поддержкой OpenGL ES 3.0 должны появиться в 2013 году.

OpenGL 4.3 — это гораздо более скромное обновление полноценного настольного стандарта. Многие изменения внесены для соответствия с OpenGL ES 3.0, чтобы стандарт на практике являлся настоящим надмножеством OpenGL ES.

Большой новой функцией в OpenGL 4.3 является поддержка вычислительных шейдеров. Они позволяет графическому ПО включать GPU-вычисления в движки визуализации. GPU-вычисления можно было производить и ранее с помощью пиксельных или вершинных шейдеров в рамках графического конвейера, симулируя якобы графические расчёты, но этот процесс для разработчиков был весьма неловок, да и одновременно производить графические расчёты и вычисления общего назначения на GPU было сложно. Вычислительные шейдеры призваны решать эту проблему. Они работают с обычным буфером данных и могут исполняться отдельно от графического конвейера — они могут отправлять данные в графический конвейер, но это вовсе не обязательно. Их использование упрощает применение GPU для неграфических задач вроде физики или искусственного интеллекта, а также для продвинутых графических технологий вроде трассировки лучей.

Вдобавок к этим двум версиям API организация Khronos Group начала разработку программных библиотек, позволяющих упростить разработку программ, использующих вычислительный API OpenCL. Подобные библиотеки уже существуют для OpenGL и Direct3D (называются они соответственно GLUT и DXUT). Библиотека OpenCL получит имя CLU.

Khronos также представила свои новые стандарты API для машинного зрения и сенсоров — OpenVL и SteamInput. OpenVL — шаг Khronos по пути стандартизации машинного зрения, дабы технологии дополненной реальности внедрялись проще и естественнее во все платформы, а также чтобы эти технологии легче программировались. С помощью OpenVL разработчики оборудования могут выпускать аппаратные ускорители. OpenVL служит ускорителем для библиотек CV вроде OpenCV, а не заменяет их.

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

Наконец, 20-летие — хороший повод подвести некоторые итоги и вспомнить, с чего всё начиналось. Silicon Graphics представила OpenGL 1.0 в январе 1992 года. Графический ускоритель Silicon Graphics RealityEngine, представленный в том же 1992 году, использовал от трёх до шести печатных плат. Плата Geometry Engine включала 8 процессоров Intel i860XP CPU с частотой 50 МГц, растеризация и хранение текстур производилось одной, двумя или четырьмя платами Raster Memory, а за вывод на экран отвечала плата Display Generator.

Вторая ревизия SGI Reality Engine расширила число процессоров в плате Geometry Engine до 12. Так графическое оборудование выглядело вначале

Это мощное устройство могло обрабатывать 1 миллион треугольников в секунду и визуализировать 240 миллионов пикселей в секунду. Совокупная мощь составляла 0,64 миллиардов операций с плавающей запятой в секунду.

Двадцать лет спустя одночиповый ускоритель NVIDIA GeForce GTX 680 способен обрабатывать 1800 миллионов треугольников в секунду, 14 400 миллионов пикселей в секунду и имеет вычислительную мощь в 3090 миллиардов операций с плавающей запятой в секунду — в зависимости от параметра сравнения в 60—4830 раз быстрее, чем RealityEngine. Даже Tegra 3 в сравнении с RealityEngine является в 4,3—103 раз быстрее.

http://3dnews.ru/