gltf模型带透明贴图的显示问题

带透明贴图的三维模型,会涉及到在显示时,根据图片上的透明度,来显示不规则的形状,图片在制作三维模型时,导入的是规则形状,长方形或者正方形,如不对透明度进行处理时,显示的结果是不正确的,例如下边树木的三维模型设置:
gltf模型带透明贴图的显示问题_第1张图片
通过模型的处理软件,设置材质(material)的属性,能够使模型在引擎中显示时,将透明的位置不显示,从而达到正确的显示方式:
gltf模型带透明贴图的显示问题_第2张图片
具体的操作方式参见之前公众号文章:Blender导出带透明贴图的gltf模型

在实际的操作中,拥有多张贴图的三维模型,一张一张贴图修改属性信息会比较慢,可以使用Blender中的python脚本进行批量修改,参见公众号文章:Blender脚本开发,附:如何修改一个模型里的所有材质的属性(material)的python代码:
//bpy.data为场景中的模型数据
materials = bpy.data.materials
for (k1,v1) in materials.items():
v1.blend_method = ‘BLEND’

按照此方式设置导出的三维模型,将材质都设置成了BLEND属性,当模型中的材质有透明通道(例如png格式),在three.js或者cesium中显示时,会存在和背景混合的问题,模型显示会穿透背景,如下图:
gltf模型带透明贴图的显示问题_第3张图片
不带透明通道的材质,例如jpg格式,就能避免这样的问题,所以,在模型的贴图设置时,可以根据不同情况,设置不同的属性,在gltf模型格式说明中,也可以将模型的透明属性设置成mask,这样同样能够避免这样的问题。
附gltf模型材质参数设置说明(blend和mask):
MASK - The rendered output is either fully opaque or fully transparent depending on the alpha value and the specified alpha cutoff value; the exact appearance of the edges MAY be subject to implementation-specific techniques such as “Alpha-to-Coverage”.
BLEND - The rendered output is combined with the background using the “over” operator as described in Compositing digital images.
gltf模型带透明贴图的显示问题_第4张图片

你可能感兴趣的:(gis,gltf,透明,blender)