2013-01-21 14:53:57 jeksonal 阅读数 16702

unity3D 用3DMax 做的模型时需要注意几点

1:方向问题
2:模型尺寸问题

3:模型所占资源大小问题

 

3DMax 做的东西导入到 Unity3D 中,在 Unity3D 引擎中 X 会被反向旋转 90 度();个人处理方式是建模时先将模型 X 轴旋转 90;再调节模型;

3DMax 做的东西导入到 Unity3D 中,由于 3DMax 默认的单位处理机制与 Unity3D 不一样,而导致显示过小的问题;所以,在制作模型前先调节好 3DMax 中的系统单位设置

具体操作:

 菜单栏: 选择 “自定义”  ,

再选择 “单位设置”-- >

 接着点选 “系统单位设置 ”  --->   将系统单位比例设置成:  ;再点击 “ 确定” 保存!

在模型的制作过程当中,为了使物体的坐标在物体的中心点,要记得冻结物体的坐标属性

当模型制作完成时,导出为 FBX 格式时还需注意:

在导出的 设置面板中 :

点击高级选项,然后出现:

确保 “ 场景单位转化为:”的设置为 "Meters"


模型导出后,模型资源可能很大,原因有以下几个:

1: 检测一下材质贴图的格式是否为:.png 的,不是请改过来 ;

2:看模型当中是否有过多的独立存在的物体,将不需要单独 存在给它合并在一块!


要是模型导入到Unity3D 中后,引擎运行变卡,就得看看模型的面是不是太多了!


2017-04-10 21:06:06 Mogoson 阅读数 766

Mesh Combiner

概述

Unity 网格合成器。

问题

  • Unity 场景搭建时,大量静态的模型消耗过多的性能,例如:遍地的石块,且在Unity层次面板中不利于管理,
    希望将这些零散的模型合并成一个模型网格。

方案

  1. 编写扩展编辑器窗口,指定需要合并的模型网格。
  2. 合并多个网格为一个模型网格。

实现

  • MeshCombiner.cs 绘制扩展编辑器窗口,合并模型网格。

源码

2019-02-25 23:37:51 Jaihk662 阅读数 1412

 

一、FBX格式文件

FBX格式文件:最通用的一种3D文件格式,由AutoDesk(3DMax)公司推出,其最大的特点就是“跨平台”,也就是说3D模型制作完毕后导出的FBX格式文件,可以在不同的3D软件之间交互,很多3D建模类软件也都支持导出(导入)FBX格式

FBX模型资源:

  • BIP骨骼文件:一套完整的骨骼结构,用于控制角色的动作
  • 角色模型文件:角色有蒙皮,所有该文件上有一个“Skinned Mesh Renderer”组件,蒙皮渲染组件用于给该角色所有的网格指定渲染材质球
  • Mesh网格文件:角色模型的“白模”,通过右下角预览窗口,可以了解该模型有多少顶点,多少三角面,多少个“子网格”。
  • 动作文件:角色的骨骼动画文件,右下角预览窗口可以点击进行动作播放预览,一般角色都会有很多的配套动作,例如行走、跳跃等
  • Avatar文件:角色的骨骼映射文件

可以通过右键Assets→Import Package→Characters导入内置角色控制资源包

FBX模型参数界面(Inspector面板):

  • Scale Factor:模型的比例
  • Animation Type:模型类别(人形、动物型等,其中Generic类别无法使用动画重定向功能,一个人物的动画只能自己使用,人物运动需要通过动画和代码共同控制)
  • Configure:点击可进入模型细节配置

 

二、资源的诞生

角色模型资源最终到达程序员手里,一般需要经过以下几个步骤:

  • 项目规划人员定游戏类型,风格,故事,玩法,这个是游戏最初的设计阶段,确定这个游戏世界的“世界观”
  • 美术人员(原画师)根据游戏类型风格,绘制相关角色的原画稿
  • 建模人员(模型师)根据原画稿制作相应的角色模型的“白模”,然后绘制相应的贴图
  • 动作人员(动画师)拿到建模人员提供的模型,进行骨骼绑定蒙皮后,调整出角色的各个动作,最后得到成品

 

