博客
关于我
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 常见问题
    查看>>
    MYSQL 幻读(Phantom Problem)不可重复读
    查看>>
    mysql 往字段后面加字符串
    查看>>
    mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
    查看>>
    MySQL 快速创建千万级测试数据
    查看>>
    mysql 快速自增假数据, 新增假数据,mysql自增假数据
    查看>>
    MySql 手动执行主从备份
    查看>>
    Mysql 批量修改四种方式效率对比(一)
    查看>>
    Mysql 报错 Field 'id' doesn't have a default value
    查看>>
    MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
    查看>>
    Mysql 拼接多个字段作为查询条件查询方法
    查看>>
    mysql 排序id_mysql如何按特定id排序
    查看>>
    Mysql 提示:Communication link failure
    查看>>
    mysql 插入是否成功_PDO mysql:如何知道插入是否成功
    查看>>
    Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
    查看>>
    mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
    查看>>
    mysql 数据库备份及ibdata1的瘦身
    查看>>
    MySQL 数据库备份种类以及常用备份工具汇总
    查看>>
    mysql 数据库存储引擎怎么选择?快来看看性能测试吧
    查看>>
    MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
    查看>>