前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三维引擎导入obj模型全黑总结

三维引擎导入obj模型全黑总结

作者头像
用户3158888
发布2022-03-22 14:12:33
1.3K0
发布2022-03-22 14:12:33
举报
文章被收录于专栏:计算机图形学 前端可视化 WebGL

最近有客户试用我们的三维平台,在导入模型的时候,会出现模型全黑和不可见的情况。本文说下全黑的情况。

经过测试,发现可能有如下几种情况。

obj 模型没有法线向量

如果obj模型导出的时候没有导出法线向量,会导致模型不能接受光照,从而导出的模型是全黑的。 此种情况下,高光反射也没有。

解决方案上,一种是让建模人员重新导出模型,导出的时候勾选上导出法线向量。

另外也可以从程序上兼容一下,判断模型是否有法线向量,如果没有,程序自己计算法线向量。 以threejs为例,调用computeVertexNormals计算法线向量代码如下:

代码语言:javascript
复制
 if(child.geometry && !child.geometry.hasAttribute('normal')) {
          child.geometry.computeVertexNormals();
  }

PS:如何判断模型是否有法线向量,只需要用文本编辑器打开*.obj文件,查看是否有“vn” 标记

mtl文件中设置模型颜色为黑色

一些建模人员在导出mtl文件时候, 参数Kd 是0 0 0, Kd参数会被解析成模型材质的color属性,既颜色。 此种情况下,虽然模型是全黑,但是高光的颜色是有的,也就是在特定的角度可以看到高光:

所以解决的 办法就是把Kd 0 0 0的设置全部去掉,或者建模师可以重新导出模型文件,让Kd 变成一个非全0的值。

mtl 也是文本文件,直接用文本编辑器可以打开查看:

PS mtl中 Kd 代表漫反射的颜色, Ks代表高光反射的颜色。

mtl文件中贴图引用了本地路径

有时候建模人员在导出mtl文件的时候,里面的贴图路径是本地的绝对路径,如下图所示:

此时导入的模型因为找不到贴图,而变成了黑色。此种情况下,虽然模型是全黑,但是高光的颜色是有的,也就是在特定的角度可以看到高光,同上。

解决方法就是把绝对路径改成相对路径,如下图:

可以手动编辑mtl文件修改,也可以建模人员导出的时候设置。

导入的场景没有设置灯光

还有一种情况,模型都没有问题,但是由于场景没有设置任何灯光,导致模型看不见,此种情况需要程序上添加灯光即可。

结语

上一张修改后的效果图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • obj 模型没有法线向量
  • mtl文件中设置模型颜色为黑色
  • mtl文件中贴图引用了本地路径
  • 导入的场景没有设置灯光
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档