首先贴出本次教程的构架图,其实上第九个教程是一样的结构
第一,LightMap(光照贴图)的简介和概念
LightMap经常是用来模拟在照射物体表面的光,可以比直接用光节省效率,可以说LightMap就是模拟光暗程度,大名鼎鼎的UE4游戏引擎导入的3D模型中就有两层UV坐标,第一层为基础纹理,第二层UV就是LightMap(光照贴图的),UE4的构建功能就是生产静态阴影,这个静态阴影是不会随着游戏中的光改变而改变的,这个静态阴影效果就是光照贴图做出来的,总之一句话,光照贴图可以模拟明暗效果(阴影,聚光灯,等等).
来看看光照I贴图一般长什么样子,
不难看出颜色一般是黑,白,灰色三种颜色 ,假设光照贴图上的每个像素颜色为Color(r,g,b,a);
则一般下 0.0<=r=g=b<=1.0
给出我的PixelShader
Texture2D ShaderTexture[2]; //纹理资源数组
SamplerState SampleType:register(s0); //采样方式
float4 PS(VertexOut outa) : SV_Target
{
float4 BasePixel;
float4 ColorPixel;
float4 color;
BasePixel = ShaderTexture[0].Sample(SampleType, outa.Tex);
ColorPixel= ShaderTexture[1].Sample(SampleType, outa.Tex);
color = BasePixel*ColorPixel;
color = saturate(color);
return color;
}
我的第一张纹理图为基础纹理图:
Texture2D ShaderTexture[2]; //纹理资源数组
SamplerState SampleType:register(s0); //采样方式
float4 PS(VertexOut outa) : SV_Target
{
float4 BasePixel;
float4 ColorPixel;
float4 color;
BasePixel = ShaderTexture[0].Sample(SampleType, outa.Tex);
ColorPixel= ShaderTexture[1].Sample(SampleType, outa.Tex);
color = BasePixel*ColorPixel;
color = saturate(color);
return color;
}
第二张为光照贴图,为上面给出的黑白色相间的纹理图.
程序运行结果为:
这样聚光灯的效果是不是就出来了,明暗相间,哈哈哈哈.
下面是我的源代码链接: