WebGL:多重渲染目标(Multiple Render Targets)多重渲染目标(Multiple Render Targets)是一种一次性将渲染输出储存在多个纹理中的技术。在OpenGL中可以查询gl_MaxDrawBuffers的值来实现此技术,而WebGL 1.0标准则支持在GLSL中使用gl_FragData来实现多重渲染目标。 从Direct3D 9.0和OpenGL 2.0开始,多重渲染目标被正式支持。 重要性这是一种类似于延期着色(Deferred Shading)和屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion)的技术,它们依赖于渲染通道中产生的数据,比如每个片元的颜色、法线和位置。 如果不能支持多重渲染目标,场景必须渲染多次(使用多个渲染通道)来获取这些数据,这将大大提高资源的开销。 言论“如果当OpenGL ES 3.0推出的时候,如果能支持多重渲染目标,那么也许WebGL 2.0也会支持。” ——Gregg Tavares(Google I/O大会WebGL主题演讲者) “在多通道中渲染有时会拖慢运行速度。”——Mikael Emtinger (ROME, 技术总监) 现状因为WebGL 1.0标准及其实现缺乏一种指定被绑定的纹理到目标索引的方法,多重渲染目标实际上是不可用的。(译者注:也就是说目前Frame Buffer Object只能绑定一个渲染目标(Render Target),虽然着色器支持多目标渲染,但是外部一次却只能设置一个渲染目标。另外一方面,理论上gl_FragData并不是专为MRT准备的,所以WebGL在不支持MRT的情况下支持这个关键字, 无可厚非。) 如何解决
|