问题标签 [deferred-rendering]
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 - 基于平铺剔除概念问题的延迟渲染
编辑:我仍在寻找有关使用 OpenCL 或计算着色器的帮助。我宁愿继续使用 OGL 3.3 而不必处理对 OGL 4.3 和 OpenCL 1.2 的不良驱动程序支持,但无论如何我都想不出在不使用两者之一的情况下进行这种类型的着色(匹配灯光和瓷砖)。是否可以在不使用 GPGPU 的情况下实现基于切片的剔除?
我在 OpenGL 3.3 中编写了一个延迟渲染。现在我不对灯光通道进行任何剔除(我只是为每个灯光渲染一个全屏四边形)。这(显然)有大量透支。(有时约为 100%)。正因为如此,我一直在寻找在光通过期间提高性能的方法。似乎(几乎)每个人都认为最好的方法是使用屏幕空间图块来剔除场景。这是 Frostbite 2 中使用的方法。我在 SIGGRAPH 2010 期间阅读了 Andrew Lauritzen 的演示文稿(http://download-software.intel.com/sites/default/files/m/d/4/1/d/8 /lauritzen_deferred_shading_siggraph_2010.pdf),我不确定我是否完全理解这个概念。(就此而言,为什么它比其他任何东西都好,如果它对我更好)
在演示文稿中,Laurtizen 使用光量、四边形和瓷砖来筛选场景,介绍了延迟着色。根据他的数据,基于图块的延迟渲染器是最快的(到目前为止)。我不明白为什么会这样。我猜这与每个瓷砖的所有灯光都集中在一起这一事实有关。在演示文稿中,它说读取 G-Buffer 一次然后计算光照,但这对我来说没有意义。在我看来,我会这样实现:
这仍然需要对 G-Buffer 进行大量采样。我认为这样做与为每个灯光渲染屏幕对齐的四边形具有相同(如果不是更差)的性能。不过,从它的措辞来看,似乎是这样的:
但我看不出如何在不超过某些 GPU 上片段着色器的指令限制的情况下做到这一点。谁能帮我这个?似乎几乎每个基于 tile 的延迟渲染器都使用计算着色器或 OpenCL(批处理灯光),为什么会这样,如果我不使用这些会发生什么?
opengl - 从深度重建的世界位置是错误的
我正在尝试实现延迟着色/照明。为了减少我使用的缓冲区的数量/大小,我想稍后使用深度纹理来重建世界位置。
我通过将像素的坐标与投影矩阵的逆矩阵和相机矩阵的逆矩阵相乘来做到这一点。这种工作,但位置有点偏离。这是采样世界位置纹理的绝对差异:
作为参考,这是我在第二遍片段着色器中使用的代码:
如果我取消注释 worldPosition /= 1.85,则位置会重建得更好(在我的几何/深度值范围内)。在将我的输出与它应该是什么(存储在第三个纹理中)进行比较之后,我只是通过搞乱来得到这个值。
我正在使用 0.1 近,100.0 远,我的几何图形大约 15 远。我知道可能存在精度误差,但这似乎有点太大了,离相机太近了。我在这里错过了什么吗?
java - How exactly does deferred shading work in LWJGL?
I want to start a deferred shading project with GLSL , Java & openGl
1. How does a deferred rendering pipeline works, does it render the scene for each image? For example when I want to create a specular, blur and shadow texture, do I need to render the scene for each of these textures.
I've seen some code snippets and there where no multiple render loops.
2. What is a Geometry buffer and what does it do? Is it something like a storage for scene data that I can draw to a texture without rendering again?
javascript - 骨干modelbinder转换器ajax请求
有谁知道如何让modelbinder的转换器等到ajax请求完成?我正在尝试在我的视图上使用主干的模型绑定器,但转换器失败了,因为它在渲染之前没有等待 ajax 调用完成
opengl - 如何从其他帧缓冲区访问深度纹理?
我在游戏中使用了延迟渲染器。因此,第一个渲染通道是使用多个渲染参数创建反照率和正常缓冲区并填充深度缓冲区。所有这些缓冲区实际上都是纹理。
现在我想从其他渲染通道访问深度缓冲区,从而访问其他帧缓冲区,而不改变深度纹理。我只想读取深度值。对于这些通道,我主要绘制全屏四边形,我不希望它们更新深度纹理并将其消隐到深度值 0。
如何将给定的深度纹理附加到另一个帧缓冲区并确保它是只写的?
opengl - Why are my depth values in this freaky range?
In my deferred renderer, the depth buffer holds values in the range from about 0.9700
to 1.0000
. I found this out by drawing pixels in a given depth range black. This is the shader code I used.
And this is how it looks like. I tried several depth values. This image is for the depth value 0.998
.
I use a as texture of the type GL_DEPTH24_STENCIL8
and format GL_FLOAT_32_UNSIGNED_INT_24_8_REV
as depth and stencil attachment.
Is there an explanation for my depth values to be in this range? Is it default behavior? I would like them to be in the range of 0.0000
and 1.0000
.
opengl - 仅在另一台设备上的照明问题
我在我的台式机上用 C++ 开发了一个 OpenGL 游戏,没有发生错误。现在在我的平板电脑上编译和运行它,灯光很乱。这是我的照明缓冲区。
我使用延迟渲染,所以我有位置和法线作为纹理。正如在下面的答案中所指出的,照明问题的原因是位置纹理而不是普通纹理用于计算。
关于环境的一些事实。两台机器都运行 Windows 8 Pro 64 位。显卡是台式机上的 Nvidia Geforce 560 和平板电脑上的 Intel HD Graphics 4000。在这种情况下,G-buffer 纹理、法线和位置在平板电脑上是完整的,不会混淆。没有 OpenGL 错误。
这是我的光照着色器。
这是我用来绑定采样器制服的代码。Pass->Samplers
是unordered_map<string, GLuint>
将纹理目标 ID 映射到着色器位置的一个。Pass->Program
保存着色器程序 ID。
为什么平板电脑上的位置和法线采样器会混淆?我究竟做错了什么?
更新:将我的操作系统更新到 Windows 8.1 后,我注意到问题消失了。
opengl - SSAO 随摄像机角度发生巨大变化
我一直在 OpenGL 中工作 SSAO。我决定在 OpenGL 中为我的延迟渲染器实现本教程中的 SSAO。不幸的是,我一直无法让它正常工作。SSAO 变暗的区域会根据相机的位置而发生很大变化。我知道当相机移动时 SSAO 的输出可能会有一些变化,但这比我在其他 SSAO 实现中观察到的要大得多。
这是片段着色器代码
positionFromDepth()
功能:
和occlude()
功能:
我感觉问题可能出在positionFromDepth()
函数中,除了我对渲染器的照明阶段使用相同的代码,效果很好(我认为)。我已经检查了这段代码一千次,但没有发现任何明显错误的地方。我尝试了 、 、 和 的各种值bias
,radius
但这intenisty
似乎scale
不是问题。我担心我的法线或位置是错误的,所以这里有一些它们的屏幕截图:
重建位置:
和正常缓冲区:
我将包含遮挡缓冲区的图像,但问题仅在相机移动时才最明显,而图像无助于显示。
有谁知道这里有什么问题?
opengl - 延迟渲染位置重构
我做了第一步延迟渲染,fbo机智颜色、法线、位置和深度纹理。但是当我做照明时,位置会随着我移动和旋转。第一次通过顶点:
那么我怎样才能得到原来的位置呢?