原文链接:https://blog.uwa4d.com/archives/2127.html

这是侑虎科技第325原创文章,感谢作者Luisa供稿。欢迎转发分享,未经作者授权请勿转载。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群465082844)

作者知乎:https://zhuanlan.zhihu.com/taiyouxi,同时,作者也是U Sparkle活动参与者哦,UWA欢迎更多开发朋友加入 U Sparkle开发者计划,这个舞台有你更精彩!


现实中,在地面上的人影往往因为被投射的物体是粗糙不光滑的,所以影子的轮廓也是有些模模糊糊,没那么棱角分明。在最新的游戏项目中,美术提出我们应该也做一个更柔和、更真实的实时阴影(本文中提到的阴影都是投射在其他物体上的影子,区分于自身的阴影)。

对于这个需求,并没有自造车轮,而是找了一个很好的轮子让它转了起来,我们可以先看一下目前我们项目中影子的效果:


PK沙滩1中主角与小怪带着柔和的实时影子

其实Unity本身自带了Soft Shadow的选项,但是有些缺点(下文会具体比较说明)。 在我们的工程里,选用的是NyanHoon Games的「Dynamic Shadow Projector」
官网:http://nyahoon.com/products/dynamic-shadow-projector,在Asset Store就有,免费下载。

这里将这个插件的软阴影与Unity自带的软阴影做一些比较。本篇文章所有测试的条件如下:手机为OPPO A37m(CPU:1.5Hz,内存:2GB,GPU:Mali-T860),目前是一款中低档的手机;场景中放置共13个人物模型;使用白色Directional Light;如无特殊说明,截图和数据皆来自手机。


一、Unity自带Soft Shadow的情况

参数:
参考我们现在的项目,Directional Light,选择Soft Shadow,Quality Settings中的Shadow设置为High Resolution, 70 ~20, Two Cascades。 有一个选项,Shadow Projection,它对于影子的质量影响很大(官方说明:平行光投射阴影有2种方式:Close Fit渲染较高分辨率的阴影,但是如果相机移动时,有时阴影会轻微摆动。Stable Fit渲染的阴影分辨率较低,不过相机移动时不会发生摆动。)

真机情况:


左侧为Unity自带Stable Fit真机表现,右侧为Close Fit真机表现

最开始我尝试的是Stable Fit选项,出来的效果不忍直视(左图)。换成Close Fit后,锯齿问题相当明显的被改善了,但这样造成的问题是性能开销上大幅度的上升。仅从SnapGragon的CPU利用率来看,从比较稳定的40%,增长到了60%左右,而且十分不稳定,有时甚至会跳到70%。


Stable Fit的SnapGragon截图
Close Fit的SnapGragon截图


二、使用Dynamic Shadow Projector 且不开启任何Blur或重采样选项的情况


左侧为插件512分辨率,右侧为1024分辨率

第二组以及下面的第三组测试,都是同时处理区域范围内所有的人物(13个模型),将其渲染到同一张Texture上进行处理。本组实验使用了插件,但是并没有开启附加功能,例如Blur或Mipmap。

上图左侧是分辨率512,右侧是1024,我们目前的项目里用的就是1024的分辨率。可以看到锯齿情况有所改善,但如图所见,依旧有着明显的锯齿,因此个人认为单纯提高分辨率意义不大。不过性能上,真机的CPU利用率,512的为44%左右,1024为53%左右,增长都不多。下图是1024的SnapDragon截图。


插件1024分辨率的SnapGragon截图


三、Dynamic Shadow Projector开Blur的情况

第一张手机截图是512分辨率开Blur,第二张为1024的Blur效果。1024的情况下,影子会多很多细节,但是若追求的是比较模糊的软边影子。其实512的就足够好了。对比第一组的Unity自带软阴影可以感觉到,Unity的Soft Shadow真的是一点都不Soft。

再比较一下性能。可以看到512的时候开了Blur,CPU占用率也是44%左右没什么太多。但是1024的时候CPU性能一下子升到了70%,不过跟Unity的SoftShadow的Close Fit形态比,也就多了10%。


分别为插件512分辨率开Blur,和1024分辨率开Blur的真机效果
插件512分辨率开Blur的SnapGragon截图
插件1024分辨率开Blur的SnapGragon截图

这个插件的Blur选项主要是多做了一步Graphics.Blit。针对这个函数,在Profiler上查看了一下手机GPU的情况。可以注意到从10%占用率,4ms左右增长到了24%占用率,13ms左右。


上下两张分别为插件在512分辨率和1024分辨率开Blur时,Blit函数的真机GPU使用情况

这里附上一下改变了光照颜色后的效果:

左右图分别为Unity自带软阴影与插件512分辨率开Blur时,在黄色Directional Light下的效果。可以感觉到,右侧插件带着Blur的效果,软边将光照的颜色很好的融合在了一起,非常的自然,而Unity的自带阴影可以说完全没有融合环境光。


小结

横向对比以上测试结果,在同为较低损耗的分辨率下,插件+Blur的效果很理想地达到了美术期望的软边阴影效果;高分辨率情况下,Unity自带阴影的锯齿很小,但几乎感受不到边缘的“软”,而插件+Blur,有软边有细节,当然性能略耗。

PS. 针对有性能损耗的blit函数,也可以尝试改写Blur的方式来提高性能。


