当前位置: 首页 > article >正文

Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)

前言:最近重拾Unity,准备做个3D的FPS小游戏,这里以官方FPS案例素材作为切入。

导入素材和素材理解

  • 安装Unity
  • 新建项目
  • 新建文件夹和Scene
  • 如何去理解三维模型素材
    • 找到模型素材
    • 素材预制体结构
    • 骨骼和网格
    • 材质(Material)、纹理贴图(Texture)
    • Animator
    • Avatar替身系统
  • 总结

安装Unity

这个想必不用多说网上的教程很多。

最新版的话,官网下一个Unity Hub,然后在Hub里面下载个Unity(感觉新版Unity比以前高级多了)。

Unity Hub中设置-外观(Appearance)-设置语言(Language),简体中文会方便很多。

会有需要“管理许可证(Licenses)”,这个的话下载一个Unity Connect的app,然后微信注册个账号。app扫码登入到Unity Hub选择个人许可证就好了,学生的话可以申请学生版,都是免费的。

新建项目

Unity Hub-新项目-选择FPS Microgame模板。
在这里插入图片描述
这是Unity官方提供一个FPS学习模板,里面有个可以直接运行的demo,我们可以运行一下看看官方的FPS游戏Demo效果,算是对我们未来目标有个大概的想象。
在这里插入图片描述

选择这个的原因是因为里面包含了素材以及可以参考的思路代码。

新建文件夹和Scene

刚打开肯定是官方写好的文件夹,我们需要新建一个文件夹来存放我们后面自己写的内容。在文件夹部分右键Create-Floder,新建一个MyGame文件夹。
在这里插入图片描述
然后在MyGame文件夹下面新建一个我们自己Scene,命名为MainGame,拖拽到界面中。
在这里插入图片描述
把官方的Scene(MainScene)Removal掉。
在这里插入图片描述

如何去理解三维模型素材

很多新手刚看到这种三维模型素材肯定都是比较懵逼的,不知道如何去理解,尤其是角色的预制体里面有大量的层级,容易让人望而却步。

这里以敌人模型结构为例子,带大家理解一下。

找到模型素材

敌人模型的路径如下图所示,有两种HoverBot(悬浮机器人)和Turret(炮台)。
在这里插入图片描述

素材预制体结构

可以把HoverBot拖出来看看,可以发现预制体HoverBot组成非常复杂,没有接触的可能不太懂,但是其实组成部分主要分为两个,分别是模型和骨骼。“Bottom”、“EyeBall”和“Top”对应了机器人的三个组成的模型,里面包含了模型网格结构相关的渲染工作;“Robot_Root_C_Jnt”部分有很多内容,其实都是模型的骨骼关节名称。关于骨骼后面会介绍。
在这里插入图片描述
仔细点开“Bottom”,会发现模型包含了两个个部分:Skinned Mesh Renderer蒙皮网格渲染器以及Material材质球。蒙皮(Skin)是会把Mesh网格的顶点绑定在骨骼上,每个顶点可以被骨骼所控制,使得动画播放的时候顶点会随着骨骼而移动,从而Mesh会跟随骨骼的移动。而Material材质会附着在Mesh身上,也会跟着移动。Skinned Mesh Renderer把Mesh、Root Bone(骨骼根节点)以及Materials联合起来了。
在这里插入图片描述

骨骼和网格

上面介绍“素材预制体结构”涉及到了骨骼和网格(Mesh)的概念,为了更好理解它作用,我们先来了解一下骨骼动画。

游戏中的三维模型经常会设计到骨骼,这是为了骨骼动画做准备。

三维模型通常是由三角面网格组成,也就是Mesh。想要让Mesh动起来最简单的方法就是修改Mesh各个顶点。但是这个方案并不现实,复杂的模型往往伴随着大量的顶点,操作非常复杂,而且动画也不自然。

于是边诞生了骨骼(Spine),在Mesh中放置骨骼,骼的运动带动 Mesh 的运动。这样动画的时候只需要修改骨骼即可,如下图所示修改骨骼的时候Mesh网格顶点也跟着改变了。
在这里插入图片描述
该动图来自文章Mesh | 动态合批 | 骨骼动画 | 蒙皮,这篇讲网格讲的非常全面。

打开HoverRobot的一个Animation动画,可以看到骨骼动画中记录了每个时间点骨骼的变化,和素材预制体结构中骨骼关节的名字一一对应。
在这里插入图片描述
Unity中的骨骼模型通常包括三个步骤:

  • 建模(Modeling):创建模型,包含网格和纹理等。
  • 骨骼绑定(Rigging):创建骨架,骨骼和关节之间的层级结构。
  • 蒙皮(Skinning):负责把骨骼和Mesh关联起来。

当然除了三维模型中会用到骨骼,其实二维也用的,素材预制体结构和方法都差不多,只不过二维的Mesh是平面的。

材质(Material)、纹理贴图(Texture)

材质(Material):是描述物体外观和光学特性的属性集合。

  • 外观包:物体的颜色、反射属性(如漫反射、高光反射)、透明度、折射率等。
  • 材质:定义了物体如何与光线进行交互,决定了物体在渲染时的外观效果。

