Amplify Shader Editor学习
半透明边缘光效果
原理
整个效果分为两部分,一个是半透明效果另一个是边缘发光,对于第一个效果来说我们只需要使用透明度混合的方法就可以办到,第二个效果的关键在于怎么辨别边缘?
我们可以用法线向量点乘视线向量来辨别.
代码
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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步