Можно ли использовать glsl вместо webgl? - PullRequest
0 голосов
/ 21 февраля 2019

Это может быть немного наивным вопросом, поэтому, пожалуйста, будьте осторожны со мной.Но я смотрел на шейдеры на shadertoy.com и удивляюсь, насколько мал код glsl для 3d-сцен.Копая глубже, я заметил, что большинство шейдеров используют технику, называемую марширование лучей .

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

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

1 Ответ

0 голосов
/ 21 февраля 2019

Простой ответ заключается в том, что приемы с шейдертой, вероятно, в 10 100 000 раз медленнее, чем с использованием вершин и треугольников.

Сравните этот шейдерный лес, который работает на скорости 1 кадр / с в лучшем полноэкранном режиме на моем ноутбуке

https://www.shadertoy.com/view/4ttSWf

В этот лес Скайрима, который работает на скорости от 30 до 60 кадров в секунду

https://www.youtube.com/watch?v=PjqsYzBrP-M

Сравните этот город Шадертой, который работает на скорости 5 кадров в секунду на моем ноутбуке

https://www.shadertoy.com/view/XtsSWs

В этот город: город горизонтов со скоростью 60fps

https://www.youtube.com/watch?v=0gI2N10QyRA

Сравните этот клон Shadertoy Journey, который работает на 1fps в полноэкранном режиме на моем ноутбуке

https://www.shadertoy.com/view/ldlcRf

до настоящей игры Journey на PS3, машине с возможно более медленным графическим процессором, чем у моего ноутбука, учитывая, что PS3 вышла в 2006 году, и все же работает на скорости 60fps

https://www.youtube.com/watch?v=61DZC-60x20#t=0m46s

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

Сравните приведенные выше примеры путешествий.Пример Shadertoy - это отдельная сцена против игры, представляющей собой огромный мир с постройками, руинами, головоломками и т. Д. ...

Есть причина, по которой он называется Shader TOY .Это задумано как забавный вызов.Учитывая, что единственная функция, которая вводит только то, какой пиксель в данный момент рисуется, напишите код для рисования чего-либо.Таким образом, изображения, которые людям удалось нарисовать, учитывая этот предел, удивительны!

Но они не являются , как правило, методами, используемыми для написания реальных приложений.Если вы хотите, чтобы ваше приложение работало быстро и было гибким, вы используете более традиционные приемы вершин и треугольников.Техника, используемая GTA5, Red Dead Redemption 2, Call of Duty, Apex Legends, Fortnite и т. Д ....

...