2013-10-14 19:49:57 u011838628 阅读数 9010

      最近在看Unity3D的人物模型和动画。所以今天先说下人物的换装吧。相信大家都玩过网游吧,没有玩过的也相信见过,就是网游或者单机游戏里的人物会有更换服装,更换武器的功能。如果外形(mesh)是一样的,那么把贴图换下就好,但是如果外形不一样甚至骨骼都变了的话,就需要我们今天讨论的技术了。

  一.Unity3D里的3D模型

Unity3D里的基础模型是从3D工具中导出来的fbx文件。把fbx放在Assets目录下会自动生成一个Materials文件夹,里面会生成一个材质球。在Unity3D项目里的显示是这样

注意:Textrue需要另外添加进去。

         模型的主要文件就是那个蓝色的方块,前面两个(WGKS_wugang,WGKS_yaodai)这两个文件是模型的Mesh信息,一个是人物本身的,一个是腰带的,因为比较简单的模型,所以只有两个。下面的一坨是动作信息,动作是可以自己设置的,这个以后文章会讲。而紧接着的

“Bip001”这个是模型的骨骼信息,你拖到Scene里就能层层打开看到了。而WGKS_yaodai则是蒙皮信息的一些玩意。选择到它会在Inspector属性栏里看到SkinnedMeshRenderer组件,这里会看到它牵扯到的mesh,material,bone信息。

  

  二.换装方案1组合模型的显示和隐藏

  这个题目可能说的不合适,但是想不到更合适的了。我们的第一种换装的方法很简单,就是让模型或者Mesh进行显示和隐藏。就比如让人物穿两套衣服,显示第一套的时候隐藏第二套,显示第二套的时候显示第一套。

         例如这个模型:

         

这里有TBJ_SR_01和TBJ_SR_03两个SkinnedMeshRenderer.那么我们可以分别设置Active来设置是否可见。代码如下:

public GameObject clothA = null;
public GameObject clothB = null;

if (GUI.Button(new Rect(5, 5, 100, 50), "ClothA"))
{
    clothA.SetActive(true);
    clothB.SetActive(false);
}

if (GUI.Button(new Rect(5, 60, 100, 50), "ClothB"))
{
    clothA.SetActive(false);
    clothB.SetActive(true);
}


运行起来的效果如下:

ClothA

ClothB

      如果角色是换武器而不是换装备的话,原理是一样的,只不过我们要找到附属的武器GameObject然后设置让它显示和隐藏就可以了。

  三.换装方案2 替换Skin信息

      方案1的方法用起来比较简单,比较适合简单的模型替换,比如一个模型来来回回就两把武器的话,就可以用。但是如果一个模型有十来套衣服或者十几件装备的话,这么做会比较悲剧的,因为太占资源了,创建一个模型,牵扯的不用的东西也整进内存了,暴殄天物。

      所以我想能不能游戏运行的时候替换模型的Skin信息达到我们的目的。一开始我觉得,其实我们只需要把sharedmesh,material替换掉就行了。实验证明不行的。大家可以自己尝试下,Unity3D会报错,即使不报错模型也会变形的。模型中还有一块是骨骼没有动,所以我想尝试下如果把骨骼去掉能不能拿到mesh信息等,然后再替换。结果是从3DMAX里去掉骨骼导出的话,蒙皮信息也没有了。所以我确定了一点是,被换装的模型必须有骨架,而源Mesh信息中必须包含骨架信息,按照我的理解就是Mesh中保存着这个点依附的是哪个骨头,权重是多少等。

 

  这里我准备了两个模型:

            

带有完整的信息(骨头,动作,蒙皮信息等,只不过模型只有一个mesh而已)。

放在Scene的样子:

            

  我的目的是想让左边的那个模型读取右边模型的SkinnedMeshRenderer信息,然后赋值给自己。首先我把右边的模型除了骨架的所以资源赋值给一个prefab,然后加载prefab,读取信息给左边的模型。

  代码如下:

// 声明两个SkinnedMeshRenderer
public SkinnedMeshRenderer MyskinMeshRender = null;
public SkinnedMeshRenderer SrcSkinMeshRender = null;

//加载资源
Object Src = Resources.Load("Res/Materials2");
objSrc = Instantiate(Src) as GameObject;

