博客
关于我
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中having的用法
    查看>>
    MySQL中interactive_timeout和wait_timeout的区别
    查看>>
    mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中kill掉所有锁表的进程
    查看>>
    mysql中like % %模糊查询
    查看>>
    MySql中mvcc学习记录
    查看>>
    mysql中null和空字符串的区别与问题!
    查看>>
    MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
    查看>>
    MYSQL中TINYINT的取值范围
    查看>>
    MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
    查看>>
    Mysql中varchar类型数字排序不对踩坑记录
    查看>>
    MySQL中一条SQL语句到底是如何执行的呢?
    查看>>
    MySQL中你必须知道的10件事,1.5万字!
    查看>>
    MySQL中使用IN()查询到底走不走索引?
    查看>>
    Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
    查看>>
    MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
    查看>>
    mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
    查看>>
    mysql中出现Unit mysql.service could not be found 的解决方法
    查看>>