ND缓冲区和G缓冲区有什么区别?

deb*_*ker 5 javascript webgl deferred-rendering webgl-extensions webgl2

我是WebGL的菜鸟。我读过几篇有关ND缓冲区和G缓冲区的文章,好像它是WebGL开发的战略选择。

ND缓冲区和G缓冲区与渲染管线有何关系?ND缓冲区仅用于正向渲染,G缓冲区仅用于延迟渲染吗?

一个JavaScript代码示例如何实现这两者将对我理解区别很有用。

gma*_*man 8

G-Buffers 只是一组通常用于延迟渲染的缓冲区。

维基百科给出了一个很好的例子,说明了在 g-buffer 中经常发现的数据类型

漫反射颜色信息

漫色

世界空间或屏幕空间法线

世界空间法线

深度缓冲/Z-缓冲

深度缓冲

这 3 个缓冲区的组合称为“g 缓冲区”

从几何体和材质数据生成这 3 个缓冲区,然后您可以运行着色器将它们组合起来生成最终图像。

最终图像

实际进入 g 缓冲区的内容取决于特定的引擎/渲染器。例如,Unity3D 的延迟渲染之一包含漫反射颜色、遮挡、镜面反射颜色、粗糙度、法线、深度、模板、发射、照明、光照贴图、反射问题。

ND 缓冲区仅代表“正常深度缓冲区”,这使其成为通常在典型 g 缓冲区中找到的内容的子集。

至于一个可以说对 SO 来说太大的示例,但在 MDN有一篇关于 WebGL 中的延迟渲染的文章