Unity3D ShaderLab 立方体图的菲涅尔反射

菲涅尔反射是反射类型中比较常见的一种类型,当我们的视线正对物体表面,那么反射量会明显增加,

我们几乎可以在任何支持反射类型的物体表面看到这种情况,我们接下来就来实现这种反射效果过。

还是先创建Shader和 Material,沿用上一节的立方体图。代码变动较少,直接看下面的完成代码:

code start --------------------------------------------------------------------------

Shader "91YGame/FresnelReflection" {

Properties {

_MainTint("Diffuse Tint",Color)=(,,,)

_MainTex ("Base (RGB)", 2D) = "white" {}

_CubeMap("CubeMap",CUBE)=""{}

_ReflAmount("Reflection Amount",Range(0.1,))=0.5

_RimPower("Fresnel Falloff",Range(0.1,))=

//反射颜色;

_SpecColor("Specular Color",Color)=(,,,)

//反射强度值;

_SpecPower("Specular Power",Range(0.02,))=0.5

}

SubShader {

Tags { "RenderType"="Opaque" }

LOD 

CGPROGRAM

//使用unity内置的BlinnPhong光照模型;

#pragma surface surf BlinnPhong

//使用Shader Mode 3.0;

#pragma target 3.0

sampler2D _MainTex;

samplerCUBE _CubeMap;

float4 _MainTint;

float _ReflAmount;

float _RimPower;

float _SpecPower;

struct Input {

float2 uv_MainTex;

float3 worldRefl;

float3 viewDir;

};

void surf (Input IN, inout SurfaceOutput o) {

half4 c = tex2D (_MainTex, IN.uv_MainTex);

 //反转saturate函数获得的0-1之间的值;

float rim = 1.0 - saturate(dot(o.Normal,normalize(IN.viewDir)));

rim = pow(rim,_RimPower);

 //计算反射率;

o.Albedo = c.rgb*_MainTint.rgb;

//计算自发光并赋值;

o.Emission = (texCUBE(_CubeMap,IN.worldRefl).rgb*_ReflAmount)*rim;

//镜面赋值;

o.Specular = _SpecPower;

//光泽度赋值;

o.Gloss = ;

o.Alpha = c.a;

}

ENDCG

} 

FallBack "Diffuse"

}

code end -----------------------------------------------------------------------------

最终返回unity,查看效果如下。依然是左侧是我们最新的菲涅尔反射效果:

在上面的实现过程中介绍的比较详细,我们简单的通过一个衰减值,使它来对表面反射量过多或过少的进行调整,通过将视线方向与表面法线相比较,

我们可以计算相机朝向的衰减值。然后我们反转该值来实现一个简单的遮罩效果,这样物体表面的边缘会变得更白,而相机方向的表面也就更黑了。

Unity3D ShaderLab 立方体图的菲涅尔反射的更多相关文章

  1. Unity3D ShaderLab立方体图的法线渲染

    Unity3D ShaderLab立方体图的法线渲染 某些情况下,我们希望立方体图的材质球上产生法线效果,来更多的表现细节,比如菱形花纹的玻璃,冰块的表面. 在帧数的协调下,我们可以通过input结构 ...

  2. Unity3D ShaderLab 立方体图的反射遮罩

    Unity3D ShaderLab 立方体图的反射遮罩 上一篇,简单的介绍了立方体图的反射,那么我们能不能使用一张纹理对其进行指定遮罩呢?这样美工可以更好的控制图像的效果. 我们接着使用上一篇的sha ...

  3. Unity3D ShaderLab 简单的立方体图反射

    Unity3D ShaderLab 简单的立方体图反射 反射是着色器模拟现实环境的一个关键因素,它能使我们的着色器渲染效果更加具备视觉冲击,因为他利用了我们周围的环境, 让着色器反射外界的场景信息并将 ...

  4. Unity3D ShaderLab 静态贴图光照模型

    Unity3D ShaderLab 静态贴图光照模型 其实在unity的光照模型中,我们可以把光照讯息烘培进入一个2D贴图,来实现着色器的光照效果. 下面是在unity中关闭灯光和打开灯光的对比效果. ...

  5. Unity3D 创建动态的立方体图系统

    Unity3D 创建动态的立方体图系统 这一篇主要是利用上一篇的Shader,通过脚本来完成一个动态的立方体图变化系统. 准备工作如下: 创建一个新的场景.一个球体.提供给场景一个平行光,准备2个立方 ...

  6. Unity3D ShaderLab 使用贴图对模型的高光进行遮罩

    Unity3D ShaderLab 使用贴图对模型的高光进行遮罩 前面研究了高光效果的实现,再说说现很多游戏用到的高光贴图技术,因为它可以让3D美工更容易控制最终的视觉效果. 这也就为我们提供了另外的 ...

  7. Unity3D ShaderLab法线贴图

    Unity3D ShaderLab法线贴图 说到法线贴图,应该算是我们最常使用的一种增强视觉效果的贴图.将法线贴图的各个像素点座位模型的法线,这样我们的光照可以模拟出高分辨率的效果, 同时也保持较低的 ...

  8. Unity3D ShaderLab压缩混合纹理贴图

    Unity3D ShaderLab压缩混合纹理贴图 纹理可以用于存储大量的数据,我们可以把多个图像打包存储在单一的RGBA纹理上,然后通过着色器代码提取这些元素, 我们就可以使用每个图片的RGBA通道 ...

  9. Unity3D ShaderLab 漫反射卷积光照模型

    Unity3D ShaderLab 漫反射卷积光照模型 漫反射卷积[Diffuse convolution]是一个模糊立方体的过程,它保留了立方图的整体光照强度,只模糊了细节. 这种效果在我们要活得一 ...

随机推荐

  1. 转载解决:错误的语法:”XXXX“必须是批处理中仅有的语句

    SQL Server 数据库提示“错误的语法:”XXXX“必须是批处理中仅有的语句”报错的原因分析 解析:批处理必须以 CREATE 语句开始.也就是说一个查询分析器里面只有一个批处理语句才是规范的语 ...

  2. PHP可变长函数方法介绍

    1.三个重要函数 func_num_args()  返回实参个数 func_get_arg(i)    返回某个实参的值       func_get_args()        以数组的形式返回实参 ...

  3. 权威第三方报告——获取IT产品竞争力信息的主要途径,类似你买电脑前上的xx论坛看实力评估

    Gartner is known for its huge influence on purchasing as well as an unequaled events business. Forre ...

  4. cmd扩展路径

    在命令行窗口中,输入for /? 即可得到如下参数解释==== 对一组文件中的每一个文件执行某个特定命令. FOR %variable IN (set) DO command [command-par ...

  5. linux 命令大全(转)

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  6. FloatingActionButton增强版,一个按钮跳出多个按钮--第三方开源--FloatingActionButton

      FloatingActionButton项目在github上的主页:https://github.com/futuresimple/android-floating-action-button F ...

  7. 数据结构-bubble sort

    #gcc version 4.5.3 (GCC) #include <iostream> #include <algorithm> template <typename ...

  8. HDU 4627 E(Contest #3)

    Description There are many unsolvable problem in the world.It could be about one or about zero.But t ...

  9. 傅里叶变换:MP3、JPEG和Siri背后的数学

    九年前,当我还坐在学校的物理数学课的课堂里时,我的老师为我们讲授了一种新方法,给我留下了深刻映像.我认为,毫不夸张地说,这是对数学理论发现最广泛的应用.应用的领域包括:量子物理.射电天文学.MP3和J ...

  10. xlistview的java(头)

    package com.bwie.xlistviews; import com.bwie.test.R; import android.content.Context;import android.u ...