资讯详情

PCF 柔和阴影的自适应滤波半径:基于接触硬化阴影(PCSS)原理的近硬远软模拟

📅 2026/10/7 20:37:16 | 华诺云谱 👁 阅读
PCF 柔和阴影的自适应滤波半径:基于接触硬化阴影(PCSS)原理的近硬远软模拟
PCF 柔和阴影的自适应滤波半径基于接触硬化阴影PCSS原理的近硬远软模拟在实现了基于泊松圆盘的 PCF 柔和阴影之后很多开发者会觉得画面终于告别了生硬的锯齿。但在追求电影级真实感的图形学狂人眼中这种基础的 PCF 阴影依然带着一股浓郁的“假人味”。只要你仔细观察一棵参天大树投射在地面上的真实阴影就会发现大自然光影中最迷人的物理规律在树干根部紧贴泥土的地方树皮投下的阴影边缘极其锋利、坚硬、轮廓分明顺着树干向上到了离地十米高的树枝与茂密树冠投影在地面上的边缘已经极度模糊、发散、虚化为柔和的漫反射渐变。而传统的 PCF 算法由于使用了一个全屏恒定不变的固定采样滤波半径例如统一设为 3 个纹素在所有距离下输出的模糊程度是完全均质的。这就导致近处的脚底板阴影显得肉乎乎的没有着力点而远处几十米高建筑物的阴影边缘却生硬得如同贴纸。真实世界的光源无论是太阳还是室内吊灯从来不是数学上的理想点光源它们是具有物理表面积的面光源Area Light。百分比渐进软阴影PCSSPercentage-Closer Soft Shadows正是通过在片元着色器中模拟面光源的几何投射完美还原了这种“近处接触硬化、远处自然软化”的自然视觉盛宴。PCSS 的几何光学三步推导PCSS 算法的物理精髓是利用相似三角形定理在片元着色器中实时反解出当前像素所处的半影区Penumbra物理宽度阶段一遮挡物搜索Blocker Search在当前像素的光源投影坐标周围以一个预设的搜索半径进行泊松采样。在采样点中统计所有深度小于受光面深度即确实遮挡了光线的样本计算出这些遮挡物的平均深度$d_{\text{blocker}}$。若没有找到任何遮挡物说明该像素处于完全阳光直射区直接返回 1.0若所有样本全部遮挡且平均深度极其接近受光面说明处于完全本影区Umbra直接返回 0.0。阶段二相似三角形半影宽度估计Penumbra Estimation令光源的物理几何尺寸为 $w_{\text{light}}$当前像素受光面到光源的距离为 $d_{\text{receiver}}$遮挡物到光源的平均距离为 $d_{\text{blocker}}$。根据相似三角形比例关系投射在受光面上的半影区几何宽度 $w_{\text{penumbra}}$ 为$$w_{\text{penumbra}} \frac{d_{\text{receiver}} - d_{\text{blocker}}}{d_{\text{blocker}}} \times w_{\text{light}}$$从公式中可以清晰地看出当受光面与遮挡物贴在一起时$d_{\text{receiver}} \to d_{\text{blocker}}$分子接近 0半影宽度为 0阴影呈现出绝对的锋利与硬化当两者距离拉开时半影宽度随两者间距线性急剧膨胀阴影边缘被迅速推向极致柔和。阶段三自适应半径 PCF 滤波Adaptive PCF将阶段二算出的动态半影宽度 $w_{\text{penumbra}}$直接作为下阶段 PCF 滤波核的自适应物理采样半径。距离越远采样半径越大距离越近采样半径收敛到极小值。生产级 PCSS 接触硬化着色器实现下面展示基于标准 GLSL 实现的高性能 PCSS 完整算法实现#version 450 core layout(binding 0) uniform sampler2D uShadowMap; layout(binding 1) uniform PCSSUniforms { mat4 uLightViewProj; vec3 uLightDir; float uLightWorldSize; // 面光源的物理尺寸 (如 0.2) float uNearPlane; // 光源正交相机的近裁面 }; // 预定义 16 点泊松圆盘 const vec2 POISSON_DISK[16] vec2[]( vec2(-0.94201624, -0.39906216), vec2(0.94558609, -0.76890725), vec2(-0.09418410, -0.92938870), vec2(0.34495938, 0.29387760), vec2(-0.91588581, 0.45771432), vec2(-0.81544232, -0.87912464), vec2(-0.38277543, 0.27676845), vec2(0.97484398, 0.75648377), vec2(0.44323325, -0.97511554), vec2(0.53742981, -0.47373420), vec2(-0.26496911, -0.41893023), vec2(0.79197514, 0.19090188), vec2(-0.24188840, 0.99706507), vec2(-0.81409955, 0.91437590), vec2(0.19984126, 0.78641367), vec2(0.14383161, -0.14100790) ); // 阶段一搜索遮挡物的平均深度 bool FindBlocker( vec2 uv, float receiverDepth, float searchRadius, out float avgBlockerDepth ) { float blockerSum 0.0; int blockerCount 0; for (int i 0; i 16; i) { vec2 sampleUV uv POISSON_DISK[i] * searchRadius; float shadowMapDepth texture(uShadowMap, sampleUV).r; // 若贴图记录的深度小于当前点说明存在遮挡 if (shadowMapDepth receiverDepth - 0.001) { blockerSum shadowMapDepth; blockerCount; } } if (blockerCount 0) { avgBlockerDepth 0.0; return false; // 无遮挡 } avgBlockerDepth blockerSum / float(blockerCount); return true; } // 核心 PCSS 渲染函数 float CalculatePCSS(vec3 projCoords) { vec2 texelSize 1.0 / vec2(textureSize(uShadowMap, 0)); float receiverDepth projCoords.z; // 1. 遮挡物搜索搜索半径与面光源尺寸成正比 float searchRadius uLightWorldSize * (receiverDepth - uNearPlane) / receiverDepth * 0.05; float avgBlockerDepth; if (!FindBlocker(projCoords.xy, receiverDepth, searchRadius, avgBlockerDepth)) { return 1.0; // 阳光完全直射 } // 2. 相似三角形估计半影区宽度 float penumbraRatio (receiverDepth - avgBlockerDepth) / avgBlockerDepth; float filterRadius penumbraRatio * uLightWorldSize * 0.08; // 限制最大最小滤波核防止走样与失真 filterRadius clamp(filterRadius, 0.001, 0.03); // 3. 自适应滤波半径 PCF 采样 float shadow 0.0; for (int i 0; i 16; i) { vec2 sampleUV projCoords.xy POISSON_DISK[i] * filterRadius; float mapDepth texture(uShadowMap, sampleUV).r; shadow (receiverDepth - 0.002 mapDepth) ? 0.0 : 1.0; } return shadow / 16.0; }性能优化与工业级避坑指南双重采样的开销平衡与提前退出Early OutPCSS 的标准流程需要执行两轮泊松采样第一轮 16 次搜遮挡第二轮 16 次做 PCF单像素总共 32 次纹理采样。在第一阶段如果blockerCount 0必须立即提前退出返回 1.0直接省掉后半段的 16 次采样。在大场景中阳光直射区域通常占整屏的 60% 以上这一项提前退出就能抹平一半的采样算力。移动端轻量级接触硬化逼近Contact Shadow 代替 PCSS在低端手机上如果 32 次采样开销过重工业界主流替代方案是固定小半径 PCF 屏幕空间接触阴影Screen-Space Contact Shadows。在深度图上沿光线方向进行 8 步微观步进在近距离小物体如手腕、眼眶、脚底处补全硬阴影以不到 PCSS 三分之一的开销达到极其接近的接触硬化画质。把面光源的物理尺寸还原进数学公式让光芒的衍射自然流淌在几何表面的每一寸缝隙。掌握了 PCSS 的接触硬化法则你的三维世界才真正脱离了粗糙的塑料贴皮感拥有了与真实物理世界等量齐观的光影厚重度。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