Введение
Невыпущенный кроссплатформенный графический API Fahrenheit представлял собой попытку создать единый API высокого уровня для 3D-компьютерной графики, объединяющий Direct3D и OpenGL. Он разрабатывался преимущественно компаниями Microsoft и SGI, а также включал в себя результаты совместной работы HP и Microsoft. Direct3D и OpenGL — это API низкого уровня, которые сосредоточены главным образом на этапах рендеринга 3D-графики. Программы, использующие эти API, должны предоставлять значительный объем кода для обработки остальных этапов графического конвейера. Fahrenheit задумывался как единый API, который бы выполнял большую часть этой работы, а затем обращался к Direct3D или OpenGL для завершающих шагов. Значительная часть первоначального проекта Fahrenheit была заброшена, и в конечном итоге Microsoft и SGI отказались от совместной работы. В итоге, только часть системы Fahrenheit, отвечающая за сцену, известная как XSG, была выпущена, но вскоре после этого её поддержка была прекращена.
Fahrenheit was an effort to create a unified high level API for 3D computer graphics to unify Direct3D and OpenGL. It was designed primarily by Microsoft and SGI and also included work from an HP MS joint effort. Direct3D and OpenGL are low level APIs that concentrate primarily on the rendering steps of the 3D rendering pipeline. Programs that use these APIs have to supply a considerable amount of code to handle the rest of the pipeline. Fahrenheit hoped to provide a single API that would do most of this work, and then call either Direct3D or OpenGL for the last steps. Much of the original Fahrenheit project was abandoned, and Microsoft and SGI eventually gave up on attempts to work together. In the end, only the scene graph portion of the Fahrenheit system, known as XSG, saw a release and was discontinued shortly afterwards.
Предыстория
В 1990-х годах OpenGL от SGI был фактически стандартом для 3D-компьютерной графики. До середины 90-х годов различные платформы использовали разнообразные собственные решения, но влияние SGI на графическом рынке в сочетании с усилиями Архитектурного совета OpenGL (ARB) привело к быстрой стандартизации OpenGL на большинстве рынка графических рабочих станций. В середине 1990-х годов Microsoft лицензировала OpenGL для своей операционной системы Windows NT в качестве основной 3D-системы; Microsoft позиционировала NT как систему класса рабочих станций, и OpenGL был необходим, чтобы стать реальным конкурентом в этой области. Первоначальная поддержка была выпущена в Windows NT Workstation версии 3.5 в 1994 году. Дополнительную путаницу внесла покупка Microsoft компании RenderMorphics в феврале 1995 года. Их продукт Reality Lab представлял собой 3D-библиотеку, разработанную специально для игр и ориентированную в основном на "бюджетный" рынок. После переименования в Direct3D 3.0, Microsoft выпустила его как основной 3D API для Windows 95 и разработки игр. Это вызвало масштабные дебаты как внутри Microsoft, так и за её пределами, о достоинствах обоих API и о том, следует ли продвигать Direct3D. В середине 90-х годов SGI работала над рядом проектов по созданию API более высокого уровня поверх OpenGL, чтобы упростить программирование. К 1997 году это вылилось в их систему OpenGL++, C++ API с сохранением состояния, работающий поверх OpenGL. Они предложили использовать модифицированную версию в качестве единого API, работающего поверх OpenGL или нового высокопроизводительного API низкого уровня, над которым, как известно, работала Microsoft (не основанного на Reality Lab). Это не только скрыло бы детали реализации и сделало бы войну между OpenGL и DirectX излишней, но и предоставило бы значительно более удобные интерфейсы высокого уровня для более надёжной объектно-ориентированной среды разработки. Работа над OpenGL++ затянулась в ARB до 1997 года. Хотя SGI выделила ресурсы на проект для предоставления образца реализации, похоже, они были недовольны общим прогрессом и жаловались: "Было много работы, но относительно мало общения". Microsoft, в частности, прямо заявила, что не будет поддерживать эту инициативу, и SGI считала, что их поддержка будет необходима для дальнейшего развития.
Объявление
В совместном пресс-релизе в декабре 1997 года, а затем в объявлении на встрече ARB в начале 1998 года, SGI сообщила о прекращении разработки OpenGL++ и о партнерстве с Microsoft для создания новой системы под кодовым названием "Fahrenheit". SGI должна была предоставить основной API "среднего размера", используемый в большинстве приложений – Fahrenheit Scene Graph, а также модифицированную версию для работы с очень большими моделями из CAD-приложений – Fahrenheit Large Model. Microsoft должна была разработать новый низкоуровневый движок рендеринга для Windows, известный как Fahrenheit Low Level, фактически замену версии Direct3D, основанной на Reality Lab. Официальный анонс проекта состоялся на SIGGRAPH 1998 с планируемым выпуском в конце 1999 или начале 2000 года. Fahrenheit стал основным направлением разработки в SGI. Рабочие станции на базе MIPS быстро теряли лидерство в производительности, которое они имели в начале 1990-х годов, и компания столкнулась с серьезными проблемами, поскольку среднестатистические ПК постепенно, но уверенно выходили на рынок высокопроизводительной графики. SGI рассматривала Fahrenheit как стратегию выхода из ситуации; после завершения проекта компания смогла бы перейти на линейку продуктов, основанную на ПК, при этом продолжая предлагать лучшие инструменты разработки для теперь уже универсального API. Хотя работы по портированию не начинались, планировалось, что в будущем такие инструменты, как Open Inventor и OpenGL Performer, будут интегрированы с Fahrenheit, что позволило бы выпустить единую, полностью функциональную систему разработки для Fahrenheit при его выпуске, поддерживающую как существующих, так и новых клиентов. Компания также начала планировать другие продукты Scene Graph, которые стали последними в серии подобных проектов. К 2000 году DirectX 7.0 уже был представлен на рынке и пользовался значительной популярностью. DirectX стал основным API в период расцвета 3D-игр в конце 1990-х годов. Microsoft выпустила Fahrenheit Scene Graph под названием XSG в том же году, но сопроводила это примечанием об отсутствии поддержки. Новые версии XSG так и не были выпущены, а все страницы, связанные с Fahrenheit или XSG, на веб-сайтах Microsoft и SGI впоследствии были удалены. Поддержка аппаратного ускорения OpenGL была исключена из стандартных видеодрайверов в Windows XP, хотя большинство производителей видеокарт предоставляют собственные реализации.
Описание
По сравнению с Open Inventor или Iris Performer, дизайн XSG включал в себя ряд новых идей. Композиционные примитивы и методы обхода сцены позволяли приложениям создавать сцены, оптимально соответствующие структуре визуализируемых данных, а затем применять оптимизатор графа сцены для реструктуризации сцены с целью более эффективного рендеринга, не изменяя при этом её внешний вид. Разработчику оставалось лишь использовать наиболее естественный подход, а система обеспечивала высокую производительность. Конвейерный рендеринг позволял многопоточному приложению создавать сцену, отсекать примитивы и рендерить её в разных потоках, используя принципы, заимствованные из конвейера отрисовки Performer. Представление примитивных данных сцены было оптимизировано для минимизации объема хранимых данных, чтобы избежать их полного дублирования в каждом потоке. Одной из уникальных особенностей XSG была возможность замены большинства встроенных методов обхода графа на собственные реализации. Разработчики могли создавать новые функции для быстрого обхода известных им способов хранения данных внутри XSG и включать их в существующие пути рендеринга. Дэвид Блайт, главный архитектор Fahrenheit в SGI, работал в Microsoft над DirectX до 2010 года, а затем стал главным архитектором графического программного обеспечения в Intel.