TA-Shader-文件 Unity-Shader 在URP中复刻莱茵哈特护盾
发布于
2022-4-11
2143
3
TA资源类型
TA资源类型: 算法思路 
shader资源类型: shader代码 
适用引擎: unity 
资源介绍: 转自 XXXY https://zhuanlan.zhihu.com/p/496182524

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 DiGiToTo 于 2022-4-11 05:08 编辑

image.png


话不多说直接开始详细解析!效果分析
从游戏或者上面的效果图中不难看出,大锤(莱茵哈特)的护盾大概有4中效果拼接而成:边缘高光、移动的镂空线条、若隐若现的蜂窝、与其他场景物体交互产生的高光条。OK,分析结束我们直接开始解析。
若隐若现的蜂窝
首先从最简单的蜂窝开始,这里直接使用一张蜂窝装的贴图当做护盾的基本贴图,并且通过这张贴图我们实现蜂窝呼吸的效果。
v2-a489f61525f5196aef34ff6bb381a658_720w.jpg
基本贴图
呼吸灯效果的实现非常简单,仅需要一个sin函数就能实现0→1→0的循环,我们只需要将其应用在上面的基本贴图之中。
首先我们首先要做的是确保模型的中点在体积中心点,这点我们后面需要用。首先我们从游戏或者上面效果图可以看出。蜂窝的呼吸效果从模型的正中间水平向两边扩散.这时我们就可以借助模型本地空间实现从中间向两边移动。

从中间向两边移动代码部分


因为上面强调过,使用的模型需要中心点在体积的中心,所以单一X方向上-模型本地空间的正中间为0,左边和右边分别是小于0 和 大于0,这一点需要理解!
这时我们只要对x方向上取绝对值(镜像),再加上时间并应用到sin函数中,就可以得到一个镜像的移动且有过渡效果的基底。
OK,基底得到后我们就可以在上面应用基本贴图和颜色,当然各种参数可以自定义。例如移动速度,光带的大小……,这一部分个人感觉效果相差不大,所以直接写死了。下面放出代码和参数参考


移动的镂空线条
这部分和上面的思路差不多一样,不过不同的是镂空线条的移动是从中心以棱形移动。这时候我们就需要再次回到模型本身上面。

从中间向四周过渡-代码部分

和上面的思路差不多一样,不过这次是升级到二维空间。OK,这样只需要限定这个棱形范围和调节各种参数就可以了。(当然可以把镂空贴图直接放在基本贴图的一个颜色通道中从而节约性能只采样一张贴图[有点懒了就没整])

镂空贴图-将基本贴图中间部分填黑

镂空移动代码部分
代码基本实现思路就是将hollowedFlow计算出的结果用于镂空贴图的遮罩。这样效果就出来了。
边缘高光
其实做边缘自发光有很多方案,比如菲聂耳反射、算法、贴图。我们这里使用算法,因为护盾属于双面体,使用菲聂耳反射多多少少有些问题。
做发很简单,还是上面经常用到的点,对模型本地坐标的两个方向取绝对值再通过各种参数调成下面的基底效果

边缘外发光基底-代码部分

算法的出边缘外发光基底效果

如果觉得较暗可以直接乘上相应的系数拉高亮度,具体算法可以参照上述代码部分。
中间遮罩效果的原理与边缘高光非常相似,这里就不多说了直接上参考代码和效果图

遮罩效果的目的当然是增大玩家视野,这部分还是非常重要的!
与其他场景物体交互产生的高光条
OK,到了相对比较麻烦的地方。
首先我们可以在 Windows-Analysis-FramDebugger中查看当前场景的深度信息。

Game窗口中是深度信息贴图

每次Unity在渲染场景时,会将不透明物体的深度信息保存成一张贴图。我们就可以利用这张贴图来玩转深度信息。

直接利用深度信息

上述代码可以直接书写来获取当前场景的深度信息,当然我们的护盾需要做成半透明物体,所以在在深度信息贴图中没有办法看见护盾的深度信息。
那么不透明物体的深度信息如何获取呢?非常简单,只需要得到模型顶点在观察空间坐标系中的Z值。

获取模型顶点在观察空间坐标系

