效果展示:
一、Fresnel
菲涅尔效应之前有介绍过,视角方向与法线方向的夹角越小,反射效果弱,能直接看到水里;夹角越大,反射越强,看不到水底。
1. 视角方向与法线方向点乘,球体边缘值为0,背后全为负数,正面看不到也不需要特意处理;
2. 用one minus将黑白关系颠倒;
3. 添加一个power设置区域。
总结一下公式为:
二、MatCap (Material Capture)
据说在pbr出来之前就是用的matcap,简单高效,效果也出奇得好
用到的纹理也非常方便,直接拿一个球形的纹理图片就能用,例如下图我所用到的环境贴图为:
做出的效果:
1. 将法线贴图从切线空间转换到观察空间,因为这是镜面反射,每个像素的颜色都会随着视角的变化而变化。
切线空间:以物体的表面为基准
观察空间:以摄像机位置为参考
2. 将R、G通道作为UV,对Matcap贴图(材质球图)作采样
法线贴图的R通道对应的是水平方向,G通道对应的是垂直方向,以他们作为uv轴来采样matcap贴图。
可以再适当添加菲尼尔,但要注意,Fresnel节点的num输入节点要传入的是世界坐标下的法线贴图。
三、 Cubemap
两者区别?
cubemap和matcap都是可以用于模拟环境光的镜面反射的,matcap能快速出效果,但是更适用于静态的物体;而cubemap性能消耗会大些,但是它能动态模拟出360°的环境效果。
1. 制作全景Cube
先找到一张全景图,在PS中将图像大小设为方形,模式为8位/通道A,导出为tga格式
===>
之后在Unity中将属性的Texture Shape改为Cube,就能将其从2维改为cube,作为后续的cubemap。
2. 通过视角方向(的反方向)在物体表面的反射,采样cube
在shaderforge中默认视角方向是指向眼睛的,但因为我们需要从我们的眼睛射出去的光线在物体表面的反射,所以需要获取其反方向。
法线贴图和前面同理,映射到世界空间。反射后进行采样,用的是专门的cubemap结点。
3. 稍微加个菲尼尔: