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 モデルを添付します。 ここに画像の説明を入力 私の要件は、壁が透明である必要があることです。これはマヤで達成されますが、gltf(セシウム)に来ると見えません。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 に答える