shader中一些光照模型
来源:互联网 发布:gagamatch网络异常 编辑:程序博客网 时间:2024/05/22 19:31
漫反射光照模型
何为漫反射呢?即指光线被粗糙表面无规则地向各个方向反射的现象。通俗一点就是相对高光而言,没有刺眼的光斑产生.
首先我们给出漫反射部分计算公式:Cdiffuse=(Clight*Mdiffuse)max(0,n*l)
主要我们看看漫反射模型的shader代码:
Properties{
_Diffuse("Diffuse",Color)=(1,1,1,1)
}
这里我们定义了一个属性即漫反射颜色_Diffuse设置为(1,1,1,1)白色。
SubShader{
Pass{
Tags{"LightModel"="ForwardBase"}
我们在管线里面定义了通道,通道里面再定义了一个标签,只有这样我们才能使用内置光照,比如LightColor0等。
代码如下:
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
fixed4 _Diffuse;
上面定义了两个着色器vertex定点着色器和fragment片元着色器,然后引用Unity内置灯光效果文件,以及定义了一个属性的类型_Diffuse.
struct a2v {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f {
float4 pos : SV_POSITION;
fixed3 color : COLOR;
};
使用两个结构体定义了定点着色器和片元着色器所需的一些变量。
v2f vert(a2v v) {
v2f o;
// Transform the vertex from object space to projection space
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
// Get ambient term
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
// Transform the normal from object space to world space
fixed3 worldNormal = normalize(mul(v.normal, (float3x3)unity_WorldToObject));
// Get the light direction in world space
fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz);
// Compute diffuse term
fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLight));
o.color = ambient + diffuse;
return o; }
fixed4 frag(v2f i) : SV_Target {
return fixed4(i.color, 1.0);
}
ENDCG
}
}
FallBack "Diffuse"
}
上面就是顶点着色器和片元着色器的具体实现,由于我们上面采用的是逐顶点光照的,所以片元着色器直接输出即可,运行结果如下:
0 0
- shader中一些光照模型
- Unity3d Shader光照模型
- <Shader> 自定义光照模型
- 【Shader】一些基础常用的漫反射光照模型
- unity shader漫反射中逐像素的光照模型
- Unity Shader自定义光照模型
- shader 光照模型,半角向量
- Unity Shader 五 光照模型
- 用Shader实现标准光照模型
- Shader中的空间概念以及光照模型
- Cook-Torrance光照模型附 shader代码
- 常用的光照模型Shader Models
- Unity Shader-Phong光照模型与Specular
- Unity Shader之自定义漫反射光照模型
- Unity Shader学习-3.光照模型
- Unity Shader-Phong光照模型与Specular
- Unity Shader学习笔记:标准光照模型
- unity shader中高光反射光照模型之顶点光照
- Spring 和Struts2 整合 特别需要关注Session 关闭的问题:解决方法是使用 OpenSessionInViewFilter
- CentOS搭建Shadowsocks服务-实现科学上网
- 第一篇
- hdu5112水题
- usaco4.2.3 Job Processing
- shader中一些光照模型
- Java中的main函数详细讲解
- 2
- 关于Navicat Premium破解问题(已解决)
- 小程序踩坑手册1
- linux device tree相关
- [Prufer数列] BZOJ1005: [HNOI2008]明明的烦恼
- pygame从入门到放弃(一)
- .Net程序员学用Oracle系列(16):访问数据库(ODP.NET)