可以用glsl代替webgl吗?

问题描述 投票:2回答:1

这可能是一个天真的问题,所以请放轻松我。但我正在看shadertoy.com的着色器,我很惊讶glsl代码对于3D场景有多小。深入挖掘我注意到大多数着色器使用了一种名为ray marching的技术。

这种技术可以避免完全使用顶点/三角形,只需使用像素着色器和一些数学来创建一些非常复杂的场景。

所以我想知道为什么3D场景经常使用webgl的三角形网格而不是仅仅使用像素着色器。我们不能用glsl和像素着色器(也就是片段着色器)渲染整个场景吗?

javascript 3d glsl webgl fragment-shader
1个回答
3
投票

简单的答案是因为shadertoy上的技术可能比使用顶点和三角形慢10,100,1000倍。

比较这个在我的笔记本电脑上以1fps运行最佳全屏的shadertoy森林

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

这个以30至60fps运行的天际森林

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

比较我的笔记本电脑上以5fps运行的Shadertoy城市

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

到这个城市:以60fps运行的Skylines城市

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

比较一下在我的笔记本电脑上运行1fps全屏的Shadertoy Journey克隆

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

PS3上的实际Journey游戏,由于PS3在2006年问世,因此GPU的速度比我的笔记本电脑慢得多,但运行频率为60fps

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

还有很多其他原因。一个典型的3D世界使用千兆字节的数据来表示纹理,角色,动画,碰撞等等,这些都不仅仅在GLSL中可用。另一个通常是他们使用分形技术,所以没有简单的方法来实际设计任何东西。相反,他们只是搜索数学中有趣的东西。例如,这不是设计游戏关卡的好方法。换句话说,使用顶点数据可以使事情变得更加灵活和可编辑。

比较上面的旅程示例。 Shadertoy的例子是一个单一的场景vs游戏,这是一个巨大的设计世界,有建筑物,废墟和谜题等......

有一个原因叫做ShaderTOY。这是一个有趣的挑战。给定一个只输入的函数是当前正在绘制哪个像素,编写代码来绘制一些东西。因此,人们设法绘制的图像给出了极限是惊人的!

但是,它们通常不是用于编写真实应用程序的技术。如果您希望您的应用程序快速运行并且灵活,您可以使用更传统的顶点和三角形技术。 GTA5,Red Dead Redemption 2,使命召唤,Apex Legends,Fortnite等使用的技术....

© www.soinside.com 2019 - 2024. All rights reserved.