WebGL 与现代浏览器 · 为什么 Flash 被 WebGL 和 HTML5 取代
WebGL 是什么
WebGL(Web Graphics Library)是一个浏览器原生支持的 JavaScript API,让开发者可以在网页里调用图形处理单元(GPU)进行 3D 渲染——效果和 PC 端用 OpenGL 做 3D 游戏一样,只不过运行环境变成了浏览器。
WebGL 基于 OpenGL ES(移动端 GPU 专用的 OpenGL 子集),由 Khronos Group 维护。它的核心特性:
- 浏览器原生:Chrome、Edge、Firefox、Safari 全部默认支持,不需要任何插件
- 硬件加速:调用 GPU 渲染,性能远超 Flash 的 CPU 软渲染
- 跨平台:桌面、移动都能用
- 和 JavaScript 无缝集成:游戏逻辑用 JS,渲染用 WebGL
时间线
| 时间 | 事件 |
|---|---|
| 2011 年 | WebGL 1.0 发布,浏览器开始陆续支持 |
| 2013 年 | 主流浏览器全部支持 WebGL 1.0 |
| 2017 年 | WebGL 2.0 发布(基于 OpenGL ES 3.0) |
| 2020 年 | Adobe Flash 停止分发 |
所以 WebGL 在 2013 年前后就已经成熟到可以替代 Flash 的 3D 渲染能力,比 Flash 正式退场早了整整 7 年。
WebGL vs Flash 的渲染架构
这是两个技术最核心的区别:
Flash 渲染架构
Flash 用的是 ActionScript 虚拟机 + CPU 软渲染架构:
- 开发者写 ActionScript 代码
- Adobe Flash Player 解释执行 ActionScript
- 矢量图形由 CPU 逐帧软渲染成位图
- 音频由 Flash Player 内部解码器处理
整个过程完全在 CPU 上完成——Flash Player 早期有过尝试用 GPU 加速,但一直没成为主力。
WebGL + HTML5 渲染架构
现代浏览器游戏用的是 JavaScript + HTML5 Canvas + WebGL + Web Audio架构:
- 开发者写 JavaScript(或 TypeScript)
- 浏览器的 JavaScript 引擎(V8 / SpiderMonkey / JavaScriptCore)执行代码
- 2D 图形用 HTML5 Canvas 2D API(部分浏览器用 DXGI / Metal 做硬件加速)
- 3D 图形用 WebGL API 直接调 GPU 渲染管线
- 音频用 Web Audio API(浏览器原生音频处理)
关键差异在于 3D 渲染直接走 GPU——WebGL 可以发挥 GPU 的并行计算能力,而 Flash 的 3D 是 CPU 软模拟出来的。
框架生态
WebGL 本身是底层 API,直接写 WebGL 代码很繁琐。于是有了一系列上层 3D 框架:
| 框架 | 特点 |
|---|---|
| Three.js | 最流行的 WebGL 3D 框架,API 友好 |
| PlayCanvas | 浏览器端 3D 游戏引擎,有可视化编辑器 |
| Babylon.js | 微软出品,功能完整 |
| Unity WebGL | Unity 引擎直接导出 WebGL 版本 |
Y8 上的很多 WebGL 游戏就是用这些框架做的——比如 CS Dust 可能用了 PlayCanvas,简单的 io 游戏可能直接用 Three.js。
性能对比
拿一个简单的 3D 游戏做对比:
| 维度 | Flash 3D(Stage3D) | WebGL 3D |
|---|---|---|
| 渲染方式 | CPU 软模拟 / 有限 GPU 加速 | 原生 GPU 管线 |
| 同复杂度 FPS | 约 20~30 | 约 60 |
| 移动端支持 | 差(移动端 Flash 已死) | 好(所有移动浏览器都支持) |
| 依赖 | Adobe Flash Player 插件 | 无 |
在 Y8 上的体现
Y8 平台上的 WebGL / HTML5 游戏和 Flash 游戏的体验差异非常明显:
- 加载速度:WebGL 游戏加载后直接运行,不需要等 Flash Player 或 Ruffle 初始化
- 帧率:WebGL 3D 游戏稳定 60 FPS,Flash 3D 游戏 20~30 FPS 就不错了
- 移动端:WebGL 游戏在 Android / iOS 浏览器里直接能玩,Flash 游戏在手机上只能靠 Ruffle 模拟且兼容度低
- 画面:WebGL 可以做现代 3D 效果(光照、阴影、粒子),Flash 的 3D 是伪 3D