纹理和贴图(Texture):决定模型表面的颜色、纹理和细节效果。

  • 颜色贴图:就是给模型上一个颜色皮肤,例如木头纹理。
    在这里插入图片描述
  • 凹凸贴图:模型表面的凹凸情况,通常颜色越浅表明该位置的表面越像外凸起。
    在这里插入图片描述
  • 光照贴图:用来存储预渲染的光照信息,解决实时动态光源效果不好且消耗性能的问题。
    在这里插入图片描述

除了上面三种常用贴图还有别的。

Animator

点击HoverRobot的属性,可以看见上面挂在了一个Animator组件。
在这里插入图片描述
Animator上面属性有五个属性如下。

Animator controller:用来控制动画切换,具体可以看我以前写的一篇unity学习(7)动画状态切换。虽然那篇讲的2D的,但是3D的逻辑也差不多。

Avatar:Unity的替身系统,后面部分详细介绍。

Apply Root Motion:有些动画会带有位移,勾选了带动画位移。

Update Mode:动画更新模式,Normal表示使用Update进行更新也就是fps同步、Animate Physics表示和fixed unpdate同步(物理检测)、Unscaled Time和Normal一样但是不考虑Time scale(游戏运行速度比例)。

Culling Mode:Cull剔除,也就是在摄像机视野外面的时候会做什么操作,Always Animate进行动画播放的更新、Cull Update Transform停止动画播放但是位置会继续更新、Cull Completely停止动画的所有更新。

Avatar替身系统

很多时候,我们会想要复用别人的动画,通常来说人形模型是复用最多的。但是不同的设计师,可能骨骼节点的名字命名不同,Animation没法识别复用。但是我们又不可能去一一修改每个骨骼节点名字来适配,这非常容易出错。

Unity提出了一个动画复用的解决方案,替身系统Avatar。两个模型A和B,B想用A的动画。可以让A和B模型的骨骼和Unity的标准肌肉对应,这样就可以把转为了Unity标准肌肉的A动画,复用到B了。

Unity中的骨架有两种:

  • 人形 (Humanoid) :Unity提出一个通用的人形Avatar,最少 15 块骨骼,骨架需至少具备所需的骨骼。
  • 通用(Generic):任何东西,不具备Humanoid的动画重定向功能,这里的敌人HoverRobot使用的就是通过Avatar。

注意:通用 Avatar 与人形 Avatar 不同,但它会显示在项目视图中,也会保存根节点映射。但是单击项目视图中的 Avatar 图标在 Inspector 中显示其属性,则仅会显示其名称,不显示 Configure Avatar 按钮。

我原本想深究一下通用Aavatar的功能,但是通用Avator没法在视图中查看,搜了很多都没有找到特别的说法,上面这个只是是官方手册的解释。问了做游戏的朋友在实际应用常见中人形Avatar比较有用,通用Avatar基本没用过,所以大家理解人形Avatar就可以了。

总结

通过本篇过后,想必已经对三维模型素材有了初步的理解。

三维模型的预制体无非就两部分模型+骨骼,不需要动画的可能还没有骨骼,只有模型。预制体的节点会挂载Animator做动画控制;模型部分通常包括了网格(Mesh)、材质和贴图;骨骼部分就包括骨骼层级各个骨骼节点,骨骼节点的名字和Animation中的一一关联。模型中Skinned Mesh Renderer组件可以把网格(Mesh)、材质和贴图和对应的骨骼根节点关联。

Avatar不一定是必须的,通常用在人形骨骼动画的复用上。


http://www.kler.cn/news/362929.html

相关文章:

  • CUDA 共享内存 shared memory
  • DevEco Studio的使用 习题答案 HarmonyOS第一课
  • FPGA实现PCIE采集电脑端视频转SFP光口万兆UDP输出,基于XDMA+GTX架构,提供2套工程源码和技术支持
  • std::atomic有什么用法
  • [漏洞挖掘与防护] 04.Windows系统安全缺陷之5次Shift漏洞启动计算机机理分析
  • Facebook网页版登录不了是什么原因?如何解决?
  • spring中xml的解析与beanDefinition封装(1)
  • 集成聚水潭·奇门售后单数据到MySQL的技术实践
  • 从“摸黑”到“透视”:AORO A23热成像防爆手机如何改变工业检测?
  • 关于嵌入式学习的一些短浅经验
  • go 语言 Gin Web 框架的实现原理探究
  • 红队-安全见闻篇(下)
  • Vue学习记录之十四 自定义hooks综合实例
  • 成功解决pycharm软件中按住Ctrl+点击指定函数却不能跳转到对应库中的源代码
  • 如何使用 LLM 进行数据分析: 用 5 个步骤为您的数据增压
  • gis中用栅格计算器或加权总和后图层不显示,值也明显不对
  • 企业的图纸一定要加密?10款好用的图纸加密软件保护企业数据!
  • 智能算力中心万卡GPU集群架构深度解析
  • 【某东二面】聊聊 Kafka的分区容错设计思想
  • 《性能之巅:洞悉系统、企业与云计算》读书笔记-Part 1
  • 【rabbitmq】为什么使用消息队列?
  • 促进绿色可持续发展 能源环保管理重中之重
  • 【记录】Android|安卓平板 猫游戏(四款,peppy cat,含下载教程和链接)
  • 大数据新视界 -- 大数据大厂之如何降低大数据存储成本:高效存储架构与技术选型
  • 什么是代理模式?
  • 6.mysql安装【Docker】