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

    你可能感兴趣的文章
    python | werkzeug,一个不可思议的 Python 库!
    查看>>
    python | xlsxwriter,一个实用的 Python 库!
    查看>>
    python | xlwings,一个非常实用的 Excel 相关的 Python 库!
    查看>>
    python读取含中文的json
    查看>>
    python | 提升代码迭代速度的Python重载方法
    查看>>
    python | 深入理解Python并发编程中的GIL限制与解决方案
    查看>>
    Python | 爬虫实战——亚马逊搜索页监控(附详细源码)
    查看>>
    python | 高效使用Python工具自动生成模块文档的秘诀
    查看>>
    python 一个list去除另一个list中的值
    查看>>
    python 三大框架的 介绍。
    查看>>
    Python 下载的 11 种姿势,一种比一种高级!
    查看>>
    python读取一个文件夹下所有图片_初学Python-找出文件夹下的所有图片
    查看>>
    Python 中 3 个不可思议的返回功能
    查看>>
    python 中 dict 的另一种用法
    查看>>
    Python 中 PIL 读取图片出现异常旋转的解决方法
    查看>>
    Python 中只有一个 True 和一个 False 对象吗?
    查看>>
    python读取mtcars数据集并实现以下操作_关于数据处理。。,Python交流,技术交流区,鱼C论坛 - Powered by Discuz!...
    查看>>
    Python 中多线程与多处理之间的区别
    查看>>
    Python 中如何使用 lambda 函数
    查看>>
    Python 中如何创建多行字符串?
    查看>>