Зачем сегодня использовать программный рендеринг вместо аппаратного?

13

В отличие от процессора или программного рендеринга я предполагаю?

Не будет ли вообще весь текущий рендеринг основываться на GPU, если вы будете использовать OpenGL или Direct X?

Может ли кто-нибудь дать мне некоторую информацию здесь, не может найти подходящих ответов?

user3333072
источник

Ответы:

7

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

Традиционно аппаратный рендеринг несет в себе клеймо быть очень сложным. Во многом это было связано с разработкой интерфейсов прикладного программирования (API), которые не были приспособлены для сокрытия сложности; то есть кривая обучения была крутой. Это также частично объясняется пониманием того, что написание 3D-приложений, для которых эти API-интерфейсы в значительной степени ориентированы, гораздо сложнее, чем написание 2D-приложений. Что касается сложности интерфейса, я имею в виду такие интерфейсы, как OpenGL и DirectX. Относительно 3D против 2D, я имею в виду математику и геометрию, которые используются для создания трехмерных сцен, а также простоту, с которой неподготовленный ум может подходить к двумерным задачам.

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

Таким образом, программный рендеринг и 2D-рендеринг были хорошими отправными точками и областями внимания для тех, кто плохо знаком с графикой и / или хотел создать продукт, где рендеринг не занимал слишком много времени в проекте. По крайней мере, в отношении 2D, это все еще применяется; Технология в значительной степени преодолела разрыв в переносе 2D-рендеринга на GPU.

инженер
источник
20

Здесь есть несколько действительно хороших ответов, поэтому просто дополню их.

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

С аппаратным обеспечением вы, как правило, ограничены возможностями самого оборудования, хотя OpenGL для одного способен к программной эмуляции многих вещей, которые могут отсутствовать в оборудовании. Это означает, что если вы попытаетесь использовать Feature X, но оборудование не поддерживает ее, произойдет одно из двух: либо вы вернетесь к программной эмуляции (типичный сценарий OpenGL), либо не доберетесь до использовать его вообще (типичный сценарий D3D).

С программным рендерингом вы можете написать код самостоятельно. Вы можете манипулировать вещами и иметь полный контроль над тем, что происходит вплоть до уровня пикселей. Чтобы привести пример взрыва из прошлого, в Quake были реализованы пиксельные шейдеры в программном обеспечении еще в 1996 году, когда 3D-карты (тогда их еще не называли «графическими процессорами») могли растеризовать несколько десятков текстурированных треугольников.

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

Программное обеспечение рендеринга может масштабироваться лучше. Только относительно недавно мы увидели, что установки с несколькими графическими процессорами стали действительно жизнеспособными, но программное обеспечение может масштабироваться на множество ядер ЦП на многих серверах. Вы можете иметь целые фермы серверов, выделенные для этого, и профессиональные фермы рендеринга по-прежнему будут использовать программный рендеринг.

Программное обеспечение может предоставлять различные парадигмы рендеринга. Современное оборудование очень сфокусировано на парадигме треугольник / вершина / фрагмент / растеризация; это случай выбора одной вещи и ее оптимизации до тех пор, пока она не закричит о пощаде. Графические процессоры по-прежнему плохой выбор, например, для трассировки лучей, который чаще всего применяется в программном обеспечении.

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

Максимус Минимус
источник
8
+1 за «рендеринг программного обеспечения на самом деле может быть более мощным, чем аппаратный рендеринг, а не меньше».
concept3d
10

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

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

Рой Т.
источник
2

Я думаю, что это действительно хороший вопрос.

То, что я могу себе представить, это:

  • VRAM более ограничен, чем общая оперативная память. В случае рендеринга с помощью графического процессора - каждая текстура более важна. Вы можете хранить в среднем примерно в 4-8 раз больше данных в оперативной памяти, чем VRAM. Конечно, в этом сценарии предполагается, что нет системы, отвечающей за освобождение / передачу неиспользуемых / требуемых текстур из / в RAM / VRAM

  • С точки зрения многопоточности намного проще, когда вы работаете с программным рендерингом - не нужно делиться контекстами

  • Если вы работаете с 2D-графикой - обычно в большинстве фреймворков реализована оценка Dirty Rectangles - что решает многие проблемы производительности.

Тем не менее, рендеринг с использованием OGL / D3D дает гораздо больше производительности и возможностей. Шейдеры могут делать действительно удивительные вещи, которые практически невозможны при программном рендеринге.

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

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

luke1985
источник
1
Вам не нужно аппаратное ускорение для запуска шейдеров. OS X 10.9 поставляется с полнофункциональной программной реализацией GL4. Производительность невероятно хороша для программного рендеринга; Дело не в том, что вы можете реально играть в сложные игры (честно говоря, графические процессоры Apple не поставляют свои продукты), но это гораздо более практично, чем использование чего-то вроде эталонного растеризатора Direct3D. Это на самом деле то, что вы можете отправить работающее программное обеспечение, используя.
Андон М. Коулман,
@ AndonM.Coleman Не все используют Apple, и я не знаю программных рендеров, которые поддерживают шейдеры в Linux и Windows.
luke1985
1
Это не моя точка зрения, хотя. Существуют реализации OpenGL, где полнофункциональные шейдеры работают полностью на процессоре. Тот факт, что Apple является разработчиком, в значительной степени не имеет значения. Ваш ответ создавал впечатление, что вы думали, что вам нужен GPU для запуска современных шейдеров в OpenGL.
Andon M. Coleman
@ AndonM.Coleman И это почти правильно, потому что в 80% случаев вы должны.
luke1985
2
Шейдеры могут быть легко реализованы с помощью программного рендеринга, даже в Tomb Raider 1 и Quake 1 были пиксельные шейдеры. С другой стороны, процессор дает вам больше контроля, чем ограничивающий конвейер вершин / фрагментов текущих графических процессоров.
lama12345 19.09.16