在gltf文件中实现透明度

时间:2016-02-09 10:39:29

标签: maya cesium gltf

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

在.gltf文件中使用的

materail

"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模型。 enter image description here 我的要求是墙应该是透明的,它是在玛雅中获得的,但在来到gltf(铯)时却看不到。有没有办法通过编辑gltf文件来实现这一点。

1 个答案:

答案 0 :(得分:1)

透明度系数通常在[0,1]范围内。 Maya总是导出透明度系数为1.0,这意味着完全透明。

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

# l - list
for i in range(0, len(l)):
    print l[i],

检查是否存在不透明属性集是做什么的。如果不使用TransparencyFactor和TransparencyColor来确定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) ;
}

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

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

并处理着色器中的参数。