您的位置:首页 > 其它

Vision引擎中光照着色器

2014-09-24 10:34 148 查看
引言

Vision 引擎具有一种内置机能,可根据材质设置为模型和世界几何体平面自动分配光照着色器。 本章会帮助美工和程序员了解影响几何体外观的光照和材质设置。

关于载入时应用哪些着色器,引擎的默认行为可完全自定义,所以本章仅描述默认行为。 关于 Vision 引擎的光照和阴影功能,在程序员文档中可找到一份更适合程序员的文档。

Blinn 光照

对于所有光照类型,引擎使用 Blinn 光照方程,其开头为:
ResultColor = (DiffuseColor*DiffuseLighting + SpecularColor*SpecularLighting) * LightSourceColor

DiffuseColor(散射色)来自材质的散射基底纹理。 SpecularColor(高光色)来自可选高光纹理。 如未定义,高光色将默认为白色,也就是说,高光部分会显示为光源色。DiffuseLighting(散射光照)值是光照入射角和表面法线值的内积:
DiffuseLighting = max(L dot N, 0.0);

其中的法线值来自太阳平面法线或(如定义)材质法线贴图纹理。

高光部分取决于视角,涉及到所谓的 half-angle vector(半角矢量),即光照入射角和视线方向的规格化总和。 这一半角矢量和法线的内积将被乘方。 该指数定义了材质的闪亮度。

H = normalize(Eye + L);
SpecularLighting = SpecularMultiplier * pow(H dot N, SpecularExponent);

材质高光属性

   高光指数

高光指数允许您改变高光高亮的”延伸范围”。 值为 1 会创造出宽泛的高光,更高的值会创造出更集中锐利的高光。 木头等材质应使用较低的高光指数,以获得更宽泛的高光,而金属应更高,以取得锐利的高光。

下图显示了不同的高光指数取值对高亮特性的影响。





   高光倍增(强度)

高光强度控制着高光高亮的亮度(y 轴)。 默认值为 1,更高的值会让高亮部分更亮。 这可以创造出高光泛光的效果。

材质光照着色器
该着色器提供器在载入时为所有材质(世界和模型)提供合适的着色器。 虽然静态世界几何体和动态实体模型几何体的照明方式不同,但材质属性的解读方式是一致的,如以下分层回退系统所示:

1. 材质为全亮(100% 环境光): 材质上不应用任何光照。

2. 仅散射光照(无法线贴图、无高光): 应用一个简单的纹理*光照着色器

3. 材质有一个法线贴图: 材质显示为凹凸。 如果材质具有高光参数,它还会具有SpecularExponent(高光指数)/ SpecularMultiplier(高光倍增)这对参数来定义高光的高亮。
如果法线贴图有一个 alpha 通道,该通道被用来将高光倍增按比例缩小到逐像素等级。 这可用于蒙蔽纹理中高光程度不高的部分。 不能以此方式实现对高光指数的逐像素控制(见下一项)。

4. 材质有一个高光贴图: RGB 部分作为高光倍增参数的颜色倍增使用,从而为每个纹理单独提供反射色。 高光纹理(如已定义)的 alpha 通道被用来按比例缩小材质的高光指数,从而控制材质的逐像素闪亮度。
如果法线贴图的 alpha 通道也被定义,它就作为视差贴图的灰阶高度值使用。

世界和模型光照的基本差异在于引擎收集光照信息的方式(光照贴图与光照网格)。 
总的来说,材质的纹理配置主要有以下三种:
   仅散射纹理





   散射纹理和法线贴图





高光贴图

该配置使用着色贴图来调制高光反射。 这种方法可让您逐像素地控制高光颜色和强度。 塑料等材质通常带有白色高光反射,而金属则反射自身的颜色。 我们提供的部分样本材质也使用完全不同的颜色,以呈现散色或染色效果。

如果高光贴图带有一个 alpha 通道,即可用来逐像素控制高光指数。 这就是说,您可以在同一表面的不同部分实现不同的高光行为,例如木头和金属。

您可能很想在高光贴图的 alpha 通道中绘制黑色区域,以此控制高光应用范围,但要记住,高光指数控制的是高光高亮的形状(范围和锐度),而非亮度。 黑色 alpha(即值为 0),会产生很宽泛的高光高亮,而不能产生希望的结果。 请将高光反射亮度绘制到 RGB 通道中。

转自:projectanarchy中文社区
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: