使用半球的光能

我正在开发一个光能传递处理器。 在将可见性传递给1024×1024渲染目标的过程中,我将场景几何投影到高半球的半球上。 问题在于某些三角形的边缘没有渲染到项目缓冲区(渲染目标)…因此,当我在重建过程中testing某些边缘(或像素着色器期间的像素)以查看可见性时,不会识别可见边缘,结果该边缘的像素被丢弃。

一个解决scheme是增加项目缓冲区的分辨率(高达4096×4096)…这有助于和更多的边缘可见,但是,这是不是全面的。

如何提高可视性?

以下是应用光能传递后的场景屏幕截图:接缝是沿着三角形面的边缘,由于项缓冲区的分辨率,所以不可见。 使用光能传递呈现的场景的屏幕截图

通过对具有8个点的项目缓冲区进行采样来解决问题: 辐射度场景的截图

代码将世界空间位置转换为标准化的设备坐标,以便对项目缓冲区进行uv查找:

// position lookup for item buffer Output.Pos3 = mul( Input.Position, mWV ); // projection is handled by normalizing the viewspace position( as i'm rendering to a hemisphere ) Output.Pos3.xyz = normalize( Output.Pos3.xyz ); // convert to normalized device coordinates( [ -1, 1 ], [ -1, 1 ] -> [ 0, 1 ], [ 0, 1 ] ) Output.Pos3.xy *= float2( 0.5, -0.5 ); Output.Pos3.xy += float2( 0.5, 0.5 );