我正在使用 Direct3D 11 和 Visual Studio 2015 开发图形引擎。在主绘制调用的 HLSL 着色器中,我使用百分比更接近过滤对定向光和点光源的阴影贴图进行采样,即我对周围的小正方形区域进行采样目标阴影贴图 texel 并平均结果以获得软阴影。现在,每次调用 shadowMap_.Sample(...) 都会产生一个警告:“梯度指令在循环中使用不同的迭代,强制循环展开” (X3570)。我想解决这个问题,或者,如果不可能,隐藏警告,因为它完全淹没了我的警告输出。
我尝试在线搜索错误消息,但找不到任何进一步的描述。我什至找不到梯度指令应该是什么的解释。我检查了 Microsoft 文档以获取不同的采样器或采样函数,它可以让我用本机采样功能替换循环,但也没有找到类似的东西。这是我用于对点光源的阴影立方体贴图进行采样的函数:
float getPointShadowValue(in uint index, in float3 worldPosition)
{
// (Half-)Radius for percentage closer filtering
int hFilterRadius = 2;
// Calculate the vector inside the cube that points to the fragment
float3 fragToLight = worldPosition.xyz - pointEmitters_[index].position.xyz;
// Calculate the depth of the current fragment
float currentDepth = length(fragToLight);
float sum = 0.0;
for (float z = -hFilterRadius; z <= hFilterRadius; …Run Code Online (Sandbox Code Playgroud)