//找到目标模型的SkinnedMeshRenderer
MyskinMeshRender = GameObject.Find("TBJ_SR_01").GetComponent<SkinnedMeshRenderer>();
//获取加载的SkinnedMeshRenderer
SrcSkinMeshRender = objSrc.GetComponent<SkinnedMeshRenderer>();
//获取目标模型的骨骼
Transform[] bonesMy = gameObject.GetComponentsInChildren<Transform>();
Debug.Log(bonesMy.Length);
//Transform[] bonesSrc = GameObject.Find("TBJ_SR_03").GetComponentsInChildren<Transform>();
//获得源SkinMesh中依附的骨骼信息
Transform[] bonesSrc = SrcSkinMeshRender.bones;
Debug.Log(bonesSrc.Length);

//根据源SkinMesh依附的骨骼信息重新排列目标骨骼
List<Transform> bones = new List<Transform>();
foreach (Transform boneS in bonesSrc)
{
    foreach (Transform boneM in bonesMy)
    {
        if (boneS != null && boneM != null)
        {
            if (boneS.name != boneM.name)
            {
                continue;
            }
            bones.Add(boneM);
        }
    }
}
MyskinMeshRender.bones = bones.ToArray();
MyskinMeshRender.sharedMesh = SrcSkinMeshRender.sharedMesh;
MyskinMeshRender.sharedMaterials =SrcSkinMeshRender.sharedMaterials;     


运行之后发现皮肤换了,而且动画信息没有丢失掉,也就是说还能动,但是有个奇葩的现象,人物是倒着的,如图:

  这个我分析后觉得是因为骨骼的问题。两个模型的骨骼有点不一样。因为我是读取了右边的模型的蒙皮信息对应的骨骼信息而重组了左边的骨骼,但是左边的动画信息还是按照原来的。虽然不是很清楚动画数据里面数据结构,但是我觉得就是记录的骨骼或者mesh或者当前模型的世界坐标的某个点对应的Mesh或者骨骼移动到哪个位置。

 

  接着我换了一个思路,用一个人物模型,一套骨骼,一套动作,不过蒙皮信息有两个,导出fbx。

如图:

 

  然后在3DMax里面导出一个没有蒙皮信息只有骨骼和动作的fbx,如图:

  然后添加脚本,代码如下: 

//声明两个SkinMeshRender 声明为public是为了方便观察 真正需要private
public SkinnedMeshRenderer MyskinMeshRender = null;
public SkinnedMeshRenderer SrcSkinMeshRender = null;

//添加SkinnedMeshRenderer组件
MyskinMeshRender = gameObject.AddComponent<SkinnedMeshRenderer>();
	
if (Input.GetKeyDown(KeyCode.Z))
{
    GameObject obj = GameObject.Find("TBJ_SR_01") as GameObject;
    SrcSkinMeshRender = GameObject.Find("TBJ_SR_01").GetComponent<SkinnedMeshRenderer>();

    Transform[] bonesMy = gameObject.GetComponentsInChildren<Transform>();
    Transform[] bonesSrc = SrcSkinMeshRender.bones;

    List<Transform> bones = new List<Transform>();
    foreach (Transform boneM in bonesSrc)
    {
        foreach (Transform boneS in bonesMy)
        {
            if (boneM != null && boneS != null)
            {
                if (boneM.name != boneS.name)
                {
                    continue;
                }
                bones.Add(boneS);
            }
        }
    }
    MyskinMeshRender.bones = bones.ToArray();
    MyskinMeshRender.sharedMesh = SrcSkinMeshRender.sharedMesh;
    MyskinMeshRender.sharedMaterials = SrcSkinMeshRender.sharedMaterials;
}


 

  运行,结果没有问题了。如图:

  

  按下Z之后:

  而且动作保留。

 

  总结:

  虽然这个例子不是很经典,也存在些许问题,希望大家指出问题,共同进步。在添加skinnedMeshRenderer组件的时候有个问题,如果模型选择Generic的时候,Unity3D会挂掉。

这个例子可以运用到骨骼和动作基本一样,但是外形不同的模型中,减少游戏中的资源重复占用。网上还有个更经典的例子,运用的是Character Customization 包,运用的原理是一样的,这里给大家看下运行结果:

  

      

  这个模型是由各个部分的mesh组成,而我的例子是用的一个mesh。在复杂的模型中,我们可以查找子组件的SkinnedMeshRenderer,然后进行操作就可以了。想换哪里就替换哪里的SkinnedMeshRenderer的信息,更新对应的骨骼列表和组合一下网格就行了。

