问题标签 [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.

0 投票
1 回答
650 浏览

c++ - 延迟上下文不填充 D3D11_MAPPED_SUBRESOURCE 大小

我有一个 3D 应用程序,它使用 4 个线程,每个线程都有一个延迟上下文。问题是当我使用延迟上下文来映射(ID3D11DeviceContext::Map)资源时,变量RowPitchDepthPitch等于 0。我得到了指向映射资源的指针,并且使用内存检查器我看到它有保留内存(如calloc)。

我只有 ATI 显卡才有这个问题。

以下代码显示问题出在哪里(hieroglyph3 引擎的一部分):

hieroglyph3中,您可以下载并测试它。代码在第 688 行的PipeLineManagerDX11.cpp中,您可以找到该类,也可以在此处查看

0 投票
1 回答
435 浏览

opengl - 将 SSAO 与全局光和局部光相结合

我最近在我的引擎中实现了 SSAO(延迟着色),但我对如何将 SSAO 与全局光和局部光(点光)结合起来非常不安全。

我应该这样做:

或这个:

0 投票
3 回答
3052 浏览

javascript - ND-Buffer 和 G-Buffer 有什么区别?

我是 WebGL 的菜鸟。我读了几篇关于 ND-Buffers 和 G-Buffers 的文章,好像它是 WebGL 开发的战略选择。

ND-Buffers 和 G-Buffers 与渲染管线有何关系?ND-Buffers 仅用于前向渲染,G-Buffers 仅用于延迟渲染吗?

如何实现两者的 JavaScript 代码示例对我理解差异很有用。

0 投票
1 回答
691 浏览

c++ - 绕过经典的延迟着色光量

我想“绕过”延迟照明的经典光量方法。

通常,当您想要影响点光源体积内的像素时,您可以简单地渲染一个球体网格。

我想尝试另一种方法来做到这一点,这个想法是渲染一个包含球体的立方体,立方体是“限制”球体的,所以每个面的中心都是一个球体的点。然后你只需要从你的角度知道如果你已经渲染了球体,哪个片段将是圆的一部分(屏幕上的球体)。

所以主要的问题是要知道哪个片段必须被丢弃。我怎么能这样做:在片段着色器中,我有我的“相机”世界坐标、我的片段世界坐标、我的球体世界中心和我的球体半径。因此,我有一条直线,其方向向量由相机片段世界点建模。我可以建立我的球面方程。最后我可以知道这条线是否与球体相交。

正确地说,从我的角度来看,如果线与球体相交,因此必须将此片段视为突出显示的片段(如果我渲染了球体,则会渲染的片段)?

0 投票
0 回答
250 浏览

opengl - 单个对象上的高斯模糊

我已经实现了一个简单的高斯模糊并将其与延迟着色相结合,并且它可以工作。当我尝试将另一个对象添加到场景中时,该对象也会受到模糊的影响,这不是我想要的。是否可以使模糊仅影响目标对象的图像,还是应该影响整个场景?

对于模糊,我使用了 2 个顶点着色器,一个用于计算水平纹理坐标,另一个用于计算垂直纹理坐标。两个顶点着色器都使用相同的片段着色器,它只计算这些预先计算的纹理坐标上纹素颜色的高斯加权平均值。

模糊对象的片段着色器:

在这种情况下gColorSpec是延迟着色的颜色样本(图像)。

在延迟着色的闪电通道中,我激活了第一个和第二个顶点着色器。

已经尝试过:当我使用延迟着色时,我尝试制作另一个帧缓冲区来渲染几何图形,然后仅用于模糊图像对象。这不起作用,因为我似乎只需要一个帧缓冲区来加起来整个场景的几何图形。我还尝试添加另一个附件来替换gColorSpec,只是为了检查它是否与gColorSpec另一个图像对象的另一个连接。

0 投票
1 回答
860 浏览

opengl - 没有计算着色器的平铺延迟着色

我正在构建一个延迟渲染器,因为我想在场景中支持大量灯光,所以我查看了平铺延迟着色。

问题是我必须以 OpenGL 3.3 硬件为目标,而且它不支持 GLSL 计算着色器。

是否有可能使用普通着色器实现平铺延迟着色?

0 投票
1 回答
231 浏览

glsl - 多重采样,如何读回“独特”的纹素

我正在研究如何在延迟照明渲染器中实现抗锯齿。所以三个通道,一个几何通道,一个光照累积通道,然后是第二个用于着色的几何通道。

使用正常的多重采样 MSAA,目标是仅对多边形边缘上的像素进行多重采样。对于每个三角形,只将片段着色器的结果写入它所覆盖的子像素。但当然,这是一个已知问题,这对于延迟照明来说有点问题。

目标是避免评估第 2 次和第 3 次中的所有子像素,因为这基本上是超级采样。如果有人知道实现这一目标的另一种(更好/可能的)方法,我非常想听听。但这是我的想法:

如果您可以在第一遍中使片段着色器仅写入三角形覆盖的第一个子像素。它允许您忽略光照通道中未写入的纹素。然后最后在第二个几何通道中,以某种方式仅读取三角形匹配的第一个子像素,这是我们最初写入的子像素,然后进行照明(现在正常写入所有覆盖的纹素,所以结果可以解决)。这样,在第 2 次和第 3 次传递中只会评估“独特”的纹素。

有人可以说如何在 glsl 中做到这一点(或确认这是不可能的)吗?我真的看不出这在理论上是不可能的原因,但也看不到在 glsl 中这样做的任何方法。

0 投票
1 回答
187 浏览

java - OpenGL延迟着色照明无法正常工作

所以这是我第一次使用延迟着色,它非常快速和简单。直到我开始没有得到预期的结果。灯光的行为很奇怪,就好像位置纹理不正确。 延期 (从上到下顺时针方向:(1)法线,(2)位置,(3)反照率,(4)粗糙度/菲涅尔,(中心)最终)

请注意,灯光(在最终渲染中)的行为方式很奇怪。

这是我的着色器代码:GBuffer.vert

GBuffer.frag

Lighting.vert

Lighting.frag

我正在关注这些教程: http: //www.codinglabs.net/tutorial_simple_def_rendering.aspx http://learnopengl.com/#!Advanced-Lighting/Deferred-Shading

编辑:原来我只需要为法线和位置使用浮动纹理

0 投票
0 回答
234 浏览

opengl - 遵循 Epic 的 SIGGRAPH 2013 笔记的矩形区域光镜面反射因子

我正在尝试按照 SIGGRAPH 2013 中的 Epic 注释来实现区域灯。它们为我已经实现并且正在工作的管状区域灯提供了一种方法。现在我也在尝试实现矩形区域灯,采用与管灯类似的方法。

考虑到管灯只是一个矩形灯,总是对着边缘有两个半球的阴影点,所以我修改了 Epic 给出的最具代表性的点的计算。

这是计算 MRP 计算的输入数据的方式:

这是我修改后的计算 MRP 的函数:

正如您从这张图片中看到的那样,结果并不正确,因为平面 surgafe 上反射光的形状在每一端都有“帽子”。

在此处输入图像描述

0 投票
1 回答
151 浏览

deferred-rendering - OSG.JS 延迟渲染 WebGL

是否可以在 OSG.JS 中进行延迟渲染?

我发现这个例子是用 THREE.JS 做的,但我找不到 OSG.JS 的例子。

http://alteredqualia.com/three/examples/webgl_lights_deferred_pointlights.html

我确实见过做 RTT 的 SDK 示例,但是为什么网络上没有任何延迟渲染示例(或者它们在哪里)?

谢谢