本章摘取自
https://www.coursera.org/learn/unity-yinqing-youxi-kaifa/home/welcome
课程学习学习笔记。作为unity3d学习记录和总结:

游戏中的三维物体使用网格来描述自身的形状和尺寸,一个模型由若干个网格面组成,每个面由若干个三角形组成.

图1 三维网格,正方形,球形

可以这么说,游戏中的三维物体由三维网格组成,在计算机图形学中,经常使用三角形网格来描述物体的几何信息,可以采用图形卡 GPU 对三角形网格有关的计算进行加速,正方体可以看作由12 个三角形组成,其中每个面由两个三角形组成,12 个三角形形成一个网格。球体可以通过多次细分,得到多个小三角形。虽然球面是曲面,对曲面进行非常精细的细分操作。曲面的每个细分单元可以用一个平面三角形来代替,整个平面三角形可以接近于一个光滑的一个曲面。

对于人体模型,可以采取相同的方法,将人体表面细分成多个小三角形 可以很好地逼近人体的外观。

在 Unity 中,使用网格过滤器 Mesh Filter 存放游戏对象的网格信息,把网格信息传递到网格渲染器,由网格渲染器负责将网格渲染到屏幕画面。

网格过滤器组件

图2 几种网格组件

网格过滤器组件主要用于确定模型的形状与尺寸。Unity 中自带了几种网格,包括立方体网格,胶囊体网格,圆柱体网格,平面网格,球体网格等等。

网格过滤器中的网格是球体网格,在场景中,这个对象渲染成一个球体的形状。

游戏对象的网格过滤器,只能描述对象的几何形状。 * 不包含对象的颜色等表面特征 *

网格渲染器组件 Mesh Renderer

图3 渲染器组件

Mesh Renderer 可以指定游戏对象的表面特征,网格渲染器组件从网格过滤器组件中获取对象的几何形状,用于渲染场景中的模型。
图中给出 Inspector 视图中的网格渲染器组件 介绍它的几个属性。

Cast Shadow,表示该对象绘制时是否产生阴影。
Receive Shadow,表示该对象是否接受其他对象产生的阴影。
Material,表示网格所使用的材质的组件。

根据实际情况,一个网格渲染器可以使用多个材质。网格过滤器与网格渲染器必须成对使用,缺少任意一个都会导致游戏对象的渲染失败。我们可以把网格过滤器看作一个人的骨骼,把网格渲染器看作一个人的血肉, 前者决定了游戏对象的几何形状,后者决定了游戏对象的外貌、颜色等表面特征。网格过滤器只绘制物体的形状与尺寸,材质用来呈现物体颜色、质感等表面属性。游戏对象的材质在它的网格渲染器中进行设置。

创建一个 Unity 内置的三维物体,Unity 编辑器会自动应用一个默认的材质(Default-Material)。我们无法对这个材质进行修改,我们可以创建材质 把游戏对象的网格渲染器中的材质属性指定为我们创建的材质 游戏对象的渲染过程中,使用该材质。

材质的创建方法

Project 视图-》鼠标右键-》 Create 菜单-》 Material,即可完成材质的创建。

材质创建完成后,在 Project 视图中可以看到新创建的 New Material 材质。

我们把创建好的材质应用到网格渲染器组件的 Material 属性。

图4 材质的创建

完成后我们发现,在 Inspector 视图中,该游戏对象的材质球由 Default-Material 变为 New Material 表明材质应用成功。

材质编辑

Project 视图 -》选中材质球,可以在 Inspector 视图中设置该材质的多个属性 首先需要选择渲染该材质的着色器类型。

其次对该着色器的相关属性进行设置 在设置材质属性时,我们可以在 Inspector 视图下方预览材质的视觉效果 每种材质都需要设置着色器类型。

下面我们介绍着色器的概念。

着色器

图5 着色器

着色器主要用于图像的渲染过程,它具有可编辑,不受显卡的固定渲染管线的限制,可以实现丰富的图像效果,这极大地提高了图像的品质。
我们可以使用着色器语言来编写相应的着色器脚本,以实现图像渲染的不同效果。 着色器脚本的编写比较复杂。

后面会进行讲解对于大多数游戏对象,我们可以使用 Unity 内置的标准着色器 Standard Shader,来渲染它们的外观效果。

标准着色器

standard Shader 是一个高度可定制的着色器 它能够呈现多种类型的外观效果。
下面我们介绍标准着色器的参数设定 首先标准着色器的渲染模式 标准着色器的渲染模式有四种类型,分别为 Opaque,Transparent,Fade,Cutout.

Opaque 用于不透明物体的渲染模式。
Transparent 用于实现透明效果,例如生活中的玻璃球、 窗子、眼镜等。
Fade 用于实现淡入淡出的效果,控制一个物体从不透明渐变为透明。
Cutout 渲染模式下,材质允许一个物体同时具有透明和不透明两个部分。它可以绘制有破洞的衣服、 叶子等。

图6 草坪

如图,是一个草地 它是用 Cutout 渲染模式,包含了透明和不透明两个部分,其中草与草之间的空隙是透明的。草本身是不透明的。

下面介绍标准着色器的其他参数

首先是 Albedo 属性,表示光的反照率,描述物体的基本颜色 例如,草的颜色是绿色,硬币的颜色是银白色 这些物体的基本颜色都可以通过 Albedo 属性进行设置。

在《多米诺骨牌》项目中,我们设置一个小球的 Albedo 属性的基本色为红色 设置完成后,小球表面呈现为红色 其次是 Normal Map 属性 它表示法向贴图。 Normal Map 通过改变光的反射角度 使物体表面显得凸凹不平.

