Как выполняется рендеринг программного обеспечения?


15

Я хотел бы исследовать растеризацию в реальном времени на основе программного обеспечения. Я знаю, что сейчас все идет к GPU, но есть несколько игр, в которых все еще имеет смысл использовать программный рендерер.

Например: Воксельтрон

Voxatron - это стрелялка на арене, которая происходит в мире, сделанном из вокселей (маленькие кубики, вроде того). Все в игре отображается на виртуальном дисплее вокселя 128x128x64, включая меню и инвентарь игрока. Если вы присмотритесь, вы можете иногда увидеть, как инвентарь (счет / жизнь / боеприпасы) отбрасывает тень на некоторые объекты на земле.

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

Это довольно простая игра в глубине души - в основном просто Роботрон в трехмерном разрушаемом мире с тупыми существами. Я не уверен, насколько серьезными будут последствия разрушаемости для игрового процесса, но, конечно, весело отрывать куски стены. Я также добавил экспериментальный пикап для строительства стен, который вы можете использовать, чтобы построить барьеры, чтобы спрятаться от страшных монстров.

Действие игры разворачивается на небольшом наборе арен. В некоторых из них есть комнаты с установленными боевиками, где-то между Knightlore и Smash TV. Это некоторые из оригинального приключенческого дизайна, подкрадывающегося назад, и предлог для создания тематической среды.

Функции:

  • Пользовательский программный рендеринг с мягкими тенями.
  • Встроенный синтезатор звука и музыки (также используется для создания трейлера музыки).
  • Воспроизведение и запись после игры.

1
Аккуратная ссылка на игру. Обратите внимание , его не нужно использовать программное обеспечение визуализации для получения мягких теней на GPU . Он столкнется с некоторыми ограничениями производительности со стороны цикла рендеринга и не сможет работать на более простых машинах, таких как ноутбуки с тактовой частотой 1,6 ГГц или портативные устройства, когда он действительно может, если он использует доступное оборудование.
Бобобобо

Ответы:


11

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

Архитектура игрового движка

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

Рендеринг в реальном времени

  • Немного более подробное освещение, но опять-таки придерживается только того, что вам может понадобиться знать. Опять же, я рекомендую этот для тем, охваченных в остальных главах.

Как только вы узнаете, как представлять и обрабатывать трехмерные объекты, вы готовы посмотреть, как вывести их на экран. Обычно это делается с помощью метода растеризации треугольника линии сканирования. На самом деле это довольно простая концепция. Вы рисуете одну строку одного треугольника за раз, интерполируя координаты цвета и текстуры. Этот процесс продолжается для всех треугольников на экране. Вы могли бы даже реализовать буфер глубины для обработки не по порядку рендеринга.

введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь

Это рассматривается более подробно в этих статьях:

Учебное пособие - Введение в программный рендеринг: треугольная растеризация

Школа визуализации программного обеспечения: часть I


И просто для удовольствия, проверьте следующую статью:

Обзор исходного кода Quake 2 3/4 (Software Renderer)


Добро пожаловать:] (вы также можете посмотреть здесь для более подробного обзора процесса: en.wikipedia.org/wiki/Rasterisation )
zfedoran

Некоторые хорошие ссылки там!
Джонатан Коннелл

5

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

Первая часть, к счастью, такая же, как теория, используемая для графического конвейера, представленная современным оборудованием и API. Если вы уже знаете это, все готово. Если нет, я рекомендую хорошую книгу. Это довольно хорошо.

Есть много вариантов для второй части. Они сильно зависят от вашей ОС и выбора набора инструментов. Если вы используете C или C ++, в Windows вы можете просто отобразить пиксели непосредственно в растровое изображение GDI ( SetPixelэто просто, но мучительно, бесполезно медленно - CreateDIBSectionдает вам кусок необработанных байтов, которыми вы можете манипулировать с гораздо большей скоростью).

Вы также можете приобрести поверхность DirectDraw и записать в нее, или записать в текстуру Direct3D или OpenGL. В этих последних случаях вы по-прежнему будете использовать аппаратное обеспечение, но пока вы сами создаете всю композицию окончательного изображения на ЦП и просто используете аппаратные API-интерфейсы для копирования результатов на экран, это все равно имеет значение. На современных ПК вы все равно не можете получить доступ к сырой VRAM или чему-либо напрямую.

Если вы хотите узнать больше, вам, вероятно, следует создать более конкретные вопросы. Я или другие были бы рады ответить на них.


Для книги: Насколько хорошо "довольно хорошо"? 84 доллара - это немного денег :)
Джонатан Коннелл

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

0

Хорошо, я подойду к этому вопросу с самых основ; все, что выходит за рамки этого, является широким для простого QA; вам нужно купить книгу на эту тему.

Основное различие между рендерингом в программном обеспечении и использованием графического процессора сводится к построению пикселей. То есть, когда вы выполняете программный рендеринг, вы несете полную ответственность за построение каждого чертового пикселя, тогда как в графическом процессоре графическое построение пикселей в значительной степени автоматизировано аппаратным обеспечением, и вы просто «массируете» конвейер пикселей с помощью шейдеров.

Например, подумайте о том, что вам, программисту, нужно сделать, чтобы вывести на экран трехмерный треугольник. С графическим процессором вы в значительной степени просто указываете аппаратному обеспечению, что такое координаты X, Y, Z вершин, а затем видеокарта заполняет все пиксели на экране, которые составляют изображение треугольника. Вы можете использовать шейдер, чтобы сообщить графическому процессору об изменении цвета каждого пикселя на основе текстуры или чего-то еще, но в конечном итоге это все равно сводится к тому, что графический процессор автоматически заполняет все пиксели за вас.

При программном рендеринге вам нужно будет рассчитать, какие пиксели на экране нужно заполнить, а затем сделать блики, чтобы фактически заполнить эти пиксели. То есть вы будете выполнять математическую математику для преобразования из координатного пространства 3D-сцены в пространство просмотра, затем проецировать точки из пространства просмотра на экран и т. Д.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.