CityEngine默认导出glb、gltf时是透明的,但是obj不是透明的,在blender中查看会发现glb、gltf模型能透视,如果模型是房子这是不合理的
问题
CityEngine默认导出glb、gltf时是透明的,但是obj不是透明的,在blender中查看会发现glb、gltf模型能透视,如果模型是房子这是不合理的
解决
在cga中有material.opacitymap.mode属性,这个属性对应gltf模型alphaMode属性。material.opacitymap.mode有三个可选值”blend”、”mask” 、 “opaque”,注意必须是小写
。在任意cga方法中设置set(material.opacitymap.mode,"opaque")
就可以把材质设置为不透明,设置对当前方法作用域有效,即从当前方法开始内部执行的逻辑都会有效,含子方法,所以如果要设置全局的,可以把这句写在根方法中。
原因
查阅gltf规范指定,gltf模型资源是否透明受materials节点下alphaMode属性控制,有三个可选模式,注意alphaMode的值必须是大写才有效
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"materials": [
{
"name": "Material0",
"pbrMetallicRoughness": {
"baseColorFactor": [ 0.5, 0.5, 0.5, 1.0 ],
"metallicFactor": 1,
"roughnessFactor": 1,
},
"doubleSided": true,
"alphaMode": "OPAQUE"
"emissiveFactor": [ 0.2, 0.1, 0.0 ]
}
]
}
- “OPAQUE”:默认模式,完全不透明,忽略任何的alpha值
- “MASK”:与另一个属性alphaCutoff,如果小于alphaCutoff的值则为完全透明,否则为完全不透明。alphaCutoff值只有在”MASK”模式中生效,其他模式忽略该值。
- “BLEND”:混合模式,该模式的显示效果取决于各个引擎对该属性的支持。
参考资料
本文会经常更新,请阅读原文: https://dashenxian.github.io/post/CityEngine%E5%AF%BC%E5%87%BAglb-gltf%E8%AE%BE%E7%BD%AE%E9%80%8F%E6%98%8E%E6%A8%A1%E5%BC%8F ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 小神仙 (包含链接: https://dashenxian.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (125880321@qq.com) 。