Unity之ShaderGraph如何实现边缘光效果

前言

游戏中最常用的一个效果就是边缘光了,既可以做物体的高亮效果,也可以给人物皮肤表面添加光泽。如下图所示:
Unity之ShaderGraph如何实现边缘光效果_第1张图片

实现原理

边缘光的原理就是Fresnel节点的底层逻辑。
Fresnel:菲涅尔效应是根据视角不同表面上反射率不同的效应,当接近掠射角时,会反射更多的光。菲涅尔效应节点通过计算表面法线和视图方向之间的角度来近似这一点。这个角度越宽,返回值就越大。这种效果通常用于实现边缘照明,在许多艺术风格中都很常见。
Unity之ShaderGraph如何实现边缘光效果_第2张图片
我们通过Fresnel的代码,可以大致知道它的原理。
代码:

void Unity_FresnelEffect_float(float3 Normal, float3 ViewDir, float Power, out float Out)
{
    Out = pow((1.0 - saturate(dot(normalize(Normal), normalize(ViewDir)))), Power);
}

完整节点

Unity之ShaderGraph如何实现边缘光效果_第3张图片

带方向的边缘光效果

Unity之ShaderGraph如何实现边缘光效果_第4张图片

原理

带方向的边缘光,原理就是我们利用物体表面的法线和我们指定向量做Dot点乘,计算夹角大小,然后Step过滤掉小于0.5的值,最后在和菲尼尔的结果相乘。就得到了自己指定方向的边缘光效果

完整节点

Unity之ShaderGraph如何实现边缘光效果_第5张图片

你可能感兴趣的:(unity,shader,ShaderGraph,URP,菲涅尔,边缘光,可编程渲染管线)