光照模型概述光照模型通过特定公式计算场景中某点的光照效果,主要包括:- 自发光- 高光反射(Specular, 镜子效果)- 漫反射(Diffuse, 四周反射)- 环境光漫反射的实现1.设置光照模式...
光照模型概述
光照模型通过特定公式计算场景中某点的光照效果,主要包括:
- 自发光
- 高光反射(Specular, 镜子效果)
- 漫反射(Diffuse, 四周反射)
- 环境光
漫反射的实现
1.设置光照模式
Tags{"LightingMode" = "ForwardBase"}
2.引入Unity内置光照变量
#include "Lighting.cginc"
3.获取光方向和光照颜色
- 光方向(世界空间): _WorldSpaceLightPos0.xyz
- 光照颜色: _LightColor0
4.计算漫反射颜色
- 兰伯特光照模型
float3 lambertDiffuse = _LightColor0 * max(0, dot(normalize(lightDir), normalize(normalWS)));
dot内的夹角为法线和光线夹角
- 半兰伯特光照模型
float3 halfLambertDiffuse = _LightColor0 * (dot(normalize(lightDir), normalize(normalWS)) * 0.5 + 0.5);
dot内的夹角为法线和光线夹角
环境光的实现
- 直接将环境光颜色加到最终颜色上
float3 ambient = Unity_LightModel_AMBIENT.rgb;
高光反射的实现
- 基本高光模型
float3 specular = _LightColor0 * pow(max(dot(reflect(-lightDir, normalWS), viewDir), _Gloss), _Shininess);
- Blinn-Phong 高光模型
float3 halfDir = normalize(lightDir + viewDir);//相机方向和光照方向的平分线
float3 blinnPhongSpecular = _LightColor0 * pow(max(dot(normalize(normalWS), halfDir), 0), _Shininess);
纹理贴图Texture
- 通过Tex2D来进行纹理采样:属性板上的Tiling:表示X方向的缩放值,数值大就是缩小;表示Y方向的缩放值;Offset :X、Y则是偏移量
法线贴图NormalMap
- 法线贴图:通过法线映射技术,可以增强模型的细节,如光照阴影和凹凸效果。
- 法线贴图每个像素点的颜色RGB反映了切线空间下对应的向量值
- 需要将法线贴图上的法线从切线空间转换到世界空间或观察空间进行计算。
高度贴图
- 通过明暗图来表现高低、阴影的细节
内置函数
光照模型通过特定公式计算场景中某点的光照效果,主要包括:
- 自发光
- 高光反射(Specular, 镜子效果)
- 漫反射(Diffuse, 四周反射)
- 环境光
漫反射的实现
1.设置光照模式
Tags{"LightingMode" = "ForwardBase"}
2.引入Unity内置光照变量
#include "Lighting.cginc"
3.获取光方向和光照颜色
- 光方向(世界空间): _WorldSpaceLightPos0.xyz
- 光照颜色: _LightColor0
4.计算漫反射颜色
- 兰伯特光照模型
float3 lambertDiffuse = _LightColor0 * max(0, dot(normalize(lightDir), normalize(normalWS)));
dot内的夹角为法线和光线夹角
- 半兰伯特光照模型
float3 halfLambertDiffuse = _LightColor0 * (dot(normalize(lightDir), normalize(normalWS)) * 0.5 + 0.5);
dot内的夹角为法线和光线夹角
环境光的实现
- 直接将环境光颜色加到最终颜色上
float3 ambient = Unity_LightModel_AMBIENT.rgb;
高光反射的实现
- 基本高光模型
float3 specular = _LightColor0 * pow(max(dot(reflect(-lightDir, normalWS), viewDir), _Gloss), _Shininess);
- Blinn-Phong 高光模型
float3 halfDir = normalize(lightDir + viewDir);//相机方向和光照方向的平分线
float3 blinnPhongSpecular = _LightColor0 * pow(max(dot(normalize(normalWS), halfDir), 0), _Shininess);
纹理贴图Texture
- 通过Tex2D来进行纹理采样:属性板上的Tiling:表示X方向的缩放值,数值大就是缩小;表示Y方向的缩放值;Offset :X、Y则是偏移量
法线贴图NormalMap
- 法线贴图:通过法线映射技术,可以增强模型的细节,如光照阴影和凹凸效果。
- 法线贴图每个像素点的颜色RGB反映了切线空间下对应的向量值
- 需要将法线贴图上的法线从切线空间转换到世界空间或观察空间进行计算。
高度贴图
- 通过明暗图来表现高低、阴影的细节
内置函数