Unity Shader学习7:环境光镜面反射 - Fresnel、MatCap、Cubemap

  效果展示:

一、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. 稍微加个菲尼尔:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值