为什么maya绑定的模型导出fbx会丢失顶点法线信息?

  • 选中模型 修改材料位置设置为Legacy 它会根据模型自带的贴图生成材质材质的透明度改为1

    是一个很好的网站,从这里可以下载很多免费的模型,通常为fbx格式,但是导入模型时可能会经常遇到模型材质不对的问题。

    修改材料位置设置为Legacy

    它会根据模型自带的贴图生成材质

    先把模型拖进场景,可以看见此时模型是灰色的,这个灰色Shader应该是Unity自动生成的

    选择一张有颜色的贴图,拖到模型上即可

    fbx模型是不带碰撞体的,所以会出现穿模的情况。

    如果需要,可以为模型及其全部子物体添加Mesh Collider,这样就不会穿模了。

  • 即厘米 Override Full Name:使用字符串"名称(Name)"字段作为网格体的全名 我在使用Unity模型导入UE的时候,发现模型变得很小,因为UE使用的cm,而Unity使用的是m,在导入的时候 需要转换m到cm,这样模型就会正常...

  • 答:如果是fbx文件导入到maya中骨骼歪斜的话,只能用手动调节,因为max和maya绑定模型互导现在还不能完美解决,所以如果想把max中绑定要的模型导入到maya中来调节动画的话,就只能再做相应的调节了,这个不能完美...

  • FBX和DAE分别是Autodesk和Khronos旗下核心的可交换型3D模型格式,也算是当前主流的支持顶点蒙皮骨骼动画的格式,在实时渲染领域基本是无人不识了。本文主要以笔记形式记录一下读取这两种模型时的一些须注意的地方。...

  • 两者的区别在于,前者只是将fbx导入到资源中,后者则导入场景中。2.内容...

  • 在Daz3D中使用.OBJ和.FBX三维模型 导入3d模型到Daz3d中,只需几个简单的步骤。 网上有很多很棒的免费三维模型资源。然而,由于有许多不同的程序可以制作三维模型,所以有许多不同种类的文件格式。Daz3D主要用于自己...

注:原文写在我的百度博客上,因此百度博客的配图更清晰,另外百度博客的本文更新了mel的下载链接!

绕了很多弯子,失败了n次,得以下经验,T_T。。。记录下来,免得以后忘记。

本文主要解决两种情况下的数据导入导出:1、Maya动画导给Max;2、Maya高版本动画导给低版本。其他情况应该是类似,看完下文应该都不存在难度了。

经验总结&操作必读:

一、Maya动画基本可以分为以下几种:1、Transform动画(位移旋转缩放等)、路径动画、各类约束;2、Shape动画(点动画、变形器动画、骨骼驱动的蒙皮动画等);3、相机动画(普通相机、一点相机、两点相机、带约束的相机,带父子关系的相机)。

二、maya中的动画最好bake成逐帧动画再导出fbx,方能100%保证动画导出后和原动画一致。如果不bake成逐帧动画,可以看到动画曲线在原始场景里和fbx导出后,在不同软件的不同版本下动画曲线不一致,导致动画和原场景不一致,见下图。

三、如果实在不想bake成逐帧动画,那么至少保证导出的fbx文件版本和即将导入fbx文件的软件版本一致,比如,maya2012导出fbx到maya2011来用,那么fbx版本请选择2011。

四、bake逐帧动画并导出fbx完毕后,在导入到目标软件之前,请务必提前设置好目标软件的帧速率以匹配原场景的帧速率。尤其是导入到max,如果帧速率不对导入的动画会出问题。

五、有时候导入到maya中会完全丢失动画,尝试重启maya再导入。

六、maya骨骼动画通过fbx导入max后,虽然骨骼的动画曲线有变化,但是实际动画效果和maya保持一致。Maya带角色蒙皮的骨骼动画,将骨骼和角色模型导出fbx并导入max后,polygon模型的蒙皮效果和在maya中完全一致,nurbs模型的蒙皮效果和maya中的不一样。

七、Nurbs的Shape动画的点缓存文件Maya认,Max不认,换言之,最好不要把Nurbs文件从Maya导去Max。

八、导出的FBX如果带有点缓存目录,请不要改变点缓存目录的名字,否则会出现点缓存加载失败的情况。

九、Maya中的相机设置越简单越好,因为FBX插件不支持Maya相机的一些高级选项,例如“Shake

十、导出的FBX文件经过三维软件另存为该三维软件原生格式后,点缓存路径便由“相对fbx文件的路径”变成“相对当前项目文件夹的路径”,如果缓存位置发生改变,需要手动指定缓存路径。如果点缓存的几何体很多,建议不要更改点缓存所在目录。

第一部分:解决Shape动画(形变动画)的导入导出问题!

1、如果要将形变动画导出,请选择场景中包含形变动画的物体(懒人直接全选所有的polygon,这样导出时间可能要稍微长一点),然后创建一个set或者quick

