卡通冰材质的简单实现

卡通冰材质的简单实现

参考示例:

崩坏三冰律Boss中的冰块效果

在这里插入图片描述

在这里插入图片描述
塞尔达荒野之息中的冰材质
在这里插入图片描述

实现效果

在这里插入图片描述
在这里插入图片描述

实现思路

材质-1:

查看动图可以发现材质是半透材质然后由两层闪烁的亮部(一层较亮,一层较暗)、一层固有色、高光外加一个外勾边组成。

外勾边的实现就不赘述了,两层高光的实现想法如下我的想法是计算lambert模型后step出两层的范围,Blinn-Phong模型计算的高光范围。

在这里插入图片描述

 half secondBulingArea = step(0.8,Lambert);

在这里插入图片描述

half firstBulingArea = step(0.6,Lambert) - secondBulingArea;

在这里插入图片描述

half spec = pow(max(0, dot(normalize(lightDir + viewDir), normalDir)), 8);

在这里插入图片描述

half baseArea = 1 - firstBulingArea - secondBulingArea;
  • 但是动图中的视角是在旋转的,可是面向我们的一面都是有在闪烁的,我的想法是:会不会光源方向也是一同旋转的,我就拿一个空物体挂在相机上,调整好合适位置后计算和冰块材质的向量作为光源方向传给shader。
    闪烁部分拿三层颜色做lerp,Time做周期闪烁,加上随机即可。*

材质-2:

首先是半透材质,有uv流动,扭曲和折射效果外加一层边缘光。

折射部分:
在这里插入图片描述
在这里插入图片描述
这个折射实现是对抓取屏幕的_GrabTexture的uv使用Normal的xy相乘得到偏移并叠加到屏幕坐标的xy上。

float2 offset = tanNormal.xy*_Distortion*_RefractionTex_TexelSize.xy;
i.scrPos.xy += offset;

扭曲和uv滚动部分:

我使用了三张噪声图,(可以把三张图存在一张图的三个通道里)一张图横向滚动另一张纵向滚动,第三张计算扭曲:拿该噪声图的xy叠加到流动噪声图的uv上,(类似热扭曲的计算),再将横向流动乘上纵向流动,并使用该值作为透明度A值。

即可得到如下图所示效果
在这里插入图片描述
固有色部分:

MainColor * BaseTexture即可。

边缘光部分:

使用的是Fresnel值做step乘上RimColor(边缘光颜色)

float3 rimLight = pow( 1 - dot(Normal,ViewDir),_FresnelPower)* _RimColor;

最后将固有色部分乘上扭曲和uv滚动部分再加上边缘光部分即可。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值