DirectX против разработки игр OpenGL - PullRequest
3 голосов
/ 26 августа 2011

У меня есть несколько вопросов относительно того, какие графические платформы используются при создании профессиональных игр (таких как WoW, starcraft2, diablo 3 и т. Д.).

Во-первых, будет ли WoW выглядеть иначе, если визуализировать в OpenGL, а не в Direct X? Будет ли производительность значительно отличаться, если визуализируется в OpenGL?

Во-вторых, каков основной процесс при создании игры, особенно с точки зрения использования модели, созданной в Maya, или 3DS Max в видеоигре? Создает ли модель модель, затем экспортирует модель в читаемый код OpenGL / DirectX со всеми экспортированными программами шейдеров и всеми вершинами и треугольниками, созданными в коде, и, наконец, использует код в программе на C ++ / c?

OVerall, мне любопытно, как дизайнер / программист видеоигр экспортирует реальные модели 3DS MAX / Maya в свой код

Ответы [ 5 ]

5 голосов
/ 26 августа 2011

Во-первых, будет ли WoW выглядеть иначе, если визуализировать в OpenGL, а не в Direct X?

Это отображается в OpenGL (ну, это может быть с настройкой). И нет, в рендеринге D3D это не выглядит иначе. (примечание: DirectX на больше , чем просто Direct3D.)

Будет ли производительность существенно отличаться, если визуализируется в OpenGL?

Вряд ли. Есть некоторые вещи, в которых реализации OpenGL могут быть быстрее, но WoW не использует ни одну из них.

Создает ли модель модель, затем экспортирует модель в читаемый код OpenGL / DirectX

Ни OpenGL, ни Direct3D не имеют формат модели. На этом этапе даже файлы .x устарели; они были частью библиотеки D3DX, которая была просто написанным Microsoft слоем поверх D3D.

Во-вторых, вы не экспортируете их в «код». Вы экспортируете их в файлы , которые затем читаете в своей игре. Ну, как правило, вы обрабатываете эти файлы в более удобных для вашей игры форматах, так как экспортеры, как правило, оптимизируют сетки по-другому, чем вы хотели бы в своей игре.

Таким образом, это экспорт в файл -> обработка в окончательный файл -> чтение в игре.

3 голосов
/ 26 августа 2011

Во-первых, будет ли WoW выглядеть иначе, если визуализировать в OpenGL, а не в Direct X? Будет ли производительность значительно отличаться, если визуализируется в OpenGL?

OpenGL и Direct3D следуют аналогичным принципам: поток вершин входит, преобразуется (либо с помощью фиксированной функции, либо с помощью вершинного шейдера), после преобразования вершины группируются в примитивы (точки, линии, треугольники) и растеризуются примитивы, то есть для каждого пикселя примитив покрывает некоторое вычисление (опять-таки либо фиксированная функция, либо свободно программируемый фрагментный шейдер), которое определяет так называемый «фрагментный» цвет. Наконец фрагмент, который он протестировал на видимость и смешал с изображением в процессе рисования.

Более поздние версии OpenGL и DirectX добавили этапы геометрии и тесселяции, но это только детали.

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

Во-вторых, каков основной процесс при создании игры, особенно с точки зрения использования модели, созданной в Maya, или 3DS Max в видеоигре? Создает ли модель модель, затем экспортирует модель в читаемый код OpenGL / DirectX со всеми экспортированными программами шейдеров и всеми вершинами и треугольниками, созданными в коде, и, наконец, использует код в программе на C ++ / c?

Нет! Модель и ее вспомогательные данные хранятся отдельно от кода. Хотя, безусловно, возможно хранить геометрию в коде, это довольно плохая идея, и ее не следует делать. Я объяснил основную идею, как модель загружается в Как импортировать модели из трехмерного программного обеспечения, такого как Maya, в OpenGL?

OVerall, мне любопытно, как дизайнер / программист видеоигр экспортирует реальные модели 3DS MAX / Maya в свой код

