GLSL能否替代WebGL?

4
这可能是一个比较幼稚的问题,请轻喷。我在 shadertoy.com 上看到了一些着色器,惊讶于用于 3D 场景的 glsl 代码有多么小。深入研究后,我发现大多数着色器都使用了一种称为ray marching 的技术。
这种技术可以避免完全使用顶点/三角形,而只需使用像素着色器和一些数学来创建一些相当复杂的场景。
所以我想知道为什么在 webgl 中 3D 场景经常使用三角网格,而不是只使用像素着色器。我们不能只使用 glsl 和像素着色器(也称为片段着色器)渲染整个场景吗?

顺便说一下:WebGL 中没有 glBegin/glEnd,实际上在 OpenGL 中也早已废弃。如果你想学习 WebGL,我建议阅读 这些文章 - gman
@gman 好的,已经修改了,我的意思是无论他们现在用什么方式绘制顶点。 - Shai UI
检查一下名为Marble Marcher的游戏,理论上你可以使用像素着色器代替常规管道,但正如gman所说,它更加计算密集,因为你需要计算例如分形然后渲染它,所以你会在性能和动态性之间做出权衡(例如能够修改诸如光位置之类的东西,通常是在实时计算而不是烘焙的,或者分形的参数)。 - Felipe Gutierrez
1
@FelipeGutierrez 谢谢,这是一个很好的资源。我相信 GPU 将会变得越来越快,因此在未来,光线追踪/光线行进将会更加广泛地被采用。 - Shai UI
现在正在发生的是,他们正在构建专门的核心,只为此而设计。难道你没有看到nVidia新的RTX上的RT核心吗? - Felipe Gutierrez
显示剩余2条评论
1个回答

6
简单来说,使用Shadertoy技术可能比使用顶点和三角形慢10、100、1000倍。请看这个Shadertoy森林,即使在我笔记本电脑的最佳全屏状态下也只能以1fps的速度运行。

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

到这个在30到60fps运行的天际森林

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

比较一下这个Shadertoy城市,它在我的笔记本电脑上只能以5fps的速度运行。

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

这是一篇关于运行在60fps的Cities:Skylines城市的文章。

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

比较一下这个 Shadertoy Journey 克隆,它可以在我的笔记本上全屏以每秒1帧的速度运行

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

与我的笔记本电脑相比,PS3上的Journey游戏使用的GPU可能较慢,因为PS3于2006年发布,但游戏仍以60fps运行。

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

有很多其他原因。一个典型的3D世界使用吉字节的数据来制作纹理、角色、动画、碰撞等,这些都不能只用GLSL实现。另一个常见的原因是它们经常使用分形技术,因此没有简单的方法来实际“设计”任何东西。相反,他们只是在数学中寻找有趣的东西。例如,这不是设计游戏关卡的好方法。换句话说,使用顶点数据使事物更加灵活和可编辑。
比较上面的Journey示例。Shadertoy示例是一个单一场景,而游戏是一个庞大的设计世界,包括建筑、废墟和谜题等等......
它被称为ShaderTOY是有原因的。它旨在成为一种有趣的挑战。给定一个仅输入当前正在绘制的像素的单个函数,编写代码以绘制某些内容。因此,人们在限制下成功绘制的图像是惊人的!
但是,这些通常不是编写真正应用程序所使用的技术。如果您希望您的应用程序运行快速并具有灵活性,则使用更传统的顶点和三角形技术。这些技术被GTA5、Red Dead Redemption 2、Call of Duty、Apex Legends、Fortnite等使用......

但是Demoscene 4kb演示似乎使用射线行进技术,它们的演示非常出色。https://www.youtube.com/watch?v=roZ-Cgxe9bU - Shai UI
首先,你提供的演示非常不详细。其次,许多4K演示需要顶尖GPU才能以合理的帧率运行,但它们几乎什么也不做。它们选择一种技术,并在1-2分钟内重复展示。 - gman
那数据可视化呢? - Shai UI
这取决于可视化。大多数你想要可视化的东西都需要数据。往往情况下,你可能想要可视化数据的方式不适合使用单个片段着色器。即使你可以用单个片段着色器完成它,也可能需要极其复杂的数学计算,并且相对于使用更传统、更简单和灵活的方法来说是不灵活的。 - gman
我仍然被它吸引。代码看起来很简洁,也喜欢它类似于光线追踪,更像物理世界的感觉。作为程序员,我不需要模型,也不需要处理顶点/三角形,这一点我很喜欢。总之,有很多值得喜欢的地方。 - Shai UI
1
你想做什么就做什么吧。我没有告诉你不要这样做。你问为什么人们不这样做得更多,我给了你答案。顶点和三角形更快、更灵活,但你可以自由地做任何你想做的事情。即使它们不够灵活和慢,制作Shadertoy风格的着色器也很有趣。我喜欢制作顶点着色器等效物,因为这很有趣。 - gman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接