jk20012001 / TaskList

0 stars 0 forks source link

DCC材质信息转换算法 #13

Closed jk20012001 closed 2 years ago

jk20012001 commented 2 years ago


粗糙度 首先获取FbxDocumentInfo中的ApplicationVendor, 如果包含Blender就要使用以下转换: 使用roughness = 1.0 - min(1.0, sqrt(FbxSurfacePhong.Shininess) / 10.0f) 转换高光强度为粗糙度 metallic = FbxSurfacePhong.ReflectionFactor 若不包含Blender则使用以下转换: roughness = 1.0 - pow(2.0, -10.0 / (FbxSurfacePhong.Shininess + 0.0001)) metallic = 0.0 将两个值设置给内置材质


金属性 blinnphong模型的SpecularColor亮度大于0.9 && DiffuseColor亮度<0.1则金属性为1,否则为0


半透 导入时需要处理透明材质, 正常情况下导出FBX的材质transparentfactor大于0则说明是透明材质, 需要将Technique改为transparent 但要注意防止全透, 即transparentfactor=1的情况, 所以导入时albedocolor.a应该设为min(0.95, 1-TransparentFactor) C4D材质的透明部分非常奇怪, transparentfactor永远是1, AppVendor是Blender的应该强行禁用透明材质