取消

2024-01-16-CityEngine导出glb、gltf设置透明模式

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)

登录 GitHub 账号进行评论