File(s),set选择你自己创建的包含形变动画物体的set,见图1。导出完毕后会在你保存fbx文件的目录下创建一个新目录,名为“该fbx文件名”+“_fpc”,里面放的就是导出fbx的时候生成的几何体缓存,见图2。(ps:如果有导出几何体缓存不成功的情况,请先手动创建几何体缓存再导出)

图2:自动建立的缓存及缓存文件夹

3、在Max中选择Import,在导入的时候基本不用改动什么,注意根据需要调整一下场景缩放因子(Scale

图3:注意导入Max时的单位设置

4、将之前导出的fbx文件导入到Max后,如果操作无误的话,模型物体上就会自动添加一个Point

Cache的修改器,之前没改动过那个自动生成的缓存路径的话,动画导入就ok了,见图4。导入到Maya中也会自动挂载Geometry

图4:出现Point Cache修改器表示操作成功

第二部分:解决相机动画的导入导出问题!

1、普通相机的动画导出不容易出现问题,容易出现问题的是单点相机和两点相机。

2、建议bake逐帧动画之后再导出,最大限度避免动画曲线tangent发生变化从而导致动画改变的问题。

3、针对单点相机、两点相机、带约束的相机以及带父子关系的相机(甚至还锁定并隐藏了一些参数),最安全的导出方法不是导出该相机本身,而是新建一个相机,拷贝原始相机的所有参数给它,最后做一个父子约束,然后再bake成逐帧动画,然后就ok了。

4、综合以上三点,给出自动化mel script:cxMakeSimpleCloneCam.mel(点击下载),使用方法:选择欲导出的相机,将这个脚本拖入maya界面(执行该脚本)。作用:得到该相机的完全克隆版,而该克隆版的相机可以很方便的bake逐帧动画之后导出。

5、克隆相机的动画留待“第三部分:解决Transform动画的导入导出问题”一并导出fbx。

第三部分:解决Transform动画、路径动画、约束动画的导入导出问题!

1、选择场景中所有想要bake逐帧动画的物体(节点),包括带动画的Transform节点、带动画的motionPath节点、被约束的Transform节点等。

Entertainment”的预设文件(见图5),根据个人需要稍作修改即可。

图5:FBX导出使用默认预设

4、导入FBX文件到Max或者低版本的Maya,基本不用做什么更改,导进来就是对的了。

,使用方法:将这个脚本拖入maya界面(执行该脚本)即可。

如果一个场景中既包含相机动画,又包含Transform动画、路径动画、约束,也有Shape动画,且都需要导出,我的操作步骤如下:

set,如果含有大量小物件的Shape动画,可以考虑选择大量小物件combine后变为一个物体再创建set。

File(s),set选择你自己创建的包含形变动画物体的set,之后导出*.fbx文件。如果Geometry

Cache导出提示失败,那么就请先手动创建Geometry Cache再导出。

5、自然导入Maya或者Max就可以了。


绘图中需要牢记下面这几个单词

OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。图形渲染管线可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际的有颜色的像素。这个教程里,我们会简单地讨论一下图形渲染管线,以及如何利用它创建一些漂亮的像素。

图形渲染管线接受一组3D坐标,然后把它们转变为你屏幕上的有色2D像素输出。图形渲染管线可以被划分为几个阶段,每个阶段将会把前一个阶段的输出作为输入。所有这些阶段都是高度专门化的(它们都有一个特定的函数),并且很容易并行执行。正是由于它们具有并行执行的特性,当今大多数显卡都有成千上万的小处理核心,它们在GPU上为每一个(渲染管线)阶段运行各自的小程序,从而在图形渲染管线中快速处理你的数据。这些小程序叫做着色器(Shader)。

想绘制一个图形,肯定得给出图像的坐标点,这里我们直接给出的坐标点就是标准化之后的坐标点,所以在设置向量属性的时候,设置的也是GL_FALSE不需要再进一步的进行标准化。

设置顶点属性也选择GL_FALSE

因为OpenGL想要快速的绘制一张图形,一般都是走的GPU因此这里绘制图形也是要用到GPU关于GPU着色器的介绍可以参考:

下面要做的就是把顶点信息放到缓存中去

着色器创建需要创建顶点着色器和片段着色器,然后使用链接程序把两个着色器链接,需要注意的是链接程序链接的着色器前一个程序的输出,必须要和后面一个程序的输入对应,否则就会报错。


因为着色器是运行在GPU上的一个个小程序,因此需要动态编译,需要时将编译好的程序交给GPU运行,使用的语言是GLSL需要了解的可以看

因为传入的是程序片段,我们需要知道程序是运行时出错还是根本就编译不过,可以使用glGetShaderiv函数获取上述程序编译的状态


 

用同样的方法处理片段着色器


使用连接器链接两个着色器

 
 
 

Render里面渲染三角形



 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

如果没有出问题,你将得到下面这幅三角形绘制的图:
如果顺利得到这副图,那么恭喜你,你已经学完了opengl的入门,也学完了opengl的难点,能够掌握三角形的绘制以及原理,后面的学习将会简单很多

我要回帖

更多关于 maya拓扑面没显示在表面 的文章

 

随机推荐