材质
材质对象作为网格 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
:基于物理的渲染模型,采用金属度/粗糙度工作流。
依据着色模型的不同,可供设置的材质属性也不同,这些属性包括:
材质属性 |
|||||
---|---|---|---|---|---|
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 |
✓ |
✓ |
✓ |
✓ |
✓ |
材质属性 |
|||||
---|---|---|---|---|---|
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 |
✓ |
✓ |
✓ |
✓ |
✓ |
下面我们从以下角度展开详细描述: