材质

材质对象作为网格 Mesh 对象的一个属性存在,可以改变网格的视觉效果。任何 Mesh 都可通过 material 属性获取到自身的材质。如果想让网格的背面和正面表现不一样的话,可通过 back_material 属性获取到背面材质并进行设置。本章主要讲解如何通过材质来改变 Mesh 的视觉效果。

材质对象含有一个 shading_model 属性表示材质的着色模型。着色模型决定了材质反射入射光的方式,进而直接决定了物体的外观。Glass Engine 具有多种着色模型可供选择,包括:

  • Material.ShadingModel.Flat:平面光照模型,光照颜色逐面渲染,没有高光;

  • Material.ShadingModel.Gouraud:Gouraud 光照模型,光照颜色逐顶点渲染并在面内插值;

  • Material.ShadingModel.Phong:Phong 光照模型,光照颜色逐像素渲染,计算高光时参考视线与反射向量夹角的余弦值;

  • Material.ShadingModel.PhongBlinn:Phong-Blinn 光照模型,光照颜色逐像素渲染,计算高光时参考半程向量与表面法线夹角的余弦值;

  • Material.ShadingModel.Toon:卡通模式渲染,基于 Phong 模型,但任何颜色不再渐变而是突变,能够产生卡通效果;

  • Material.ShadingModel.OrenNayar:Oren-Nayar 光照模型[1],是一种比 Lambert 漫反射模型更物理的漫反射模型,不计算高光;

  • Material.ShadingModel.Minnaert:Minnaert 光照模型[2],光照颜色逐像素渲染,没有高光;

  • Material.ShadingModel.Unlit:不受光照影响,物体直接表现为自发光颜色或漫反射颜色;

  • Material.ShadingModel.Fresnel:Fresnel 着色模型,仅在边缘处产生渐变光;

  • Material.ShadingModel.PBR:基于物理的渲染模型,采用金属度/粗糙度工作流。

依据着色模型的不同,可供设置的材质属性也不同,这些属性包括:

材质属性

材质属性

../_images/Unlit.png

      Unlit       

../_images/Flat.png

       Flat        

../_images/Gouraud.png

   Gouraud   

../_images/Phong.png

     Phong      

../_images/PhongBlinn.png

Phong-Blinn

ambient : glm.vec3
环境光颜色

diffuse : glm.vec3
漫反射颜色

specular : glm.vec3
高光颜色

shininess : float
闪耀度

glossiness : float
光泽度

shininess_strength : float
高光强度

emission : glm.vec3
自发光颜色

rim_power : float
边缘光强度

base_color : glm.vec3
基础颜色

metallic : float
金属度

roughness : float
粗糙度

diffuse_bands : int
漫反射条带数

specular_bands : int
高光条带数

diffuse_softness : float
漫反射过度软度

specular_softness : float
高光过度软度

reflection : glm.vec4
环境映射层颜色

refractive_index : float
折射率

env_mix_diffuse : bool
环境映射与漫反射颜色是否混合

dynamic_env_mapping : bool
是否开启动态环境映射

auto_update_env_map : bool
自动更新环境映射贴图

opacity : float
材质不透明度

height_scale : float
凹凸夸张系数

fog : bool
是否受雾影响

recv_shadows : bool
是否接收阴影

cast_shadows : bool
是否投射阴影

材质属性(续)

材质属性

../_images/OrenNayar.png

Oren-Nayar

../_images/Minnaert.png

   Minnaert  

../_images/Toon.png

       Toon       

../_images/Fresnel.png

    Fresnel     

../_images/PBR.png

        PBR        

ambient : glm.vec3
环境光颜色

diffuse : glm.vec3
漫反射颜色

specular : glm.vec3
高光颜色

shininess : float
闪耀度

glossiness : float
光泽度

shininess_strength : float
高光强度

emission : glm.vec3
自发光颜色

rim_power : float
边缘光强度

base_color : glm.vec3
基础颜色

metallic : float
金属度

roughness : float
粗糙度

diffuse_bands : int
漫反射条带数

specular_bands : int
高光条带数

diffuse_softness : float
漫反射过度软度

specular_softness : float
高光过度软度

reflection : glm.vec4
环境映射层颜色

refractive_index : float
折射率

env_mix_diffuse : bool
环境映射与漫反射颜色是否混合

dynamic_env_mapping : bool
是否开启动态环境映射

auto_update_env_map : bool
自动更新环境映射贴图

opacity : float
材质不透明度

height_scale : float
凹凸夸张系数

fog : bool
是否受雾影响

recv_shadows : bool
是否接收阴影

cast_shadows : bool
是否投射阴影

下面我们从以下角度展开详细描述: