博客
关于我
ARFoundation之路-AR阴影生成之二
阅读量:147 次
发布时间:2019-02-27

本文共 2493 字,大约阅读时间需要 8 分钟。

在前一节中,我们通过Unity内置的Shadow生成算法实现了阴影效果,但在需要柔和的阴影效果时,调高Quality Level、Shadow Resolution等参数会显著增加性能开销。本节将使用一个免费的Unity插件Dynamic Shadow Projector来实现更柔和的阴影效果,同时保持较低的性能消耗。

Dynamic Shadow Projector插件介绍

Dynamic Shadow Projector插件通过投影方式生成阴影,而非使用传统的shadowmap技术。这种方法特别适用于移动平台,几乎在所有设备上都能运行。该插件可以作为替代内置阴影生成的有效方案。

ProjectorShadow实现步骤

  • 关闭Unity内置阴影生成

    在Hierarchy窗口中,选中Directional Light,设置Shadow Type为No Shadows,禁止其生成阴影。

  • 创建带有Shadow Projector的虚拟对象prefab

    • 在Hierarchy窗口中新建一个空对象,命名为Softspider。
    • 将前一节制作的ARPlane及虚拟对象Spider拖入场景,并调整位置关系。为避免阴影与平面交叠引起的闪烁效果,将ARPlane稍微调整Y轴位置。
    • 在Softspider对象下新建一个空对象,命名为softshadow,添加Draw Target Object组件。该组件会自动添加相关组件。
  • 设置Projector组件

    • 将Projector组件下的Material设置为Dynamic Shadow Projector自带的SoftShadowProjector。
    • 将SPIDER对象赋值给Draw Target Object组件下的Target属性。
  • 调整Projector位置和方向

    在Scene窗口中,调整Projector的位置和旋转方向,确保在右下角的Shadow Texture小窗口中能看到阴影效果。

  • 排除阴影渲染对象

    • 在Hierarchy窗口中,为Softspider下的SPIDER对象创建一个新的层,命名为Spider。
    • 在softshadow对象的Projector组件中,将Ignore Layers设置为Spider层,防止阴影投射到虚拟物体上。
  • 调整阴影设置

    • 在Shadow Texture Renderer组件中,设置阴影颜色、纹理大小、抗锯齿设置(建议使用Multi Sampling)和模糊程度(Blur Level)。
    • 注意性能影响,建议在移动设备上谨慎设置 Blur Level和Blur Size。
  • 生成prefab并应用到场景

    将Softspider制作成prefab并从Hierarchy窗口中删除。将prefab赋给AR Session Origin对象上的Appcontroller脚本的Spawn prefab属性。由于ARPlane已放置到prefab中,无需再实例化ARPlane。

  • 测试效果

    运行后可以看到,Projector阴影比Soft Shadow柔和,性能消耗与Close Fit的Soft Shadow基本相当或略有增加。

    BlobShadow实现

    除了投影阴影,Dynamic Shadow Projector还支持斑点阴影(Blob Shadow)。这种超柔和的阴影效果模拟真实场景中的环境光阴影效果。通过将渲染材质替换为BlobShadowProjector即可实现。运行效果如图所示。

    性能与设置建议

    • 性能消耗:与使用Close Fit的Soft Shadow相比,Dynamic Shadow Projector的性能开销基本相当或略有增加。
    • 设置建议:在移动端使用Multi Sampling,避免使用Super Sampling。对于Blur Level和Blur Size,建议从低值开始,逐步增加至合适范围。

    参数详解

    Dynamic Shadow Projector提供了丰富的参数控制选项,适用于不同场景需求。以下是Shadow Texture Renderer中影响阴影生成的关键参数:

    参数属性 描述
    Shadow Color 阴影颜色。设置为黑色可提高性能。
    Texture Width 渲染纹理宽度。
    Texture Height 渲染纹理高度。
    Multi Sampling 抗锯齿等级。需要硬件支持。
    Super Sampling 高级抗锯齿设置。建议在移动平台仅使用Multi Sampling。
    Blur Level 模糊程度,0为硬阴影,1-3为软阴影。值越高阴影越柔和,但性能开销增加。
    Blur Size 模糊过滤器尺寸,只有在软阴影模式下有效。
    Mip Level 设置mipMap级别,默认为0。
    Single Pass Mipmap Blur 使用单个Shader pass进行mipMap模糊,可提高性能。
    Mipmap Blur Size 模糊过滤器尺寸。
    Don’t update while out of view 勾选时,阴影Projector在视锥平截头体之外时不更新阴影。
    Blur Filter 模糊过滤器类型,Uniform适合软阴影,Gaussian适合斑点阴影。
    Mipmap Falloff mipMap衰竭类型,通常选择linear。
    Near Clip Plane 渲染纹理的近平面,默认为0.01。
    Blur Shader 模糊Shader,使用默认值即可。
    Downsample Shader 降采样Shader,使用默认值即可。
    Copy Mipmap Shader 复制Shader,使用默认值即可。
    Preferred Texture Formats 优先纹理格式设置,默认为ARGB32。

    总结

    通过Dynamic Shadow Projector,我们可以在不显著增加性能消耗的情况下,获得比内置阴影更柔和的效果。该插件支持投影阴影和斑点阴影,提供高度可控的阴影渲染参数,适用于多种实际场景需求。

    转载地址:http://bfbb.baihongyu.com/

    你可能感兴趣的文章
    Mysql 语句操作索引SQL语句
    查看>>
    MySQL 误操作后数据恢复(update,delete忘加where条件)
    查看>>
    MySQL 调优/优化的 101 个建议!
    查看>>
    mysql 转义字符用法_MySql 转义字符的使用说明
    查看>>
    mysql 输入密码秒退
    查看>>
    mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
    查看>>
    mysql 通过查看mysql 配置参数、状态来优化你的mysql
    查看>>
    mysql 里对root及普通用户赋权及更改密码的一些命令
    查看>>
    Mysql 重置自增列的开始序号
    查看>>
    mysql 锁机制 mvcc_Mysql性能优化-事务、锁和MVCC
    查看>>
    MySQL 错误
    查看>>
    mysql 随机数 rand使用
    查看>>
    MySQL 面试题汇总
    查看>>
    MySQL 面试,必须掌握的 8 大核心点
    查看>>
    MySQL 高可用性之keepalived+mysql双主
    查看>>
    MySQL 高性能优化规范建议
    查看>>
    mysql 默认事务隔离级别下锁分析
    查看>>
    Mysql--逻辑架构
    查看>>
    MySql-2019-4-21-复习
    查看>>
    mysql-5.6.17-win32免安装版配置
    查看>>