我在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模型。 我的要求是墙应该是透明的,它是在玛雅中获得的,但在来到gltf(铯)时却看不到。有没有办法通过编辑gltf文件来实现这一点。
答案 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 ;
并处理着色器中的参数。