Unity Shader 玻璃效果
一个玻璃效果主要分为两个部分,一部分是折射效果的计算,另一部分则是反射。下面分类进行讨论: 折射: 1.利用Grass Pass对当前屏幕的渲染图像进行采样 2.得到法线贴图对折射的影响 3.对采集的屏幕图像进行关于法线方向上的扭曲和偏移,以模拟折射效果 反射: 主要利用环境贴图产生反射的残影,并和主贴图采样结果混合 得到反射和折射的结果后,以一个插值变量控制最终效果(类似于玻璃的透光率); 脚本如下: 1 // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' 2 3 Shader " MyUnlit/GlassRefraction " 4 { 5 Properties 6 { 7 _MainTex ( " Texture " , 2D) = " white " {} 8 // 这里的法线贴图用于计算折射产生的扭曲 9 _BumpMap( " Normal Map " ,2D)= " bump " {} 10 // 这里的环境贴图用于反射周围环境的部分残影 11 _Cubemap( " Environment Map " ,cube)= " _Skybox " {} 12 _Distortion( " Distortion " ,range( 0 , 100 ))= 10 13 // 一个折射系数