Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >三维引擎导入obj模型全黑总结

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

作者头像
用户3158888
发布于 2022-03-22 06:12:33
发布于 2022-03-22 06:12:33
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

obj 模型没有法线向量

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
三维引擎导入obj模型不可见总结
最近有客户试用我们的三维平台,在导入模型的时候,会出现模型全黑和不可见的情况。上一篇文章说了全黑的情况。此文说下不可见的情况。
用户3158888
2022/03/22
9460
三维引擎导入obj模型不可见总结
threejs三维地图大屏项目分享
这是最近公司的一个项目。客户的需求是基于总公司和子公司的数据,开发一个数据展示大屏。 大屏两边都是一些图表展示数据,中间部分是一个三维中国地图,点击中国地图的某个省份,可以下钻到省份地图的展示。 地图上,会做一些数据的标注,信息标牌。 如下图所示:
用户3158888
2022/11/23
4K0
threejs三维地图大屏项目分享
NeurIPS 2022 | 一句话让三维模型生成逼真外观风格,精细到照片级细节
根据给定输入创建 3D 内容(例如,根据文本提示、图像或 3D 形状)在计算机视觉和图形领域具有重要应用。然而这个问题是具有挑战性的,现实中通常需要专业艺术家(Technical Artist)耗费大量的时间成本去创作 3D 内容。同时,许多网上的三维模型库中的资源通常是没有任何材质的裸露三维模型,要想将他们应用到现阶段的渲染引擎中,需要 Technical Artist 为它们创作高质量的材质,灯光和法向贴图。因此,如果有办法可以实现自动化、多样化和逼真的三维模型资产生成,将是很有前景的。
机器之心
2022/12/15
3500
NeurIPS 2022 | 一句话让三维模型生成逼真外观风格,精细到照片级细节
OBJ 3D模型格式介绍
OBJ 是一种几何定义文件格式,Wavefront Technologies 公司在可视化加强动画包中第一次使用了这个格式,文件格式是公开的,并具有及其优质的兼容性和跨平台、跨行业的通用性,在所有 3D 应用软件中被支持。
为为为什么
2024/07/13
4700
如何把GEOJSON或Shp shapefile转三维城市模型,带贴图UV,导出为OBJ GLTF STL格式
Geobuilding更新了导出为3D模型文件功能。在软件生产的建筑物数据,或第三方导入的矢量建筑数据都可以转换为模型。
geobuilding
2024/03/19
9000
如何把GEOJSON或Shp shapefile转三维城市模型,带贴图UV,导出为OBJ GLTF STL格式
Shader经验分享
流水线 1.应用阶段:(CPU)输出渲染图元,粗粒度剔除等 比如完全不在相机范围内的需要剔除,文件系统的粒子系统实现就用到粗粒度剔除。 2.几何阶段:(GPU)把顶点坐标转换到屏幕空间,包含了模型空间 到世界空间 到观察空间(相机视角view) 到齐次裁剪空间(投影project2维空间,四维矩阵,通过-w<x<w判断是否在裁剪空间) 到归一化设备坐标NDC(四维矩阵通过齐次除法,齐次坐标的w除以xyz实现归一化) 到屏幕空间(通过屏幕宽高和归一化坐标计算)。 a.顶点着色器:坐标变换和逐顶点光照,将顶点空间转换到齐次裁剪空间。 b.曲面细分着色器:可选 c.几何着色器:可选 d.裁剪:通过齐次裁剪坐标的-w<x<w判断不在视野范围内的部分或者全部裁剪,归一化。 e.屏幕映射:把NDC坐标转换为屏幕坐标 3.光栅化阶段:(GPU)把几何阶段传来的数据来产生屏幕上的像素,计算每个图元覆盖了哪些像素,计算他们的颜色、 a.三角形设置:计算网格的三角形表达式 b.三角形遍历:检查每个像素是否被网格覆盖,被覆盖就生成一个片元。 c.片元着色器:对片元进行渲染操作 d.逐片元操作:模板测试,深度测试 混合等 e.屏幕图像 ------------------------------------------------------- 矩阵: M*A=A*M的转置(M是矩阵,A是向量,该公式不适合矩阵与矩阵) 坐标转换: o.pos = mul(UNITY_MATRIX_MVP, v.vertex);顶点位置模型空间到齐次空间 o.worldNormal = mul((float3x3)_Object2World,v.normal);//游戏中正常的法向量转换,转换后法向量可能不与原切线垂直,但是不影响游戏显示,而且大部分显示也是差不多的。一般用这个就行了。 o.worldNormal = mul(v.normal, (float3x3)_World2Object);顶点法向量从模型空间转换到世界空间的精确算法,公式是用_Object2World该矩阵的逆转置矩阵去转换法线。然后通过换算得到该行。 ------------------------------------------------------- API: UNITY_MATRIX_MVP 将顶点方向矢量从模型空间变换到裁剪空间 UNITY_MATRIX_MV 将顶点方向矢量从模型空间变换到观察空间 UNITY_MATRIX_V 将顶点方向矢量从世界空间变换到观察空间 UNITY_MATRIX_P 将顶点方向矢量从观察空间变换到裁剪空间 UNITY_MATRIX_VP 将顶点方向矢量从世界空间变换到裁剪空间 UNITY_MATRIX_T_MV UNITY_MATRIX_MV的转置矩阵 UNITY_MATRIX_IT_MV UNITY_MATRIX_MV的逆转置矩阵,用于将法线从模型空间转换到观察空间 _Object2World将顶点方向矢量从模型空间变换到世界空间,矩阵。 _World2Object将顶点方向矢量从世界空间变换到模型空间,矩阵。 模型空间到世界空间的矩阵简称M矩阵,世界空间到View空间的矩阵简称V矩阵,View到Project空间的矩阵简称P矩阵。 --------------------------------------------- _WorldSpaceCameraPos该摄像机在世界空间中的坐标 _ProjectionParams _ScreenParams _ZBufferParams unity_OrthoParams unity_Cameraprojection unity_CameraInvProjection unity_CameraWorldClipPlanes[6]摄像机在世界坐标下的6个裁剪面,分别是左右上下近远、 ---------------------------- 1.表面着色器 void surf (Input IN, inout SurfaceOutput o) {}表面着色器,unity特殊封装的着色器 Input IN:可以引用外部定义输入参数 inout SurfaceOutput o:输出参数 struct SurfaceOutput//普通光照 { half3 Albedo;//纹理,反射率,是漫反射的颜色值 half3 Normal;//法线坐标 half3 Emission;//自发光颜色 half Specular;//高光,镜面反射系数 half Gloss;//光泽度 half Alpha;//alpha通道 } 基于物理的光照模型:金属工作流Surfa
bering
2019/12/03
2.2K0
技术日志挑战——第3天:0726
还有就是修复一个之前因为精度设定而导致的bug,目前已经成功处理,现在看起来正常了许多。
Arya
2024/07/26
1250
技术日志挑战——第3天:0726
Unity通用渲染管线(URP)系列(三)——方向光(Direct Illumination)
如果要创建一个更加真实的场景,我们就需要模拟光和物体表面的交互。这比我们之前制作的不受光的着色器要复杂的多。
放牛的星星
2020/12/11
6.1K0
Unity通用渲染管线(URP)系列(三)——方向光(Direct Illumination)
虚实之间02 | 构建虚拟数字人的第一步居然需要……降维打击?
构建虚拟人数字的第一步需要进行前期的形象设计以及建模。2D数字虚拟人需要原画等形象设计,3D数字虚拟人需要额外使用三维建模技术生成数字形象,无论是基于IP或者真人设计,都需要进行面部以及身体的建模。高保真建模会带来更好的交互体验,也会避免恐怖谷效应的出现。
GIAIAC
2022/06/27
8070
虚实之间02 | 构建虚拟数字人的第一步居然需要……降维打击?
基础渲染系列(十六)——静态光照
这是关于渲染的系列教程的第16部分。上次,我们渲染了自己的延迟灯光。在这一部分中,我们转到灯光贴图上来。
放牛的星星
2020/07/10
4K0
基础渲染系列(十六)——静态光照
OpenGl读取导入3D模型并且添加鼠标移动旋转显示
原文链接:https://www.cnblogs.com/DOMLX/p/11543828.html
徐飞机
2019/09/19
2.8K0
OpenGl读取导入3D模型并且添加鼠标移动旋转显示
Unity3d场景快速烘焙【2020】
很多刚刚接触Unity3d的童鞋花了大量的时间自学,可总是把握不好Unity3d的烘焙,刚从一个坑里爬出来,又陷入另一个新的坑,每次烘焙一个场景少则几个小时,多则几十个小时,机器总是处于假死机状态,半天看不到结果,好不容易烘焙完了,黑斑、撕裂、硬边、漏光或漏阴影等缺陷遍布,惨不忍睹,整体效果暗无层次,或者苍白无力,灯光该亮的亮不起来,该暗的暗不下去,更谈不上有什么意境,痛苦的折磨,近乎失去了信心,一个团队从建模到程序,都没什么问题,可一到烘焙这一关,就堵得心塞,怎么也搞不出好的视觉效果,作品没法及时向用户交付,小姐姐在这里分享一些自己的经验,希望能帮到受此痛苦折磨的朋友,话不多说,开工!
全栈程序员站长
2022/07/01
4.5K0
Unity3d场景快速烘焙【2020】
CINEMA 4D Studio R2023.1.3(c4d超强三维动画设计)
CINEMA 4D Studio2023是Mac上知名的3D动画设计制作软件,包含 GPU 渲染器 Prorender、生产级实时视窗着色、超强破碎、场景重建等诸多新功能,C4D mac为用户提供高端的3D内容创建,非常适合专业的设计认识,软件拥有最全面的工具和超级快速的速度,让你分分钟得到惊人的结果。
用户10121095
2023/03/07
1.8K0
unity3d Human skin real time rendering 真实模拟人皮实时渲染「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说unity3d Human skin real time rendering 真实模拟人皮实时渲染「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/02/15
1.1K0
unity3d Human skin real time rendering 真实模拟人皮实时渲染「建议收藏」
三维动画渲染制作软件3Ds Max 2023中文版,3Ds Max软件安装过程
3Ds Max是一款强大的三维建模软件,它可以让你在电脑上创造出各种各样的三维模型,比如建筑、汽车、人物等等。它的操作界面非常友好,可以让你快速地学会如何使用它。
用户10413399
2023/03/23
8590
三维动画渲染制作软件3Ds Max 2023中文版,3Ds Max软件安装过程
3D 小姐姐模型是怎么“捏”成的? 初识 Mesh 知识点!
今天菜鸟和大家一起来讨论一下3D入门的基础性知识:「Mesh」它是3D模型能正常展现的重要因素。(文末有奖问卷调查,感谢各位老铁支持!)
张晓衡
2023/02/23
1.3K0
3D 小姐姐模型是怎么“捏”成的? 初识 Mesh 知识点!
基础渲染系列(十三)——延迟着色
这是关于渲染的系列教程的第13部分。上一部分涵盖了半透明阴影。现在我们来看一下延迟着色。
放牛的星星
2020/07/10
3.4K0
Three.js - 走进3D的奇妙世界
随着人们对用户体验越来越重视,Web开发已经不满足于2D效果的实现,而把目标放到了更加炫酷的3D效果上。Three.js是用于实现web端3D效果的JS库,它的出现让3D应用开发更简单,本文将通过Three.js的介绍及示例带我们走进3D的奇妙世界。
宜信技术学院
2019/11/27
10.9K0
3D 可视化入门:渲染管线原理与实践
玩 3D 游戏的时候,有没有想过这些 3D 物体是怎么渲染出来的?其中的动画是怎么做的?为什么会出现穿模、阴影不对、镜子照不出主角的情况?要想解答这些问题,就要了解实时渲染。其中最基础的,就是渲染管线。
Tecvan
2021/12/09
7.2K1
3D 可视化入门:渲染管线原理与实践
基础渲染系列(十)——更复杂的复合材质
这是关于渲染的系列教程的第十部分。上一次,我们使用了多个纹理来创建复杂的材质。这次我们再增加一些复杂度,并且还支持多材质编辑。
放牛的星星
2020/07/10
2.6K0
推荐阅读
相关推荐
三维引擎导入obj模型不可见总结
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验