问题标签 [deferred-shading]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl - 延迟渲染中的点光源双抛物面 VSM
我一直在遵循本教程来实现延迟渲染中点光的方差阴影映射功能。
我正在使用 GLSL 3.3,左手坐标系。这是我一直在做的事情:
我将场景渲染为双抛物面图,存储深度和深度 * 深度。
上图包含前后图。点光源在场景的中心,你可以看到它发黄光最多的地方。
然后我设置了一个全屏着色器通道。我通过将教程代码从 FX 转换为 GLSL 来做到这一点。
作者的 .fx 代码:
我翻译的 GLSL 代码:
现在我不知道要触摸哪里才能正确渲染阴影。有人可以为我指出吗?
opengl - OpenGL 延迟像素化光照
我正在为体素游戏开发 3 通道延迟光照系统,但是我遇到了像素化光照和环境光遮挡问题。
第一阶段将屏幕上每个像素的颜色、位置和法线渲染成单独的纹理。这部分工作正常:
第二个着色器计算屏幕上每个像素的环境遮挡值并将其渲染到纹理。这部分不能正常工作并且被像素化:
原始遮挡数据:
第三个着色器使用颜色、位置、法线和遮挡纹理将游戏场景渲染到屏幕上。这个阶段的光照也是像素化的:
SSAO (2nd pass) 片段着色器来自www.LearnOpenGL.com的 Screen Space Ambient Occlusion 教程:
光照和最终片段着色器:
游戏中每个方块面的大小为 1x1(世界空间大小)。我尝试将这些面分成更小的三角形,如下图所示,但是没有太大的明显差异。
如何提高照明和 SSAO 数据的分辨率以减少这些像素化伪影?先感谢您
c++ - 如何在帧缓冲区中添加无数灯光
按照 learnopengl 教程 ( https://learnopengl.com/Advanced-Lighting/Deferred-Shading ),作者保留了 GLSL 所示的固定光量(32 盏灯):
在应用灯光时:
但我希望能够添加尽可能多的灯光,因为我的项目将有无数灯光(激光枪、篝火、爆炸),所以我做了一些更改:
GLSL:
然后我一个一个地传递值并渲染一个四边形:
并且还添加了一个新的着色器来在屏幕上渲染帧缓冲区:
但我的代码只呈现第一盏灯: 结果 谁能告诉我我做错了什么以及如何在最终结果中添加灯光?
opengl - 具有多种颜色附件的多采样帧缓冲区的分辨率
尝试在延迟着色之上实现抗锯齿,我尝试使用多采样渲染缓冲区,然后使用缓冲区 blit 传递解析样本。
与传统的延迟着色一样,我使用专用着色器渲染场景,发出 3 种颜色输出:
- 职位
- 法线
- 漫反射和镜面反射
然后将它们用于照明计算通道,从而产生最终的场景纹理
使用简单着色器将场景纹理渲染到全屏四边形屏幕上
正如您可能猜到的那样,屏幕上的 MSAA 在渲染到屏幕时不会应用于场景纹理的内容:为了实现抗锯齿,我因此在步骤 1) 中选择使用多采样渲染缓冲区并引入了一个额外的步骤1.1) 用于分辨率。当然,多重采样仅对彩色图是必要的/有用的,而不是其他 2 个图。
我的问题和问题是,显然,只能为相同类型的附件定义具有多个渲染缓冲区/颜色附件的帧缓冲区;这意味着如果一个附件是多采样的,那么所有其他附件都必须是。
这成为解析期间位置和法线缓冲区的问题,因为抗锯齿会影响几何图形和照明。
- 我对帧缓冲区附件的理解是否有效?
- 有没有办法解决它,以便在 Diffuse&Specular 贴图上仍然进行多重采样,但不影响其他贴图?
上面代码示例的结果是,被照亮的对象的边缘显示出不适当的暗/黑或亮/白像素伪影,可能是因为它们的位置和/或法线在此过程中已被更改。
c++ - Opengl 3/4:我可以将同一个缓冲区对象绑定到不同的目标吗
在我的具体情况下,我试图将一个顶点缓冲区对象绑定到一个统一的缓冲区对象中。
有关更多详细信息,在延迟着色的不透明对象渲染管道中,我创建了一个 G 缓冲区,然后使用光 vbo 一次渲染一个点光。
然后,我需要所有这些灯作为可用于在半透明对象的前向渲染中进行迭代的 ubo。