当我使用 pcf 时,为什么在 dx11 中渲染扇形图案

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

我将 pcf 代码添加到着色器中的 frank luna 3D 编程示例代码。

但是当网格没有设置法线贴图时。呈现的扇形图案。

这里有任何解决方案吗?

vLightProj.xyz /= vLightProj.w;

float percentLit = 0.0f;

float2 vDepthMapUV = float2((vLightProj.x / 2.f) + 0.5f, -(vLightProj.y / 2.f) + 0.5f);

// Texel size.
const float dx = SMAP_DX;

const float2 offsets[9] =
{
    float2(-dx,  -dx), float2(0.0f,  -dx), float2(dx,  -dx),
    float2(-dx, 0.0f), float2(0.0f, 0.0f), float2(dx, 0.0f),
    float2(-dx,  +dx), float2(0.0f,  +dx), float2(dx,  +dx)
};

[unroll]
for (int i = 0; i < 9; ++i)
{
    percentLit += DepthMap.SampleCmpLevelZero(g_sam_3,
        vDepthMapUV.xy + offsets[i], vLightProj.z).r;
}
//그림자에 가려진 정도
percentLit /= 9.f;

float SpecCoef = g_tex_2.Sample(g_sam_1, vUV).x;
float4 vSpec = decode(SpecCoef);

output.vDiffuse = lightcolor.vDiff * percentLit + lightcolor.vAmb;
c++ directx-11
© www.soinside.com 2019 - 2024. All rights reserved.