Здесь есть несколько действительно хороших ответов, поэтому просто дополню их.
Основной движущей силой рендеринга программного обеспечения является возможность. Это было затронуто в одном из ответов, но я собираюсь сделать противоположное замечание: программный рендеринг на самом деле может быть более мощным, чем аппаратный рендеринг, а не меньше.
С аппаратным обеспечением вы, как правило, ограничены возможностями самого оборудования, хотя OpenGL для одного способен к программной эмуляции многих вещей, которые могут отсутствовать в оборудовании. Это означает, что если вы попытаетесь использовать Feature X, но оборудование не поддерживает ее, произойдет одно из двух: либо вы вернетесь к программной эмуляции (типичный сценарий OpenGL), либо не доберетесь до использовать его вообще (типичный сценарий D3D).
С программным рендерингом вы можете написать код самостоятельно. Вы можете манипулировать вещами и иметь полный контроль над тем, что происходит вплоть до уровня пикселей. Чтобы привести пример взрыва из прошлого, в Quake были реализованы пиксельные шейдеры в программном обеспечении еще в 1996 году, когда 3D-карты (тогда их еще не называли «графическими процессорами») могли растеризовать несколько десятков текстурированных треугольников.
Это в большей степени относится и к текущим графическим процессорам, но все еще есть существенные части графического конвейера, которые представлены как фиксированные функциональные возможности (или даже не представлены вообще).
Программное обеспечение рендеринга может масштабироваться лучше. Только относительно недавно мы увидели, что установки с несколькими графическими процессорами стали действительно жизнеспособными, но программное обеспечение может масштабироваться на множество ядер ЦП на многих серверах. Вы можете иметь целые фермы серверов, выделенные для этого, и профессиональные фермы рендеринга по-прежнему будут использовать программный рендеринг.
Программное обеспечение может предоставлять различные парадигмы рендеринга. Современное оборудование очень сфокусировано на парадигме треугольник / вершина / фрагмент / растеризация; это случай выбора одной вещи и ее оптимизации до тех пор, пока она не закричит о пощаде. Графические процессоры по-прежнему плохой выбор, например, для трассировки лучей, который чаще всего применяется в программном обеспечении.
Конечно, когда речь идет о прямом сравнении яблок с яблоками, графический процессор побеждает программное обеспечение в любой день недели - при условии, что мы сравниваем области, где графические процессоры сильнее. Но это не значит, что они сильнее в каждой области. Несмотря на это, и для целей этого сайта SE, использование оборудования, как правило, путь, но просто имейте в виду, что есть случаи использования, где программное обеспечение также жизнеспособно.
Аппаратное или графическое рендеринг , как вы уже догадались, использует графический процессор (или видеокарту) для рендеринга изображения. Противоположностью является программный рендеринг, где используется процессор.
Программный рендеринг обычно используется как запасной вариант, когда нет (подходящего) доступного графического процессора. Однако, поскольку графический процессор на несколько порядков быстрее, программные рендеры практически никогда не используются, поскольку ЦП обычно не может отображать изображения в реальном времени. Программный рендеринг полезен, когда требуется высокая точность, если для рендеринга изображения требуются чрезвычайно сложные формулы. Поскольку процессоры более универсальны, чем графические процессоры, и, следовательно, имеют больше возможностей. Однако этот аргумент становится все менее и менее обоснованным, поскольку в настоящее время графические процессоры могут выполнять все более и более сложные задачи и более не ограничиваются только 32-разрядными числами с плавающей точкой для представления чисел.
источник
Я думаю, что это действительно хороший вопрос.
То, что я могу себе представить, это:
VRAM более ограничен, чем общая оперативная память. В случае рендеринга с помощью графического процессора - каждая текстура более важна. Вы можете хранить в среднем примерно в 4-8 раз больше данных в оперативной памяти, чем VRAM. Конечно, в этом сценарии предполагается, что нет системы, отвечающей за освобождение / передачу неиспользуемых / требуемых текстур из / в RAM / VRAM
С точки зрения многопоточности намного проще, когда вы работаете с программным рендерингом - не нужно делиться контекстами
Если вы работаете с 2D-графикой - обычно в большинстве фреймворков реализована оценка Dirty Rectangles - что решает многие проблемы производительности.
Тем не менее, рендеринг с использованием OGL / D3D дает гораздо больше производительности и возможностей. Шейдеры могут делать действительно удивительные вещи, которые практически невозможны при программном рендеринге.
Но такие техники, как блиттинг, с использованием цветовых клавиш, имеют свое собственное чувство, как если бы вы были на базовом уровне, происхождение мира компьютерной графики.
Я думаю, что по крайней мере полезно знать о программном рендеринге. Это действительно очень захватывающий мир, не говоря уже о том, что это корень всего, что мы видим сегодня.
источник