CG之菲涅尔效果简单实现
菲涅尔效果,指当光到达两种材质的接触面时,一些光在接触面的表面被反射出去,而另一部分光将发生折射穿过接触面。
现在要用shader来实现这种效果,如果要精确地描述这种底层的物理,其计算公式是非常复杂的,性能消耗也比较大。我们的目的是使创建的图像看上去真实,因此我们不使用菲涅尔公式本身,而是使用以下经验公式,它能够用非常少的计算获得很好的效果。
reflectionCoefficient = max(0, min(1, bias + scale * pow(1 + dot(I,N), power)))
finalColor = reflectionCoefficient * reflectedColor + (1 - reflectionCoefficient ) * refractedColor
在unity3d中的渲染效果如下:
shader如下:
Shader "Custom/Test"
{
Properties
{
_Cube("Cube", Cube) = "white" {}
_EtaRatio("Eta ratio", float) = 0.8
_FresnelPower("Fresnel power", float) =
_FresnelScale("Fresnel scale", float) =
_FresnelBias("Fresnel bias", float) =
} SubShader
{
Tags
{
"RenderType" = "Opaque"
} Pass
{
CGPROGRAM
#pragma vertex Vert
#pragma fragment Frag #include "UnityCG.cginc" uniform samplerCUBE _Cube;
uniform float _EtaRatio;
uniform float _FresnelPower;
uniform float _FresnelScale;
uniform float _FresnelBias; struct AppData
{
float4 pos : POSITION;
float3 nor : NORMAL;
}; struct V2F
{
float4 pos : SV_POSITION;
float reflectionFactor : Color;
float3 r : TEXCOORD0;
float3 t : TEXCOORD1;
}; V2F Vert(AppData vi)
{
V2F fi;
fi.pos = mul(UNITY_MATRIX_MVP, vi.pos); float3 n = normalize(mul(vi.nor, (float3x3)_World2Object));
float3 viewDir = WorldSpaceViewDir(vi.pos);
float3 i = normalize(-viewDir); fi.r = reflect(i, n); // 反射向量
fi.t = refract(i, n, _EtaRatio); // 折射向量
fi.reflectionFactor = _FresnelBias + _FresnelScale * pow( + dot(i, n), _FresnelPower); // 反射颜色所占比例 return fi;
} float4 Frag(V2F fi) : Color
{
float4 reflectC = texCUBE(_Cube, fi.r);
float4 refractC = texCUBE(_Cube, fi.t);
return lerp(refractC, reflectC, fi.reflectionFactor);
} ENDCG
}
}
}
shader
转载请注明出处: http://www.cnblogs.com/jietian331/p/5564901.html
CG之菲涅尔效果简单实现的更多相关文章
- Unity shader(CG) 写一个 散色、折射、反射、菲涅尔、gamma、简单后期屏幕特效
http://www.lai18.com/content/506918.html 1.自生要求是很重要的,当然不是什么强迫工作之类的,而是自己有限的能力上不断的扩展兴趣上的内容. 2.用生活的眼光去发 ...
- Unity Shader 菲涅尔环境反射
菲涅尔反射描述了一种光学现象,当光照到物体表面时,一部分发生反射,另一部分则进入物体内部,发生折射或散射:相比直接的反射和折射计算,菲涅尔反射更接近真实情况. 可用下面的等式近似计算这种反射效果: F ...
- Fresnel integral菲涅尔积分的一丢丢探讨
起因源于导师的关于回旋曲线的一点问题 其中最后得到的曲率公式中的c,s’和s定义不明确 于是开始从头从(2.1)式中的积分入手探究 维基百科中Fresnel integral的S(x)与C(x)的定义 ...
- UnityShader-菲涅尔反射(Fresnel Reflection)
菲涅耳公式(或菲涅耳方程),由奥古斯丁·让·菲涅耳导出.用来描述光在不同折射率的介质之间的行为.由公式推导出的光的反射称之为"菲涅尔反射".菲涅尔公式是光学中的重要公式,用它能解释 ...
- java-信息安全(八)-迪菲-赫尔曼(DH)密钥交换
概述 信息安全基本概念: DH(Diffie–Hellman key exchange,迪菲-赫尔曼密钥交换) DH 是一种安全协议,,一种确保共享KEY安全穿越不安全网络的方法,它是OAKLEY的一 ...
- java-信息安全(八)-迪菲-赫尔曼(DH)密钥交换【不推荐,推荐Oakley】
概述 信息安全基本概念: DH(Diffie–Hellman key exchange,迪菲-赫尔曼密钥交换) DH 是一种安全协议,,一种确保共享KEY安全穿越不安全网络的方法,它是OAKLEY的一 ...
- 仿淘宝分页按钮效果简单美观易使用的JS分页控件
分页按钮思想: 1.少于9页,全部显示 2.大于9页,1.2页显示,中间页码当前页为中心,前后各留两个页码 附件中有完整例子的压缩包下载.已更新到最新版本 先看效果图: 01输入框焦点效果 ...
- 【Android】桌面歌词悬浮效果简单实现
在使用"网易云音乐"的时候,发现有一个显示"桌面歌词"的功能,于是就想着自己实现下.查了下资料,是用WindowManage实现的.实现过程中也出现了些问题,看 ...
- 关于cc.easesinexxx 与 cc.easeexponentiallxxx 的几种效果简单描述
代码样例: var biggerEase = cc.scaleBy(0.7,1.2,1.2).easing(cc.easeSineInOut()) 呈正弦变化 1)CCEaseSineIn ...
随机推荐
- JavaScript高级程序设计:第八章
1.window对象——BOM的核心 BOM的核心对象时window,它表示浏览器的一个实例.在浏览器中,window对象有双重角色,它既是通过javascript访问浏览器窗口的一个接口,又是ECM ...
- hdu_1728_逃离迷宫(bfs)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:走迷宫,找最小的拐角 题解:对BFS有了新的理解,DFS+剪枝应该也能过,用BFS就要以拐 ...
- Hadoop2.6.0 动态增加节点
本文主要从基础准备,添加DataNode和添加NodeManager三个部分详细说明在Hadoop2.6.0环境下,如何动态新增节点到集群中. 基础准备 在基础准备部分,主要是设置hadoop运行的系 ...
- [转]phpcms 判断用户登录代码
<!-- 用户登录开始 --> <?php //读取用户信息 $ypzy_userid = param::get_cookie('_userid'); if(!empty($ypzy ...
- JavaConcurrentHashMap
JavaConcurrentHashMap 大滕翼不自觉地往前探了探身子可还没等他听到唐寅说到 兆咒耶Т √靼脶摹 す宿坩曹 '字'心'上都有横您老瞧瞧这个'宣德 炔灌莞 蹇忄в 幼銮亿辽 仄黛境 ...
- cordova sqlite
jar包在这里下载 https://github.com/litehelpers/Cordova-sqlite-storage 把SQLitePlugin 复制到自己工程目录 org.pgsqlite ...
- centos7如何关闭防火墙
1.centos7自带了firewall,而不是iptables: 关闭firewall: service firewalld stop 或者: systemctl stop firewalld 禁止 ...
- Category / Extention / 属性 / 成员变量 /
转载自:http://blog.csdn.net/itianyi/article/details/8618128 在ios第一版中,我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个 ...
- OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)
OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰) 前文曾详细探讨了关于OpenCV的使用,原本以为天下已太平.但不断有人反 ...
- Dom2016/4/20
childNode:标准情况下:包括文本节点和元素节点 非标准下:只包括元素节点 在标准情况下:包含非法嵌套的子节点. 非标准下:ie7一下的版本不包含非法嵌套的子节点 DOm的节点类型:12种 元素 ...