【URP】Unity光照阴影Light shadow [复制链接]
发表于 2025-11-22 12:49:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
【从UnityURP开始探索游戏渲染】专栏-直达
URP 光照阴影 利用 阴影贴图 (Shadow Maps) 和 阴影级联 (Shadow Cascades)。屏幕空间阴影渲染器功能 (Screen Space Shadows Renderer Feature),使 URP 通过单一渲染纹理盘算并绘制主方向光的阴影,而不是利用多个阴影级联贴图。
URP阴影体系焦点机制‌


  • 阴影贴图Shadow Maps

    • 通过光源视角的深度渲染天生_MainLightShadowmapTexture
    • 利用ShadowCaster Pass(需声明LightMode标签)天生深度数据
    • 通过_ShadowBias参数办理自阴影题目(含深度/法线偏移)

  • 阴影级联Cascaded Shadow Maps

    • 将视锥体分割为近/中/远多级地区(默认4级)
    • 差异级联利用_MainLightShadowmapTexture的差异地区
    • 通过MainLightShadowCasterPass.cs动态盘算级联界限

  • 屏幕空间阴影Screen Space Shadows

    • 基于_CameraDepthTexture和阴影贴图及时混淆盘算
    • 相比级联方案淘汰纹理采样但增长GPU盘算负担
    • 得当移动端等须要淘汰带宽的场景

关键实现原理‌


  • 阴影天生流程

    • 深度图渲染阶段:实行ShadowCaster Pass天生光源空间深度
    • 阴影比力阶段:通过_MainLightWorldToShadow矩阵转换坐标
    • 终极混淆阶段:根据阴影强度(Shadow Strength)混淆光照结果
    Shader示例展示阴影比力逻辑:
    1. hlsl
    2. float4 shadowCoord = mul(_MainLightWorldToShadow, float4(worldPos, 1.0));
    3. float shadow = SampleShadowmap(shadowCoord); // 采样ShadowMap
    4. float lightAttenuation = shadow > 0 ? 1.0 : 0.0; // 阴影判断
    复制代码
  • 优化参数体系
    | 参数 | 作用域 | 范例值 |
    | --- | --- | --- |
    | 分辨率 | 全局/光源级 | 1024-4096 |
    | 级联分割 | 方向光 | 2-4级 |
    | 深度偏移 | 材质/光源 | 0.001-0.1 |
    | 法线偏移 | 材质/光源 | 0.01-0.5 |
  • 性能敏感操纵

    • 阴影隔断(Shadow Distance):控制最大天生范围
    • 软阴影滤波(Soft Shadows):增长PCSS滤波开销
    • 动态批处理处罚:影响ShadowCaster Pass实行服从

阴影贴图(Shadow Maps)

实现原理是从光源视角渲染场景深度到纹理(_MainLightShadowmapTexture),通过比力当前像素深度与ShadowMap值判定阴影地区。关键步调包罗:

  • ShadowCaster Pass天生深度图,需声明LightMode="ShadowCaster"标签和对应宏
  • 深度比力时利用_MainLightWorldToShadow矩阵转换坐标到光源空间
  • 通过_ShadowBias参数调解深度/法线偏移防止阴影失真
阴影级联(Cascaded Shadow Maps)

将视锥体分割为多个地区(通常2×2图集),近处利用高精度贴图,远处利用低精度,办理大场景阴影锯齿题目。URP通过MainLightShadowCasterPass.cs管理级联:

  • GetShadowCasterBounds()盘算影响范围
  • 差异级联地区对应_MainLightShadowmapTexture的差异部门
屏幕空间阴影(Screen Space Shadows)

更换传统级联的方案,工作流程:

  • 天生_CameraDepthTexture和_MainLightShadowmapTexture
  • 重修天下坐标后转换到阴影空间天生_ScreenSpaceShadowmapTexture
  • 相比级联方案淘汰纹理采样次数但增长深度预处理处罚开销
关键参数优化

参数作用示例分辨率影响阴影精度2048x2048得当中端装备图集存储多级联/多光源阴影_MainLightShadowmapTexture为2×2图集深度偏移防止自阴影_ShadowBias.x调解深度值法线偏移办理Peter Panning_ShadowBias.y沿法线偏移近裁剪面控制阴影天生范围Light组件中Cascade Split设置技能对比‌

方案优点缺点传统级联精度可控带宽占用高屏幕空间节省带宽边沿锯齿显着混淆方案均衡性能/质量实现复杂度高文档中特殊夸大:URP 14.1版本后优化了阴影图集分配计谋,淘汰了约20%的显存占用。发起开发者通过Frame Debugger验证阴影天生各阶段的现实结果。
性能优化发起:


  • 静态物体利用光照贴图烘焙阴影
  • 动态物体根据隔断调解阴影分辨率
  • 屏幕空间阴影得当移动端(淘汰采样),PC端保举级联阴影
  • 硬阴影(Hard Shadow)比软阴影节省30% GPU开销
  • 移动端适配

    • 保举利用屏幕空间阴影+中平分辨率(1024)
    • 关闭非须要级联(如保存2级)
    • 静态物体烘焙光照贴图

  • PC端高精度方案

    • 4级级联+2048分辨率
    • 启用PCSS软阴影滤波
    • 动态调解阴影隔断(发起30-100米)

  • 常见题目办理

    • 阴影锯齿‌:进步分辨率或启用软阴影
    • Peter Panning‌:增长法线偏移值
    • 性能瓶颈‌:利用Debugger分析ShadowCaster耗时

【从UnityURP开始探索游戏渲染】专栏-直达
(接待点赞留言探究,更多人参加进来能更加美满这个探索的过程,🙏)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表