Насколько большим может быть фрагментный шейдер WebGL? - PullRequest
2 голосов
/ 11 декабря 2011

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

Ответы [ 3 ]

2 голосов
/ 12 декабря 2011

«Безопасный» ответ заключается в том, что это зависит от вашего оборудования и драйверов, но на практике они могут быть довольно сумасшедшими.То, что JustSid сказал о производительности, действительно применимо (больший шейдер == медленный шейдер), но похоже, что вы не нацелены на 60FPS здесь.*http://en.wikipedia.org/wiki/High_Level_Shader_Language. Страница посвящена шейдерам Direct X, но все ограничения шейдеров применимы и к GLSL.

1 голос
/ 28 апреля 2017

Существуют различные ограничения на размеры шейдеров. Это до драйвера / GPU, но это также зависит от машины и WebGL. Некоторые реализации WebGL (chrome) запускают внутренний таймер. Если одна команда GL займет слишком много времени, они убьют WebGL («Крысы, WebGL попала в тупик»). Это может случиться, когда шейдер компилируется слишком долго.

Вот пример глупого 100k шейдера, где я провел модель через скрипт для генерации меша в самом шейдере. Он работает для меня на MacOS на моем MacBook Pro. Он также работает на моем iPhone6 ​​+. Но когда я пробую это в Windows, драйвер DirectX слишком долго пытается оптимизировать его, и Chrome убивает его.

Забавно развлекать и помещать геометрию в свой шейдер, и забавно развлекаться со знакомыми полями расстояния и типом лучей, но эти техники больше похожи на головоломку / игрушку. Они никоим образом не являются исполнителями . В качестве типичного примера этот шейдер на основе SDF работает на моем ноутбуке со скоростью примерно 1 кадр в секунду, и все же мой ноутбук способен отображать весь Los Santos из GTV5 с разумной частотой кадров ,

Если вам нужна производительность, вам действительно следует использовать более стандартные приемы, помещая свою геометрию в буферы и выполняя рендеринг с отложенным или отложенным отображением.

0 голосов
/ 11 декабря 2011

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

...