博客
关于我
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/

    你可能感兴趣的文章
    MTCNN 人脸检测
    查看>>
    MyEcplise中SpringBoot怎样定制启动banner?
    查看>>
    MyPython
    查看>>
    MTD技术介绍
    查看>>
    MySQL
    查看>>
    MySQL
    查看>>
    mysql
    查看>>
    MTK Android 如何获取系统权限
    查看>>
    MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
    查看>>
    MySQL - ERROR 1406
    查看>>
    mysql - 视图
    查看>>
    MySQL - 解读MySQL事务与锁机制
    查看>>
    MTTR、MTBF、MTTF的大白话理解
    查看>>
    mt_rand
    查看>>
    mysql -存储过程
    查看>>
    mysql /*! 50100 ... */ 条件编译
    查看>>
    mysql 1045解决方法
    查看>>
    mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
    查看>>
    mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
    查看>>
    mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
    查看>>