blender 和unity3D的一个问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了blender 和unity3D的一个问题相关的知识,希望对你有一定的参考价值。
blender中的动画文件导出为fbx,fbx再导入进unity3D中,unity3D中为什么动画就播放一次,有什么解决的办法
(引自别处,希望有用)用Max导出Unity3D使用的FBX文件流程注解
从max导出FBX到Unity,以下环节需要特别注意。
1,单位设置
很多人在建模,动画的时候,默认的max system unit是设置的inch,建议修改成metres或者centimetres,否则导出的模型和动画可能比例不一致
2,导出物
在导出模型和动画时,建议选择的导出模式,是根据你要导出模型或者动画,使用export selected模式导出,即,只导出选中的对象。
3,动画中必须有模型
在使用export selected导出动画时,要全选你要导出的全部骨骼,包括Bipe,和Bone,以及他们的Nub。然后选中任何1个模型,一起导出;FBX不允许没有模型的动画单独存在;
4,可能丢失蒙皮信息的原因1
在使用export selected导出模型时,要选中你要导出的模型,以及全选所有的骨骼,才会有蒙皮信息。查看导出的FBX有没有蒙皮信息,可以把FBX文件拖到Unity里,看Mesh上面有没有一个参数叫做skined mesh material,如果没有,则是你没有选中骨骼就导出了,因此没有蒙皮信息。
5,可能丢失蒙皮信息的原因2
在导出有蒙皮信息的模型文件成FBX时,一定要给每一个模型或者sub mesh指定他们的材质,且给每个材质正确的命名,且其Diffusemap不能为空。 否则也不会有skined mesh mat,也就是蒙皮信息也无法导出。
6,ResetXForm
记得在skin或者physique之前,一定要严格的进行ResetXForm,否则导出的FBX,模型会有严重的偏移; 以下是自用的FBX自动导出脚本说明书
FBX_AniExporter.ms
当模型/动画的unit和system的unit一致时(建议都是 centimetres),使用这个脚本进行FBX动画文件的批量导出,需要修改里面的导入文件夹和导出文件夹路径,脚本会对导出FBX自动命名;脚本会自动全选场景中所有的$Bip*和$Bone*,以及1个模型进行导出;
FBX_AllMeshExporter.ms
批量导出场景中的所有模型/子物体为一个个单独的FBX 模型文件(含模型,UV,蒙皮信息,不含动画信息);脚本在导出时自动使用以下规则:模型1+全部$Bip+全部$Bone,模型2+全部$bip+全部$Bone,模型3+全部$bip+全部$Bone;
FBX_MeshExporter.ms
旧版的FBX_AllMeshExporter,可以不管; ANI_1by1.ms 当模型/动画的unit和system的unit设置不一致时,将system unit设定正确,然后逐个打开要导出的max文件,使用这个脚本一个个导出; InitMatFile.ms 给场景中所有模型/子物体设置独立的材质球,给材质球自动命名为模型的名字并且填充Diffuse Map,需要指定其中的map路径,且map路径里的TGA贴图张数不能小于场景里的模型数量,脚本才能正确运行;
Select2Export
故名思意,导出选中的模型和骨骼。
unity3d模型导入技巧
Unity3d导入3dMax模型会产生若干问题,按照官方的说明,将max模型导成fbx文件导入untiy似乎也不能解决
1、x轴向偏转
3dmax模型导入后自动有一个x轴270度的偏转,巧合的是,在unity中旋转模型的时候,你会发现y轴参照方向永远朝上,而x和z轴则以模型本身的局部坐标为准,这样当模型沿x轴旋转270度之后,z轴正好与y轴重合,这样你试图用程序控制方向的时候就会发现旋转y和旋转z效果相同,这显然不是你期望的结果。解决这个问题的方法是,将.max文件导出为.3ds文件再导入untiy,而不是官方说的导成.fbx
2、材质问题
模型在3dmax里赋予材质之后,不管通过何种方式导入到unity中,都是没有材质的,好在untiy自动生成了这些材质的材质球,我们需要做的是将贴图再重新设置一遍,如果你的材质还有其他效果,比如lightmap,则需要选择正确的shader之后再设置贴图。 另外一个是多重材质,多重材质暂时还不知道如何在unity中显示,所以在制作模型的之后,应该先确定哪些部件应该合在一起,而哪些需要独立,比如,对于一架直升飞机来说,身体和螺旋桨就可以分为两个部件,而不应该把螺旋桨与发动机合并成一个部件,这样程序就无法旋转螺旋桨了。
3、缩放因子问题
模型导入到untiy中,如果你之前在3dmax中没有关心过“单位”问题,则它在场景里的大小一定会出呼你的意料。
unity中的1单位是fbx文件中的1单位的100倍 所以,如果我们想unity中使用1单位=1米的话,那在max和maya中
制作的时候,单位就设置成1厘米 如果我们想unity中1单位=100M,那单位就设置为1M 如果我们想unity中1单
位=1厘米的话,那单位就设置为0.1毫米,或者在单位为1厘米的情况下把比例因子改为1 在max中,单设置应
该像这样 1Unit = 1厘米,这样在unity中1格就等3dmax中的1M了
针对经常出现的问题,将需要注意的点罗列如下:
1、物体的头要朝下
2、所有游戏中的车辆飞机大致都可以分成两个部分,一个是身体,一个是炮台或螺旋桨,那么身体要有一个统一的名称,都叫做Body,螺旋桨叫做Airscrew,炮台叫做 Barbette ,这样我就可以找到所有的身体,并把爆炸效果的火焰和身体连接起来
3、模型尺寸比例问题,参考前文所说的设置,另外不管是飞机,还是坦克,尺寸都在10米左右(以这个尺寸为基准),也就是3dmax里的10格大小
4、模型要在场景中居中,否则导入物体质心位置不对
5、起名字可以起这个武器的实际名称,如果不知道的话,也可以叫做Tank1,Tank2这样,但最重要的是贴图名字和模型名字要相同,否则很乱。 参考技术A loop选项勾选了?
Blender 的 Python 脚本:获取渲染信息
【中文标题】Blender 的 Python 脚本:获取渲染信息【英文标题】:Python script for Blender: Get Render informations 【发布时间】:2018-12-14 04:07:54 【问题描述】:我不知道如何使用搅拌机,但我需要制作一个脚本来跟踪渲染并在出现问题时发送警报。 我正在使用 Python 3.5(如果需要,我可以使用其他东西)、Windows 10 和 Blender 2.79
我有一个大问题,我在任何地方都找不到解决方案。我无法读取渲染信息...可能吗? 我只能读取当前帧:
bpy.context.scene.frame_current
我需要阅读这张图片中包含的所有信息:
特别是:
要渲染的总帧数 图块总数和当前图块谢谢!
编辑:
我不知道我是否使用了正确的语言...当我谈到渲染时,我指的是动画的渲染。
EDIT2:
我需要控制渲染是否正在进行或由于某种原因崩溃...
【问题讨论】:
【参考方案1】:不幸的是,blender 在渲染时不向 python 提供信息,反馈仅限于您显示的渲染结果顶部的行。 This answer 展示了一种使用 bpy.app.handlers
在某些阶段获取通知的方法。对于一个监控blenders gui内渲染的脚本,这可能是你能找到的最好的了。
如果您提供一种从搅拌机外部控制渲染的方法,您还有其他一些选择。您可以以CLI tool 的形式启动搅拌机,-b
参数会将其保留在后台(无 gui)并允许您读取其输出以监控它的位置。
我会先运行一个小脚本来获取帧数
blender -b proj.blend --python-expr "import bpy;print(bpy.context.scene.frame_start, bpy.context.scene.frame_end)"
然后,当您渲染动画时,您将获得类似的进度输出
blender -b project.blend -a
...
Fra:3 Mem:17.40M (0.00M, Peak 23.73M) | Time:00:00.10 | Scene, Part 230-240
Fra:3 Mem:17.37M (0.00M, Peak 23.73M) | Time:00:00.10 | Scene, Part 228-240
Fra:3 Mem:17.35M (0.00M, Peak 23.73M) | Time:00:00.10 | Scene, Part 231-240
...
第一个数字是正在渲染的帧,最后两个是刚刚完成的图块和正在渲染的图块总数,您可以查看搅拌机报告的帧时间,但您希望监控接收到的每行之间的时间间隔如果输出行之间的时间过长,请执行一些操作。
【讨论】:
好的,可以了!是否也可以拥有搅拌机 GUI? 只有在后台渲染时才会输出渲染进度。以上是关于blender 和unity3D的一个问题的主要内容,如果未能解决你的问题,请参考以下文章
Blender 到 Unity3D:在 Unity 中应用材质