三十年河东,三十年河西|

自动机

园龄:1年10个月粉丝:2关注:4

Amplify Shader Editor学习

半透明边缘光效果

原理

整个效果分为两部分,一个是半透明效果另一个是边缘发光,对于第一个效果来说我们只需要使用透明度混合的方法就可以办到,第二个效果的关键在于怎么辨别边缘?
我们可以用法线向量点乘视线向量来辨别.

ab=|a||b|cosθ线线

代码

float4 _Color;
float _Emiss;
float _RimPower;
v2f vert(a2v v)
{
    v2f ans;
    ans.pos = UnityObjectToClipPos(v.vertex);
    ans.view_World = _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, v.vertex).xyz;
    ans.normal_World = UnityObjectToWorldNormal(v.normal);
    return ans;
}
float4 frag(v2f res) : SV_Target
{
    float3 normal_World = normalize(res.normal_World);
    float3 view_World = normalize(res.view_World);
    float NdotV = dot(normal_World, view_World);
    float rim = pow(1 - NdotV, _RimPower); // cos在[0, pi / 2]是单调递减,所以反一下
    
    float3 color = _Color.xyz * _Emiss;
    float alpha = saturate(rim * _Emiss); // 越靠近边缘rim越大,alpha越大,显色越明显
    return float4(color, alpha);
}

效果

透明流光效果

原理

透明光效果和上面的是一样的,流光效果的话只要在用uv进行采样的时候添加Time就可以了,因为加入Time变量之后每次采样的uv坐标都会边然后就会导致一个点的颜色随着Time的变化而变化,从而达到流光的效果。如果直接用模型的uv会导致整个效果像是贴在模型上一样不自然也不好看,所以我们可以使用顶点的世界坐标的xy平面坐标作为uv来采样。但是这样也有个问题就是当模型移动时流光会跟着动,故我们要将世界坐标减去模型坐标的原点(世界坐标下)

ASE

效果

MatCap技术

原理

大佬文章

ASE

效果

藤曼生长

原理

利用顶点偏移来实现,先说生长效果可以仿照上面的透明效果利用clip来实现。这里我们用uv坐标的v来当参数,注意v的范围是[0, 1]我们希望有正有负这样裁剪才有效果,所以让v - grow当参数。把v输出来看一下

发现从下到上是从小到大,这意味着生长是反着来的,所以我们需要反一下。让1 - (v - grow)当参数,再输出看看

这样就正常了。但是这样生长效果是没有尖端的,所以我们还需要加入一个粗细控制,粗细其实就是沿着法线方向扩张,又因为咱们的v是从大到小,所以尖端的v要小一些,这正好符合我们的要求,所以把v也加到我们的扩张控制里面去

ASE

效果

本文作者:自动机

本文链接:https://www.cnblogs.com/monituihuo/p/18400953

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   自动机  阅读(113)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起