You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

应用PBR方向光时阴影无法渲染的问题排查与修复咨询

PBR管线硬阴影不显示问题解决方案

根因分析

  1. 环境光未参与阴影计算,且直接光贡献占比过低
    当前代码中环境光ambient固定为基色的0.3倍,完全不受阴影系数影响,同时你注释掉了直接光的辐射度缩放参数u_material.radiance,导致直接光的贡献强度极低,阴影区域(直接光贡献为0)和非阴影区域的亮度差极小,肉眼无法区分。这是最核心的问题,你测试Blinn-Phong时阴影正常,就是因为Blinn-Phong实现中一般直接光占比更高,对比度足够。
  2. PBR光照计算函数返回值未初始化
    CalculateDirectionalLight函数中的局部变量result没有初始化为vec3(0.0),GLSL中未初始化的局部变量会携带随机垃圾值,可能导致直接光计算结果异常,进一步抹平阴影的亮度差异。

修复方案

  1. 初始化光照计算结果变量,修改CalculateDirectionalLight函数的首行代码:
vec3 result = vec3(0.0f);
  1. 补全方向光强度参数,放开注释的辐射度缩放,或临时增加固定强度系数提升直接光占比:
// 3.0为测试用强度系数,可根据场景明暗需求调整
result += (diffuse + specular) * 3.0f * NdotL;
  1. 调整环境光的阴影适配,提升阴影对比度:
    如果希望阴影更明显,可以给环境光增加部分阴影关联逻辑,避免阴影区域太亮:
// 环境光保留30%基础亮度不受阴影影响,剩余70%随阴影系数变化
vec3 ambient = u_material.baseColor.rgb * 0.3f * (0.3 + 0.7 * shadow);

也可以直接调低全局环境光系数,突出直接光的明暗差异:

vec3 ambient = u_material.baseColor.rgb * 0.1f;

内容的提问来源于stack exchange,提问作者BrodaJarek3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:30:03