gltf模型帶透明貼圖的顯示問題
帶透明貼圖的三維模型,會涉及到在顯示時,根據(jù)圖片上的透明度,來顯示不規(guī)則的形狀,圖片在制作三維模型時,導(dǎo)入的是規(guī)則形狀,長方形或者正方形,如不對透明度進行處理時,顯示的結(jié)果是不正確的,例如下邊樹木的三維模型設(shè)置:

通過模型的處理軟件,設(shè)置材質(zhì)(material)的屬性,能夠使模型在引擎中顯示時,將透明的位置不顯示,從而達到正確的顯示方式:

具體的操作方式參見之前公眾號文章:Blender導(dǎo)出帶透明貼圖的gltf模型
在實際的操作中,擁有多張貼圖的三維模型,一張一張貼圖修改屬性信息會比較慢,可以使用Blender中的python腳本進行批量修改,參見公眾號文章:https://mp.weixin.qq.com/s?__biz=MzU2ODYzNzc4OQ==&mid=2247485182&idx=1&sn=d33da1cf3e30f8f9abe31e4aac4c1206&chksm=fc8ba6cccbfc2fdac610b97d8db064486e7ffd0a8bee1967140b4094cb7a49be432c1980cfbc&scene=21#wechat_redirect,附:如何修改一個模型里的所有材質(zhì)的屬性(material)的python代碼:
//bpy.data為場景中的模型數(shù)據(jù)
?materials = bpy.data.materials
? ? for (k1,v1) in? materials.items():
? ? ? ? v1.blend_method = 'BLEND'
按照此方式設(shè)置導(dǎo)出的三維模型,將材質(zhì)都設(shè)置成了BLEND屬性,當(dāng)模型中的材質(zhì)有透明通道(例如png格式),在three.js或者cesium中顯示時,會存在和背景混合的問題,模型顯示會穿透背景,如下圖:

不帶透明通道的材質(zhì),例如jpg格式,就能避免這樣的問題,所以,在模型的貼圖設(shè)置時,可以根據(jù)不同情況,設(shè)置不同的屬性,在gltf模型格式說明中,也可以將模型的透明屬性設(shè)置成mask,這樣同樣能夠避免這樣的問題。
附gltf模型材質(zhì)參數(shù)設(shè)置說明(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.