如何使用RSM(反射阴影贴图)获得平滑的结果?

问题描述 投票:0回答:1

我正在尝试使用Vulkan实现反射阴影贴图程序。问题是得到不好的结果:“

您可以看到结果不平滑。

在这里,我首先通过3个纹理以512 * 512的分辨率渲染光位置的位置,法线和通量。

在第二遍中,根据本文,我从第一遍纹理计算了间接照明(http://www.klayge.org/material/3_12/GI/rsm.pdf

for(int i = 0; i < 151; i++)
{
    vec4 rsmProjCoords = projCoords + vec4(rsmDiskSampling[i] * 0.09, 0.0, 0.0);

    vec3 indirectLightPos = texture(rsmPosition, rsmProjCoords.xy).rgb;
    vec3 indirectLightNorm = texture(rsmNormal, rsmProjCoords.xy).rgb;
    vec3 indirectLightFlux = texture(rsmFlux, rsmProjCoords.xy).rgb;

    vec3 r = worldPos - indirectLightPos;
    float distP2 = dot( r, r ); 

    vec3 emission = indirectLightFlux * (max(0.0, dot(indirectLightNorm, r)) * max(0.0, dot(N, -r)));
    emission *= rsmDiskSampling[i].x * rsmDiskSampling[i].x / (distP2 * distP2);        

    indirectRSM += emission;
}
c++ 3d vulkan
1个回答
0
投票

问题已解决。

主要问题是采样,我使用的是线性采样,而不是最近的采样:

samplerInfo.magFilter = VK_FILTER_NEAREST;
samplerInfo.minFilter = VK_FILTER_NEAREST;

其他问题是使用的VPL数量及其之间的距离。

© www.soinside.com 2019 - 2024. All rights reserved.