Они нет. Они экспортируют свои модели в формат файла, оптимизированный для эффективной загрузки трехмерным механизмом, а затем механизм загружает модели и вспомогательные данные из файлов. Это не какая-то черная магия вуду. Весь процесс не сильно отличается от загрузки изображения из файла и его отображения или воспроизведения музыки на динамиках. Для анимации трехмерной модели модель содержит дополнительную управляющую информацию (арматуру, кости и т. Д.), Которая позволяет деформировать ее на основании довольно небольшого числа параметров (вращение руки, направление взгляда и т. Д.). Затем эти параметры изменяются.

1 голос
/ 26 августа 2011

Вы задаете большой вопрос, но, по крайней мере, для «второй» его части - нетривиальные модели создаются в программных пакетах, как вы описываете, но затем они обычно экспортируются в файлы данных, которые в основном представляют списки геометрия. Затем эти файлы считываются загрузчиком ресурсов игры и помещаются в массивы вершин, в буферные объекты и т. Д. Таким образом, данные не зависят от кода.

Жестко закодированная геометрия обычно используется для небольших фиксированных вещей и для учебных проектов. :)

0 голосов
/ 26 августа 2011

Это очень большой вопрос, на который сложно ответить кратко.

Что касается DirectX и OpenGL, они не сильно отличаются по функциональности и производительности (возможно).

DirectX всегда на шаг впереди Opengl. Например, он сначала поддерживал функцию аппаратной тесселяции, а затем через некоторое время эта функция появилась в Opengl. Но это не имеет большого значения, потому что, когда вы разрабатываете игру, вам придется поддерживать целый ряд машин, в том числе низкоэффективные. Таким образом, вы не сможете использовать новые функции, пока они не станут очень распространенными.

Да, разработчики игр используют программное обеспечение Maya и 3Ds max для создания моделей игры, и обычно они выводят модель в файл модели. этот файл считывается игровым движком игры.

Я не предлагаю вам начинать с opengl или directx, я думаю, что вместо этого лучше использовать игровой (или графический) движок. Например, ogre 3D. http://www.ogre3d.org/

потому что он поддерживает как DirectX, так и OpenGL, а также имеет готовые 3Ds max, экспортер Maya, что упрощает загрузку моделей.

0 голосов
/ 26 августа 2011

Ваш первый вопрос на самом деле не отвечает - обе графические библиотеки предоставляют мне доступ к базовому графическому оборудованию через API.Как выглядит игра, во многом зависит от того, как этот API используется.Если в OpenGL я установлю красный буферный буфер, он будет выглядеть так же, как если бы я установил красный буфер в DirectX.Если я сделаю те же расчеты освещения в OpenGL, что и в DirectX, я увижу те же результаты и так далее.Любые различия, которые могут возникнуть, вероятно, являются результатом того, что API не идентичны, поэтому программисты обходят его.

Модели из программ трехмерного моделирования (таких как Maya или 3DsMax) не «кодируются», они экспортируются вформат, который игра может понять.Это могут быть основанные на XML форматы, такие как Collada, текстовые форматы, такие как OBJ, или даже собственные двоичные форматы.Важно то, что данные из программы моделирования доступны для игры в формате, который она может считывать и преобразовывать во внутреннее представление геометрии.Практически каждый игровой движок обрабатывает геометрию немного по-своему.

Технически, я мог бы просто сохранить следующий файл:

V1  0.0, 0.5, 0.5
V2 -0.5,-0.5, 0.5
V3  0.5, 0.5, 0.5

M1 V1, V2, V3

Пока игра понимала, что этот файл содержит три вершины(V1, V2, V3) и одну сетку (M1), состоящую из этих трех вершин, и знали, как читать ее в формате, который мы могли бы затем визуализировать, мы были бы в бизнесе и моглиНарисуйте этот треугольник на сцене в виде сетки.Кстати, этот формат находится недалеко от формата OBJ.

Большинство экспортеров намного сложнее, чем этот, и большинство механизмов поддерживают более сложное геометрическое представление для учета всех дополнительных данных, которые эти (мощные) инструменты моделированияможем предоставить для нас.

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