List<CombineInstance> combineInstances = new List<CombineInstance>();
CombineInstance ci = new CombineInstance();
ci.mesh = SrcSkinMeshRender.sharedMesh;
combineInstances.Add(ci);


         还有一个想法是这样的,源资源中是否需要骨头。我发现重组骨头结构的时候其实只是读取了骨头的列表信息,所以我觉得可以写成一个配置信息,直接读取配置信息来重组。这个想法还没有得到验证,等有时间的吧。

 

 

2019-12-26 11:44:40 qq_43292530 阅读数 13

本文介绍Unity Asset Store中迷你卡通风格的优质3D模型素材。整个Unity Asset Store中最符合该风格的开发商应该属于:SURIYUN

一:人物篇

以下的人物素材可以轻松运行在手机上。

1:MEGA SD RPG Pack

MEGA SD RPG PACK包含17个角色:骑士、法师、国王、弓箭手、海盗、盒子男、青蛙人、不死族、护士等还有若干怪兽。另外包含完整的环境素材。

2:SD RPG Pack1

SD RPG Pack1包含8个人物角色:黑骑士、警察、古罗马人、萨满、盗贼和3个怪兽。还包含完整的环境素材。

3:SD RPG Pack2

SD RPG Pack2包含若干人物角色:骑士、泥石人、精灵、兽人和若干怪兽。包含完整的环境素材。

4:SD RPG Pack4

SD PRG Pack4包含若干人物角色:圣诞老人、驯鹿、雪怪、冰雪公主、假面骑士和一只怪兽。包含完整的环境素材。

5:SD RPG Pack5

SD RPG Pack5包含若干人物角色:小恶魔、科学怪人、木乃伊、南瓜人和两只怪兽。包含完整的环境素材。

6:POLYGON MINI - Fantasy Character Pack

这是一组Low Poly迷你卡通风格的人物素材,包含60组不同的迷你人物模型,非常推荐。

7:POLYGON MINI - City Character Pack

包含37个Q版城镇人物素材。

8:Mini Skeleton Swarm Pack

该资源包包含5个暗黑风格的迷你骷髅人模型。

9:Minions Series - Goblin

该模型包含哥布林种族模型:勇士、剑手、魔法师、弓箭手和士兵。模型带有完整动画。该开发商还开发了其他几个种族的迷你版模型:Downrain DC开发的其他迷你模型

10:Mini Legion Human HP

该资源包含8个人类种族的迷你模型,该开发商还有其他种族的迷你版模型:Dungeon Mason开发的其他迷你模型

二:环境篇

1:POLYGON MINI - Fantasy Pack

POLYGON MINI - Fantasy Pack包含了306个不同的Low Poly风格的迷你环境资源,为幻想风格。而且为6边型风格模型,适合作为策略游戏或者战棋游戏的场景资源。

2:POLYGON MINI - City Pack

POLYGON MINI - City Pack同样包含了306个不同的Low Poly风格的迷你环境素材,为城镇风格。而且为6边型风格模型,适合作为策略游戏或者战棋游戏的场景资源。

3:Mini Towers Pack

该资源包的迷你环境素材非常适合制作制作塔防游戏。

4:Minicar Race Creator

该素材包含制作一款赛车游戏的所有材料。

三:动物篇

1:Cute 3D Voxel Animals

Cute 3D Voxel Animals包含40个迷你版的动物模型,适合制作Cross Street风格的休闲游戏。

2:KUBIKOS - 22 Animated Cube Mini Animals

该资源包含22个带有动画的Low Poly迷你版动物模型。

3:Yippy Kawaii

该资源包含猫咪、兔子和小熊,每种素材都有多种材质可以替换,而且带有超多动画。

4:Cute Pet

Cute Pet包含了20多种可爱的小动物,每种小动物都包含6组动画。

5:Cute Zoo

Cute Zoo包含了11个动物模型,每种小动物都包含6组动画。

6:MEGA Monsters Pack

MEGA Monsters Pack包含几十种小动物的模型资源。

7:Funny Bear

Funny Bear包含小熊模型,而且有非常多的素材可以替换。模型带有完整的动画。

 

没有更多推荐了,返回首页