最值得期待的WebGL 2.0功能

最值得期待的WebGL 2.0功能

李宏伟李宏伟

WebGL 2.0 spec已经出来一段时间了,但是一直很隐秘,Khronos 的WebGL官方网页里面并没有提供这个spec的链接,不过可以google出来,网址是WebGL 2 Specification

那让我们来看看WebGL 2.0给我们带来什么新特性?

  • 最好的东西一定是Multiple-sampled texture,这样FBO才真正的有了实用价值。然后可以像其他平台的渲染引擎一样来搭建基于WebGL渲染引擎,pre-z pass --> rendering pass to FBO --> postprocessing pass --> render to window. 在WebGL 1.0上,把postprocessing结合进rendering pipeline始终是一个让人头痛的问题,因为需要多一遍从window buffer到texture的texCopyImage调用,不然就无法使用msaa。

  • Multiple Render Targets,这个是把WGL_draw_buffers正式转正了,虽然WGL_draw_buffers基本上每个浏览器都支持,但是用那种extension的写法总是让人觉得麻烦。有了Multiple Render Targets,结合WEBGL_color_buffer_float就可以做 deferred shading。没有当然也能做,但是得要多个render pass。此外,dynamic cube map也可以做了。

  • 第三个好东西就是Instanced Draw了。这也是一个extesion的转正结果,ANGLE_instanced_array。大家知道draw call越多,程序效率越差。instanced draw可以调用一次,但是将mesh画多边。相当于把一个for loop放到gpu里面实现了。对于数量大但是单体复杂度不高的模型绘制非常有效,例如渲染草和皮毛的shell rendering方法,用和不用instanced draw那是天壤之别。

  • Query的引用又是一大福音哦。现在我们可以query gl.ANY_SAMPLES_PASSED来得到有多少fragment被绘制了。这样就很方便我们做occlusion testing,对于那些满头大汗做picking(拾取)的同学真是一大利好啊。

  • 新特性第五名是sync object,虽然个人感觉WebGL很少会被用来做bandwidth intensive的应用,例如图像处理,或者每一帧的绘制数据来自于CPU,毕竟这个还受限于网络带宽,但是万一有这样的引用,使用sync object来细粒度控制CPU和GPU的并行可以大幅度提高效率哦。

  • 第六名是3D Texture。volume rendering的春天来啦,云啊雾啊,那么多particpant material的渲染都可以搬来WebGL平台啦。

  • 当然,新特性里面还有不少鸡肋的,例如transform feedback,看不懂这个玩意在没有geometry shader的情况下有啥用。此外就是sampler object。我觉得OpenGL的sampler object,包括桌面级别的OpenGL就是一个大鸡肋,应该仿照DirectX那样,可以在shader内部指定sampling/filter的模式,不然在CPU里面绑定texture filtering还是很不方便的,改一次还是要编译的嘛,而且还不直观。

更多更精彩的WebGL应用推荐和知识分享,请关注WebGL中文开发社区,微信号WebGL-China

文章被以下专栏收录
4 条评论
推荐阅读