Blinn-Phong模型
最近在看基础光照模型,比较感兴趣的是高光反射模型,有下列两种:
1.Phong模型

R = 2*N(dot(N, L)) - L
specular = lightColor * SpecularColor*(max(V· R, 0)) ^shininess;
2.Blinn-Phong模型

引入了H,Blinn模型不仅在速度上更快,而且更符合实际。
H = normalize(L+V)
specular = lightColor * SpecularColor*(max(N· H, 0)) ^shininess;
下面上Shader代码
Shader "基础光照/BlinnPhongShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_SpecularColor("SpecColor",Color) = (,,,)
_DiffuseColor("DiffuseColor",Color) = (,,,)
_Gloss("Gloss",Range(,)) =
}
SubShader
{
Tags{"RenderType"="Opaque"}
//Cull Off ZWrite Off ZTest Always Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
#include "UnityCG.cginc" struct appdata
{
float4 pos : POSITION;
float3 normal : NORMAL;
float2 uv: TEXCOORD0; }; struct v2f
{ float4 pos: SV_POSITION; float2 uv :TEXCOORD0; float3 normal : TEXCOORD1; float4 worldPos : TEXCOORD2;
}; v2f vert (appdata v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.pos);
o.worldPos= mul(_Object2World,v.pos);
o.normal = normalize( mul(v.normal,(float3x3)_World2Object));
o.uv = v.uv;
return o;
} sampler2D _MainTex;
fixed4 _DiffuseColor;
fixed4 _SpecularColor;
float _Gloss; fixed4 frag(v2f i): SV_Target
{
//计算环境光
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; float3 worldNormal = i.normal; float3 worldLightDir = -normalize(_WorldSpaceLightPos0.xyz); //计算漫反射
fixed3 diffuse = _LightColor0.rgb*_DiffuseColor*saturate(dot(worldNormal,worldLightDir)); //计算高光反射 float3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz); fixed3 h = normalize(worldLightDir+viewDir); fixed3 specular = _LightColor0.rgb*_SpecularColor*(pow(saturate(dot(h,worldNormal)),_Gloss));
fixed4 col = tex2D(_MainTex,i.uv);
return col*fixed4(ambient+diffuse+specular,1.0);
} ENDCG
}
}
FallBack "Specular"
}
效果展示


Blinn-Phong模型的更多相关文章
- Lambert漫反射.BLinnPhong及Phong模型 Unity自带的在Lighting.cginc里
1.漫反射 此模型属于经验模型,主要用来简单模拟粗糙物体表面的光照现象 此模型假设物体表面为理想漫反射体(也就是只产生漫反射现象,也成为Lambert反射体),同时,场景中存在两种光,一种为环境光,一 ...
- 用DirectX12实现Blinn Phong
这次我们来用DirectX12实现一下基本的Blinn Phong光照模型.让我们再把这个光照模型的概念过一遍:一个物体的颜色由三个因素决定:ambient, diffuse, specular.am ...
- 合金装备V 幻痛 制作技术特辑
合金装备V:幻痛 制作特辑 资料原文出自日版CGWORLD2015年10月号 在[合金装备4(Metal Gear Solid IV)]7年后,序章作品[合金装备5 :原爆点 (Metal Gea ...
- 【Unity Shader】(六) ------ 复杂的光照(上)
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Sha ...
- 三种光照模型的shader实现
1.Lambert模型,公式为I=Kd*Il(N*L): Shader "Custom/Lambert_A" { Properties { _Diffuse(,,,) } SubS ...
- PBR Step by Step( 五)Phong反射模型
Lamertian模型描述了当光源直接照射到粗糙物体表面时,反射光线的分布情况.在现实中,除了直接光照,还有来自周围环境的间接光照. 直接照射到物体表面的光照,又称为局部光照: 间接照射到物体表面的光 ...
- [计算机图形学]绘制填充模型:重心坐标、z-buffer
目录 一.点乘和叉乘 0. 向量表示 1. 点乘 2.叉乘 2.1 坐标运算方式 2.2 向量运算方式 2.3 叉乘的用途 二.Bounding Box 三.重心坐标 四.z-buffer 五.总结 ...
- Phong和Blinn-Phong光照模型
Phong和Blinn-Phong是计算镜面反射光的两种光照模型,两者仅仅有很小的不同之处. 1.Phong模型 Phone模型计算中的一个关键步骤就是反射向量R的计算: 上图中的位于表面“下面”的向 ...
- 【转】Phong和Blinn-Phong光照模型
来自:http://www.cnblogs.com/bluebean/p/5299358.html Phong和Blinn-Phong是计算镜面反射光的两种光照模型,两者仅仅有很小的不同之处. 1.P ...
随机推荐
- angular学习第1步
#### 最专业,最全面的angular的学习文档 https://www.jianshu.com/p/f0f81a63cbcb ### https://www.cnblogs.com/xiaowei ...
- Python连接MySQL数据库的多种方式
上篇文章分享了windows下载mysql5.7压缩包配置安装mysql 后续可以选择 ①在本地创建一个数据库,使用navicat工具导出远程测试服务器的数据库至本地,用于学习操作,且不影响测试服务器 ...
- .NET开发工程师职业规划
本人结合自己的实际状况和未来的职业规划,所做学习计划如下: 初级开发工程师(1年) 熟悉C#语言:熟悉MVC原理:熟悉 SQL Server Oracle MySql其中一种数据库,能独立编写增.删. ...
- js判断当前浏览器
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串var isOpera = userAgent.indexOf("Opera ...
- spring cloud(四)熔断器Hystrix
熔断器 雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供者”的不可用导致“服务 ...
- jsp页面输出当前时间
<% out.print(new java.text.SimpleDateFormat("yyyy年MM月dd号 hh:mm:ss").format(new Date())) ...
- redis数据库-VUE创建项目
redis数据库 ''' 关系型数据库: mysql, oracle 非关系型数据库(nosql): redis,mongodb (没有表的概念) key-value mongodb: json 数据 ...
- mysql创建table
innodb 存储引擎,创建一个表 本文分析创建一个段.待叙,主要说明是如何创建一文件,并在文件中分配一个索引. 上面是创建一个表的调用图.创建文件和创建一个btr /**************** ...
- Ubuntu 18.04 下 Redis 环境搭建
一.安装 Redis ① 下载 wget http://download.redis.io/releases/redis-3.2.8.tar.gz ② 解压 tar -zxvf redis-3.2.8 ...
- 【基础】使用cookies,实现免登陆(七)
实现过程: 1.测试网站:www.dx.com 2.登陆后的cookies:"DXSSO","Token=20A0FA7D-XXXX-XXXX-XXXX".至于 ...