前几天和一位做独立游戏的朋友聊天,他正被一个老问题折磨得够呛:为了让他那套华丽的水体着色器能在PC、Mac和手机上“看起来差不多”,已经连续加了三个礼拜的班。他苦笑说,感觉不是在写代码,而是在给不同GPU厂商的“方言”做翻译。但聊到最后,他眼睛忽然亮了:“不过,最近开始捣鼓WebGPU,感觉好像有点不一样了。”
我们过去太习惯了。DirectX用HLSL,OpenGL/ES用GLSL,Metal用MSL。每一套API背后,都有一套自成体系的工具链、编译器和微妙的“潜规则”。写Shader,与其说是在创造视觉,不如说是在小心翼翼地平衡不同平台的“脾气”。一个在N卡上流光溢彩的效果,到了A卡上可能颜色诡异;在iOS上跑得丝滑,到某个安卓机型上直接卡成幻灯片。跨平台,成了无数图形开发者肩上最重的担子。
WebGPU的出现,像是一个试图建立“世界语”的野心家。它不隶属于任何一家硬件或操作系统厂商,由W3C牵头制定,目标就是为Web(并间接为原生)提供一个统一、高效、安全的底层图形和计算接口。而它的配套着色器语言WGSL,正是这个野心的核心。
WGSL的设计很有意思。它不像HLSL或GLSL那样带有浓厚的历史包袱,而是从现代GPU的实际能力出发重新设计。语法上,它试图在C系语言的熟悉感和安全性之间找平衡。但更重要的是,WGSL在规范层面就明确了它是“可移植的中间表示”。这意味着,理论上,你写的WGSL代码,经过浏览器的驱动适配层,可以相对公平、高效地运行在任何支持WebGPU的设备上,无论是Windows的DirectX 12、macOS的Metal,还是Linux的Vulkan。
听起来很美好,对吧?但技术趋势从来不是简单的“从此天下大同”。统一的标准往往会带来新的、更抽象层的复杂度。
首先,WGSL毕竟年轻。它的生态和工具链,跟耕耘了十几年的HLSL/GLSL相比,还像个刚学会走路的孩子。那些资深TA(技术美术)积累了多年的、针对特定平台优化的“黑魔法”和秘籍,在WGSL里可能得换个思路重来。这算不算一种新的学习成本?
其次,“一次编写,到处运行”一直是种美丽的幻觉。即便底层API统一了,不同硬件(移动端和桌面端GPU)、不同功耗墙、不同内存带宽的差异依然赤裸裸地存在。WebGPU/WGSL提供的,或许是一个更公平的起跑线,但绝不意味着你可以无视终点线的不同。高性能的桌面级PBR着色器,不加修改地丢到手机浏览器里,结果很可能是一场灾难。跨平台的未来,可能从“翻译多种方言”转变为“用同一种语言,为不同听众写不同篇幅的故事”。
再者,原生生态会甘心被Web“统一”吗?大型游戏和专业图形应用,对性能的压榨是极致的,它们很可能还会长期依赖DirectX 12或Vulkan的原生接口,去触碰那些WebGPU出于安全、稳定性考虑而不会暴露的“底层獠牙”。WebGPU的跨平台趋势,或许最先深刻改变的,是中等复杂度、强调分发便利性的领域:轻量级游戏、产品可视化、在线教育工具、数字艺术创作平台。在这些地方,“打开浏览器就能获得一致体验”的吸引力,是压倒性的。
所以,当我们谈论WebGPU下的Shader跨平台趋势时,我们期待的或许不是某个一劳永逸的银弹。我们期待的,可能是一种“重心的转移”。
把开发者从兼容性泥潭里稍微解放出来一些,让他们能把更多精力花在效果创意和算法优化本身,而不是没完没了地调试平台特异的bug。让创意和技术的门槛降低一点,让更多有想法但未必是图形学专家的人,也能用相对统一的方式在Web这个最大的平台上施展拳脚。甚至,催生出一套全新的、基于WebGPU的图形资产和效果库,它们从诞生起就是为跨平台而设计的。
我那位朋友最后说,他用WGSL重写核心效果的那一周,虽然也遇到了新问题,但心态上轻松了不少。“至少,我知道问题大概率出在我的算法上,而不是某个驱动程序的‘神秘特性’里。” 这种确定性,对于创作者来说,有时候比绝对性能的提升更珍贵。
趋势的尽头不是同一片风景,而是通往更多风景的、更平坦一些的路。路修好了,上面会跑出什么意想不到的车,那才是真正有趣的部分。
参与讨论
这玩意真能搞定安卓碎片化?有点怀疑🤔
前几天用WGSL写了个简单水波,iOS上跑得挺顺,安卓低端机还是卡
统一语言是好事,但厂商各自优化的坑估计还得踩