文末,再次感谢Luisa的分享,如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群:465082844)。
也欢迎大家来积极参与U Sparkle开发者计划,简称"US",代表你和我,代表UWA和开发者在一起!

如何实现更真实的软阴影效果相关推荐

  1. CVPR2021(Oral) 商汤、港中文实现单目人脸重建新突破: 基于生成网络的渲染器!几何形状更精准!渲染效果更真实!...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 近日,商汤-港中文联合实验室提出基于风格化对抗生成器的人脸渲染器,用于取代传统图形学基于栅格化的渲染器 ...

  2. CVPR2021(Oral) 商汤、港中文实现单目人脸重建新突破: 基于生成网络的渲染器!几何形状更精准!渲染效果更真实!

    近日,商汤-港中文联合实验室提出基于风格化对抗生成器的人脸渲染器,用于取代传统图形学基于栅格化的渲染器来进行3D模型的重建.该方法构建了一种从输入3D模型到生成图像的平滑梯度,同时可以以低精度建模获得 ...

  3. Framer – 将视觉搞转换为更真实的动态原型

    Framer 是一个 JavaScript 框架,简化了创建现实原型,实现完整的3D效果.以一种简单,可读的和强大的方式定义交互和创建动画. 另外还有 Framer Generator  是一个桌面应 ...

  4. 对抗网络之PG-GAN,无条件下生成更真实的人脸图像

    对抗网络之PG-GAN,无条件下生成更真实的人脸图像 1. 介绍 GAN在2015年DCGAN[1]论文提出之后,开始迅速的被关注和被应用到各个领域.比较有影响力的应用,比如Image transla ...

  5. 相芯科技品牌全面升级:创造更真实的数字世界!

    10 月 19 日,相芯科技带着全新品牌主张:"创造更真实的数字世界",并以全新视觉形象.定位和愿景正式宣布品牌全面升级! 五年蜕变,相芯科技迈入全新阶段 相芯科技自 2016 年 ...

  6. Lumion10.3 更真实的置换材质质感

    作者:Lumion 今天与大家分享的是 Lumion10.3 更真实的置换材质质感 生动的材质质感可以讲述更生动的设计 在Lumion 10.3中,使用新的置换贴图可以实现更真实的材质 支持自己创建或 ...

  7. 做更真实的实验!艾美捷Caspase-1活性分析试剂盒方案

    FLICA® 是通过检测来评估细胞死亡的有力方法体外凋亡.免疫化学技术(ICT)FLICA 荧光标记的抑制剂与活性半胱天冬酶共价结合的CAspa酶1,2.FLICA测量细胞内的凋亡过程,而不是副作用, ...

  8. 我的世界服务器修改游戏难度,[娱乐|其它]TrueLife —— 我的世界服务器提高生存难度插件 让MineCraft更真实 [全版本]...

    插件概括 为游戏添加了口渴值,疲劳值和病毒值,口渴值和疲劳值随着时间的推移而增加,到达一定程度会有负面Buff(可自定义),需要喝水或睡觉来补充,并且还有计分板来显示! 详细说明: 口渴值:随时间的推 ...

  9. HJ-3D心理沙盘智能报告,更真实反映受测者心理状态

    HJ-3D心理沙盘智能报告,更真实反映受测者心理状态 对"3D心理沙盘的智能报告对客户有什么用?"的思考="合君3D心理沙盘智能报告,动态反映受测者心理状态". ...

最新文章

  1. Linux的10个游戏
  2. 如何关闭360自定义错误页面
  3. lstm 根据前文预测词_干货 | Pytorch实现基于LSTM的单词检测器
  4. 流媒体技术学习笔记之(九)减少VLC 延迟的方法
  5. Consumer group理解深入
  6. centos7下安装低版本mysql_centos7下使用yum安装制定版本mysql
  7. 基于python的图像变换(翻转、平移、缩放、旋转、仿射和透视变换)
  8. Java 算法 复数求和
  9. python保存数据_python各数据存储方法
  10. erp服务器维护数据备份,erp服务器备份
  11. dhcp 如何每次请求固定地址_无线覆盖:dhcp原理及其实现流程
  12. php网页源码学生请假考勤管理系统mysql数据库web结构html布局计算机软件工程
  13. 京香julia_百度百科
  14. 金融反欺诈常用特征处理方法
  15. Dzz1.3测试,增加IM、桌面协作、多选等。修缮问题后发布下载
  16. dll控件安装方法(仅供参考)
  17. 傅里叶变换、拉普拉斯变换、z变换之间的联系
  18. 互联网巨头员工的跳槽去向与薪资涨幅
  19. 煮饭的机器人作文_炒菜机器人作文600字
  20. C++/OpenCV实现图像目标识别与分类

热门文章

  1. 中医药治疗抑郁症——来自肠道菌群的解释
  2. 小程序用户头像昵称,微信头像昵称填写能力 uniapp和原生小程序
  3. Spring 父子容器概念
  4. 发信时如何准确定位客户资源?
  5. C语言 比较两个整数大小
  6. 神经网络优化-滑动平均
  7. 联通战术调整:沃3G弃iPhone转道Android
  8. 有什么样的羽毛球品牌可供选择?
  9. 有哪些好的上门洗车小程序开发公司可以推荐?
  10. wifi mouse hd for linux,无线鼠标(高清试用版本)下载-无线鼠标 WiFi Mouse HD v3.0.3_手机乐园...