小编Sky*_*yun的帖子

在WebGL2中使用drawBuffers时会遇到麻烦

我想将延迟渲染器和前向渲染器组合在一起.为了共享相同的深度缓冲区,我使用一个带有4个颜色附件的帧缓冲区对象,用于G缓冲区渲染的COLOR_ATTACHMENT0-2,用于延迟着色和前向渲染的COLOR_ATTACHMENT3,这里是pesudo代码:

//**Gbufffer part**
Bind G-Buffer FBO
gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1, gl.COLOR_ATTACHMENT2]);
draw the G buffer

//**Lighting part**
Bind Lighting buffer FBO

//**Shading part**
Bind G-Buffer FBO
gl.drawBuffers([gl.COLOR_ATTACHMENT3]);

//**Forward rendring part**
//Still use the G-Buffer FBO and COLOR_ATTACHMENT3
draw forward material
Run Code Online (Sandbox Code Playgroud)

使用这个时,我在firefox中遇到了一个错误:

错误:WebGL:drawBuffers:buffers[i]必须为NONE或COLOR_ATTACHMENTi.

在Chrome浏览器中,我得到了这个:

FrameBufferObject.ts:151的WebGL:INVALID_OPERATION:drawBuffers:COLOR_ATTACHMENTi_EXT或NONE

我的代码出了什么问题?这真让我迷惑...... THX.

opengl-es webgl webgl2

4
推荐指数
2
解决办法
626
查看次数

如何在边缘没有伪影的情况下从深度重建法线?

最近我正在研究我的 SSAO 实现,对于我的引擎,我想添加对前向和延迟渲染器的支持,因此我选择使用仅深度方法并从深度图重建法线,这是代码:

//Restore view space position with non-linear depth
vec3 viewPos = getPosition(uv, depth, invProjMat);
//Restore view space normal
vec3 normal = normalize(cross(dFdx(viewPos), dFdy(viewPos)));
Run Code Online (Sandbox Code Playgroud)

然后我将这个法线应用到我的 SSAO 实现中,除了边缘之外,它主要取得了相当不错的结果:

在此处输入图片说明

我确定那是因为边缘的不连续法线,但我不知道如何修复它。那么在从深度重建法线时,有什么方法可以避免边缘上的伪影?谢谢。

在此处输入图片说明

opengl graphics

3
推荐指数
1
解决办法
3515
查看次数

标签 统计

graphics ×1

opengl ×1

opengl-es ×1

webgl ×1

webgl2 ×1