因为在观察空间坐标系下,Z值就是顶点坐标到我们相机的距离。这个距离当然可以代表深度信息。
场景的深度信息和模型的深度信息我们都获取到了,两者相减可以得到深度信息的差值。前提是我们需要将深度信息转到人眼观察的线性空间中

交界处的深度信息差值效果图

我们需要注意最后一行公式,明明前面说相减为什么要想加。这需要知道观察空间是右手坐标系,而Unity的世界空间是左手坐标系。 Z轴是反向的。所以这里直接想加。
Ok类似上面的效果图,我们得到一个基底部分。只需对得到的基底效果取反并添加额外的参数就可以了。
交界边缘代码部分
交界边缘效果图小结

简简单单的护盾效果由4部分组成。本次案例的重点是利用模型本地空间的原点实现了多种效果。减少消耗提高性能。其实这次案例还有优化点。就是将贴图的一个通道替换成镂空贴图,这部分需要在PS中进行
R通道镂空贴图,G通道基础贴图
OK,这样我们性能最大化
仅仅两个贴图[其实只有一个,因为采样了场景深度信息]+一些算法实现大锤护盾效果。整体来讲效果非常不错。





收模型,杂志,教程,插图,插件,软件,拿来卖。

使用道具 举报 登录

回复 <
qq_木上有宝_Ek0  发表于 2022-4-11 13:09:07  
2#
学到了。学习无止境。谢谢楼主~~
回复 收起回复
使用道具
MJ漫步  发表于 2022-4-11 23:00:58  
3#
很棒的资源
回复 收起回复
使用道具
esll7  发表于 2022-4-13 14:11:47  
4#
谢谢分享
回复 收起回复
使用道具

快来发表你宝贵的意见吧!

DiGiToTo 实名

通过了实名认证的内容创造者

大自然的搬运工

主题
1347
精华
588
超神
7
扩散
0
微金
2090
智慧
166
余额
454
在线时间
7790 小时

翡翠剑 【绝】红龙战甲 学徒法袍 赤铁剑 英雄盾 铁剑 钢盾 元素之盾 钢剑 长剑 水晶剑 死亡刃 阿鼻剑 鬼道剑 修罗剑 天子剑 天道剑 元素铜币 元素银币 元素金币 元素秘币 元素圣币 短杖 圣杖-【安东尼达斯】 【绝】珍珠戒指 女皇之泪 长枪 双杀 巨浪 龙枪 深渊 战神 魔神战甲 元素之铠 黄金圣衣 相对时空 征战护手 【绝】结界玄晶 神界之石 六界传音 【绝】大天使权杖 微光灵石 圣盾-【瓦雷利亚】 【绝】盘古斧 魔镜 裁决 神速靴 火元素 暴风之眼 元素之钻 秘法之钻 血精之钻 波塞冬之叉 圣光之钻 小苹果 大菠萝 再造药水 黄色药水 蓝色药水 赤色药水 微库VIP 翠晶之钻 紫晶之钻 扩散者 钢铁矿镐 秘银矿镐 黄金矿镐 彗星钛晶矿 阿尔法晶矿 泰坦高能矿 守望者【EX】 守望者【赤炼】 守望者【天使】 【绝】守望者【死神】 希望人没事 吃鸡头盔 吉普车 吃鸡甲 守望者【猎空】 生命之缘 自然之怒 原初葫芦 冰晶剑 玫瑰金项链 烈-红龙战甲 【绝】真-红龙战甲 【绝】千人纪念徽章 橙色药水 青色药水 一星珠 二星珠 七星珠 赛博空间 天体物理 宏观物质 无色原始矿 绿母翠晶矿 超星赤辉矿 怀特紫星矿 飞雷靴 现实宝石 灵魂宝石 心灵宝石 时间宝石 力量宝石 粒粒皆辛苦 【绝】赤影战盔 【绝】赤影战斧 莆田鞋 魔法扫帚 朝阳之光 光明勋章 魔法帽 【绝】烈龙战甲 【绝】魔焰斧 【绝】碧焰指环 烈火长枪 烈火匕首 粉御之钻 青戒之钻 黄金沙鹰 金阳之水 紫雷之水 青息之水 粽子 天蓝靴 光虹靴 紫霞之秋 源力法杖 【魔剑】龙葵之魂 绿色药水 紫色药水 光之杖 水晶杖 血晶杖 守望者【D.Va兔子】

快速回复 返回顶部 返回列表