WebGPU学习(一): 开篇

介绍

大家好,本系列从0开始学习WebGPU API,并给出相关的demo。

上一篇博文
WebGPU学习系列目录
下一篇博文
WebGPU学习(二): 学习“绘制一个三角形”示例

WebGPU介绍

参考WebGPU 开发状态与计划

WebGL是老的Web 3D图形API,它的版本演进如下图所示:
截屏2019-12-24下午4.32.02.png-140.5kB

WebGPU是最新的Web 3D图形API,与WebGL的对比为:
截屏2019-12-24下午4.42.45.png-108.5kB

浏览器封装了现代图形API(Dx12、Vulkan、Metal),提供给Web 3D程序员WebGPU API。

WebGPU概要:
截屏2019-12-24下午4.44.33.png-119.7kB

为什么要学习WebGPU

  • WebGPU更好地支持多线程

  • WebGPU支持compute shader,从而让程序员能利用GPU实现很多优化

  • WebGPU与WebGL2的区别很大,两者不容易兼容。如果要从WebGL1升级,最好直接升级到WebGPU,一劳永逸

  • WebGPU是标准,各大浏览器都会支持。不像WebGL2,苹果直接不支持。

  • 目前WebGPU虽然还未正式发布,但已经比较成熟了,也有相关的Demo可供学习

WebGPU完善程度

自从2017年提出WebGPU后,已经经过两年的发展。
目前Chrome和Safari支持得比较好,基本功能都有了(比如能够绘制pbr材质的模型,支持compute shader等),而且已经可以在MacOS中运行。

Babylonjs已经支持了WebGPU,详见WebGPU 文档

不过WebGPU对于shader使用哪种方案还没有确定:
在Chrome中,使用4.5版本的glsl ,需要通过官方提供的第三方库将其转成二进制码(SPIR-V);
在Safari中,直接使用新的语言WSL,不需要转换。

前者的好处是我们熟悉glsl,学习成本低;
后者的好处是新语言功能更强大,性能更好。

  • 参考资料

WebGPU 开发状态与计划-2018.11.17
Implementation Status
WebGPU and WSL in Safari
WebGPU and WSL in Web Inspector
Babylonjs->WebGPU 文档
webgpu-samples for Chrome (uses GLSL via SPIR-V)
WebKit/Safari Demos (uses WSL)
gpuweb->issues

准备开发环境

MacOS只有高版本支持WebGPU(我之前是MacOS 10.10版本,运行不了WebGPU!升级为MacOS Catalina就可以运行了!!!)。

对于Chrome:
下载最新的Chrome Canary,并且打开 chrome://flags/#enable-unsafe-webgpu

大家可以使用我下载的Chrome Canary

对于Safari:
下载最新的Safari Technology Preview,选中 Safari → Preferences → Advanced → Develop menu→ Experimental Features → WebGPU

WebGPU学习资料

目前学习资料非常少,属于早期探索阶段~

WebGPU学习中文资料
WebGPU: An Explicit Graphics API for the Web
Get started with GPU Compute on the Web
WebGPU API规范

本系列技术选型

  • 开发环境

    • Chrome Canary
      因为Chrome市场占用率更高,而且shader使用glsl更简单,所以我使用Chrome Canary。
  • 技术栈

    • Javascript语言

    • 使用原生WebGPU API

能给你带来什么收益?

  • 从0学习WebGPU,熟悉原生API
  • 缩小与PC端最新的3D技术的差距(学了WebGPU,就只与目前最新的DX12 RTX差半代了!而WebGL2只相当于DX10)
  • 更新思维模式,学习最新的设计理念(WebGPU相比WebGL相当灵活和模块化,如果要被封装成引擎的话需要一些新的设计思路)

内容规划

本系列分成三个部分:

第一部分(已经完成)

一个一个地学习官方的sample(我fork到本地了),掌握基础的API调用,讲解相关的概念

第二部分(开始写了)

学习光线追踪,并实现对应的sample

第三部分(没有开始写)

综合运用所学内容,实现一些demo(如gpu driven render pipeline)

posted @ 2019-12-05 08:39  杨元超  阅读(6633)  评论(3编辑  收藏  举报