0

我在 Maya 中应用了透明度并将其导出为 dae,但是当我将 dae 转换为 gltf 时,透明度不可见。谁能告诉我如何在 gltf 文件中实现透明度?

.gltf 文件中使用的材料

"materials": {
    "small_walls_lambert2-fx": {
        "name": "small_walls_lambert2",
        "technique": "technique0",
        "values": {
            "ambient": [
                0,
                0,
                0,
                1
            ],
            "diffuse": "texture_small_walls_file1-image",
            "emission": [
                0,
                0,
                0,
                1
            ]
        }
    },

供您参考,我附上示例 gltf 3d 模型。 在此处输入图像描述 我的要求是墙壁应该是透明的,它在 Maya 中实现,但在使用 gltf(cesium) 时不可见。有没有办法通过编辑 gltf 文件来实现这一点。

4

1 回答 1

1

透明度因子通常在 [0,1] 范围内。Maya 始终会导出 1.0 的透明度因子,这意味着完全透明。

这是我来自 FBX->glTF 转换器的代码

web::json::value gltfWriter::WriteMaterialTransparencyParameter (
    const utility::char_t *pszName, 
    FbxPropertyT<FbxDouble> &property, FbxPropertyT<FbxDouble3> &propertyColor, FbxProperty &propertyOpaque,
    web::json::value &values, web::json::value &techniqueParameters
) {
    web::json::value ret =web::json::value::null () ;
    double value =1. ;
    if ( propertyOpaque.IsValid () ) {
        value =1.0 - propertyOpaque.Get<double> () ;
    } else {
        if ( !property.IsValid () )
            return (ret) ;
        value =property.Get () ;
        if ( propertyColor.IsValid () ) {
            FbxDouble3 color =propertyColor.Get () ;
            value =(color [0] * value + color [1] * value + color [2] * value) / 3.0 ;
        }
    }
    if ( !GetIOSettings ()->GetBoolProp (IOSN_FBX_GLTF_INVERTTRANSPARENCY, false) )
        value =1.0 - value ;
    values [pszName] =web::json::value::number (value) ;
    techniqueParameters [pszName] =web::json::value::object ({ { U("type"), IOglTF::FLOAT } }) ;
    return (ret) ;
}

所做的是检查是否存在不透明属性集。如果不使用 TransparencyFactor 和 TransparencyColor 来确定 glTF 透明度。

value =(color [0] * value + color [1] * value + color [2] * value) / 3.0 ;

您上面的材质定义没有定义任何透明度,因此您需要添加如下内容:

            "transparency": 1,
            "transparent": [0,
            0,
            0,
            1]

并处理着色器中的参数。

于 2016-03-20T18:28:30.473 回答