在《多米诺骨牌》项目中,我们通过设定骨牌对象材质的 NormalMap 贴图 使骨牌呈现金属条纹质感。

然后是 Emission 属性 它表示物体的自发光,在没有光照的情况下,物体表面会很暗, 我们可以设置物体的 Emission 属性,使物体看起来自发光。

在《多米诺骨牌》项目中,我们设置大球材质的 Emission 属性,实现大球表面的自发光效果。

除了标准着色器外,天空盒也是一种常见的着色器类型 它用于设置场景中的天空背景图案 天空盒材质是常用的着色器 它的类型是 Skybox/6 Sided 大概着色器需要设定六张贴图,分别为 x+ x-,y+,y-,z+,z- 六个方向来绘制天空背景 关于场景天空盒的设置,我们在下一节光源中进行介绍,在下一节,我们继续介绍 Unity 图形系统,讲解光源方面的知识要点, 我们进入演示环节,给《多米诺骨牌》项目中的游戏对象添加材质 使场景看上去更加的丰富多彩。

以上。

unity3d中的网格相关推荐

  1. Unity3D中场景烘培步骤分享

    在这里我想分享这段时间在Unity3D中使用灯光时遇到的问题和解决方案,希望能给大家带来一些帮助,当然如果有错误之处,还希望在评论中点出,以免把人带歪了,这里以2017版为准. 那么在Unity3D中 ...

  2. Unity3D中实现物体内部的碰撞检测(流体在容器内飞溅)

    Unity3D中实现物体内部的碰撞检测-流体在容器内飞溅 方法一 方法二 将流体设置在容器内部,想让其填充满,却发现粒子碰到网格就会飞溅或者穿透,想到是物体内部的碰撞检测出了问题. 在Unity3D中 ...

  3. Unity3D中的shader基础知识

    1.Unity中配备了强大的阴影和材料的语言工具称为ShaderLab,以程式语言来看,它类似于CgFX和Direct3D的效果框架语法,它描述了材质所必须要的一切咨询,而不仅仅局限于平面顶点/像素着 ...

  4. Unity3D中使用mesh collider和box collider的区别

    Unity3D中使用mesh collider和box collider的区别 踩坑过程记录. 设备是HTC的VIVE 和 Unity 5.x CPU: Intel Xeon Silver 4116 ...

  5. Unity3D 中 2D_Toolkit插件下载 和 导入方法

    Unity3D 中 2D_Toolkit插件下载 和 导入方法 1.你把下载来的包放到 安装目录:Editor\Standard Packages里面. 2.然后按ctrl+9,进入asset sto ...

  6. Unity3D中暂停时的动画及粒子效果实现

    暂停是游戏中经常出现的功能,而Unity3D中对于暂停的处理并不是很理想.一般的做法是将Time.timeScale设置为0.Unity的文档中对于这种情况有以下描述: The scale at wh ...

  7. Android中的网格布局

    文章目录 1 Android中的网格布局 1 Android中的网格布局 重要属性: android:rowCount(行数量) android:columnCount (列数量) android:l ...

  8. HTML5 Web app开发工具Kendo UI Web中Grid网格控件的使用

    Kendo UI Web中的Grid控件不仅可以显示数据,并对数据提供了丰富的支持,包括分页.排序.分组.选择等,同时还有着大量的配置选项.使用Kendo DataSource组件,可以绑定到本地的J ...

  9. java中如何合并两个网格_java – 如何在GXT中合并网格单元格

    这是我在gxt 3中编辑网格中的单元格的方法.在这个例子中,我只是添加一个div,所以我可以为selenium测试添加一个id: ColumnConfig name = new ColumnConfi ...

最新文章

  1. 不要上手就学深度学习!超详细的人工智能专家路线图,GitHub数天获2.1k星
  2. 不可不知的Python模块: collections
  3. Xavier初始化和He初始化
  4. 双目立体匹配经典算法之Semi-Global Matching(SGM)概述:匹配代价计算之互信息(Mutual Information,MI)...
  5. K-均值聚类算法对未标注数据分组(1)
  6. Linux select/poll机制原理分析
  7. cefsharp 加载网页慢_网站访问慢的排查方案(史上最详细)
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上相册展示系统
  9. CodeForces 589J Cleaner Robot
  10. 解决从json文件中获取不到数据的问题
  11. C# 6 的新特性~
  12. Android ASCII编码转换成相对应字符
  13. 极简主义下,Effie与幕布的碰撞,思维导图的正确打开方式?
  14. 山科大离散数学期末考试_离散数学期末考试试题及答案
  15. 主动学习、纯半监督学习、直推学习的联系与区别
  16. 计算机硬件cpu指令执行过程,cpu执行指令的过程详解
  17. GPU显存占满但利用率却很低
  18. IE打印A4,表格缩小问题剖析
  19. 机器学习(3)——无监督学习
  20. Mali GPU linux下驱动编译

热门文章

  1. 3D图形学(6):正向渲染和延迟渲染
  2. 如何在绩效中使用360 评估
  3. 算法系列 - 广告反作弊概述
  4. 数据结构串------字符串的定义和基本操作
  5. 如何做好新进员工培训工作
  6. [软件评测第六期]搜狗浏览器
  7. 系统集成项目管理工程师-学习笔记1-信息化知识
  8. MMS规范翻译(MMS Architecture Overview)
  9. Navicat系列软件闪退
  10. 本科双非二本,到底要不要考研